zoukankan      html  css  js  c++  java
  • LibTorch实战六:C++版本YOLOV5.5(P6)的部署<三>

    一、更新理解

      YOLOV5.5在这个版本,基本上和YOLOV4分道扬镳。YOLOV5.5(YOLOV5-P6)相对于5.4(YOLOV5-P5)区别:5.4是3个尺度 的输出层,即:P3, P4, P5 at strides 8, 16, 32, trained at --img 640,而yolov5.5是4个输出层P3, P4, P5, P6 at strides 8, 16, 32, 64 trained at --img 1280;其中增加的 P6/64 输出层是为了检测大目标,对高分辨率图像训练效果更佳. For this reason we trained all P5 models at 640, and all P6 models at 1280.

      YOLOV5.5有8中模型,分别是:5s 5m 5l 5x(640*640),5s6 5m6 5l6 5x6(960*1280)。针对前面四种模型,我是用YOLOV5.4版本写好的模型导出脚本,libtorch加载导出模型都OK。另外有一点,我再强调下,U2NET在python环境下导出cpu模型,在libtorch环境下,

    你可以在GPU or CPU中任意加载;但是,咱们YOLOV5就不行,libtorch如果采用GPU方案,那么在python环境下就导出GPU模型,采用CPU,就导出CPU。

    模型转换,以GPU版本为例子:

    和之前5.4一样,设一个false、张量、Module放到CUDA中去,命令行修改如下:

    1 parser.add_argument('--weights', type=str, default='D://yolov5-4.0//yolov5l6.pt', help='weights path')  # from yolov5/models/
    2 parser.add_argument('--img-size', nargs='+', type=int, default=[960, 1280], help='image size')  # height, width

    提示:对于原来的模型分辨率依然是:[640,640]

    二、速度测试

    硬件:I7-8700 + P4000(8g) 

    软件:Libtorch1.8.1 + win

    1280(960*1280)

    yolov5s6:291 layers, 12653596 parameters, 0 gradients, 17.4 GFLOPS  推理时间:4+ms

    yolov5m6:396 layers, 35889612 parameters, 0 gradients, 52.4 GFLOPS      推理时间:5.5+ms

    yolov5x6:606 layers, 141755500 parameters, 0 gradients, 222.9 GFLOPS  推理时间:8.4+ms

    640(640*640):

    yolov5s: 224 layers, 7266973 parameters, 0 gradients, 17.0 GFLOPS    推理时间:3+ms

    yolov5m: 308 layers, 21356877 parameters, 0 gradients, 51.3 GFLOPS     推理时间:4.3+ms

    yolov5x:476 layers, 87730285 parameters, 0 gradients, 218.8 GFLOPS       推理时间:6.6+ms

     三、精度测试(pytorch vs libtorch)

       P5必须设置640分辨率,P6兼容640&1280。

    疑问:MLGB,老子libtorch环境下,采用P6模型,设置960*1280没问题,官方源码运行detect.py相同设置会崩溃,改为640却又可以。

    3.1、P5测试(5s、5m、5x)

    pytorch(仅给出5m-640,图片太J8大了,丢网盘了):

     libtorch(5m-640):

     结论:老子部署的效果比原版代码效果好,非常邪门,顺便conf-thr、iou-thr都是设置一样的。

     3.2、P6测试(5s6、5m6、5x6)

       由于官方源码测试1280导致崩溃,原因未知(在线读取却不崩溃,真实B了狗),暂时用640分辨率。还有就上面检测汽车的这张图,你妈的,5s6效果居然远远好于5m6、5x6,醉了。

    pytorch5s6-640):

     这张图原图分辨率:3840*2140,在detect.py命令行参数中设置1280分辨率会报错,手动将原图改为:960*1280就不报错,真实B了狗

     libtorch(5s6-1280):

    小结:个人觉得,YOLOV5.5有很多地方需要完善,项目部署,建议暂时以640分辨率为主。

    四、错误记录

    VPN问题:

      在转换模型的时候,如果你开了VPN,可能造成如下错误:

    1   File "D:yolov5-4.0utilsgoogle_utils.py", line 26, in attempt_download
    2     assets = [x['name'] for x in response['assets']]  # release assets, i.e. ['yolov5s.pt', 'yolov5m.pt', ...]
    3 KeyError: 'assets'

      原因是:google_utils.py文件中的函数 def attempt_download(weights)中有如下一句:

    response = requests.get('https://api.github.com/repos/ultralytics/yolov5/releases/latest').json()  # github api  

      其作用是:去指定网站自动检测模型是否是最新的模型文件,但是这S/B玩意。一开VPN就报上面错误。

     环境问题:

      在win上安装yolov5的conda虚拟环境时,出现这种错误:Failed building wheel for pycocotools,咱们直接编辑根目录中的requirments.txt文件,删除pycocotools,直接不装了。环境配好后,去链接:https://github.com/ultralytics/yolov5/releases  下载yolov5s6

    .pt yolov5m6.pt模型文件,咱们激活虚拟环境后,直接在pycharm中执行脚本detect.py,命令行参数如下:

    --weights  yolov5s6.pt   --source   D:1.jpg   --device  cpu   --img-size 1280

    注:新模型必须设置为1280 

    CV&DL
  • 相关阅读:
    c#函数重载
    (1).net c# 一步一步自己写三层代码生成器(主界面及连接数据库界面)
    C#给datagridview某行赋值(转)
    好的软件人员必看的六十本书
    C# 语言规范
    spring 排除指定的类或者包扫描
    java web spring 发送邮件
    spring-data-redis和jedis版本对应收集总结
    python 多线程和多进程基本写法
    python 调用nmap
  • 原文地址:https://www.cnblogs.com/winslam/p/14760002.html
Copyright © 2011-2022 走看看