Yolov1 v2 v3 原理学习笔记
原视频:https://www.bilibili.com/video/BV1yi4y1g7ro?p=1
参考文章:https://www.cnblogs.com/qianchaomoon/p/12364226.html
如何学习网络?
1)、学习网络原理
2)、读原论文
3)、跑通github上的代码
/选择自己喜欢的框架+经常更新+标star多的
4)、读代码
/分析网络搭建+数据预处理+损失计算
/结合原论文
Yolov1(2016)
【论文思想】
1)、一幅图像分成S×S个 网格(grid cell),落在某个object中心的网格负责该object
2)、final predicting is a (S×S×(5*B + C)) tensor
以S=7, B=2, C=20为例
一个网格负责预测两个bndbox + 20个类别的分值。
每个bounding box包含(x,y,w,h) + confidence, 共5个数值
(x, y): the centerof the box relative to the bounds of the grid cell. 取值[0, 1]
(w,h): The width and height are predicted relative to the whole image.取值[0, 1]
confidence = Pr(Object)*IOU(truth, pred), 当存在object时,Pr(Object)=1,confidence可简单理解为IOU
【网络结构】
【损失函数】
注:w,h要开根处理,因为同样的偏移,不同尺度的目标IOU变化不同,尺度越大变化越小
【v1存在问题】
1)small objects that appear in groups
2) objects in new or unusual aspect ratios or configurations
主要原因在于定位不准确
Yolov2(2017)
【better】Yolov2的7种尝试:
1)batch normalization ,mAP提升2%
在每一个卷积层后加入BatchNormalization,
BatchNormalization批归一化:指神经网络中间层也进行归一化处理,有助于规范化模型,防止过拟合。
2)high resolution classifier,mAP提升4%
一般的目标检测方法中,先使用AlexNet / VGG网络进行特征提取,图片resize到< 256256,分辨率低,目标检测困难;YOLOv2自定义了darknet分类网络,将图像的输入分辨率更改为448448
3)Convolutional with Anchor Boxes,提升recall
借鉴FasterR-CNN中的anchor思想,产生多个bounding boxes先验框
4)Dimension Cluster
先通过维度聚类生成先验框 给定AnchorBoxes的宽高纬度,然后通过网络学习转换系数,得到准确的boundingbox候选框。有priors更快。
5)Direct location prediction, 4+5后mAP提升5%
直接位置预测:YOLOv2中不采用直接的offset方法,而是限制预测的坐标信息,每个anchor去负责 中心落在某个grid cell区域内 的目标,避免anchor落在图像中的任意一个位置导致的不稳定
6)Fine-Grained Features,mAP提升1%
细粒度特征。通过passthrough layer将底层特征与高层特征融合,提升检测小目标的效果
7)Multi-Scale Training
多尺度训练。We want YOLOv2 to be robust to running on images of different sizes ,so 每经过10个epoch,随机选择新的图片尺寸进行训练
由于YOLOv2中仅存在卷积层和池化层,所以可以进行动态调整
由于YOLOv2中降采样的参数为32,所以尺寸可选值{320,352,…,608}总共十个不同尺寸的的图像
【faster】
使用基于GoogleNet的定制网络DarkNet,改善检测速度
Yolov3(2018)
【网络结构】
backbone采用darknet-53
filters:卷积核个数 ; size:卷积核大小
【目标边界框的预测】
【正负样本的匹配】
- assign one bounding box prior for each ground truth object,有几个gt目标就有几个正样本
- 把与gt重合程度最大的bounding box prior作为正样本
- 与重合程度非最大且大于threshold,则该bounding box prior既不是正样本也不是负样本,丢弃
- 剩下样本是负样本,既没有定位损失,也没有类别损失,只有objectness(confidence score)
【损失的计算】
主要是将v1中关于confidence和class类别概率部分的损失函数更改为logistic交叉熵损失函数
Eg. 真实标签 [0, 0, 1] 预测概率 [0.1, 0.8, 0.9]; 每个概率是相互独立的,没有使用softmax所以和不为1