NCNN将模型部署到Android端

1.1 项目准备

1.1.1. 安装Android studio

这个百度上有很多对应的经验体随便找一个教程然后切换一下国内源即可安装成功这里不做赘述
这里需要说明一点我们应该安装NDK、Cmake

  • 这里根据自己的手机版本来选择对应的开发环境
  • 最后点击应用安装

1.1.2. 下载解压源码

下载解压NCNN和ncnn-android-yolov5工程

       GitHub nihui/ncnn-android-yolov5: The YOLOv5 object detection android example 

  • 把ncnn-20221128-android-vulkan里面的文件复制一份到ncnn-android-yolov5-master的\app\src\main\jni目录下

1.2. 安卓源码重新编译

1.2.1. 构建工程

用Android studio 打开这个ncnn-android-yolov5-master项目的build.gradle文件

  • 之后Android studio会帮我们构建整个工程耐心等待他走完

1.2.2. 修改源码

1.2.2.1. 修改CMakeLists.txt中的路径
  • 打开ncnn-android-yolov5-master\app\src\main\jni\CMakeLists.txt
  • 将第五行的路径改为自己的路径
  • 也就是将
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20201218-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn)
  • 改为
set(ncnn_DIR ${CMAKE_SOURCE_DIR}/${ANDROID_ABI}/lib/cmake/ncnn)
  • 也就是把作者的根目录给删除掉
  • 修改之后
  • 简单说明一下ANDROID_ABI对应的是不同架构下的文件夹名称
1.2.2.2. 重新重新ysnc project

1.2.3 修改项目源码

1.2.3.1. 替换原来的param文件
  • 将刚才生成的yolov5s.bin、yolov5s.param文件放到ncnn-android-yolov5-master\app\src\main\assets文件夹下并替换原来的文件
1.2.3.2. 修改param文件中的参数
  • 打开yolov5s.param搜索Reshape层将后面对应的 0=6400、0=1600、0=400 均修改为 0=-1 这是为了解决实际中出现的多检测框的问题
  • 修改前
  • 修改后
1.2.3.3. 修改yolov5ncnn_jni.cpp文件
1.2.3.3.1. 将ncnn-android-yolov5-master\app\src\main\jni文件夹下的yolov5ncnn_jni.cpp的分类类别名改成自己模型的实际类别名
  • 修改前
  • 修改后

2.5.2.3.2. 修改stride 16和32部分

解决办法

/ndk-bundle/toolchains

ndk.dir=C\:\\Users\\Lenovo\\AppData\\Local\\Android\\Sdk\\platform-tools\\ndk-bundle
  • 修改源码文件yolov5ncnn_jni.cpp中Permute 节点的 output
  • param文件permute部分与stride部分中blob_name后面的数字对应起来
  • param文件中搜索permute会出来3个结果我们选择
  • 我们使用Notre打开这个yolov5s.param文件找到permute节点这个permute节点一共有3个分别是128,256,512尺寸的我们需要的是256和512的输出维度
  • 修改前
  • 修改后
  • 2. 报错

    2.1. Android Studio报错

  • CMake ‘3.10.2’ was not found in PATH or by cmake.dir property.
     


    点击下方的install即可

  • By not providing “Findncnn.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “ncnn”, but CMake did not find one.
    看一下自己ncnn-20221128-android-vulkan的代码是否放对了位置需要放到ncnn-android-yolov5-master的\app\src\main\jni目录下

  • No toolchains found in the NDK toolchains folder for ABI with prefix:** arm-linux-androideabi**
     


    在ABI的NDK工具链文件夹中没有找到带有前缀:arm-linux-androideabi的工具链
    原因分析最新版ndkversion=25.1.8937393的toolchains文件夹中无arm-linux-androideabi文件

  • 下载老版本NDK21
  • 打开本地Android SDK所在路径解压到指定目录就行如果没有这个目录就新建一个
  • developer.android.com/ndk/downloads/?hl=zh cn
  • 修改项目根目录的local.properties文件
  • 可以看到这个文件中原来没有NDK的路径我们为其手动指定一个
  • 这个路径是安卓SDK下面的路径具体根据自己的实际情况进行选择
  • 同时安装低版本的ndk如version=21.3.6528147将低版本ndk中toolchains 文件夹下的arm-linux-androideabi等文件复制到25.1.8937393版本ndk的toolchains 文件夹中
  • 之后再构建项目就不报错了
  • Update NDK version to 25.1.8937393 and sync project
    这个很好理解嘛也就是自己的NDK的版本太低了下载最新版的NDK即可

  • Location specified by ndk.dir (C:\Users\Lenovo\AppData\Local\Android\Sdk\platform-tools\ndk-bundle) did not contain a valid NDK and and couldn’t be used
     


    没有包含有效的NDK
    实际原因是NDK的路径不对
    确保NDK的两个路径是正确的

  • 这样之后再进行sync projec就可以正常了

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于MobileUNet在NCNN部署,你可以按照以下步骤进行操作: 1. 首先,你需要获取MobileUNet的模型文件和权重参数。这些文件通常是在训练过程中生成的,你可以从相关资源库或者官方文档中获取。 2. 下载并配置NCNN库。NCNN是一个轻量级的神经网络计算库,适用于移动设备和嵌入式系统。你可以从NCNN的官方GitHub仓库下载源代码,并按照其文档进行配置和编译。 3. 在你的项目中使用NCNN库。将NCNN库导入到你的项目中,并确保你的项目能够正确地链接和使用NCNN库的功能。 4. 加载MobileUNet模型。使用NCNN提供的接口,你可以加载MobileUNet模型文件和权重参数。具体的加载代码可能会有所不同,具体取决于你选择的编程语言和平台。 5. 对输入图像进行预处理。在将图像输入到MobileUNet模型之前,你可能需要对图像进行一些预处理,例如调整大小、归一化或裁剪等操作。确保预处理过程与MobileUNet模型训练时使用的预处理过程一致。 6. 运行推理。使用NCNN提供的接口,将预处理后的图像输入MobileUNet模型,然后运行推理过程。推理过程将产生预测结果,即MobileUNet对输入图像的分割结果。 7. 后处理和可视化。根据你的需求,你可以对模型的输出进行后处理,例如阈值化、后处理滤波或对象边界框绘制等操作。最后,你可以将结果可视化或保存到文件中。 以上是MobileUNet在NCNN部署步骤的一个大致指导,具体细节可能因为你的应用场景和需求而有所不同。在实际操作中,你可能需要参考NCNN的文档和示例代码来更好地理解和应用该库。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值