zoukankan      html  css  js  c++  java
  • YOLOV4各个创新功能模块技术分析(一)

    YOLOV4各个创新功能模块技术分析(一)

    简 介

    yolov4论文:YOLOv4: Optimal Speed and Accuracy of Object Detection
    arxiv:https://arxiv.org/abs/2004.10934
    github源码https://github.com/AlexeyAB/darknet

    论文摘要

    有大量的特征被认为可以提高卷积神经网络(CNN)的精度。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。某些功能只在某些模型上运行,某些问题只在某些模型上运行,或只在小规模数据集上运行;而某些功能(如批处理规范化和剩余连接)适用于大多数模型、任务和数据集。假设这些通用特征包括加权剩余连接(WRC)、跨阶段部分连接(CSP)、跨小批量规范化(CmBN)、自对抗训练(SAT)和Mish激活。使用了新功能:WRC、CSP、CmBN、SAT、误激活、马赛克数据增强、CmBN、DropBlock正则化和CIoU丢失,并将其中一些功能结合起来,以达到最新的结果:43.5%AP(65.7%AP50)的MS COCO数据集,在Tesla V100上以约65 FPS的实时速度。

    YOLOV4的发布,可以想象到大家的激动,但是论文其实是一个结合了大量前人研究技术,加以组合并进行适当创新的高水平论文,实现了速度和精度的完美平衡。很多yolov4的分析文章都会说其中应用了哪些技术?本文的目的希望通过YOLOV4提到的各种新技术进行分析,明白YOLOV4后面的功臣算法。

        文中将前人的工作主要分为Bag of freebies和Bag of specials,前者是指不会显著影响模型测试速度和模型复杂度的技巧,主要就是数据增强操作,对应的Bag of specials就是会稍微增加模型复杂度和速度的技巧,如果不大幅增加复杂度且精度有明显提升,那也是不错的技巧。本文按照论文讲的顺序进行分析。由于每篇论文其实内容非常多,主要是分析思想和一些核心细节。

        本文技术:random erasing、cutout、hide-and-seek、grid mask、Adversarial Erasing、mixup、cutmix、mosaic、Stylized-ImageNet、label smooth、dropout和dropblock
    一.数据增强相关-Random erasing data augmentation

    论文名称:Random erasing data augmentation
    论文地址:https://arxiv.org/pdf/1708.04896v2.pdf
    github: https://github.com/zhunzhong07/Random-Erasing 

    论文摘要

    本文介绍了一种用于卷积神经网络(CNN)训练的新的数据增强方法&随机删除法。在训练中,随机擦除随机选择图像中的矩形区域,并使用随机值擦除其像素。在这个过程中,生成了不同遮挡程度的训练图像,这降低了过度遮挡的风险,使模型对遮挡具有鲁棒性。随机擦除无需参数学习,易于实现,可与大多数基于CNN的识别模型集成。尽管很简单,但随机删除对常见的数据增强技术(如随机裁剪和浮动)来说是一种补充,与强大的基线相比,图像分类、对象检测和人员识别都有一致的改进。               

    随机擦除增强,非常容易理解。作者提出的目的主要是模拟遮挡,从而提高模型泛化能力,这种操作其实非常make sense,因为把物体遮挡一部分后依然能够分类正确,那么肯定会迫使网络利用局部未遮挡的数据进行识别,加大了训练难度,一定程度会提高泛化能力。其也可以被视为add noise的一种,并且与随机裁剪、随机水平翻转具有一定的互补性,综合应用他们,可以取得更好的模型表现,尤其是对噪声和遮挡具有更好的鲁棒性。具体操作就是:随机选择一个区域,然后采用随机值进行覆盖,模拟遮挡场景

         在细节上,可以通过参数控制擦除的面积比例和宽高比,如果随机到指定数目还无法满足设置条件,则强制返回。

        一些可视化效果如下:

     

     对于目标检测,作者还实现了3种做法,如下图所示(然而打开开源代码,发现只实现了分类的随机擦除而已,尴尬)。

     

         当然随机擦除可以和其他数据增强联合使用,如下所示。

     

         torchvision已经实现了:

    https://pytorch.org/docs/master/_modules/torchvision/transforms/transforms.html#RandomErasing 

        注意:torchvision的实现仅仅针对分类而言,如果想用于检测,还需要自己改造。调用如下所示:

    torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)

    二.数据增强相关-Cutout

    论文名称:Improved Regularization of Convolutional Neural Networks with Cutout
    论文地址:https://arxiv.org/abs/1708.04552v2
    github: https://github.com/uoguelph-mlrg/Cutout 

    论文摘要

    卷积神经网络能够学习强大的表示空间,这是处理复杂学习任务所必需的。然而,由于捕捉这些表示所需的模型容量,往往容易过度拟合,因此需要适当的正则化才能很好地推广。本文证明了在训练过程中随机屏蔽输入平方区域的简单正则化技术(称之为截断)可以提高卷积神经网络的鲁棒性和整体性能。这种方法不仅非常容易实现,而且还证明它可以与现有的数据增强形式和其他正则化方法结合使用,以进一步提高模型性能。将此方法应用于CIFAR-10、CIFAR-100和SVHN数据集上的当前最新体系结构,得到了新的最新结果,测试误差分别为2.56%、15.20%和1.30%。

        出发点和随机擦除一样,也是模拟遮挡,目的是提高泛化能力,实现上比random erasing简单,随机选择一个固定大小的正方形区域,然后采用全0填充就OK了,当然为了避免填充0值对训练的影响,应该要对数据进行中心归一化操作,norm到0。

    本文和随机擦除几乎同时发表,难分高下(不同场景下谁好难说),区别在于在cutout中,擦除矩形区域存在一定概率不完全在原图像中的。而在Random Erasing中,擦除矩形区域一定在原图像内。Cutout变相的实现了任意大小的擦除,以及保留更多重要区域

    需要注意的是作者发现cutout区域的大小比形状重要,所以cutout只要是正方形就行,非常简单。具体操作是利用固定大小的矩形对图像进行遮挡,在矩形范围内,所有的值都被设置为0,或者其他纯色值。而且擦除矩形区域存在一定概率不完全在原图像中的(文中设置为50%)

        论文中有一个细节可以看看:作者其实开发了一个早期做法,具体是:在训练的每个epoch过程中,保存每张图片对应的最大激活特征图(以resnet为例,可以是layer4层特征图),在下一个训练回合,对每张图片的最大激活图进行上采样到和原图一样大,然后使用阈值切分为二值图,盖在原图上再输入到cnn中进行训练,有点自适应的意味。但是有个小疑问:训练的时候不是有数据增强吗?下一个回合再用前一次增强后的数据有啥用?不太清楚作者的实现细节。如果是验证模式下进行到是可以。
        这种做法效果蛮好的,但是最后发现这种方法和随机选一个区域遮挡效果差别不大,而且带来了额外的计算量,得不偿失,便舍去。就变成了现在的cutout了。

        可能和任务有关吧,按照的理解,早期做法非常make sense,效果居然和cutout一样,比较奇怪。并且实际上考虑目标检测和语义分割,应该还需要具体考虑,不能照搬实现。

        学习这类论文觉得最重要的是思想,能不能推广到不同领域上面?是否可以在训练中自适应改变?是否可以结合特征图联合操作?

     

     三.数据增强相关-Hide-and-Seek

    论文名称:Hide-and-Seek: A Data Augmentation Technique for Weakly-Supervised Localization and Beyond
    论文地址:https://arxiv.org/abs/1811.02545
    github地址:https://github.com/kkanshul/Hide-and-Seek 

    论文摘要

    提出了一种通用的数据增强技术Hide-and-Seek,它是对现有数据增强技术的补充,有利于实现各种视觉识别任务。其核心思想是在训练图像中随机地隐藏补丁,以迫使网络在隐藏最具鉴别能力的内容时寻找其他相关内容。本文方法只需要修改输入图像,并且可以与任何网络一起工作来提高其性能。在测试期间,不需要隐藏任何补丁。与现有的数据增强技术相比,Hide-and-Seek的主要优势在于它能够提高弱监督环境下的目标定位精度,因此利用这一任务来激励该方法。然而,Hide-and-Seek不仅与图像定位任务相关,而且可以推广到视频等其他形式的视觉输入,以及图像分类、时间动作定位、语义分割、情感识别、年龄/性别估计、人的再识别等识别任务。在这些视觉识别问题上,进行了大量的实验来展示隐藏和搜索的优势。

        可以认为是random earsing的推广。核心思想就是去掉一些区域,使得其他区域也可以识别出物体,增加特征可判别能力。和大部分细粒度论文思想类型,如下所示:

     数据增强仅仅用于训练阶段,测试还是整图,不遮挡,如下所示。

     做法是将图片切分为sxs个网格,每个网格采用一定概率进行遮挡,可以模拟出随机擦除和cutout效果

    至于隐藏值设置为何值,作者认为比较关键,因为可能会改变训练数据的分布。如果暴力填黑,认为会出现训练和测试数据分布不一致问题,可能不好,特别是对于第一层卷积而言。作者采用了一些理论计算,最后得到采用整个数据集的均值来填充造成的影响最小(如果采用均值,那么输入网络前,数据预处理减掉均值,那其实还是接近0)。

  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/12954554.html
Copyright © 2011-2022 走看看