YOLO之外的另一选择!NanoDet:手机端97 FPS的Anchor-Free目标检测模型(现已开源)

2020 年 11 月 24 日 CVer

点击上方“CVer”,选择加"星标"置顶

重磅干货,第一时间送达

本文者:RangiLyu  |  编辑:Amusi

https://zhuanlan.zhihu.com/p/306530300

本文已由原作者授权,不得擅自二次转载

上来先贴一下性能对比:

华为P30上用NCNN移植跑benchmark,每帧仅需10.23毫秒,比yolov4-tiny快3倍,参数量小6倍,COCO mAP(0.5:0.95)能够达到20.6 。而且模型权重文件只有1.8mb,对比动辄数十兆的模型,可以说是相当友好了~

Android Demo

项目地址(提供训练代码到安卓部署一站式解决方案):

https://github.com/RangiLyu/nanodet

前言

深度学习目标检测已经发展了许多年,从Two-stage到One-stage,从Anchor-base到Anchor-free,再到今年的用Transformer做目标检测,各种方法百花齐放,但是在移动端目标检测算法上,yolo系列和SSD等Anchor-base的模型一直占据着主导地位。这个项目的主要目的是希望能够开源一个移动端实时的Anchor-free检测模型,能够提供不亚于yolo系列的性能,而且同样方便训练和移植。

其实从去年大量anchor-free的论文发表之后,我就一直想把anchor free的模型移植到移动端或者是嵌入式设备上。当时尝试过把FCOS轻量化的实验,奈何效果并不如mobilenet+yolov3,也就暂时搁置了。分析下来,主要还是因为FCOS的centerness分支在轻量级的模型上很难收敛,之后发表的一些在FCOS上面进行改进的论文也都没有解决这一问题。

直到今年年中的时候刷arxiv突然刷到了 @李翔老师的论文Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection,论文中提出的GFocalLoss完美去掉了FCOS系列的Centerness分支,而且在coco数据集上涨点显著,这么好的文章怎么能不点赞呢?GFL的出现不仅去掉了难以训练的Centerness,而且还省去了这一分支上的大量卷积,减少了检测头的计算开销,非常适合移动端的轻量化部署。

贴一下李翔老师关于GFocal Loss的解读:

NeurIPS 2020 | Focal Loss改进版来了!GFocal Loss:良心技术,无Cost涨点!

检测头轻量化

在找到了合适的损失函数之后,接下来的关键就是如何使其在轻量化模型上发挥作用了。首先需要对移动端进行优化的就是检测头:FCOS系列使用了共享权重的检测头,即对FPN出来的多尺度Feature Map使用同一组卷积预测检测框,然后每一层使用一个可学习的Scale值作为系数,对预测出来的框进行缩放。


FCOS模型架构

这么做的好处是能够将检测头的参数量降低为不共享权重状态下的1/5。这对于光是检测头就拥有数百通道的卷积的大模型来说非常有用,但是对于轻量化模型来说,共享权重检测头并没有很大的意义。由于移动端模型推理由CPU进行计算,共享权重并不会对推理过程进行加速,而且在检测头非常轻量的情况下,共享权重使得其检测能力进一步下降,因此还是选择每一层特征使用一组卷积比较合适。

同时,FCOS系列在检测头上使用了Group Normalization作为归一化的方式,GN对比BN有很多好处,但是却有一个缺点:BN在推理时能够将其归一化的参数直接融合进卷积中,可以省去这一步计算,而GN则不行。为了能够节省下归一化操作的时间,我选择将GN替换为BN。

FCOS的检测头使用了4个256通道的卷积作为一个分支,也就是说在边框回归和分类两个分支上一共有8个c=256的卷积,计算量非常大。为了将其轻量化,我首先选择使用深度可分离卷积替换普通卷积,并且将卷积堆叠的数量从4个减少为2组。在通道数上,将256维压缩至96维,之所以选择96,是因为需要将通道数保持为8或16的倍数,这样能够享受到大部分推理框架的并行加速。最后,借鉴了yolo系列的做法,将边框回归和分类使用同一组卷积进行计算,然后split成两份。下图就是最终得到的轻量化检测头的结构,非常的小巧:

NanoDet检测头

FPN层改进

目前针对FPN的改进有许多,如EfficientDet使用了BiFPN,yolo v4和yolo v5使用了PAN,除此之外还有BalancedFPN等等。BiFPN虽然性能强大,但是堆叠的特征融合操作势必会带来运行速度的降低,而PAN只有自上而下和自下而上两条通路,非常的简洁,是轻量级模型特征融合的好选择。

