栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ncnn yolov5.cpp切换yolov5n6模型

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ncnn yolov5.cpp切换yolov5n6模型

目录
    • 问题1:yolo模型转ncnn模型
    • 问题2:yolo5n6.param参数修改
    • anchor
      • anchor是什么?
      • anchor会放在哪?
      • yolov5n6 不要anchor 64参数会影响什么
      • 其它收获

背景: 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层输出,看效果是否有改善


anchor

网上看了很多篇文章,对新手来说都没有很好理解的,最终找到了这篇很不错:https://blog.csdn.net/qq_35054151/article/details/113011194
下面是其中以下核心的内容总结:

anchor是什么?

一组预设好不同大小、比例的框。例如三个尺度{128, 256, 512},三个比例{1:1,1:2,2:1},总共9个框

anchor会放在哪?

放在feature map每个点上。假设输入一张图片,经过各种卷积后,得到不同尺寸的特征图,4X4,2X2,1X1,那么就会在这些特征图每个点上放置这些anchor框,然后分别计算所有框里面是否有物体、类别、实际位置等。

yolov5n6 不要anchor 64参数会影响什么

所以前文说的yolov5n6模型里面这些参数,P3/4/5/6实际是不同feature map尺寸的anchor

anchors:
  - [19,27,  44,40,  38,94]  # P3/8
  - [96,68,  86,152,  180,137]  # P4/16
  - [140,301,  303,264,  238,542]  # P5/32
  - [436,615,  739,380,  925,792]  # P6/64

所以,P6对应的是64featuremap,是大尺寸特征图,anchor检测的是小尺寸目标! 如果不计算这层参数,影响就是丢失小目标

其它收获

anchor的大小、比例是预先定好的,所以如果实际目标比例和anchor设定的比例很不符的话,会影响检出。
所以我们训练模型时,设定的anchor,与实际图像比例、物体比例也有关系。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号