YOLO系列学习(YOLOv3)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bernice_lying
# YOLO:You only look once#
方法如其名,仅需看一次图像,即可预测存在的物体和相对应的坐标位置,它追求“秒识”体验,有着“fast & accurate”的检测表现。它的建模思想是将检测问题转化为回归问题。
官方源码:http://pjreddie.com/yolo/接上篇和上上篇博客,下面将介绍YOLO系列第三部YOLOv3:
## YOLO-v3
【参考】
1. https://www.cnblogs.com/makefile/p/YOLOv3.html
【效果】
图1 COCO数据集上各种方法的测试时间和mAP性能比较
【改进点】
- 金字塔特征融合
- 更好的分类器:类别预测损失的替换
- 更好的分类网络:更强更深的特征提取网络
YOLOv3继续使用YOLOv2的Bounding Box预测策略,使用维数聚类获得先验bounding box;训练时使用均方误差损失函数;若记偏移真值为tg,预测值为tp,则对应的梯度应为tg-tp。
物体存在的置信度使用逻辑回归策略预测。当某个先验bounding box与物体真实标注的交叠比其他先验更多时,它对应的物体存在置信度得分应为1.若先验不是最好的,但交叠超出了我们之前是设定的阈值(如0.5),就忽略这个预测。我们对每个真实物体仅用一个先验bounding box,若先验未分配有一个真实物体,则其坐标和类别预测损失不计,只计物体存在的损失。
(2)类别预测
损失函数选择:二值交叉熵损失(独立的logistic分类器)
原因:softmax损失有类间互斥的表现,不利于有包含属性关系的数据分类(overlapping labels(i.e. Woman and Person))。因此使用多标签分类方法可以更好地模拟数据。
思想:特征金字塔网络Feature Pyramid Network。
目的:获取更丰富的语义信息和更细粒度的特征信息。
细节:
- 每个尺度后面是如何预测的?在获取特征图后,添加几个卷积层,最后一层卷积用于预测3-d张量,张量编码bounding box的坐标信息(tx,ty,tw,th)+ 物体存在置信度 + 类别预测值。(COCO实验中,张量为N×N×[3×(4+1+80)])。
- 多尺度预测:YOLOv3在3个不同尺度上进行3种box预测。Anchor仍用k-means方法获得bounding box先验中心,然后均分给3个尺度。聚类结果(9个聚类中心,3种尺度):(10×13); (16×30); (33×23); (30×61); (62×45); (59×119); (116×90); (156×198); (373×326).
尺度2:对尺度1的倒数第二层卷积层上采样(×2),再与最后一个16×16分辨率的特征图逐点相加(Element-wise addition),再接上一些卷积层(对融合的特征信息进一步处理),输出张量,比尺度1增大2倍;
尺度3:类同尺度2,使用32×32大小的特征图。
图2 YOLOv3网络结构图
(4)特征提取器
更强更深的网络:Darknet-53
特点:
- 使用1×1+3×3卷积层堆叠结构,其中1×1用于特征压缩;
- 引入shortcut connections/残差模块;
- 将max pooling替换成2步长的3×3卷积;
- 更深了。
训练策略:
- 无难例挖掘
- 多尺度训练
- 大量数据扩增
- BN
- all the standard stuff
【其他研究(一些不起作用的尝试)】
- 使用正常的anchor box预测机制(x,y偏移量和w,h预测) + 线性**,但会导致模型稳定性下降,效果不好;
- 对x,y偏移量使用线性**,而不是Logistic**,会导致mAP下降;
- 使用Focal loss,导致mAP下降2个百分点。可以对比一下Focal loss和YOLO的预测损失设计思路来分析;
- 一对IOU阈值来判定正标签。这里指的一对IOU指的是像Faster RCNN所用的,如[0.3,0.7]这样的,若IOU>0.7,则判定为正样本,IOU<0.3,判定为负样本,介于0.3和0.7的忽略它们。但是!在YOLOv3实验的时候,作者发现这种设置得不到好的结果,在论文中IOU阈值是单值0.5.
本博文内有博主的一些理解和思考,若有不同见解欢迎在讨论区分享,若有疑问也请在下方留言。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bernice_lying