【AI初识境】给深度学习新手做项目的10个建议

一些适合初学者复现的深度学习项目推荐(CNN,GCN,Transformers,U-Net) 可复现的AI项目 阅读详情

这是专栏《AI初识境》的第12篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。

在成为合格的深度学习算法工程师,尤其是工业界能够实战的调参选手之前,总会踏足很多的坑。


今天就来说说那些需要掌握的基本技巧,如何避开那些新手常见的坑,以计算机视觉中的图像分类任务为例。


请注意,我这篇文章不是教你如何调参,而是教你不要在调参之前胡搞。

作者&编辑  | 言有三

1 项目开发之前应该做什么

在你真正开始撸代码之前,送大家一句话,“磨刀不误砍柴工”。


拿到一个任务的时候,先不要上来就开始训模型,而是做好三件事。


1、知道你要做的任务是一个什么任务。


以图像分类为例,猫狗分类是一个分类任务,随便找个什么模型都能完成。

640?wx_fmt=jpeg

鸟类分类也是一个分类任务,但是不简单,不是随随便便拿个模型就能搞定。

640?wx_fmt=png

表情识别最终也是一个分类,但是这不仅仅是一个分类问题,而是检测+分类问题。

640?wx_fmt=png

产品经理们只会告诉你要实现什么功能,而不会告诉你用什么方案,对于简单任务来说这可能不需要思考,但是复杂任务一定要先充分调研认识。


你说上面的这个例子很简单,一眼就明白,那么我再举出几个例子,你是否一下子就能明白背后的核心技术?

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg


2、找到竞争对手,做好预期。


比如你要做一个表情识别API,要做一个美颜算法,一定要先看看你的竞争对手做的怎么样了,就算最后你做出来跟别人还差十万八千里,也不至于到最后一刻才发觉。这叫知人之明和自知之明,一定要先有。


在这个过程中,基本上就能确定要走的路,第一条路是追随模仿别人,第二条路是超越别人,这两者是不一样的。


前者,只要把已有成熟的资料收集到位,经验足够丰富,必定能成功,否则就是个人能力和资源问题。这样的一条路,相信老大们会给你布置一个明确的时间节点。


比如表情识别,很成熟,那你做出来也不能比别人差太多。

640?wx_fmt=png


如果是第二条路,那么就意味着没有参考者,或者参考者做的也不行。那么最难的是什么,就是预期能做到什么水平。


可能技术已经成熟了,没人做,恭喜你,赶紧搞。

可能技术比较前沿,能做技术储备,但是还无法落地。

可能根本就还做不了。

3、想好你需要什么样的数据,从源头上降低任务的难度。

在公司干了四年活,大部分项目都需要自己准备数据,不会有现成的数据可以使用,而如何准备数据,这是需要经验的。


举个最简单的例子,假如我们需要开发一个分类算法来分析一张图片中的人是不是在笑,图像可能是这样。

640?wx_fmt=jpeg

你会爬取或者从数据集中拿到很多不同表情的数据然后就直接开干吗?显然那是错误的路子。


开始一个任务后我们首先就应该想怎么降低任务的难度,对于此任务,起作用的只有嘴唇这块区域,那么我们完全可以基于嘴唇区域来训练一个分类模型。


高精度成熟的人脸检测和关键点检测算法是很多的,所以你可能需要准备的训练数据是这样的。当然,如果你直接基于关键点的结果来做也是可以的,这就回到了第一个问题了。

640?wx_fmt=jpeg

这样至少有两个好处,(1) 明显这个分类更加简单了。(2) 可以使用更小的输入图完成任务,计算代价也更低。

2 训练模型从哪里开始

很少有一个任务可以拿现有的模型使用,你通常是需要训练自己的模型的,那么在训练一个模型的时候,应该怎么样开始。

这里牵涉到3个问题,框架,基准模型和数据,其中任何一环都有可能有问题。

1、首先确定框架


没有一个深度学习任务不需要一个框架来训练,很多的时候你不得不在不同的框架之间进行切换。比如做分类分割或者检测,caffe都很好用。做风格化搞GAN,就得上tensorflow或者pytorch了,你一定要先选择一个工具,不然很可能会陷入找到了很多中github方案,这个试了遇到困难换下一个,下一个又遇到困难。

有自己最拿手的一个框架,选定项目就坚定地干,遇到了问题就去解决。

关于框架,大家可以从我们的系列文章中开始快速上手。

2、然后确定基准模型

