写点什么

NanoDet:这是个小于 4M 超轻量目标检测模型

发布于: 2021 年 01 月 20 日

摘要:NanoDet 是一个速度超快和轻量级的移动端 Anchor-free 目标检测模型。

前言


YOLO、SSD、Fast R-CNN 等模型在目标检测方面速度较快和精度较高,但是这些模型比较大,不太适合移植到移动端或嵌入式设备;轻量级模型 NanoDet-m,对单阶段检测模型三大模块(Head、Neck、Backbone)进行轻量化,目标加检测速度很快;模型文件大小仅几兆(小于 4M)。


NanoDet 作者开源代码地址:https://github.com/RangiLyu/nanodet (致敬)


基于 NanoDet 项目进行小裁剪,专门用来实现 Python 语言、PyTorch 版本的代码地址:https://github.com/guo-pu/NanoDet-PyTorch


下载直接能使用,支持图片、视频文件、摄像头实时目标检测


先看一下 NanoDet 目标检测的效果:


同时检测多辆汽车:



查看多目标、目标之间重叠、同时存在小目标和大目标的检测效果:



NanoDet 模型介绍


NanoDet 是一种 FCOS 式的单阶段 anchor-free 目标检测模型,它使用 ATSS 进行目标采样,使用 Generalized Focal Loss 损失函数执行分类和边框回归(box regression)。


1)NanoDet 模型性能


NanoDet-m 模型和 YoloV3-Tiny、YoloV4-Tiny 作对比:



备注:以上性能基于 ncnn 和麒麟 980 (4xA76+4xA55) ARM CPU 获得的。使用 COCO mAP (0.5:0.95) 作为评估指标,兼顾检测和定位的精度,在 COCO val 5000 张图片上测试,并且没有使用 Testing-Time-Augmentation。


NanoDet 作者将 ncnn 部署到手机(基于 ARM 架构的 CPU 麒麟 980,4 个 A76 核心和 4 个 A55 核心)上之后跑了一下 benchmark,模型前向计算时间只要 10 毫秒左右,而 yolov3 和 v4 tiny 均在 30 毫秒的量级。在安卓摄像头 demo app 上,算上图片预处理、检测框后处理以及绘制检测框的时间,NanoDet 也能轻松跑到 40+FPS。


2)NanoDet 模型架构



3)NanoDet 损失函数


NanoDet 使用了李翔等人提出的 Generalized Focal Loss 损失函数。该函数能够去掉 FCOS 的 Centerness 分支,省去这一分支上的大量卷积,从而减少检测头的计算开销,非常适合移动端的轻量化部署。



​详细请参考:Generalized Focal Loss:Learning Qualified and Distributed Bounding Boxes for Dense Object Detection


4)NanoDet 优势


NanoDet 是一个速度超快和轻量级的移动端 Anchor-free 目标检测模型。该模型具备以下优势:


  • 超轻量级:模型文件大小仅几兆(小于 4M——nanodet_m.pth);

  • 速度超快:在移动 ARM CPU 上的速度达到 97fps(10.23ms);

  • 训练友好:GPU 内存成本比其他模型低得多。GTX1060 6G 上的 Batch-size 为 80 即可运行;

  • 方便部署:提供了基于 ncnn 推理框架的 C++ 实现和 Android demo。


基于 PyTorch 实现 NanoDet


基于 NanoDet 项目进行小裁剪,专门用来实现 Python 语言、PyTorch 版本的代码地址:


1)NanoDet 目标检测效果


同时检测出四位少年



在复杂街道中,检测出行人、汽车:



通过测试发现 NanoDet 确实很快,但识别精度和效果比 YOLOv4 差不少的。


2)环境参数


测试环境参数


系统:Windows 编程语言:Python 3.8 整合开发环境:Anaconda


深度学习框架:PyTorch1.7.0+cu101 (torch>=1.3 即可) 开发代码 IDE:PyCharm


开发具体环境要求如下:


  • Cython

  • termcolor

  • numpy

  • torch>=1.3

  • torchvision

  • tensorboard

  • pycocotools

  • matplotlib

  • pyaml

  • opencv-python

  • tqdm


通常测试感觉 GPU 加速(显卡驱动、cudatoolkit 、cudnn)、PyTorch、pycocotools 相对难装一点


Windows 开发环境安装可以参考:


安装 cudatoolkit 10.1、cudnn7.6 请参考


https://blog.csdn.net/qq_41204464/article/details/108807165


安装 PyTorch 请参考 https://blog.csdn.net/u014723479/article/details/103001861


安装 pycocotools 请参考 https://blog.csdn.net/weixin_41166529/article/details/109997105


3)体验 NanoDet 目标检测


下载代码,打开工程


先到 githug 下载代码,然后解压工程,然后使用 PyCharm 工具打开工程;


githug 代码下载地址:https://github.com/guo-pu/NanoDet-PyTorch


说明:该代码是基于 NanoDet 项目进行小裁剪,专门用来实现 Python 语言、PyTorch 版本的代码


NanoDet 作者开源代码地址https://github.com/RangiLyu/nanodet (致敬)


使用 PyCharm 工具打开工程


选择开发环境


文件(file)——>设置(setting)——>项目(Project)——>Project Interpreters 选择搭建的开发环境;



然后先点击 Apply,等待加载完成,再点击 OK;


进行目标检测


具体命令请参考:



【目标检测-图片】



【目标检测-视频文件】


检测的是 1080*1920 的图片,很流畅毫不卡顿,就是目前识别精度不太高



4)调用模型的核心代码


detect_main.py 代码:






本文分享自华为云社区《目标检测模型 NanoDet(超轻量,速度很快)介绍和 PyTorch 版本实践》,原文作者:一颗小树 x。


点击关注,第一时间了解华为云新鲜技术~


发布于: 2021 年 01 月 20 日阅读数: 23
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
NanoDet:这是个小于4M超轻量目标检测模型