基于Paddle的计算机视觉入门教程【学习笔记】(4)深度学习的基础实现流程

我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和数字IC设计。

关注公众号【集成电路设计教程】,获取更多学习资料,并拉你进“IC设计交流群”。
QQIC设计&FPGA&DL交流群 群号:866169462

原作者课程链接:https://www.bilibili.com/video/BV18b4y1J7a6?p=2
原文链接:https://blog.csdn.net/weixin_45747759/article/details/122590962?spm=1001.2014.3001.5501

深度学习主要分为五大步骤。

一、数据集的准备、

深度学习需要大量数据的支撑,搭建好的模型,通过大量的数据学习之后,才会拥有强大的泛化能力。模型对数据集的所有图片不停地学习,收敛到一定程度之后,输入一张全新的图片(不在数据集内),也会输出一个相对正确的结果。数据集包含的场景越多,背景越复杂,最终实现的效果会越好。数据集应该包含项目可能出现的所有情况,如光照、贴纸等不利干扰情况,都需要在数据集中出现。

但是对于我们单个具体项目而言,拍摄多个场景的物体是比较困难的,自己架设好摄像头,拍摄出来的背景也是比较单一的,难以满足丰富、复杂、随机的要求。

enter description here

如上图自己制作的有害垃圾数据集,因为假设好了机械结构,背景非常单一。电池的种类也非常有限,无法将所有种类的电池都采购到。拍摄过多类似的图片,不仅无法满足数据集的要求,而且最终的模型精度也会受到较大影响。所以建议添加一些网上的现有数据集,或者通过爬虫等方式,来扩充数据集的复杂和随机程度,自己拍摄也可以故意制造一些特有场景。

enter description here

以目标检测为例,理想情况下,包含单个物体的图片数要大于1500张,单个物体的出现次数要大于10000个,并且都需要进行标注。数据集的制作是非常耗时的,尤其在标注时,需要消耗大量的精力。

二、数据增强

除了尽可能增加图片的个数和复杂度意外,数据增强是最为常用的扩充数据集方法,也对模型精度的提升有极大的帮助。可以说数据增强是一个非常有实用的技巧。

enter description here

可以看到,相比于原图,可以随机地改变对比度、亮度,或是扣去一些像素点,甚至是多张图片的重叠、拼接, 这些都是数据增强的手段,数据增强可以提高难度,也可以成倍地扩充数据集,这对于大多数场景来说都是非常有效的,特别是对于数据集不充足的情况下,使用数据增强可以极大地提高精度和泛化能力。然后,需要注意的是,对于绝大多数轻量化的小模型,应该尽量减少数据增强,因为小模型的拟合能力有限,过度增加图片复杂程度,不利于最终的收敛过程。

三、模型的搭建

深度学习的模型是最为关键的一个环节,对于计算机视觉来说,模型一般都是由卷积结构组成的卷积神经网络。

enter description here

上图是YOLOv3的整体模型结构,YOLOv3是目标检测的一个经典算法。可以看到整个模型都是由卷积结构组成,对于原始(416,416,3)的原始图像,输入模型之后,输出了三个结果,对这三个结果进行筛选后就可以得到预测框的位置,最终实现以下的效果。

enter description here

模型内待求的参数一般都比较多,不同于我们基础学科,用一些多项式拟合的方法,计算机视觉模型的参数是非常多的,这也就意味着它的拟合能力非常强,模型也是非常庞大的,对于一般的图像任务都能够找到相应的拟合结果,也拥有很强的泛化能力。

四、模型的训练

显然,原始的模型参数是无法一下子获得我们想要的结果的,针对我们特性化的项目要求,比如我要检测易拉罐,我们检测行人等等,需要训练我们的模型,让模型知道我们到底要识别什么东西。换句话来说,就是将我们刚刚准备好的数据集,不停地导入到我们的模型里,我们的模型会输出一个结果(pred),也就是预测值,将这个预测值和我们标注的真值(target)偏差(loss),利用数学的方法降低这个偏差,那么就意味着预测值会越来越接近真值,也就是模型输出的结果越来越符合我的要求。
举个简单的例子,例如输入为x,真值为y,模型为F(X),预测值pred为:

enter description here

再用最简单公式求出误差:

enter description here

可以看出loss是和模型所有参数都有关的一个函数,假设loss的曲线如下:

enter description here

我们的目标是让误差loss尽可能低,也就是接近C点附近,对于A、B、D的情况,我们都希望修正模型参数x来降低loss,这就是优化器的工作。如果使用梯度下降法(GD),它是这样修正的:

enter description here

其中的a为步长,也称为学习率,梯度下降法可以使得其他点向C点收敛,但主要存在两个问题。

  • 需要求解所有参数的梯度,计算量非常庞大
  • 容易陷入到局部最优解中,如图中的第一个极小值

目前我们常用的优化器有 SGD、Adam 等。SGD也就是随机梯度下降法,但是虽然包含一定的随机性,从期望上来看,它是等于正确的导数的,每次都只需要对一部分参数求梯度,大大减少了计算量。同时由于随机性,可以有效地躲开局部最优解,也就是鞍点。解决了GD的两大问题,在计算机视觉领域受到了广泛的使用。

五、模型的部署和预测

对于绝大多数项目,一般都需要将模型部署到具体的硬件中,比如说ARM开发板、FPGA等,部署也是非常重要的一个板块。

enter description here

我们的终端设备几乎不可能配一个台式主机,也就意味着没有很强大的计算能力和存储能力。部署的关键在于保证精度的情况下,尽可能压缩模型体积,提升模型预测速度。可以使用现在一些开源的工具,如ncnn、tensorrt、paddle-lite等进行相应的部署。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值