两阶段实时检测网络ThunderNet

ThunderNet是旷视和国防科技大学合作提出的目标检测模型,目标是在计算力受限的平台进行实时目标检测。需要关注的地方主要就是提出的两个特征增强模块CEM和SAM,其设计理念和应用的方法都非常值得借鉴。

1. 介绍

在移动端的实时目标检测是一个极为重要并且有挑战性的视觉问题。很多基于CNN的检测器都有巨大的计算量,所以在计算受限的场景下难以进行实时推理。论文提出了一个轻量级的两阶段的检测方法-ThunderNet。

  • 在backbone部分,分析了以往的轻量级backbone的不足并提出了一个专门用于目标检测的轻量级基础网络-SNet。
  • 在detection部分,提出一个有效的RPN和检测头。其中涉及到两个特征增强模块:
    • Context Enhancement Module(CEM) 用于整合局部和全局特征。
    • Spatial Attention Module(SAM)引入RPN前后背景信息用以优化特征分布。
  • 对目标输入分辨率、Backbone、检测头三个部分进行了平衡。

最终ThunderNet可以在ARM设备上达到24.1fps的速度,精度和速度上超过了很多一阶段检测器。

2. 细节

首先可以看一下在COCO数据集上轻量级目标检测网络的对比,可以看出来其效率和准确率都超过了Pelee,SSD等一阶段的检测器。

2.1 backbone

ThunderNet的Backbone是基于ShuffleNetv2改进得到的SNet。 由于输入的分辨率应该和backbone的容量相匹配,图片的输入分辨率调整为320x320,这极大的降低了模型的计算量。

SNet与ShuffleNetV2区别在于SNet将ShuffleNet中所有的3x3的可分离卷积替换为5x5的可分离卷积。下图是shuffleNetv2中的网络结构:

Backbone选取考虑到以下几个因素:

  1. 迁移学习: 目标检测需要的backbone一般都是在ImageNet上与训练得到的,但是目标检测的backbone和分类器所需要提取的特征是不一致的,简单地将分类模型迁移学习到目标检测中不是最佳选择。
  2. 感受野: CNN中感受野是非常重要的参数,CNN只能获取到感受野以内的信息,所以更大的感受野通常可以获取更多地语义信息,可以更好地编码长距离关系。
  3. 浅层和深层的特征: 浅层的feature map分辨率比较大,获取到的是描述空间细节的底层特征。深层的feature map分辨率比较小,但是保存的是更具有鉴别性的高级语义特征。

    通常来讲,对于比较大的backbone来说,定位要比分类难得多,这样就证明了浅层特征对于定位的重要性。但是对于非常小的backbone来说,其特征表达能力比较差,这样就限制了准确率的特征。所以深层和浅层的特征都非常重要。

作者考虑到以上三个因素,并分析了先前轻量级backbone的缺点:

  • ShuffleNetV1的感受野只有121个像素,ShuffleNetv2的感受野只有320个像素,感受野比较小
  • ShuffleNetv2和MobileNetv2都缺少浅层的特征
  • Xception由于对计算量的限制导致高级语义信息不足。

所以在设计SNet的时候,着重考虑以上的因素,并提出了三个模型:SNet49(speed)、SNet146(trade off)、SNet535(accuracy)。主要改进点如下:

  1. 将ShuffleNetv2中的所有3x3的深度可分离卷积替换为5x5的深度可分离卷积,两者实际运行速度相差不多,但是有效扩大了有效感受野(参考之前文章目标检测和感受野的总结和思考)
  2. SNet146和SNet535中去掉了Conv5,并且加宽了浅层网络,进而生成更多的底层特征。
  3. SNet49将Conv5中的通道个数改为512,也加宽了浅层网络。通过这样操作是为了平衡浅层网络和深层网络

2.2 Detection

