window10 c++ LibTorch yolov5 gpu 配置

研究了一下午,记个笔记备忘。
Release x64
基本的设置是按照下面这个一步步实现的。
【Libtorch入门】使用C++部署YOLOv5目标检测

测试运行成功后,当我以为完成的时候发现,速度跟python下的相差有点大,再一对比检测时cpu和gpu的使用率发现,使用的还是cpu模式的。
然后又是一顿网上冲浪。
结论:大概是自带的yolov5s.torchscript.pt文件默认cpu模式的。(可能也不是,我只记得我是怎么一步步走过来的,全忘了为什么)
所以需要先使用python版本的models文件夹下的export.py重新导出一个。
导出前还要修改一下export.py文件(三处)
github上有具体方法

  1. model.model[-1].export = False
  2. model = attempt_load(opt.weights, map_location=torch.device(‘cuda’))
  3. img = torch.zeros((opt.batch_size, 3, opt.img_size)).to(device=‘cuda’)
    然后在打开cmd,并转到yolov5的路径:
    python models/export.py --weights ./weights/yolov5s.pt --img 640 --batch 1
    如果weights里没有模式文件会自动下载,就是有点慢。
    注意:这里导出的模型默认图片是640
    640,使用时记得修改resize里的大小。也可以直接修改export.py里面的默认值。找到[640,640],修改成你想要的[高,宽],没错,就是[高,宽],别填反了。然后执行:
    python models/export.py --weights ./weights/yolov5s.pt --batch 1

用刚刚生成的yolov5s.torchscript.pt替换掉原来YOLOv5-LibTorch-master自带的

这时还有一个问题gpu模式得到的preds是不能直接给cpu使用的。所以在调用 non_max_suppression前,需要先用.to(at::kCPU)转换一下。

测试运行成功,真的成功了么。然后我又又又发现不能进行循环检测。只能检测第一张图,第二张还是会报错。想了好久没想到原因,网上有说还是gpu的结果不能给cpu使用的问题,他好像是每次都clone一次model解决了问题。。。。
我直接大力出奇迹 把libtorch的lib文件夹里的dll文件全复制到运行目录,居然成功了。。。

后话:github上有提及 GPU模式有一个类似预热的过程,前几次的速度会比较慢,后面会进入正常的速度。(回头想想上面错误的原因可能和这个有关,就是缺少了相关文件。。)

你可能感兴趣的:(pytorch,深度学习)