如今YOLO已经更新到了V10版本,早期版本可能已经落后于更高的版本性能,但是思想上都是相似的,为了更好的理解YOLO系列不同版本的升级和区别,本人从V1版本进行逐步了解。
YOLO v1-v3用一篇文章进行总结,本文更注重了解其思想,方便后期其他版本的学习和理解。
YOLO的一些基础知识
- YOLO提出通过one-stage的方式解决检测任务,实时性得到了很大提升,但是早期效果不如速度较慢的mask-rcnn,因为two-stage方式会多一个预选框的过程。
- 精确率p=TP/TP+FP 召回率r=TP/TP+FN
相关,正类 | 无关,负类 | |
---|---|---|
被检索到 | true posutive | false posutive |
未检索到 | false negatives | true negatives |
- IOU:预测和真实框的交并比
V1
核心思想:每个格子去预测得到两种候选框,然后候选框和真实标签计算iou,最终选择一个进行微调,每个位置都进行预测,所以要得到一个置信度confidence,每个格子得到x,y,w,h,confidence
总结:每个格子提供一个候选框,置信度判断是否存在物体,要预测有物体的提供候选框,两个选择一个,通过iou判断选择哪个,计算x,y,w,h得到预测框
网络结构,网络结构图就不放了,非常简单的卷积加FC
- 输入 448 * 448 * 3(训练224*224)
- CONV=>7 * 7 * 1024
- FC->40961->FC->14701->reshap->7730
- 得到一个7*7每个格子30个值
- 候选框1:x,y,w,h,c1 候选框2:x,y,w,h,c1 ,剩余20个是类别
损失函数:
- 坐标(位置误差)损失:遍历7*7和2个候选框 x,y真实和预测的差,w,h根号差(根号原因/目的:解决物体小的时候不敏感)
- 前后背景不均衡所以在不含物体的分配小的权重参数降低影响
- 分类:交叉熵损失
NMS非极大值抑制:IOU符合的取出,将置信度最高的框取出
总结: - 重叠问题无法解决(每个cell只预测一个类别)
- 小物体检测不到(只有两个框)
V2
V2在V1的基础上做了很多实验和优化,很多结论至今都证明是有用的。
- BN层,舍弃Dropout,卷积后全部加BN;每一层都做了归一化,收敛更快;网络提示2%mAP
- 更大的分辨率,先用224训练,最后几次448*448进行微调,网络提示4%
- DarkNet借鉴vgg、resnet,没有全连接层,5次Maxpool降采样(h/32,w/32)416->13
- 部分中间层1*1卷积节省参数
- 先验框,聚类提取先验框(k-means=5 ) ,在fast-rcnn中是默认长宽比取得,作者通过在真实数据中聚类得到5类,聚类距离不是欧氏距离,而是1-IOU当做距离,并通过实验得到5类效果较好差异较大,recall有提升
- box:之前偏移量在模型训练初期容易乱走,不适合训练,现在偏移量在格子内(0-1)中心点不会偏出格子
- 预测x = 偏移量+在特征图中的相对坐标
- 感受野
- 3个3x3比1个7×7 参数更少,感受野相同
- 最后一层感受野太大小目标容易丢失,选取前几层的输出更适合小目标,与最终结果拼接,前面层进行拆分2626512->4 * 13 * 13 * 512 conect 13 * 13 * 1024->13 * 13 * 3072
- 多尺度,对输入大小不固定,没有全连接层
V3
YOLO-V3的网络结构相对比较复杂,他融合了当时最先进的思想多尺度、残差等,这里看到一篇文章给出了清晰的结构图,如下非常清晰直观
尊重原创:图片来源
V3的更多升级针对效果
多种scale:分别针对大中小任务进行学习
- 大(13 * 13)中(26 * 26)小(52 * 52)三种scale分别预测,每个scale有3种候选框(与v2相同聚类将9种框分为三类每类3个得到)
- 如上面结构图,将最后一层的输出上采样与前一层进行融合
(注:本人之前刚好做过一种金字塔网络与之思想类似,但是需要将原始图片下采样到不同分辨率然后分别处理,速度确实会下降,yolo采用一种分辨率输入,然后上采样融合方式,速度更快。) - 残差思想+只有卷积(用步长=2代替池化下采样)如下图
- softmax层使用logistic改进,可以预测每个类别,不局限于一个物体一个类别,可以一个物体多个类别
总结
后续对源码和其他版本进行进一步学习和了解。