原版的PAN和yolo中的PAN,都使用了stride=2的卷积进行大尺度Feature Map到小尺度的缩放。我为了轻量化的原则,选择完全去掉PAN中的所有卷积,只保留从骨干网络特征提取后的1x1卷积来进行特征通道维度的对齐,上采样和下采样均使用插值来完成。与yolo使用的concatenate操作不同,我选择将多尺度的Feature Map直接相加,使得整个特征融合模块的计算量变得非常非常小。

最终的极小版PAN的结构也是非常简单:

超轻量的PAN

Backbone的选择

原本有考虑过自己魔改一个轻量级的backbone出来,但是最后评估了一下感觉工作量太大了(在家训练模型电费太贵),就打算选择使用现有的一些轻量级骨干网络。最开始的选择有MobileNet系列,GhostNet,ShuffleNet,还有最近的EfficientNet。在评估了参数量、计算量以及权重大小之后,还是选择了ShuffleNetV2作为骨干网络,因为它是这些模型里面在相似精度下体积最小的,而且对移动端CPU推理也比较友好。

最终我选择使用ShuffleNetV2 1.0x作为backbone,去掉了最后一层卷积,并且抽取8、16、32倍下采样的特征输入进PAN做多尺度的特征融合。整个骨干模型使用了Torchvision提供的代码,能够直接加载Torchvision上提供的imagenet预训练权重,对加快模型收敛有很大的帮助。顺便一提,最近有些论文指出使用分类的预训练权重初始化模型对检测任务的效果不如随机初始化的好,不过这要付出训练更多步数的代价,我还没有测试过,欢迎大家尝试~


NanoDet整体模型结构

模型性能

在经过对one-stage检测模型三大模块(Head、Neck、Backbone)都进行轻量化之后,得到了目前开源的NanoDet-m模型,在320x320输入分辨率的情况下,整个模型的Flops只有0.72B,而yolov4-tiny则有6.96B,小了将近十倍!模型的参数量也只有0.95M,权重文件在使用ncnn optimize进行16位存储之后,只有1.8mb,非常适合在移动端部署,能够有效减少APP体积,同时也对更低端的嵌入式设备更加友好。

尽管模型非常的轻量,但是性能却依旧强劲。对于小模型,往往选择使用AP50这种比较宽容的评价指标进行对比,这里我选择用更严格一点的COCO mAP(0.5:0.95)作为评估指标,同时兼顾检测和定位的精度。在COCO val 5000张图片上测试,并没有使用Testing-Time-Augmentation的情况下,320分辨率输入能够达到20.6的mAP,比tiny-yolov3高4分,只比yolov4-tiny低1个百分点,而将输入分辨率与yolo保持一致,都使用416输入的情况下,得分持平。

最后用ncnn部署到手机上之后跑了一下benchmark,模型前向计算时间只要10毫秒左右,对比yolov3和v4 tiny,均在30毫秒的量级。在安卓摄像头demo app上,算上图片预处理,检测框后处理以及绘制检测框的时间,也能轻松跑到40+FPS~。(关于模型从pytorch到安卓的部署,以及如何用C++实现GFL检测框的后处理,我会再专门发一遍文章详细介绍)

ncnn 安卓benchmark对比

总结

NanoDet总体而言没有特别多的创新点,是一个纯工程化的项目,主要的工作就是将目前学术界的一些优秀论文,落地到移动端的轻量级模型上。最后通过这些论文的组合,得到了一个兼顾精度、速度和体积的检测模型。

为了让大家能够快速使用NanoDet,方便训练和部署,我已经把Pytorch的训练代码、基于NCNN的Linux和windowsC++部署代码以及Android摄像头Demo全部开源,同时在Readme中也包含了非常详细的教程,欢迎大家使用,欢迎提issue~

顺便提一句,NanoDet训练并没有用到很多数据增强的技巧,模型结构也非常简单,也就是说mAP应该还有很大的提升空间,如果有小伙伴愿意魔改一下再涨几个点那就再好不过了(嘻嘻)。

最后的最后,Github求Star啊!!

https://github.com/RangiLyu/nanodet


上述项目代码下载


后台回复:NanoDet,即可下载上述项目源代码

目标检测综述下载

后台回复:目标检测二十年,即可下载39页的目标检测最全综述,共计411篇参考文献。


下载2


后台回复:CVPR2020,即可下载代码开源的论文合集

后台回复:ECCV2020,即可下载代码开源的论文合集

后台回复:YOLO,即可下载YOLOv4论文和代码


重磅!CVer-目标检测 微信交流群已成立


扫码添加CVer助手,可申请加入CVer-目标检测 微信交流群,目前已汇集4000人!涵盖2D/3D目标检测、小目标检测、遥感目标检测等。互相交流,一起进步!


