yolov1
1.7*7个grid cell,每个网格预测2个bounding box,xywh,而且这个预测的两个值是在同一个特征向量里面,cxywhcxywhccccccccccccccc;
2.中心点落在哪个anchor就由哪个anchor去预测
yolov2:13*13
改进的地方:
1.更换backbone
1.使用了Batchnormalization,加速网络收敛,改善梯度,起到正则化的作用
2.在更大的图像分辨率数据上训练
3.引进了anchor机制,给了每个grid cell预测5种长宽大小尺度不同的anchor,奇数个网格,偶数个万一点落在中间不好分配
4.细粒度特征,底层的细粒度信息和高层的下采样信息拼接,粗粒度特征可能包括颜色、纹理、形状
5.多尺度训练,不同尺度大小的输入,貌似是yolov2里面有全局平均池化,所以尺度不同也没关系
6.YOLOv2引入一种称为passthrough层的方法在特征图中保留一些细节信息。具体来说,就是在最后一个pooling之前,特征图的大小是26*26*512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。
(pw,ph)代表对应Anchor模板的宽度和高度
yolov3的结构:
1.backnone改变为了darknet-53
2.为了加强算法对小目标检测的精确度,YOLOv3中采用类似FPN的upsample和融合做法(最后融合了3个scale,其他两个scale的大小分别是26×26和52×52),在多个scale的feature map上做检测
3.13*13每个小格子就比较大,因此预设边界框就大,就预测大目标,或者说浅层预测出来的更好的保留了细节信息这对于小目标检测是有利的,因此52*52预测小目标。
损失函数:分类用的多类别交叉熵,置信度用的二分类交叉熵。只有正样本才参与class,xywh的loss计算,负样本只参与置信度loss。
focal loss:
yolov4:
1.预测值的改变
2.在YOLOv3
中针对每一个GT都只分配了一个Anchor。但在YOLOv4
包括之前讲过的YOLOv3 SPP
以及YOLOv5
中一个GT可以同时分配给多个Anchor,它们是直接使用Anchor模板与GT Boxes进行粗略匹配,然后在定位到对应cell的对应Anchor
3.Optimizer Anchors,yolov4中作者优化了anchor,以对应512*512;
4.在YOLOv3
中定位损失采用的是MSE损失,但在YOLOv4
中作者采用的是CIoU
损失。之前在YOLO系列网络详解P4中很详细的讲解过IoU Loss
,DIoU Loss
以及CIoU Loss
,这里不在赘述
5.CSPDarknet53网络结构,减少网络的计算量以及对显存的占用,同时保证网络的能力不变或者略微提升,
- 工作原理:CSP将输入特征图一分为二,一部分直接进入下一层,另一部分则经过一系列卷积层后再与前者相加。这样做的目的是使得深层网络能够同时利用未经过多变换的原始特征以及经过多层抽象后的高级特征,避免过度依赖深层的复杂变换导致信息丢失。
yolov5:
1.两者的计算结果是一模一样的,但SPPF
比SPP
计算速度快了不止两倍
2.
3.Mosaic,将四张图片拼成一张图片,讲过很多次了,
Copy paste,将部分目标随机的粘贴到图片中,前提是数据要有segments
数据才行
Random affine(Rotation, Scale, Translation and Shear),随机进行仿射变换,但根据配置文件里的超参数发现只使用了Scale
和Translation
即缩放和平移。
MixUp,就是将两张图片按照一定的透明度融合在一起,具体有没有用不太清楚,毕竟没有论文,也没有消融实验。代码中只有较大的模型才使用到了MixUp
,而且每次只有10%的概率会使用到。
Augment HSV(Hue, Saturation, Value),随机调整色度,饱和度以及明度。
Random horizontal flip,随机水平翻转
4.训练策略
Fast rcnn:
这里对小目标检测效果不好,因为整个网络是在高层 featuremap上识别的,高层的featuremap对底层的细节信息保留的不好,而小目标恰恰就是这些细节信息。