Nanodet
深度学习目标检测已经发展了许多年,从Two-stage到One-stage,从Anchor-base到Anchor-free,再到今年的用Transformer做目标检测,各种方法百花齐放,但是在移动端目标检测算法上,yolo系列和SSD等Anchor-base的模型一直占据着主导地位。这个项目的主要目的是希望能够开源一个移动端实时的Anchor-free检测模型,能够提供不亚于yolo系列的性能,而且同样方便训练和移植。
看了大佬的文章介绍,整个项目主要是基于轻量级,Anchor-free。网络模型选择的是ShuffleNetV2,可以对其他轻量级模型进行尝试(MobileNet系列,GhostNet,还有最近的EfficientNet)其实自己魔改一个也不错。
其次是损失函数,基于FCOS的轻量化(centerness分支在轻量级的模型上很难收敛)
解决:GFocalLoss完美去掉了FCOS系列的Centerness分支,而且在coco数据集上涨点显著。GFL的出现不仅去掉了难以训练的Centerness,而且还省去了这一分支上的大量卷积,减少了检测头的计算开销,非常适合移动端的轻量化部署。
目前也新出了GFLV2,应该对模型还有提升。还有ATSS,对于正负样本的选择,也比较影响在实时端的推理速度。
本人训练了一下其它数据集,发现效果也不错。
在此记录一下实际安卓操作步骤。
借鉴:https://github.com/nihui/ncnn-android-benchmark
致敬:https://github.com/RangiLyu/nanodet
首先第一步下载ncnn-android-vulkan.zip
链接:https://github.com/Tencent/ncnn/releases
*android 静态库/动态库,支持 GPU
打开下载包,将这四个文件复制到nihui大佬项目的app\src\main\jni下
并更改你的CMakeLists.txt文件
主要是更改ncnn_DIR路径,将对应的ncnn版本更改为你下载的ncnn-android-vulkan.zip版本
project(nanodetncnn)
cmake_minimum_required(VERSION 3.10)
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv-mobile-4.5.1-android/sdk/native/jni)
find_package(OpenCV REQUIRED core imgproc)
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/202107202c4ae09/${ANDROID_ABI}/lib/cmake/ncnn)
find_package(ncnn REQUIRED)
add_library(nanodetncnn SHARED nanodetncnn.cpp nanodet.cpp ndkcamera.cpp)
target_link_libraries(nanodetncnn ncnn ${OpenCV_LIBS} camera2ndk mediandk)
下载opencv-mobile-4.5.1-android到app\src\main\jni下。
准备模型文件:原项目中已有作者推理好的模型文件。
准备Android Studio 一路next
然后设置Android SDK
主要是勾选安卓版本 我的Android Studio是2019的 这里最多选择Android10.0
选择cmke NDK
务必选择上 不然无法编译。
在编译过程中可能出现问题:
这里推荐一个万能解决方法(但是很费时间):
打开C:\Users\Admin 删除**.gradle**文件 即可重新编译。
NDK路径设置:
即可打开原本项目进行编译
激动人心的时刻。
将安卓手机连接电脑,将手机设置为开发者模式,并打开USB调试
启动项目,等待安装。
手机里面出现nanodetncnn,完成!!!!
跑的基本模型,cpuFPS可以达到25左右,可以说效果非常不错。
接下来打算训练自己的数据集,也可以尝试下其他backbone或者方法,并进行ncnn推理移植到移动端,后续更新!!!
参考:
作者:RangiLyu
链接:https://zhuanlan.zhihu.com/p/306530300
。