同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。


一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加群


▲长按关注我们

整理不易,请给CVer点赞和在看

登录查看更多
0

相关内容

深度学习目标检测方法综述
专知会员服务
273+阅读 · 2020年8月1日
深度学习目标检测方法及其主流框架综述
专知会员服务
147+阅读 · 2020年6月26日
【文献综述】深度学习目标检测方法及其主流框架综述
专知会员服务
118+阅读 · 2020年6月26日
【CVPR 2020-商汤】8比特数值也能训练卷积神经网络模型
专知会员服务
25+阅读 · 2020年5月7日
3D目标检测进展综述
专知会员服务
191+阅读 · 2020年4月24日
专知会员服务
31+阅读 · 2020年4月24日
专知会员服务
160+阅读 · 2020年4月21日
CVPR2020 | 商汤-港中文等提出PV-RCNN:3D目标检测新网络
专知会员服务
43+阅读 · 2020年4月17日
47.4mAP!最强Anchor-free目标检测网络:SAPD
极市平台
13+阅读 · 2019年12月16日
目标检测中边界框的回归策略
极市平台
17+阅读 · 2019年9月8日
大盘点 | 性能最强的目标检测算法
新智元
13+阅读 · 2019年7月9日
目标检测:Anchor-Free时代
极市平台
42+阅读 · 2019年4月17日
FCOS: 最新的one-stage逐像素目标检测算法
极市平台
15+阅读 · 2019年4月14日
基于手机系统的实时目标检测
计算机视觉战队
8+阅读 · 2018年12月5日
ECCV 2018 | CornerNet:目标检测算法新思路
极市平台
13+阅读 · 2018年8月11日
期待已久的—YOLO V3
计算机视觉战队
20+阅读 · 2018年4月13日
EfficientDet: Scalable and Efficient Object Detection
Arxiv
6+阅读 · 2019年11月20日
Arxiv
5+阅读 · 2019年4月8日
Augmentation for small object detection
Arxiv
11+阅读 · 2019年2月19日
Scale-Aware Trident Networks for Object Detection
Arxiv
4+阅读 · 2019年1月7日
Arxiv
5+阅读 · 2018年4月17日
Arxiv
6+阅读 · 2018年2月6日
Arxiv
7+阅读 · 2018年1月24日
VIP会员
相关VIP内容
深度学习目标检测方法综述
专知会员服务
273+阅读 · 2020年8月1日
深度学习目标检测方法及其主流框架综述
专知会员服务
147+阅读 · 2020年6月26日
【文献综述】深度学习目标检测方法及其主流框架综述
专知会员服务
118+阅读 · 2020年6月26日
【CVPR 2020-商汤】8比特数值也能训练卷积神经网络模型
专知会员服务
25+阅读 · 2020年5月7日
3D目标检测进展综述
专知会员服务
191+阅读 · 2020年4月24日
专知会员服务
31+阅读 · 2020年4月24日
专知会员服务
160+阅读 · 2020年4月21日
CVPR2020 | 商汤-港中文等提出PV-RCNN:3D目标检测新网络
专知会员服务
43+阅读 · 2020年4月17日
相关资讯
47.4mAP!最强Anchor-free目标检测网络:SAPD
极市平台
13+阅读 · 2019年12月16日
目标检测中边界框的回归策略
极市平台
17+阅读 · 2019年9月8日
大盘点 | 性能最强的目标检测算法
新智元
13+阅读 · 2019年7月9日
目标检测:Anchor-Free时代
极市平台
42+阅读 · 2019年4月17日
FCOS: 最新的one-stage逐像素目标检测算法
极市平台
15+阅读 · 2019年4月14日
基于手机系统的实时目标检测
计算机视觉战队
8+阅读 · 2018年12月5日
ECCV 2018 | CornerNet:目标检测算法新思路
极市平台
13+阅读 · 2018年8月11日
期待已久的—YOLO V3
计算机视觉战队
20+阅读 · 2018年4月13日
相关论文
EfficientDet: Scalable and Efficient Object Detection
Arxiv
6+阅读 · 2019年11月20日
Arxiv
5+阅读 · 2019年4月8日
Augmentation for small object detection
Arxiv
11+阅读 · 2019年2月19日
Scale-Aware Trident Networks for Object Detection
Arxiv
4+阅读 · 2019年1月7日
Arxiv
5+阅读 · 2018年4月17日
Arxiv
6+阅读 · 2018年2月6日
Arxiv
7+阅读 · 2018年1月24日
Top
微信扫码咨询专知VIP会员