最终工业级部署的时候,你往往需要一个效率更高的模型。但是除非你是老司机,否则不应该在还没有确定方案是否可行的时候就想自己的模型,而是应该从一个绝对可靠的模型开始,比如resnet18,比如mobilenet,正确地使用好它们,得到还不错的结果,将它的结果作为你自己算法要PK的对象。

关于基准模型,我们已经把最主要的模型全部解读了一遍,可以从中选择。

3、最后准备好数据

在前面你想好自己需要的数据了,接下来就是去采集到这些数据。完成一个项目,就是不断迭代模型和数据的过程。


刚开始的时候,你不需要数据都到位,但是要考虑好以下因素。这里我们不管数据是自己采集的还是从公开数据集中获取的。

(1) 准备大小合适的数据量。以二分类任务为例,你不能拿500张图就开始干,没任何意义。你不能苛求一开始就有50000万数据,也不合理,万一搞失败了还浪费资源。笔者先后做过10余个分类任务,完成任务上线从3000到10万都用过,我的建议是,尽量先准备个3000数据再开干,不然就太没诚意了。

(2) 从简单数据开始。以人脸识别为例,各种公开数据集不要混着用,分布不一致难度也不相同,你应该先专注简单的属于同一个分布的,比如找10000个正脸或者姿态小的数据,方案验证通过之后再增加难度。

很多的时候,你还要考虑覆盖各种场景(光照,背景)等。以上的这些东西,书不会告诉你,培训也没法教你,需要的是自己的积累,厚积薄发。


培养对数据的敏感性,可以从咱们的数据相关的文章开始看。

3 正确训练模型的基本常识

终于讲到训练模型了,程序员干活从来不会一帆风顺,你的小模型不会这么听话,以下是一些必须要注意的事项,不管用什么框架都适用。


1 注意网络的输入大小


你极有可能是从finetune其他的模型开始,以图像分类为例,公开的模型大多是以224*224为尺度,而你的任务未必也需要这样。


如果你想要区分不同种类的鸟,那么因为细节在鸟的局部身体部位,你的输入恐怕是要更大一些才能提取到好的特征,比如放大一倍,用448*448,这也是论文中常用的。


如果你只是要区分不同表情,用上了上面的嘴唇数据,那224*224纯属浪费,你可能只需要一个48*48的输入就足以很高准确率完成任务。


对于图像分割和目标检测,标准又不太一样。究竟使用多大的输入,这需要你依靠经验来确定,而且还和能给你多少资源,以及自己优化模型的能力相关。


2 注意特征输出大小


前面说了输入,这里再说输出,包括最后一层卷积的大小和通道数等。


首先看大小,对于一个分类任务来说,最后卷积层抽象为一个k*k的特征图,然后进行池化,全连接。如果这个特征图太大,知识根本就没有抽象出来,如果太小,表征能力又可能不够。


根据不同的难度,3*3,5*5,7*7我都用过,但是没有用过9*9以上的,试过分类性能会下降,计算量还增加。imagenet竞赛的那些网络基本上都是7*7,兼顾了性能。


这个输出大小,就由输入大小和网络的全局stride来决定,不断遇到很多同学没有注意这个问题,结果模型性能很差的,这是基本素质。


3 正确地使用数据


前面已经准备了一些好的数据,别再用的时候却搞错了,对于图像分类来说有以下几个准则。


(1) 随机打乱你的数据。


否则每个batch给的是同样类别的数据,不一定能保证模型学的正常。


(2) 在线做一些基本的数据预处理和增强。


图像缩放操作,你要想好是用有变形的缩放,即统一缩放到固定大小。还是等比例缩放,即把短边缩放到一定尺度。


裁剪操作,随机裁剪是最简单有效的数据增强方案,一开始就可以做起来,比如256*256随机裁剪224*224,不必要过于复杂。


镜像操作,也就是mirror参数,不是所有的任务都可以翻转的,根据自己任务使用。

减均值和归一化操作,其实这一步倒并非必要,因为网络自然可以学习到这一点。不过你做一下,通常不会有副作用。


更多的数据增强先不要急着做,因为那会增加网络优化的难度和时间。

这些操作都要在线做而不是离线准备好存入本地文件,这是很低效的。

4 正确地进行训练

接下来就开始训练,你可能会遇到各种与自己期望不相符的结果,其中一些很可能是你自己的错误造成的,因此有一些基本的训练参数需要注意。

(1) 用好学习率策略。


