0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个简单且高效的目标检测算法,该算法降低了训练门槛

新机器视觉 来源:知乎 作者:David 2020-09-24 12:36 次阅读

摘要:

随着深度学习的发展,目前已经出现了很多算法(或者训练技巧,tricks)来提升神经网络的准确率。在实际测试中评价一个算法的好坏优劣主要看两点,一是能否在大规模的数据集中起作用(work),二是是否有理论依据。一些算法仅能在某些特定的模型上或者某类特定的问题上运行,亦或是适用于一些小规模的数据集。然而,还有一些算法,例如batch normalization(BN)或者残差连接(residual-connections)已经被用在了不同的模型,任务以及不同的数据集中,已经被充分的证明了这些算法的普适性,是一个general的算法。我们假设这样的general(or universal)的算法包括Weighted-residual-connection(WRC),cross-stage-partial-connections(SCP),cross mini-batch Normalization(CmBN),self-adversarial-training(SAT)以及mish-activation。此外,我们还加了一些其余的tricks,包括Mosaic data augmentation,DropBlock regularization,CIoU loss,设计了一个YOLO-V4,并且在MS coco数据集中取得了新的state-of-the-art的结果:在Tesla V100显卡能达到43.5% AP(65.7% AP)的精度,且达到~65FPS的速度。目前代码已经开源:

Introduction

Yolo-V4的主要目的在于设计一个能够应用于实际工作环境中的快速目标检测系统,且能够被并行优化,并没有很刻意的去追求理论上的低计算量(BFLOP)。同时,Yolo-V4的作者希望算法能够很轻易的被训练,也就是说拥有一块常规了GTX-2080ti或者Titan-XP GPU就能够训练Yolo-V4, 同时能够得到一个较好的结果(Yolo-V4 结果如上图)。整个introduction可以总结为以下几点:

研究设计了一个简单且高效的目标检测算法,该算法降低了训练门槛,使得普通人员在拥有一块1080TI或者2080TI的情况下就能够训练一个super fast and accurate 的目标检测器

在训练过程中,验证了最新的Bag-of-Freebies和Bag-of-Specials对Yolo-V4的影响

简化以及优化了一些最新提出的算法,包括(CBN,PAN,SAM),从而使Yolo-V4能够在一块GPU上就可以训练起来。

Related work

首先解释一下相关的名词:

Input:算法的输入,包括整个图像,一个patch,或者是image pyramid

Backbone:可以理解为是提取图像特征的部分,由于图像中的浅层特征(low-level)是比较类似的,例如提取边缘,颜色,纹理这些。因此这部分可以很好的借鉴一些设计好并且已经训练好的网络,例如(VGG16,19,ResNet-50, ResNeXt-101, Darknet53), 同时还有一些轻量级的backbone(MobilenetV1,2,3 ShuffleNet1,2)。

Neck:这部分我的理解是特征增强模块,前面的backbone已经提取到了一些相关的浅层特征,由这部分对backbone提取到的浅层特征(low-level feature)进行加工,增强,从而使得模型学到的特征是我想要的特征。这部分典型的有(SPP,ASPP in deeplabV3+,RFB,SAM),还有一些(FPN, PAN, NAS-FPN, BiFPN, ASFF, SFAM)。

Head:检测头。这部分就到了算法最关键的部分,就是来输出你想要的结果,例如想得到一个heatmap,(如在centernet中),那就增加一些反卷积层来一层一层反卷积回去。如果想直接得到bbox,那就可以接conv来输出结果,例如Yolo,ssd这些。亦或是想输出多任务(mask-RCNN)那就输出三个head:classification,regression,segmentation(就是mask那部分)。

因此,一个检测算法可以理解为:

Object Detection = Backbone + Neck + Head

2.1. Bag of freebies

什么叫Bag of freebies?字面上的意思就是免费赠品。在目标检测中是指:用一些比较有用的训练技巧来训练模型,从而使得模型取得更好的准确率但是不增加模型的复杂度,也就不增加推理(inference)是的计算量(cost)。在目标检测中,提到bag of freebies,首先会想到的 就是Data augmentation。

