目标检测(训练阶段-反向传播)

参考:(讲的详细,简单易懂)

https://www.bilibili.com/video/BV15w411Z7LG/?is_story_h5=false&p=4&share_from=ugc&share_medium=android_hd&share_plat=android&share_session_id=f3bd490e-6f4d-43c2-97df-4573b8556221&share_source=WEIXIN&share_tag=s_i&timestamp=1670053553&unique_k=j0ik45C​​​​​​​

一、

监督学习的训练是通过梯度下降和反向传播,迭代的去微调神经元中的权重,来使得损失函数最小化的过程,目标检测是一个典型的监督学习问题。即在训练集上已有人用标注软件画出了 ground truth(标准答案) ,即下图中的绿框,人工的去标注。而算法就是让预测结果尽量去拟合绿框,使得损失函数最小化。绿框的中心点落在哪个grid cell(网格单元)里面,就应该有哪个grid cell(网格单元)预测出的bounding boxes (边界框)负责拟合绿框每一个grid cell(网格单元)预测出两个bounding boxes (边界框),那么就应该由这两个bounding boxes (边界框)中的一个去负责拟合绿框。

 并且grid cell(网格单元)输出的类别应该是ground truth(标准答案)的类别也就是说20个类别的概率乘以框的概率获得的全概率,狗的概率应该是最大的。它就是这个grid cell(网格单元)的代表类别,每一个grid cell(网格单元)只能预测出一个类别,那么就是概率最大的类别,也就是说每一个grid cell(网格单元)只能预测出一个物体,49 个grid cell(网格单元)只能预测出 49个物体。这也是YOLO V1在预测小目标和密集目标性能差的原因。

二、

每一个grid cell(网格单元)预测出两个bounding boxes (边界框),究竟有哪一个 bounding boxes (边界框)负责拟合ground truth(标准答案)呢,应该由和ground truth(标准答案)交并比IOU比较大的在下图中就是外围的框负责拟合ground truth(标准答案),尽量逼近ground truth(标准答案),另外一个框就什么都不需要做,只需要让它的 Object 尽量小即可。

下图粗线的绿框是真正的ground truth(标准答案)。

所以损失函数的设计就是尽可能让负责拟合这个物体的预测框和物体真正的 ground truth(标准答案)尽可能一致、重合。

三、

如果没有标注框中心点落在这个grid cell(网格单元)中,那么它预测出的两个框都不需要进行下一步操作。这两个框只需要置信度越小越好,越接近 0 越好。

 四、YOLO V1 的损失函数

损失函数包含五项:

①第一项:负责检测物体的 bounding boxes (边界框)的中心点定位误差。

        即负责预测物体的框,尽量和 ground truth(标准答案)从横纵坐标上,从宽高上都要尽可能一致。所以损失函数构造了残差平方求和,回归问题的损失函数,下面五项都是回归问题的损失函数。回归问题就是要预测出一个连续的值,把这个值和标注值进行比较,越接近越好,所以 YOLO 是把目标检测问题当做是回归问题解决。第一项公式中带上标的是标注值,不带上标的是预测值。

②第二项:负责检测物体的 bounding boxes (边界框)宽高定位误差(求根号能使小框对误差更敏感)

 负责预测物体的宽高尽量和ground truth(标准答案)的宽高一样,之所以加根号,是使得小框对误差更敏感,也就是说同样的偏差,小框造成的损失函数会更大,大框造成的损失函数会更小,这样对大框更公平。

③负责检测物体的bounding boxes (边界框)的置信度(Confidence)误差

标签值其实是bounding boxes (边界框)与ground truth(标准答案)IOU,作为标签值。预测出的置信度应该和IOU越接近越好。

 ④不负责检测bounding boxes (边界框)的置信度误差,标签值最好为 0 。包含两类bounding boxes (边界框)。一类是负责检测物体的grid cell(网格单元)中,不使用的bounding boxes (边界框),如下图1,中间的小绿框。另一类是图2中的两个紫框,本身grid cell(网格单元)就不负责预测物体,它预测出的 B 个 bounding boxes (边界框)都不使用。那么这两类bounding boxes (边界框)都是第四项,不负责检测bounding boxes (边界框)的置信度越接近 0 越好。

图1

图2

 ⑤负责检测物体的grid cell(网格单元)分类误差。比如下图中绿色grid cell(网格单元)负责预测狗,那么 20 个条件类别概率中,狗的概率越接近 1 越好。所以下式公式中对每一个类别遍历的去求和,实际上是把标注的ground truth(标准答案)的类别越接近 1 越好。

 

 五、

如果一个bounding boxes (边界框)负责检测物体,那么它所属的grid cell(网格单元)也负责检测物体;如果一个bounding boxes (边界框)负责检测物体,那么另外一个bounding boxes (边界框)就不负责检测物体。红框和蓝框两个变量,红框如果为1 ,那么蓝框肯定也为1红框绿框两个变量,一个为 1 ,另外一个必为 0 。下标 i,j i 表示 S X Sgrid cell(网格单元) ,j 表示 B个bounding boxes (边界框),YOLO i 最大到 49,j 最大到 2。

 图1

 图2

图3

Linux创始人LinusTorvalds有一句名言:Talk is cheap, Show me the code.(冗谈不够,放码过来!)。 代码阅读是从入门到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。  YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。YOLOv3的实现Darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。  本课程将解析YOLOv3的实现原理和源码,具体内容包括: YOLO目标检测原理  神经网络及Darknet的C语言实现,尤其是反向传播的梯度求解和误差计算 代码阅读工具及方法 深度学习计算的利器:BLAS和GEMM GPU的CUDA编程方法及在Darknet的应用 YOLOv3的程序流程及各层的源码解析本课程将提供注释后的Darknet的源码程序文件。  除本课程《YOLOv3目标检测:原理与源码解析》外,本人推出了有关YOLOv3目标检测的系列课程,包括:   《YOLOv3目标检测实战:训练自己的数据集》  《YOLOv3目标检测实战:交通标志识别》  《YOLOv3目标检测:原理与源码解析》  《YOLOv3目标检测:网络模型改进方法》 建议先学习课程《YOLOv3目标检测实战:训练自己的数据集》或课程《YOLOv3目标检测实战:交通标志识别》,对YOLOv3的使用方法了解以后再学习本课程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值