yolov5模型部署到安卓手机

845 阅读1分钟

@TOC

1. 训练安全帽yolov5s模型

2. 安全帽模型部署到安卓app

2.1 导出需要的onnx文件

  1. 修改export.py文件 export_helmet_yolov5s_my.py文件由export.py复制而来,修改data、weights
# data:训练模型的data
parser.add_argument('--data', type=str, default=ROOT / 'data/mydata_helmet/mydata.yaml', help='dataset.yaml path')
# 训练好的模型:第一步得到安全帽的yolov5s模型
parser.add_argument('--weights', type=str, default=ROOT / 'weights/my_models/helmet/yolov5s/train/exp2/weights/best.pt', help='weights path')

修改export.py文件 2. 生成 onnx 文件 执行脚本会在模型文件夹下生成best.onnxbest.torchscript.pt两个文件

python export_helmet_yolov5s_my.py --train
  1. 对onnx文件进行压缩
python -m onnxsim best.onnx best-sim.onnx

2.2 将onnx文件转化成param文件

a. 简单粗暴的:使用工具 yolov5_002.jpg b. 使用ncnn 编译ncnn,目的是生成 onnx 转 ncnn 的命令行工具

git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
mkdir build
cd build
cmake ..
make -j8
make install

编译完成后,把你的best-sim.onnx文件放在ncnn-master/build/tools/onnx文件夹下,执行下面的命令,会生成两个文件yolov5s.param和 yolov5s.bin

./onnx2ncnn best-sim.onnx yolov5s.param yolov5s.bin

3. 部署模型到安卓手机

将生成的yolov5s.bin、yolov5s.param文件放到assets文件夹下并替换原来的

  1. 修改param文件 将Reshape 后面对应的0=6400、0=1600、0=400均修改为0=-1,如图 yolov5_003.jpg yolov5_004.jpg

  2. 修改yolov5ncnn_jni.cpp文件

  • 将分类类别名与自己模型对应起来
    yolov5_005.jpg

  • 修改stride 16和32部分 yolov5_005.jpg

  1. 编译运行,生成app,导入手机可以使用 yolov5s_006.jpg yolov5s_008.jpg

4. app源码下载

代码结构如下图,源代码下载:yolov5模型部署到安卓手机

yolov5_009.jpg