• 目标检测,SOTA>>>在打开yolov4文档前你必须要知道的几个tricks


    一. bags of specials

     

    1. swish激活函数

    f(x) = x • sigmoid(x)

    2. Mish 激活函数

    3. spatial pyramid pooling(SPP)

    citehttps://arxiv.org/abs/1406.4729

    传统的卷积神经网络,对输入图像的大小有严格要求,例如LeNet5只能为224x224,这要求我们在使用网络前需要对图像进行一些预处理操作.为了解决这个麻烦,何恺明发明了SPP这个局部结构,把SPP放在卷积层和全连接层之间,从而很好地解决了这个问题.

    下面是一个例子:

    图像经过卷积层,来到全连接层前面, 在input image size不确定的情况下(可能224x224,可能256x448),它经过层层卷积处理后的输出,即一组feature map的数量是固定的,只是feature map size 不确定.然而接下来的全连接层的输入量是固定的(4096), 我们对这些feature maps进行以下处理再输入到全连接层里:

    假设有256张feature map

    对256张feature map分别进行如图所示的三种max-pooling,控制三种max-pooling的输出严格为4x4 size, 2x2 size, 1x1 size, 将这些输出cancatenate到一起作为全连接层的输入.如上操作即为SPP处理.

    4. 特征融合Feature Pyramid Network (FPN)

    citehttps://arxiv.org/abs/1612.03144

    5. Squeeze-and-Excitation(SE)

    citehttps://arxiv.org/abs/1709.01507 

    一种channel-wise的注意力机制

    下图从U的输出到X的输出这段即为SE

    直接说,

    Squeeze:  先对U做一个global average pooling

    Excitation: 输出的1x1xC数据做两级全连接,最后sigmoid限制到[0,1]的范围.

    Scale:        然后把这个值对应着乘到U的C个通道上,作为下一级的输入.

    两个例子:

     

    6. Spatial Attention Module

    一种point-wise的注意力机制

    对feature maps, 分别从通道维度进行求平均值和求最大, 合并得到一个通道数为2的卷积层,然后通过一个卷积,得到一个通道数为1的spatial attention.

    直观图示:

    准确代码实现:

    #cite https://zhuanlan.zhihu.com/p/102035273
    
    class SpatialAttention(nn.Module):
        def __init__(self, kernel_size=7):
            super(SpatialAttention, self).__init__()
            assert kernel_size in (3,7), "kernel size must be 3 or 7"
            padding = 3 if kernel_size == 7 else 1
    
            self.conv = nn.Conv2d(2,1,kernel_size, padding=padding, bias=False)
            self.sigmoid = nn.Sigmoid()
    
        def forward(self, x):
            avgout = torch.mean(x, dim=1, keepdim=True)
            maxout, _ = torch.max(x, dim=1, keepdim=True)
            x = torch.cat([avgout, maxout], dim=1)
            x = self.conv(x)
            return self.sigmoid(x)

    yolov4中作了微调,改为了

      

     

     

    9. PAN

    yolov4中用到的微调的PAN

    二. bags of freebies

    1. dropblock正则化

     DropBlock是dropout的一种结构化形式. 在DropBlock中,特征在一个block中, 例如一个feature map中的连续区域会一起被drop掉.当DropBlock抛弃掉相关区域的特征时,为了拟合数据网络就不得不往别处看以寻找新的证据.

    2. 跨批量归一化Cross mini-batch Normalization

    3.CIoU loss

    4. class label smoothing 

        one-hot标签 所存在的disadvantage: 1) 无法保证模型的泛化能力,容易造成过拟合 2)全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知这种情况很难adapt,会造成模型过于相信预测的类别.

        我们将q(k)改为q(k)' , 即下图所示机制,从而使模型less confident.

    从而,交叉熵为:

  • 相关阅读:
    PAT 甲级 1015 Reversible Primes (20 分) (进制转换和素数判断(错因为忘了=))
    『Spring.NET+NHibernate+泛型』框架搭建之DAO(三)★
    (C#)使用队列(Queue)解决简单的并发问题
    VB.NET多线程入门
    Machine Learning With Spark学习笔记(在10万电影数据上训练、使用推荐模型)
    JAVA 并发编程-多个线程之间共享数据(六)
    POJ 3087 Shuffle'm Up(模拟)
    cocos2dx --- 富文本的使用 RichText
    <LeetCode OJ> 217./219. Contains Duplicate (I / II)
    java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
  • 原文地址:https://www.cnblogs.com/dynmi/p/12783280.html
Copyright © 2020-2023  润新知