———————————yolov5—————————
有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本,只有模型宽度与深度的区别。
四个组成部分:
输入端:对输入图像进行缩放、归一化、数据增强等操作
backbone基准网络:分类器网络提取特征
Neck网络:进一步提升特征的表达能力
Predition/Head输出端:预测,进行回归分类
基础组件及其实现脚本
CBL
即Conv+BN+Leaky_relu。
CBM
由2个cbl组成的一种残差结构
CSP1_X
由cbl、cbm组成,x为cbm数量,即图中x个残差组件
进一步特征融合
CSP2_X
由cbl组成,x为cbl数量,即图中2*x个
Focus
将多个slice结果Concat起来,然后将其送入CBL模块中。
目的是剪裁特征图,使特征图数量减少,通道变多。
class Focus(nn.Module):
# Focus wh information into c-space
def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups
super(Focus, self).__Cblinit__()
self.conv = Conv(c1 * 4, c2, k, s, p, g, act)
# self.contract = Contract(gain=2)
def forward(self, x): # x(b,c,w,h) -> y(b,4c,w/2,h/2)
return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1))
# return self.conv(self.contract(x))
SPP
采用1×1、5×5、9×9和13×13的最大池化方式,进行多尺度特征融合
Mosaic数据增强
CutMix基于2张图像,而Mosaic基于4张图像,进行随机缩放、随机裁剪和随机排布
自适应锚框计算
Yolov5有,Yolov4没有,可设置参数noautoanchor
自适应图片缩放
只在推理阶段进行,保持图片的长宽比,减小短边填充的黑边。例如网络向下执行了5次下采样,2^5=32,则原图中32*32的区域为最后特征图的一个点,减少的黑边宽度需要是32的整数倍,余数仍然要补充黑边。
例如原图800*600,目标特征图大小416*416,可以缩放后短边两侧分别补4。
Neck网络FPN+PAN结构
即自顶向下fpn+自底向上pan的双塔结构
Yolov4和yolov5在neck层的区别
GIOU_Loss DIOU_nms。
YOLOv5算法详解
https://blog.csdn.net/WZZ18191171661/article/details/113789486
github代码:
https://github.com/ultralytics/yolov5
个人评价:融合了很多算法的思路,作者没有和yolov4比较,这一点一直为人诟病。但实际使用还是不错的,在小麦检测比赛中乱杀。