ncnn yolov5.cpp切换yolov5n6模型(一)

本文讲述了如何将Yolo5n6模型转换为NCNN以提升手机上的检测速度,并详细介绍了参数调整过程,包括Reshape层的修改、anchor数量的对应和输出层的更新。作者提到精度有所下降,计划进一步研究strip64参数以提高性能。
部署运行你感兴趣的模型镜像


背景: ncnn yolo demo源码里面使用的模型是yolov5s_6.0。在手机上运行检测正常,但是速度稍慢,打算更换模型为yolo5n6,遇到的问它再此记录

问题1:yolo模型转ncnn模型

  1. 进入虚拟环境
    conda activate yolo5

  2. 安装onnx
    pip install onnx
    pip install onnx-simplifier

  3. 运行export.py
    python export.py --weights yolo5n6.pt --img 640 640 --batch 1 --train --simplify --include onnx
    python -m onnxsim yolo5n6.onnx yolo5n6-sim.onnx

  4. 在线ncnn转换:https://convertmodel.com/#outputFormat=ncnn

问题2:yolo5n6.param参数修改

  1. 把所有Resharp层的 0=-1,使输出的BBOX可以自适应
    在这里插入图片描述
  2. yolov5.cpp 每一层的参数需要与模型的anchors对应
    在这里插入图片描述
  3. yolov5只处理了3个anchors,v6版本有4个
    在这里插入图片描述
    4.yolov5.cpp stride 8、16、32的层名字,要对应修改
    ex.extract(blob_name, out);
    在这里插入图片描述

我这边暂时按照原来3层输出的代码,丢弃了strip64的输出,检测正常。
但是准确率确实比v5s要差些。
后续研究strip64参数作用,修改代码增加strip64层输出,看效果是否有改善

请看下集


您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

<think>嗯,用户问的是关于yolov5ncnn_jni.cpp文件里部分代码标红线的问题。首先,我需要考虑用户可能遇到的情况。标红线通常出现在IDE里,比如Android Studio,可能表示语法错误、编译错误或者找不到符号之类的。 首先,用户可能在使用ncnn框架部署YOLOv5模型到Android时遇到了问题。这个文件是JNI部分的C++代码,负责Java和本地代码的交互。标红的原因可能有几个: 1. **头文件缺失或路径错误**:检查是否包含了正确的头文件,比如jni.h、ncnn的头文件等。如果IDE找不到这些头文件,就会标红。需要确认NDK路径配置是否正确,ncnn库是否正确安装并链接。 2. **语法错误**:比如拼写错误、缺少分号、括号不匹配等。这些低级错误会导致IDE解析失败,标红提示。需要仔细检查标红位置的代码结构。 3. **ncnn接口变更**:ncnn库更新后,部分API可能有变动,比如函数名或参数变化。如果用户使用的ncnn版本与代码不兼容,调用不存在的函数就会报错。需要核对ncnn的文档,确认函数的使用方式。 4. **JNI函数签名错误**:JNI方法需要正确的签名,比如参数类型、返回值类型。如果签名不匹配,会导致运行时错误,但有时IDE也会提前标红。检查JNI函数的命名和签名是否符合规范。 5. **环境配置问题**:NDK版本与ncnn或项目不兼容,或者CMakeLists.txt配置不正确,导致头文件或库无法正确引入。需要检查build.gradle和CMakeLists.txt中的配置,确保路径和库名称正确。 接下来,用户可能需要具体的解决步骤。我应该分步骤指导他们检查这些可能的问题。例如,首先检查头文件包含,确认ncnn和NDK的路径是否正确;然后检查语法错误,特别是标红位置的周围代码;接着核对ncnn的API是否与代码中的调用致;然后检查JNI函数签名;最后确认环境配置和构建脚本。 同时,用户可能不太熟悉JNI和ncnn的具体配置,所以需要给出具体的例子,比如如何正确引入头文件,或者CMakeLists.txt中如何链接ncnn库。还要提醒用户确保使用的ncnn版本和代码兼容,可能需要更新代码或回退ncnn版本。 最后,如果用户的问题仍未解决,建议他们提供更多错误信息或代码片段,以便进步诊断。可能还需要检查logcat输出,查看具体的编译或运行时错误信息。</think>关于`yolov5ncnn_jni.cpp`代码中标红线的常见问题及解决方法,以下是逐步分析: --- ### **1. 头文件缺失问题** - **现象**:`#include`语句标红(如`jni.h`或`ncnn`相关头文件)。 - **原因**: - NDK路径未正确配置。 - ncnn库未正确安装或链接。 - **解决方案**: 1. 检查Android项目的`build.gradle`中NDK路径: ```gradle android { ndkPath "你的NDK绝对路径(例如/Users/xxx/Library/Android/sdk/ndk/25.2.9519653)" } ``` 2. 确认`CMakeLists.txt`中正确引入ncnn: ```cmake include_directories(${CMAKE_SOURCE_DIR}/src/main/jni/include/ncnn) # ncnn头文件路径 add_library(ncnn STATIC IMPORTED) set_target_properties(ncnn PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/jni/libs/${ANDROID_ABI}/libncnn.a) ``` --- ### **2. JNI函数签名错误** - **现象**:Java native方法映射的JNI函数标红。 - **原因**:函数名或参数类型不匹配。 - **解决方案**: 1. 检查Java层native方法: ```java public native void initYOLOv5(AssetManager mgr); // Java声明 ``` 2. 检查C++层JNI函数名和签名: ```cpp extern "C" JNIEXPORT void JNICALL Java_com_example_app_MyNCNN_initYOLOv5(JNIEnv *env, jobject thiz, jobject assetManager) { // 实现代码 } ``` 3. 确保包名、类名、方法名完全致。 --- ### **3. ncnn API版本不兼容** - **现象**:`ncnn::Mat`、`ncnn::Net`等对象操作标红。 - **原因**:ncnn库版本更新导致API变更。 - **解决方案**: 1. 检查ncnn的GitHub文档,确认函数是否弃用。 2. 常见API变更示例: - 旧版:`ncnn::Mat::from_pixels_resize()` - 新版:`ncnn::Mat::from_pixels_resize()`可能需要额外参数。 3. 建议锁定ncnn版本(如2021年后的稳定版本)。 --- ### **4. 语法或类型错误** - **现象**:变量定义、函数调用标红。 - **常见错误**: - 缺少分号或括号 - 未定义变量(如`cv::Mat`未引入OpenCV头文件) - **解决方案**: 1. 添加OpenCV头文件(如果用到): ```cpp #include <opencv2/core/core.hpp> ``` 2. 检查变量作用域: ```cpp void detect() { ncnn::Mat input; // 确保在使用前定义 // ... } ``` --- ### **5. CMake配置问题** - **现象**:整个文件标红,但代码逻辑正确。 - **解决方案**: 1. 清理并重建项目:`Build > Clean Project` + `Build > Rebuild Project` 2. 检查`CMakeLists.txt`是否链接ncnn: ```cmake target_link_libraries(yolov5ncnn_jni ncnn) ``` --- ### **调试建议** 1. 查看Android Studio的**Build Output**窗口,定位具体错误日志。 2. 运行`adb logcat`检查运行时崩溃信息。 3. 简化代码:注释掉部分代码,逐步排查标红位置。 如需进步帮助,请提供具体的代码片段和错误日志。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值