2.1.1 : Data augmentation 的目的在于增加训练样本的多样性,使得检测模型具有高的鲁棒性。常见的不能再常见的数据增强方式包括两个方面:几何增强以及色彩增强。

几何增强包括:随机翻转(水平翻转较多,垂直翻转较少),随机裁剪(crop),拉伸,以及旋转。

色彩增强包括:对比度增强,亮度增强,以及较为关键的HSV空间增强。

上述说的色彩以及几何增强都是pixel-wise 的调整。此外还有一些数据增强方法被用来解决目标遮挡及不足的问题。

在图像中随机裁剪矩形区域,并用0来填充(random erase和CutOut算法)

随机裁剪多个矩形区域(hide-and-seek, grid mask)

上述算法是在图像中裁剪矩形区域并填充0,那么算法在heatmap上裁剪并填充的叫做(DropOut,DropConnect, DropBlock)

此外还有一个重要的data augmentation算法叫做MIX-UP。Mix-up在分类任务中,将两个图像按照不同的比例相加,例如A*0.1+B*0.9=C,那么C的label就是[0.1A, 0.9B]。在目标检测中的做法就是将一些框相加,这些label中就多了一些不同置信度的框。

还有一类是style-transfer GAN做数据增强,例如在做街景分割和目标检测的时候,将GTA-5的数据做一个style-transfer,扩充一些数据集。不过更多的是用在了Domain Adaptation上。

2.1.2 : 不同于上述说的data augmentation,第二类方法是要解决数据不均衡问题(imbalance problems in object detection),数据不均衡问题在目标检测中是一个特别难的问题,Yolo-V4中没有细说,但是最近的一篇PAMI综述论文,用了30几页详细介绍了这个问题,论文可以见我专栏的第一篇文章。下面我简单说一下:数据不均衡包括了两种一种是训练的背景和我要识别的物体之间的不均衡,例如在two-stage的方法中,首先在RPN阶段会生成了很多个ROI,这里面有太多的背景了,有用的框会很少。还有一类不均衡是类别之间的不均衡,例如在COCO数据集中一些常见的物体例如人就会很多,不常见的就会比较少,这样类别之间还有不平衡,这就涉及到另外一个问题了,叫做长尾分布(long-tailed Data),也是比较棘手的问题。这里面比较经典的算法就是在two-stage 中使用hard negative example mining or online head example mining (OHEM)。还有一个比较经典的算法就是Focal-loss,来处理数据不均衡的问题。还有一个trick就是关于One-hot编码之后label没有关联,针对这个问题进行label-smooth。

2.1.3: 第三个bag of freebies就是在loss function上进行改动,之前常用的计算bbox的loss 使用MSE,现在改为了计算IOU之间的loss,还有一个叫做GIoU loss。这里面有一个比较经典的算法就是在Mask-RCNN上改动的MASK SCoring RCNN中,这部分的逻辑是这样的:在选择ROI时,如果按照每个ROI的score来排序筛选ROI,会出现一个问题就是,置信度高的ROI并不一定BBOX的位置就准,后来作者尝试了使用IoU来筛选ROI,发现效果要好。

2.2. Bag of specials

什么叫做bag of specials:就是指一些plugin modules(例如特征增强模型,或者一些后处理),这部分增加的计算量(cost)很少,但是能有效地增加物体检测的准确率,我们将这部分称之为Bag of specials。这部分插件模块能够增强网络模型的一些属性,例如增大感受域(ASFF,ASPP,RFB这些模块),引入注意力机制(有两种一种是spatial attention,另外一种是channel attention),增加特征集成能力(FPN,ASFF,BiFPN)。后处理算法是指用一些算法来筛选模型预测出来的结果

2.2.1 增大感受域

