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
原文地址:https://www.cnblogs.com/winslam/p/14760002.html