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

    文章

    4572

    浏览量

    98720
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4415

    浏览量

    126652
  • 算法
    +关注

    关注

    23

    文章

    4454

    浏览量

    90747

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    基于NXP微控制器i.MX RT1170的多人体实时检测算法和系统

    基于NXP微控制器i.MX RT1170的多人体实时检测算法和系统
    的头像 发表于 10-26 16:27 699次阅读
    基于NXP微控制器i.MX RT1170的多人体实时<b class='flag-5'>检测算法</b>和系统

    基于C8051F310的高灵敏车辆检测算法

    电子发烧友网站提供《基于C8051F310的高灵敏车辆检测算法.pdf》资料免费下载
    发表于 10-18 11:00 0次下载
    基于C8051F310的高灵敏车辆<b class='flag-5'>检测算法</b>

    基于Delaunay三角剖分的空间离群点检测算法研究

    电子发烧友网站提供《基于Delaunay三角剖分的空间离群点检测算法研究.pdf》资料免费下载
    发表于 10-07 11:15 0次下载

    智慧矿山ai算法系列解析 堵料检测算法功能优势

    智慧矿山AI算法系列中的堵料检测算法的功能优势,了解其重要性和带来的价值
    的头像 发表于 09-28 18:48 356次阅读
    智慧矿山ai<b class='flag-5'>算法</b>系列解析 堵料<b class='flag-5'>检测算法</b>功能优势

    python卷积神经网络cnn的训练算法

    。CNN采用卷积层、池化层、全连接层等组成,可以自动学习输入数据的特征,对于图像分类、目标检测等任务具有出色的性能。在本文中,我们将介绍CNN训练的基本流程和相关算法。 一、CNN
    的头像 发表于 08-21 16:41 1012次阅读

    基于Transformer的目标检测算法

    掌握基于Transformer的目标检测算法的思路和创新点,一些Transformer论文涉及的新概念比较多,话术没有那么通俗易懂,读完论文仍然不理解算法的细节部分。
    发表于 08-16 10:51 426次阅读
    基于Transformer的<b class='flag-5'>目标</b><b class='flag-5'>检测算法</b>

    基于强化学习的目标检测算法案例

    摘要:基于强化学习的目标检测算法检测过程中通常采用预定义搜索行为,其产生的候选区域形状和尺寸变化单一,导致目标检测精确度较低。为此,在基于
    发表于 07-19 14:35 0次下载

    无Anchor的目标检测算法边框回归策略

    导读 本文主要讲述:1.无Anchor的目标检测算法:YOLOv1,CenterNet,CornerNet的边框回归策略;2.有Anchor的目标检测算法:SSD,YOLOv2,Fas
    的头像 发表于 07-17 11:17 599次阅读
    无Anchor的<b class='flag-5'>目标</b><b class='flag-5'>检测算法</b>边框回归策略

    如何学习基于Tansformer的目标检测算法

    视觉感知算法的核心在于精准实时地感知周围环境,以便下游更好地进行决策规划,而 目标检测任务 就是视觉感知的 基础 。不仅在自动驾驶领域,在机器人导航、工业检测、视频监控等领域,
    的头像 发表于 06-25 10:37 395次阅读
    如何学习基于Tansformer的<b class='flag-5'>目标</b><b class='flag-5'>检测算法</b>

    基于 FPGA 的目标检测网络加速电路设计

    CNN 更容易满足实际应用场景中 的低功耗、实时性要求。而且目标检测算法发展迅速,针对 CNN 的硬件加速研究也大有可 为。所以本项目计划使用 PYNQ-Z2 开发板设计硬件电路
    发表于 06-20 19:45

    快速入门自动驾驶中目标检测算法

    现在目标检测算法总结 1. 目标检测算法在机动车和行人检测识别上应用较多,在非机动车上应用较少 2. 对于
    发表于 06-06 09:40 0次下载
    快速入门自动驾驶中<b class='flag-5'>目标</b><b class='flag-5'>检测算法</b>

    人工智能中SSD目标检测算法

    SSD算法是在YOLO的基础上改进的单阶段方法,他给予一个前向传播的神经网络,最主要的优点是能在兼顾速度的同时确保高精度,而且由于采用了END-TO-END的训练方法,及时处理的分辨率比较低的照片,分类结果也很准确。
    的头像 发表于 05-16 13:43 713次阅读
    人工智能中SSD<b class='flag-5'>目标</b><b class='flag-5'>检测算法</b>

    机器视觉常用经典的直线检测算法汇总整理

    Hough变换是一个比较有名的计算机视觉处理算法该算法可以用来做很多的任务,常用的任务包括直线检测、圆检测、椭圆检测等,下面我们将对
    发表于 05-12 11:40 1932次阅读
    机器视觉常用经典的直线<b class='flag-5'>检测算法</b>汇总整理