SPP:He提出了一个比较经典的算法,当时解决了一个问题就是我在测试的时候,输入尺寸可以与训练的时候 不一样。但是当网络中有FC的时候,尺寸必须是固定的,这时候,SPP作用就体现出来了,按照比例划分pooling,最后输出的结果就是一致的了。

ASPP:我记得是用在了DeepLabV3系列中,与SPP不同前面加了Atrous or dilated ,在Pooling中加入了dilated ratio。

RFB:就是说是在同一个featuremap下引入不同dilated ration的空洞卷积,这样提取到了不同感受野的特征,最后进行融合。

2.2.2 引入注意力机制

Channel Attention:最经典的就是SEnet(Squeeze-and-Excitation),这个算法一开始获得了imagenet分类任务中的冠军,他的原理是这样的,在featuremap层中同时引入一个1X1XC的weights,这样对每个channel上的特征加入不同的权重,这样提高特征学习能力,注意:SE module是在channel 这个维度上进行加入权重。后来又有一篇CVPR用SE module做了分割任务,从侧面证明了SE module很好用。

Spatial Attention Module:从字面意思上来理解,就是在HW维度上加入attention,上述是在Channel维度上加入Attention。

Channel+Spatial:一个featuremap的维度:NCHW,N:batch size,C:channel,H:height,W:weight。Channel attention 和spatial attention 是从两个不同的方法对feature进行增强,接着又有一篇paper对二者进行融合,channel attention+spatial attention

2.2.3 特征融合or特征集成

Skip connection:用在encoder-decoder中比较多,例如最经典的Unet,融入了low-level和high-level的信息,在目标检测中主要用在了类似于pose这一类的检测任务中,例如DLA,Hourglass,以及最近的CenterNet

hyper-column:最经典的就要属于InceptionV1-4结构了,使用不同的kernel-size的convolution来集成特征。

FPN,ASFF,BiFPN:在我看来都属于一类,属于将不同stage下不同scale的特征进行融合,只是连接融合的方式不一样,FPN是最经典的,efficientdet中的BiFPN连接的最密集。

2.2.4 激活函数

一个好的激活函数能够使得梯度传播的更高效,并且不会占用额外的计算资源。常见的激活函数有以下:(由于我对激活函数没有研究过,所以这边就不画蛇添足了,直接把论文中的摘录下来)

ReLU

LRelu, PReLU, SELU,ReLu6, Swish, hard-Swish Mish

2.2.5 后处理

经典的后处理包含了NMS,soft NMS,DIoU NMS

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4732

    浏览量

    100367
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4661

    浏览量

    128523
  • 算法
    +关注

    关注

    23

    文章

    4585

    浏览量

    92428

