目录
1. SSD网络(2016,ECCV)
1.1 Faster RCNN存在问题
1.2 SSD网络亮点
1.3 网络细节部分
1.4 Default Box的确定
1.5 SSD网络预测部分
1.6 正负样本选取
1.7 损失的计算
2. RetinaNet网络(2017,CVPR)
2.1 RetinaNet网络结构
2.2 Box的scale和ratios
2.3 RetinaNet网络预测器结构
2.4 RetinaNet损失计算
3. YOLO v1网络(2016,CVPR)
3.1 YOLO v1网络思想
3.2 YOLO v1预测输出
3.3 YOLO v1损失函数
上一节01部分介绍了目标检测任务中Faster R-CNN系列的三个Two-Stage算法以及FPN结构(参见这里)。该类方法是基于Region Proposal的算法,需要使用启发式方法(SS算法)或者CNN网络(RPN)产生候选框,然后再在候选框上实现分类和回归。
本文将介绍目标检测任务中的另一类方法,仅仅使用一个CNN网络直接预测不同目标的类别和位置。该类算法速度快,并且实现了端到端的预测,复杂度也比较低。
1. SSD网络(2016,ECCV)
1.1 Faster RCNN存在问题
- 对小目标的检测效果很差(在某一特征层上进行预测)
- 模型太大,检测速度慢(需要在RPN部分和Fast R-CNN部分分别进行预测)
1.2 SSD网络亮点
- 在不同特征尺度上预测不同尺度的目标(浅层特征层可以检测小目标,因为感受野小,反之亦然)
- 整个网络类似于VGG16,端到端实现分类与回归
- 真正的实时。对于输入尺寸300x300的网络使用Nvidia Titan X在VOC 2007测试集上达到74.3%mAP以及59FPS,对于512x512 的网络,达到了76.9%mAP超越当时最强的Faster RCNN(73.2%mAP)
1.3 网络细节部分
- 虚线框为VGG16的前5层,不同的是Conv5的最后一个maxpooling5为2*2, s2,这里改成了3*3, s1,因此经过该maxpooling5的特征图尺寸不变
- 搭建过程中注意,后面几层卷积中,s=1时,padding=0;s=2时,padding=1
1.4 Default Box的确定
- 类似于Anchor Box,这里的Default Box将它们分别放置在不同的特征层上
- scale和aspect两个参数,最终获得9732个框
1.5 SSD网络预测部分
- 对于每一个预测特征层m*n*p,使用一个3*3*p的kernel卷积,卷积核个数为(c+4)k,c为类别个数,k为box个数
- 目标类别分数预测:ck(每个default box共c个参数)
- 边界框回归参数预测:4k(每个default box共4个参数)(区别于Fast R-CNN,每一个box 4c个参数)
1.6 正负样本选取
- Box与GT-Box匹配最大的IoU,设为正样本
- 对于任意Box与GT-Box的IoU>0.5,设为正样本
- 负样本:8732-正样本=负样本,但不全用,因为会造成样本不平衡
- 计算最大的confidence loss,作为负样本
- 最终保证正负样本比例1:3
1.7 损失的计算
2. RetinaNet网络(2017,CVPR)
?在此之前,目标检测领域普遍以YOLO系列、SSD算法为首的one-stage算法准确率不如以Faster RCNN为代表的two-stage算法。RetinaNet直接省略掉了第二阶段,将RPN网络直接完成了整套的目标检测任务。它的网络结构其实就是FPN网络提取多尺度的特征,然后在多尺度特征的基础上连接检测头,对目标的分类和位置回归进行预测
2.1 RetinaNet网络结构
类似FPN结构,但有三点不同:
- FPN从C2层生成P2,但RetinaNet没有使用C2,因为P2会小号更多的空间和计算量
- FPN中P6层是P5通过maxpooling得到的,RetinaNet通过卷积层下采样(s*3, s2)
- FPN是P2-P6,RetinaNet是P3-P7
?2.2 Box的scale和ratios
- FPN中每一个预测特征层都只使用了一个scale和3个ratios
- RetinaNet针对每一个预测特征层使用了3个scale和3个ratios
2.3 RetinaNet网络预测器结构
2.4 RetinaNet损失计算
- 核心理论:Focal Loss(YOLO v3 SPP中有具体介绍)
3. YOLO v1网络(2016,CVPR)
3.1 YOLO v1网络思想
- 将一幅图像分成S*S个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object
- 每个网格预测B个bounding box,及其1个置信度confidence score,以及C个类别分数
- 💡置信度反映是否包含object以及在包含object情况下位置的准确性
- 缺陷1:每个网格预测B个box,但是最终只选择IoU最高的box作为物体检测输出,即每个网格最多只预测出一个物体。当物体占画面比例较小,检测效果差
- 网络结构:YOLOv1借鉴了GoogleNet分类网络结构。但未使用inception模块,而是使用1*1卷积层(此处1*1卷积层的存在是为了跨通道信息整合)+3*3卷积层简单替代。
- 最后一层采用全连接层进行类别输出,预测输出相关见3.2内容
- 缺陷2:这就导致了,测试过程中YOLO模型仅支持与训练图像分辨率相同的输入。其他分辨率需要缩放
- 注释:没有标注stride的层,默认步距为1
3.2 YOLO v1预测输出
- 经YOLO v1预测输出为7*7*30的张量(30为深度),这要求原始图像尺寸固定,448*448
- ?测试阶段,既给出了它为某一目标的概率,又给出了预测目标边界框与真实目标的重叠程度
3.3 YOLO v1损失函数
- bounding box损失:
- B个bbox中与GT具有最高IoU的一个进行坐标误差的反向传播,其余不进行.
- 注意宽和高的误差求解方式,都进行了一个开根号的处理,为什么要这么做呢?
- 首先假设对于大目标和小目标而言,真实的目标边界框和预测的边界框都有一个相同的偏移(w,h),对于小目标而言IoU变小的很明显,预测结果比较差,但是对于大目标的预测结果还算可以
- 也就是说,无论是大目标还是小目标,我们偏移相同的距离,误差都是一样的,很明显这不是我们想要的结果。我们希望,对于小目标而言,误差更大一点,所以开根号
-
- confidence损失:有目标和没有目标情况
- classes损失:仅计算有目标的情况,若网格中没有目标,则不对分类误差进行反向传播
参考来源:
深度学习在图像处理中的应用(tensorflow2.4以及pytorch1.10实现)_太阳花的小绿豆的博客-CSDN博客_深度学习在图像处理中的应用
霹雳吧啦Wz的个人空间_哔哩哔哩_bilibili
GitHub - WZMIAOMIAO/deep-learning-for-image-processing: deep learning for image processing including classification and object-detection etc.
目标检测网络之 YOLOv3 - 康行天下 - 博客园 (cnblogs.com)
|