安卓部署:手机端Anchor-free的目标检测模型Nanodet

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大佬项目的appsrcmainjni下 并更改你的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)

准备Android Studio 一路next

然后设置Android SDK 主要是勾选安卓版本 我的Android Studio是2019的 这里最多选择Android10.0 选择cmke NDK 务必选择上 不然无法编译。

在编译过程中可能出现问题:

这里推荐一个万能解决方法(但是很费时间): 打开C:UsersAdmin 删除**.gradle**文件 即可重新编译。 NDK路径设置: 即可打开原本项目进行编译 激动人心的时刻。 将安卓手机连接电脑,将手机设置为开发者模式,并打开USB调试 启动项目,等待安装。 手机里面出现nanodetncnn,完成!!!! 跑的基本模型,cpuFPS可以达到25左右,可以说效果非常不错。 接下来打算训练自己的数据集,也可以尝试下其他backbone或者方法,并进行ncnn推理移植到移动端,后续更新!!!

经验分享 程序员 微信小程序 职场和发展