在以往的两阶段检测器中,RPN和Detection 头都太重了,为了和轻量级的网络进行配合以及降低计算量,ThunderNet沿用了Light-Head R-CNN中的大部分设置,并针对计算量比较大的部分进行改动:

  • 将RPN中原有256维的3x3卷积替换为5x5的dwconv+1x1conv
  • 设置五个scale{32,64,128,256,512}和5个比例{1:2,3:4,1:1,4:3,2:1}
  • 提出PSRoI align来取代RoI warping, 减少RoI个数等

还有很多细节部分的调整,大部分细节都和Light-Head R-CNN是一致的。

接下来就是两个重要的模块,CEM和SAM:

CEM

在Light-Head R-CNN中,使用了Global Convolutional Network来增大模型的感受野,但也带来了极大的计算量。为了解决这个问题,ThunderNet中提出了CEM来增大感受野,融合多尺度局部信息和全局信息来获取更有鉴别性的特征。

上图是CEM层的结构,其中C4来自backbone的Stage3,C5来自backbone的Stage4。具体操作过程上图很明显,构造了一个多尺度的特征金字塔,然后三个层相加,完成特征的优化。

接触过SENet的读者可能对这个结构有点熟悉,使用Global Avg pool以后实际上得到了一个通道的Attention,只不过SENet是相乘,而这里直接相加。总体来说这个模块构造的很好,以比较小的计算代价扩大了感受野,提供了多尺度特征。同时也有一些地方需要商量,比如是SENet中的乘法更适合呢?还是直接相加更适合?

SAM

SAM实际上就是利用RPN得到的feature map,然后用一个Attention机制对特征进行优化,具体实现方式见下图:

这个部分设计实际上是比较好的结合了两阶段模型的RPN网络。RPN网络是用来提出proposal的,在RPN中,我们期望背景区域特征不被关注,而更多地关注前景物体特征。RPN有较强的判别前景和背景的能力,所以这里的就用RPN的特征来指导原有特征,实际上是一个Spatial Attention,通过1x1卷积、BN、Sigmoid得到加权的特征图,引导网络学习到正确的前景背景特征分布。

这个模块也是非常精妙的结合了RPN以及空间Attention机制,非常insight,有效地对轻量级网络特征进行了优化,弥补了轻量网络特征比较弱的缺点。

3. 实验

上表是在VOC2007数据集上的结果,可以看出,ThunderNet在比较好地做到了精度和计算量的权衡,并且证明了两阶段网络也有超越一阶段网络的潜力。

上表是在COCO数据集上的结果,可以看出效果依然非常出众。SNet49的ThunderNet在于MobileNet-SSD相近的精度下,速度快了5倍;SNet146的ThunderNet与one-stage相比,有更高的精度;SNet535的ThunderNet精度在和大型的一阶段网络(SSD,DSSD)一致的情况下,计算量显著降低。

4. 思考

ThunderNet作者非常善于思考,在将两阶段检测器进行轻量化设计的这个问题上有独特的想法,很多改进的点都是来自感受野的分析。主要提出了两个重要的模块:CEM 和SAM

CEM总的来说是融合了一个小型的FPN+通道注意力机制,以非常少的计算代价提高了模型的感受野,优化了backbone的特征。

SAM总的来说是用RPN的特征加强原有特征,本质上是一种空间注意力机制,这种方法或许可以扩展到所有的多阶段检测器中。

而SNet对ShuffleNetV2的改进也在消融实验中得到证明,所以或许其他轻量级网络也可以借鉴用5x5dwconv替换掉3x3conv的思路

ThunderNet成功超越了很多一阶段的方法,也让我们改变了传统两阶段网络计算量大但精度高的印象。虽然很多论文中都用到了空间注意力机制和通道注意力机制,ThunderNet中通过自己独到的想法,比较完美地融合了这两个部分,有理有据,非常有力。

以上是笔者关于ThunderNet的解读和个人的思考,能力有限,如果有不同的看法,欢迎来交流。

5. 参考

