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

一、更新理解

  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.

LibTorch实战六:C++版本YOLOV5.5(P6)的部署<三>_ide

  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。

LibTorch实战六:C++版本YOLOV5.5(P6)的部署<三>_python_02

模型转换,以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, width1.2.

提示:对于原来的模型分辨率依然是:[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实战六:C++版本YOLOV5.5(P6)的部署<三>_命令行参数_03

 

 

 libtorch(5m-640):

LibTorch实战六:C++版本YOLOV5.5(P6)的部署<三>_github_04

 

 

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

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

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

pytorch(5s6-640):

 这张图原图分辨率:3840*2140,在detect.py命令行参数中设置1280分辨率会报错,手动将原图改为:960*1280就不报错,真实B了狗LibTorch实战六:C++版本YOLOV5.5(P6)的部署<三>_虚拟环境_05

 

 libtorch(5s6-1280):

LibTorch实战六:C++版本YOLOV5.5(P6)的部署<三>_github_06

 

 

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

四、错误记录

VPN问题:

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

1   File "D:\yolov5-4.0\utils\google_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'1.2.3.

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

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

  其作用是:去指定网站自动检测模型是否是最新的模型文件,但是这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 12801.

注:新模型必须设置为1280 

 

CV&DL

免责声明:文章转载自《LibTorch实战六:C++版本YOLOV5.5(P6)的部署》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python测试开发工具库汇总(转载)JavaScript,获取第二天的日期下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

javascript 九宫格图片随机打乱位置

  今天就做个九宫格的简易拼图,最让我头疼的就是点击开始打乱图片位置。一开始在百度查看相关博客,走了很多弯路。最后看了众多的例子,自己写了个方法。 1 <script> 2 //打乱图片方法 3 function fun(){ 4 var x = []; 5 var y ; 6...

webpack3向4升级中具体问题及解决办法

据说webpack4同比webpack旧版本构建速度提示至少一倍,于是开始webpack升级的尝试。 webpack4已经出来很长时间了,手头有一个基于webpack3的微信公众号项目,在项目的空档期自己在一个开发分支上做了webpack3向4的迁移。   首先将webpack升级到了4.28.2版本,因为线上项目基于webpack3的版本且为全局安装,不...

git 安装 和 基本操作

林纳斯的小故事 感兴趣的同学可以自己百度一下 版本控制常用svn git @@@svn 1 搭建环境 server:visualSVN Serverserver port: https 默认443http 默认端口80 2 svn的常用操作 3 svn版本 文件的常用状态 svn已经时很老的版本控制工具了,这里的教程就不再赘述其方法,google上有很多...

Kubernetes之应用升级回滚弹性伸缩

  通过命令可以替换镜像升级 kubectl set image   以上一篇的web.yaml为例    把镜像替换成nginx kubectl set image deployment web java=nginx   三个副本滚动升级,新容器处于运行状态会删除旧容器      再次访问无法访问了    因为之前java的后端端口是80...

Ubuntu 18.04及Snap体验——让Linux入门更简单(转))

https://www.linuxidc.com/Linux/2018-06/152993.htm 初次听说过Linux的时候,是大一计算机课时候老师介绍说除了Windows还有Linux、Unix操作系统。但真正接触Linux是为管理虚拟专用服务器(VPS),都说Ubuntu适合新手于是接触了是Ubuntu 10.10(Maverick Meerkat)...

CentOS7安装ruby2.6.3

最近学redis集群搭建,需要安装ruby。用yum安装的版本过低。需要升级。试过离线安装,总是不成功。在安装的时候总是报编译错误. 三天了,也不知道问题出在哪儿。 参考了两篇博文,终于通过rvm成功将ruby升级到了最新版.现记录一下步骤. 一 安装ruby  1 查看系统当前ruby版本,可知未安装ruby   ruby -v   2 通过yum安装...