原文标题:YOLO-V4解读:速度与精度的完美结合[已开源]

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    aic3254有没有降低环境噪声的算法

    请问aic3254有没有降低环境噪声的算法?或者有哪些算法的组合可以降低环境噪音?
    发表于 10-24 08:25

    旗晟机器人环境检测算法有哪些?

    硬件支撑,更离不开强大的算法库作为软件核心,二者相辅相成,缺不可。今天就来了解旗晟机器人环境检测算法。 1、设施异常监测 通过集成高精度传感器与智能图像识别技术。它不仅能检测A字梯是
    的头像 发表于 07-19 17:54 479次阅读
    旗晟机器人环境<b class='flag-5'>检测算法</b>有哪些?

    慧视小目标识别算法 解决目标检测中的老大难问题

    随着深度学习和人工智能技术的兴起与技术成熟,大批如FasterR-CNN、RetinaNet、YOLO等可以在工业界使用的目标检测算法已逐步成熟并进入实际应用,大多数场景下的目标
    的头像 发表于 07-17 08:29 336次阅读
    慧视小<b class='flag-5'>目标</b>识别<b class='flag-5'>算法</b>   解决<b class='flag-5'>目标</b><b class='flag-5'>检测</b>中的老大难问题

    opencv图像识别有什么算法

    图像识别算法: 边缘检测 :边缘检测是图像识别中的基本步骤之,用于识别图像中的边缘。常见的边缘检测算法有Canny边缘
    的头像 发表于 07-16 10:40 669次阅读

    神经网络如何用无监督算法训练

    神经网络作为深度学习的重要组成部分,其训练方式多样,其中无监督学习是种重要的训练策略。无监督学习旨在从未标记的数据中发现数据内在的结构、模式或规律,从而提取有用的特征表示。这种训练
    的头像 发表于 07-09 18:06 653次阅读

    人脸检测模型有哪些

    : Viola-Jones 算法 Viola-Jones 算法种基于 Haar 特征和 AdaBoost 算法的人脸检测方法。它通过
    的头像 发表于 07-03 17:05 849次阅读

    口罩佩戴检测算法

    口罩佩戴检测算法基于YOLOv5在图像识别检测领域的优异性能,本文研究基于基于YOLOv5的口罩佩自动戴检测方法。首先从网络和真实生活中中寻找并采集不同场景人群口罩佩戴的图片约500张并自建数据集
    的头像 发表于 07-01 20:20 257次阅读
    口罩佩戴<b class='flag-5'>检测算法</b>

    人员跌倒识别检测算法

    人员跌倒识别检测算法是基于视频的检测方法,通过对目标人体监测,当目标人体出现突然倒地行为时,自动监测并触发报警。人员跌倒识别检测算法基于计算
    的头像 发表于 06-30 11:47 384次阅读
    人员跌倒识别<b class='flag-5'>检测算法</b>

    安全帽佩戴检测算法

    安全帽佩戴监控是铁路工程施工人员安全管理中的重点和难点,它对检测算法的准确 率与检测速度都有较高的要求。本文提出种基于神经网络架构搜索的安全帽佩戴检测算法 NAS-YOLO。该神经网
    的头像 发表于 06-26 22:22 333次阅读
    安全帽佩戴<b class='flag-5'>检测算法</b>

    K折交叉验证算法训练

    K折交叉验证算法训练
    的头像 发表于 05-15 09:26 469次阅读

    OpenVINO™ C# API部署YOLOv9目标检测和实例分割模型

    YOLOv9模型是YOLO系列实时目标检测算法中的最新版本,代表着该系列在准确性、速度和效率方面的又次重大飞跃。
    的头像 发表于 04-03 17:35 689次阅读
    OpenVINO™ C# API部署YOLOv9<b class='flag-5'>目标</b><b class='flag-5'>检测</b>和实例分割模型

    柔性印刷线路板缺陷检测方法指南

    现有的FPC缺陷检测算法多衍生于PCB检测算法,但受本身独特性限制,FPC板缺陷要求更高,检测样板尺寸更大,样板成像易变形,使得针对PCB板的缺陷检测算法不能直接套用FPC板的
    发表于 11-30 15:29 446次阅读

    种可靠的峰值和起始点检测算法

    电子发烧友网站提供《种可靠的峰值和起始点检测算法.pdf》资料免费下载
    发表于 11-22 10:27 0次下载
    <b class='flag-5'>一</b>种可靠的峰值和起始点<b class='flag-5'>检测算法</b>

    目标检测算法YOLO的发展史和原理

    大家或许知道,首字母缩写YOLO在英文语境下较为流行的含义,即You Only Live Once,你只能活次。我们今天要介绍的YOLO却有着与前者不样的含义。在算法的世界中,YOLO寓意You Only Look Once
    的头像 发表于 11-18 10:33 5478次阅读
    <b class='flag-5'>目标</b><b class='flag-5'>检测算法</b>YOLO的发展史和原理

    FPGA图像处理之Canny边缘检测

    在边缘检测算法里面Sobel是比较简单算法,但是其检测出来的边缘往往是比较粗的,效果不是很
    的头像 发表于 11-17 09:10 1413次阅读
    FPGA图像处理之Canny边缘<b class='flag-5'>检测</b>