如果你没有经验,就不要一开始就使用SGD,虽然它可能取得更好的结果。直接用Adam,并且使用它的默认参数m1=0.9,m2=0.999,lr=0.001,学习率可以调整,其他两个参数基本不需要动。更多比较可以参考我们之前的文章。如果你的学习率搞的不好,很可能出现梯度爆炸或者不收敛。

(2) 正确使用正则项。

weight decay是一个非常敏感的参数,如果你不是很有经验,从一个很小或者为0的值开始。

训练的时候可以用dropout,测试的时候是不需要用的。

(3) 正确使用BN层。

Batch Normalization是一个好东西,加快训练速度降低过拟合,但是你要注意它在训练的时候和测试的时候是不一样的。

use_global_stats这个参数在训练时是false,测试时是true,如果你没用对,那么可能训练无法进行,或者测试结果不对。


在训练过程中,你可能会遇到各种各样奇葩的问题。

比如网络loss不正常,怎么调都不管用。

比如训练好好的,测试就是结果不对。

bug天天有,深度学习算法工程师遇到的特别多,如果你想交流更多,就来有三AI知识星球实时提问交流吧,大咖众多,总有能解决你问题的。

640?wx_fmt=jpeg

总结

初识境界到此基本就结束了,这一系列是为大家奠定扎实的深度学习基础,希望学习完后大家能有收获。

转载文章请后台联系

侵权必究

更多请关注知乎专栏《有三AI学院》

640?wx_fmt=png

2019年有三AI培养计划火热进行中,一个季度一期噢,可以扫码阅读或者直接阅读了解细节。

重新解释“季”划 & 为什么我不是在搞培训

xmorient

xmorient

如果想加入我们,后台留言吧

转载后台联系,侵权必究

640?wx_fmt=jpeg640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=png

微信

Longlongtogo

640?wx_fmt=png

公众号内容

1 图像基础|2 深度学习|3 行业信息

640?wx_fmt=jpeg 640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=png

往期初识境

人工智能AI 机器学习ML 深度学习DL 和 神经网络NN 的关系 人工智能 机器学习 深度学习 神经网络 的关系 阅读详情

相关推荐

新手如何进入人工智能领域:从零开始的实践与建议

进入人工智能领域并不容易,但只要你明确自己的兴趣方向,夯实基础知识,并且通过持续的学习与实践,不断积累经验,你将逐渐在AI这个广阔的领域中找到自己的位置。AI的未来充满了机遇和挑战,作为新手,不要害怕从零开始,勇敢地踏上这条探索之路,你的努力定会在未来得到回报。

weixin_52463850的博客 3892

深度学习图像分类 如何使用PyTorch对含525种鸟类数据集进行图像分类任务鸟类分类图像数据集的训练及应用

深度学习图像分类 如何使用PyTorch对含525种鸟类数据集进行图像分类任务鸟类分类图像数据集的训练及应用

2401_88440984的博客 701

详解人工智能(AI) 机器学习(ML) 深度学习(DL)

有三个词,这两年出现的频率越来越高:人工智能(AI),机器学习(ML),深度学习(DL),到底他们哥仨是什么关系?今天小编化繁为简,用几张图带你迅速看明白。关系如图,从提出概念的时间上来看也很清楚: 人工智能AI:模拟人脑,辨认哪个是苹果,哪个是橙子。 机器学习ML:根据特征在水果摊买橙子,随着见过的橙子和其他水果越来越多,辨别橙子的能力越来越强,不会再把香蕉当橙子。 机器学习强调“...

ShuYunBIGDATA的博客 3756

深度学习入门项目——附代码(持续更新)

定义变换)]))])

SharePython的博客 729

Java 人工智能应用:使用 DL4J 实现深度学习算法

本文介绍了如何使用Java深度学习库DL4J实现深度学习算法。DL4J是为Java开发者设计的开源分布式深度学习库,可与Hadoop和Spark集成处理大规模数据。文章详细讲解了DL4J开发环境的搭建步骤,包括Maven依赖配置和Java环境准备。重点演示了如何使用DL4J构建多层感知机(MLP)模型,涵盖数据准备、模型构建、训练和评估的完整流程。通过示例代码展示了如何实现数据预处理、神经网络配置、模型训练和性能评估,为Java开发者提供了深度学习应用的实践指南。文中采用的MLP模型适用于二分类问题,可作为

shrgegrb的博客 2478

【AI人工智能学习】GitHub 上适合初学者的 10 个最佳开源 AI 项目

