图像目标检测算法-YOLOV5的学习

一、yolov5的网络结构,官方给出的不同版本的yolov5模型区别在哪,这些区别会带来那些改变。

yolov5 5.0 的结构,输入会经过Focus结构,上图:

backbone 主要包含:Focus,C3,conv等结构,现在分别讲解:

Focus 网络:Focus 网络是对输入图片进行切片操作,假设输入图片的大小为640×640×3,间隔一个元素提取,每个通道整合输出320×320×4的数据,四个通道以此进行此操作。将每个通道相同位置的元素提取整合concat在一起。这样做的目的就是输入数据大小减小一半,但没有特征的损失,

Conv 结构包括:2d卷积、BN层、SILU层。

BN层:BN层的提出,主要是为了解决大部分的数据落入非线性饱和区,导致模型训练过程梯度消失,一方面增加模型训练时间,还有很大的可能模型到最后无法收敛。通过计算模型批次训练数据的均值和方差,对训练数据进行均值为0,方差为1的归一化处理。如果激活函数采用的是sigmoid 函数,可让大部分的训练数据落入线性区域内,加快模型的训练收敛速度,同时考虑到归一化处理后,对数据分布的变化比较大,引入缩放平移参数对数据进行仿射变换,尽可能保持数据的原始分布,又不至于让数据完全落入饱和区域内。

BN层的计算在training和testing阶段是不一样的

trainning 阶段

testing 阶段,采用全局统计量,滑动平均的方法计算得出均值和方差。

running_mean = momentum * running_mean + (1 - momentum) * x_mean
running_var = momentum * running_var + (1 - momentum) * x_var

SILU层,激活函数层,也被称为 Swish 激活函数。他的定义为:

f(x)=x*sigmoid(x),它结合了非线性和线性函数的两种特征。他能够解决梯度消失的问题,在x小于0的时候保留了负梯度的特点。

C3结构

C3 结构包含了卷积结构,bottleneck 结构,从而增加网络深度和感受野,更好的提取数据特征。

class C3(nn.Module):
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
        """
        :param c1: 整个 C3 的输入channel
        :param c2: 整个 C3 的输出channel
        :param n: 有n个Bottleneck
        :param shortcut: bool Bottleneck中是否有shortcut,默认True
        :param g: C3中的3x3卷积类型  =1普通卷积  >1深度可分离卷积
        :param e: expansion ratio
        """
        super(C3, self).__init__()
        c_ = int(c2 * e)
        self.cv_1 = Conv(c1, c_, 1, 1)
        self.cv_2 = Conv(c1, c_, 1, 1)
        self.m = nn.Sequential(*[Bottleneck(c_, c_, e=1, shortcut=True, g=1) for _ in range(n)])
        self.cv_3 = Conv(2*c_, c2, 1, 1)

    def forward(self, x):
        return self.cv_3(torch.cat((self.m(self.cv_1(x)), self.cv_2(x)), dim=1))

深度可分离卷积包含两部分,由Depthwise ConvolutionPointwise Convolution两部分组成。

继续盗图讲解:

从图上分析,相比与普通卷积神经网络,这样做的好处是减少计算量,加快模型训练推理速度。

Neck 网络采用的是SPP、SPPF和FPN

SPP结构 将特征图分别经过不同大小的卷积核操作,然后再进行concat操作,实现在不同尺度下的特征融合。

FPN网络是特征金子塔网络,通过在不同的特征尺度上,进行模型的推理和预测,能够兼顾大目标、中目标、小目标。

二、yolov5性能提升的一些技巧。

1.数据增强

马赛克:四张图像随机裁剪,随机缩放,随机排布拼接成一张图片。具体详见博客:

『数据增强』yolov5 数据增强 与 红外数据增强_yolov5数据增强-CSDN博客

2.loss函数的设计

损失函数由三部分组成,分类损失函数+置信度损失函数+定位损失函数

定位损失用的是CIOU loss
置信度和分类损失用的是BCE loss

损失函数基本内容参考损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU超详细精讲及Pytorch实现-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值