"); //-->
开源代码:https://github.com/RangiLyu/nanodet
前言&背景
图像选自于《https://www.cnblogs.com/azureology/p/14103685.html》
目标检测是现在最热门的研究课题,也一直是工业界重点研究的对象,最近几年内,也出现了各种各样的检测框架,所属于YOLO系列是最经典也是目前被大家认可使用的检测框架。
CVPR21目标检测新框架:不再是YOLO,而是只需要一层特征(干货满满,建议收藏)
目标检测 | Anchor free的目标检测进阶版本
ICCV2021:阿里达摩院将Transformer应用于目标重识别,效果显著(附源代码)
2
框架介绍
真实使用NANODet框架,确实比YOLO-Fastest系列好用很多,比YOLOF都好用一些,下一期,我们“计算进视觉研究院”计划给大家一起来详细说说YOLO-Fastest系列。
现在Github提供的整体,都已在安卓运行,华为P30上用NCNN移植跑benchmark,每帧仅需10.23毫秒,比yolov4-tiny快3倍,参数量小6倍,COCO mAP(0.5:0.95)能够达到20.6 。而且模型权重文件只有1.8mb。
图片来自于:
https://openaccess.thecvf.com/content_ICCV_2019/papers/Tian_FCOS_Fully_Convolutional_One-Stage_Object_Detection_ICCV_2019_paper.pdf
这么做的好处是能够将检测头的参数量降低为不共享权重状态下的 1/5。这对于光是检测头就拥有数百通道卷积的大模型来说非常有用,但是对于轻量化模型来说,共享权重检测头并没有很大的意义。由于移动端模型推理由 CPU 执行计算,共享权重并不会带来推理过程的加速,而且在检测头非常轻量的情况下,共享权重使其检测能力进一步下降,因此项目作者认为选择对每一层特征使用一组卷积比较合适。
00:53
FPN 层改进
摘自于《机器之心》
目前针对 FPN 的改进有许多,如EfficientDet使用了BiFPN,YOLO v4和v5使用了PAN,除此之外还有BalancedFPN等等。BiFPN虽然性能强大,但是堆叠的特征融合操作会导致运行速度降低,而PAN只有自上而下和自下而上两条通路,非常简洁,是轻量级模型特征融合的好选择。
原版的PAN和YOLO系列中的PAN都使用了stride=2的卷积进行大尺度Feature Map到小尺度的缩放。而该项目出于轻量化的考虑,选择完全去掉 PAN 中的所有卷积,只保留从骨干网络特征提取后的1x1卷积来进行特征通道维度的对齐,上采样和下采样均使用插值来完成。与YOLO使用的concatenate操作不同,项目作者选择将多尺度的Feature Map直接相加,使整个特征融合模块的计算量变得非常小最终得到的极小版 PAN结构非常简单:
主干网络
项目作者选择使用ShuffleNetV2 1.0x作为主干网络,他去掉了该网络的最后一层卷积,并且抽取8、16、32倍下采样的特征输入到PAN中做多尺度的特征融合。整个主干模型使用了Torchvision提供的代码,能够直接加载Torchvision上提供的imagenet预训练权重,对加快模型收敛起到很大帮助。
部署
生成部署文件
pth 转化为ONNX
python tools/export.py --cfg_path /config/EfficientNet-Lite/nanodet-EfficientNet-Lite1_416.yml --model_path /model_best/model_best.pth --out_path model_test.onnx --input_shape 416,416
ONNX转化NCNN
1)编译ncnn
参考 https://blog.csdn.net/weixin_40970506/article/details/1051480612)安装onnx==1.8.1
3)cd onnx-simplifier-master
python -m onnxsim /nanodet/nanodet-main/tools/model_test.onnx nanodet_sim.onnx
4)转换成bin
cd /ncnn-master/build/tools/onnx
./onnx2ncnn /onnx-simplifier-master/nanodet_sim.onnx nanodet_m.param nanodet_m.bin
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。