人工智能(Artificial Intelligence, AI)是计算机科学的一个分支,旨在研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统的一门新的技术科学。它涵盖了多个领域,如机器学习、计算机视觉、自然语言处理和专家系统等,旨在使计算机可以像人类一样进行思考和决策。人工智能的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能是一门交叉学科,结合了数学、计算机科学、心理学、哲学等多个学科的理论和技术。AI 的研究目标是让计算机可以像人类一样进行思考和决策。

AI天才研究院 2万+

【AI初识境】给深度学习新手开始项目时的10条建议

这是专栏《AI初识境》的第12篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 在成为合格的深度学习算法工程师,尤其是工业界能够实战的调参选手之前,总会踏足很多的坑。 今天就来说说那些需要掌握的基本技巧,如何避开那些新手常见的坑,以计算机视觉中的图像分类任务为例。 请注意,这篇文章不是教你如何调参,而是教你不要在调参之前胡搞。 作者&编辑 | 言有三 1...

hacker_long的专栏 794

深度学习新手入门练习项目

Access the notebooks in the notebooks directory in this repo. You can run these notebook on Google Colab (recommended) or on your local machine. Click on a notebook and replace https://github.com/ with https://colab.research.google.com/github/ in the notebook URL or use this Chrome extension to do it with one click. Sign into your Google account. Click the COPY TO DRIVE button on the toolbar. This will open the notebook on a new tab. Rename this new notebook by removing the Copy of part in the title. Run the code, make changes, etc. and it's all automatically saved to you personal Google Drive.

「AI初识境」给深度学习新手做项目的10个建议

https://www.toutiao.com/i6695505977921241604/ 这是专栏《AI初识境》的第12篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 在成为合格的深度学习算法工程师,尤其是工业界能够实战的调参选手之前,总会踏足很多的坑。 今天就来说说那些需要掌握的基本技巧,如何避开那些新手常见的坑,以计算机视觉中的图像分类任务为例。 请注意,我...

喜欢打酱油的老鸟 661

GitHub上最受欢迎的57个深度学习开源项目

GitHub上最受欢迎的57个深度学习开源项目,搜集版本的

如何从零开始构建深度学习项目,这里有一份详细的教程1

DL背景。简单灵活设计初始要简单、小巧。在学习阶段,人们脑海中会充斥大量很酷的观念。我们倾向于一次性把所有细节都编码进来。但这是不现实的,最开始就想要超越顶尖的

【深度学习-Day 1】为什么深度学习是未来?一探究竟AI、ML、DL关系与应用

欢迎踏上深度学习(Deep Learning, DL)的探索之旅!近年来,人工智能(Artificial Intelligence, AI)浪潮席卷全球,而深度学习正是驱动这股浪潮的核心技术之一。无论你是对 AI 充满好奇的初学者,还是希望在技术领域深耕的开发者,理解深度学习都至关重要。本专栏旨在系统性地引导大家从零基础入门,逐步掌握深度学习的核心概念、关键技术和实战应用。

吴师兄大模型的博客 7375

【CATIA的二次开发38】对象Selection交互选择部分方法介绍01

在CATIA V5的VBA开发中,Selection对象是用户交互的核心组件,用于管理用户在图形区域或特征树中的选择操作。Selection 对象是 CATIA VBA 中的中央交互枢纽,充当用户界面与程序逻辑之间的桥梁。它代表当前在图形区域或特征树中被选中的元素集合,是自动化操作的基础。

学习共勉:不积跬步,无以至千里; 不积小流,无以成江海。 1344

给深度学习新手做项目的10个建议

点击上方“AI算法与图像处理”,选择加"星标"或“置顶”重磅干货,第一时间送达转载自:有三AI在成为合格的深度学习算法工程师,尤其是工业界能够实战的调参选手之前,总会踏足...

zero的博客 1703

python代码爬取大众点评评论!直接copy就可以运行!

python代码爬取大众点评评论!直接copy就可以运行!

QiuQiRuQin的博客 1万+

告别VLC!用Python+OpenCV实时拉取RTSP监控流,并实现抽帧降低延迟(附完整代码)

本文介绍了一种基于Python和OpenCV的低延迟RTSP监控流处理方案,通过抽帧技术显著降低延迟并保持视频分析准确性。文章详细讲解了RTSP流处理的基础挑战、抽帧技术原理与实现,以及完整的低延迟处理方案,包括硬件加速配置和动态抽帧算法,帮助开发者优化监控视频流处理性能。

weixin_30333885的博客 275

【AI初识境】从3次人工智能潮起潮落说起