https://arxiv.org/pdf/1903.11752.pdf

https://github.com/ouyanghuiyu/Thundernet_Pytorch

原文地址:https://www.cnblogs.com/pprp/p/12432515.html

时间: 2024-08-30 06:06:46

两阶段实时检测网络ThunderNet的相关文章

iOS使用Reachability实时检测网络连接状况

//在程序的启动处,开启通知 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //..... //开启网络状况的监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kR

iOS 检测网络状态

1.为什么要检测网络状态? 1.1 让用户知道自己的网络状态,防止用户埋怨"这个应用太垃圾,获取数据那么慢" 1.2 根据用户的网络状态,智能处理,提升用户体验 例如某些手机浏览器,检测到用户网络是2G/3G时,会自动切换为无图模式 2.手动触发 2.1 首先下载苹果的示例程序Reachability, 取得示例程序里的Reachability.h和Reachability.m, 添加到自己项目里 代码如下 - (void)touchesBegan:(NSSet *)touches w

玩转Android Camera开发(五):基于Google自带算法实时检测人脸并绘制人脸框(网络首发,附完整demo)

本文主要介绍使用Google自带的FaceDetectionListener进行人脸检测,并将检测到的人脸用矩形框绘制出来.本文代码基于PlayCameraV1.0.0,在Camera的open和preview流程上进行了改动.原先是放在单独线程里,这次我又把它放到Surfaceview的生命周期里进行打开和开预览. 首先要反省下,去年就推出了静态图片的人脸检测demo,当时许诺一周内推出Camera预览实时检测并绘制的demo,结果拖到现在才整.哎,屌丝一天又一天,蹉跎啊.在demo制作过程中

[iOS 多线程 & 网络 - 2.8] - 检测网络状态

A.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的:(1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)(2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态https://developer.apple.com/library/ios/samplecode/Reachability

iOS实时监控网络状态的改变

在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI网络:自动下载高清图片 4G/3G网络:只下载缩略图 没有网络:只显示离线的缓存数据 常用的有以下两种方法: (1).使用苹果观法提供的检测iOS设备网络环境用的库 Reachablity (2).使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的

数据安全(MD5),HTTPS,检测网络状态

一.数据安全 1.提交用户的隐私数据一定要使用POST请求提交用户的隐私数据GET请求的所有参数都直接暴露在URL中请求的URL一般会记录在服务器的访问日志中服务器的访问日志是黑客攻击的重点对象之一 用户的隐私数据登录密码银行账号… … 2.数据安全仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据因此:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交 常见的加密算法MD5 \ SHA \ DES \

KMeans算法检测网络异常入侵

非监督学习技术 在决策树算法预测森林植被中 我们可以体会到属于监督学习的分类和回归技术的强大,可以预测"即将发生"的事情 使用监督学习技术有一个很关键的前提:需要大量的数据对模型进行训练,模型能够从已知的数据中学习规律进而预测未知的数据 然而在某些场景下,并不是都能提供监督学习所需要的样本数据来训练模型,有可能只能给出部分正确的输出,甚至一个输出都没有 这种情况下,监督学习的技术就不能够使用了 此时,对应监督学习,另一种非监督学习技术就可以排上用场了 异常检查 顾名思义,异常检测就是要

关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究[转]

1.XA XA是由X/Open组织提出的分布式事务的规范.XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口.XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁.XA之所以需要引入事务管理器是因为,在分布式系统中,从理论上讲(参考Fischer等的论文),两台机器理论上无法达到一致的状态,需要引入一

对分布式事务及两阶段提交、三阶段提交的理解

转载至:http://www.cnblogs.com/binyue/p/3678390.html,最近学习需要,先转载方便用用来强化加深印象 一.分布式数据一致性 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上. (1)什么是数据一致性 在数据有多份副本的情况下,如果网络.服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败.这就造成各个副本之间的数据不一致,数据内容冲突. 造成事实上的数据不一致. (2)CAP定