原视频:https://www.bilibili.com/video/BV1yi4y1g7ro?p=1
参考文章:https://www.cnblogs.com/qianchaomoon/p/12364226.html
https://blog.csdn.net/t20134297/article/details/105745566/
如何学习网络?
1)、学习网络原理
2)、读原论文
3)、跑通github上的代码
/ 选择自己喜欢的框架+经常更新+标star多的
4)、读代码
/ 分析网络搭建+数据预处理+损失计算
/ 结合原论文+代码解读文章
一些术语:
【论文思想】
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
主要原因在于定位不准确
【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,改善检测速度
【网络结构】
backbone采用darknet-53
filters:卷积核个数 ; size:卷积核大小
【损失的计算】
主要是将v1中关于confidence和class类别概率部分的损失函数更改为logistic交叉熵损失函数
Eg. 真实标签 [0, 0, 1] 预测概率 [0.1, 0.8, 0.9]; 每个概率是相互独立的,没有使用softmax所以和不为1
【Mosaic图像增强】
一种将4张训练图片混合成一张的新数据增强方法,可以丰富图像的上下文信息。
优点:1)增加数据多样性;2)增加目标个数;3)大大减少了对大mini-batch处理size的需求。BN时要求batch-size要尽可能大,加入Mosaic后,输入一张四张图像拼接的图像≈并行输入四张(batch Sze=4)原始图像
【SPP模块】
实现了不同尺度的特征融合,注意与SPPnet中的SPP结构不同
具体结构为:
输出为:1616(512*4)
图中显示在第一个预测特征图之前加入了SPP,第二/三个预测特征图之前也可以加SPP,效果都差不多
【CIOU Loss】
Yolov3选用差值平方,Yolov3 SPP 选用CIOU Loss,考虑到了重叠面积、中心点距离、长宽比
Focal loss(map下降2%?黑人问号脸?)
主要是为了解决one-stage目标检测中正负样本比例失衡class imbalance的问题:一张图像中能够匹配到目标的候选框(正样本)个数一般只有十几个或几十个,而没匹配到的候选框(负样本)大概有10000-100000个。其中大部分为简单易分的负样本(对训练网络起不到什么作用,但数量太多会淹没掉少量但有助于训练的样本)。该损失函数降低了大量简单负样本在训练中所占的权重
类似的思想有困难样本挖掘 hard negative mining: 只选取损失较大的负样本训练网络
then
引入α平衡正负样本权重;
a∈[0,1]for class 1 and 1-0 for class -1.取0.75 效果最好
then
降低简单样本权重, focus on hard negatives
then
又加了一个超参数平衡,当γ = 2 α = 0.25时,效果最好