文章首发于微信公众号《有三AI》 【AI初识境】从3次人工智能潮起潮落说起 专栏《AI白身境》已经完结,今天开始这个系列的第二个专栏《AI初识境》。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 第一篇,我们就来说说人工智能的简单历史,通常来说业界公认包括三个重要的历史阶段。 作者&编辑|言有三 01什么是智能 智能,即Intelligence,那什...

hacker_long的专栏 4927

鱼眼相机去畸变(图像拉直/展开/矫正)算法及实战总结

1、算法说明经纬度矫正法, 可以把鱼眼图想象成半个地球, 然后将地球展开成地图,经纬度矫正法主要是利用几何原理, 对图像进行展开矫正。经过P点的入射光线没有透镜的话,本应交于相机成像平面的e点。然而,经过鱼眼相机的折射,光线会交于相机成像平面的d点,就产生了畸变,因此畸变图像整体上呈现出像素朝图像中心点聚集的态势。而去畸变,就是将折射到d点的点,重新映射回到e点,因此去畸变之后的图像与原始的鱼眼图像相比,仿佛是把向心聚集的像素又重新向四周铺展开来。AVM环视系统——鱼眼相机去畸变算法 - 知乎。

大胡子大叔的专栏 2万+

AI, ML, DL的区别

人工智能(Artificial Intelligence)、机器学习(Machine Learning)、深度学习(Deep Learning)经常混叫,虽然没有非常准确的定义,但基本上是下面这些图所表示的关系。借用知乎上面的图。 简单点一句话:ML是AI的一种实现方法,DL是ML的一种方法。

Tony's Blog 3万+

SAP SD信贷管理实战:从配置到风险控制的完整指南(附后台路径)

本文详细解析了SAP SD信贷管理的完整配置流程与风险控制策略,涵盖信贷控制范围设置、风险分级机制及动态控制配置。通过实战案例和后台路径指引,帮助企业实现从客户信用评估到实时监控的全流程管理,有效降低坏账风险并优化资金安全。

3a9bq4r8t2y的博客 214

Revit二次开发——不启动Revit,做rvt文件数据导出

Revit二次开发——不启动Revit,做rvt文件数据导出Node.js部分调用C#端供外部调用的dllC#部分调用RevitNet.dll,做数据导出exe做外部调用dll总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 N

Y.Jerome的专栏 4113

超多新手入门人工智能项目汇总

大白在制作AI内容平台www.jiangdabi.com时,编写很多有趣好玩的人工智能项目。 写的超级详细,项目简介+原理简述+软件安装+环境安装+代码运行,基本完全新手,都可以用笔记本电脑进行尝试。 比较有意思的是,这些项目家里三岁的宝宝也喜欢玩。 那是不是可以说,现在三岁的娃都开始学习人工智能了,你还不参与吗? 比如宝宝在笔记本电脑上,尝试超级赛亚人的人脸特效。 其中用到了人脸检测、人脸关键点定位、Opencv图像处理等算法,使用Python编程。 他玩的很津津有味,当然还有各种项目,代码都放在下面,

江南研习社 5242

deepin搭建samba服务器

一.为什么要用Samba? Samba的主要任务就是实现Linux系统和Windows系统之间的资源共享。二.需要的软件? 我是在deepin上实现的,在终端中使用一下两句命令,就可以安装Samba的软件包 $sudo apt-get install samba //安装samba 三.Samba服务的组成 Samba的核心是两个守护进程smbd和nmbd。当然,它

xbrother123的博客 8598

「AI初识境」近20年深度学习在图像领域的重要进展节点

https://www.toutiao.com/i6694432730714735117/ 这是专栏《AI初识境》的第3篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。 这是本系列的最后一篇非技术文章,我们总结一下深度学习技术在图像领域的重要历史性节点,本来打算语音,自然语言处理一起的,文章太长以后再谈。 作者&编辑 | 言有三 1 前深度学习时代 ...

喜欢打酱油的老鸟 874

西门子S7通信协议TSAP配置全攻略:从默认值到自定义修改(附各型号对照表)

本文深入解析西门子S7通信协议中TSAP配置的核心原理与实战方法。针对S7-200/300/400/1200/1500等主流PLC型号,提供了默认TSAP对照表,并详细阐述了如何根据机架号和插槽号计算或自定义Remote TSAP。文章结合常见连接失败案例,给出了系统化的排错流程,旨在帮助工程师快速打通S7通信链路,提升工业自动化现场调试效率。

weixin_29163797的博客 285

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 有三AI知识星球官宣,BAT等大咖等你来撩
下一篇: 【AI初识境】给深度学习新手开始项目时的10条建议
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值