YOLOv5 项目教程
作者:elfin 资料来源:
1、前言
项目自发布以来,直到现在仍然在不断改进模型、项目。作者的更新频率很大,很多问题都能够及时解决,当然问题也很多!到写稿此时,项目的device参数仍然无法正常工作,查看源码,作者的代码写的GPU设备控制比较复杂,修改源码也没有解决,可能我里解决就差一步了吧!在项目提交bug后,得到作者的及时回应,但是最后仍然没有解决。难道使用GPU必须从GPU:0开始吗?查看bug请点击。
ONNX (Open Neural Network Exchange)
开发式神经网络交换格式!
它是深度学习模型的一种标准,可使模型在不同框架间转移
TensorRT
英伟达官方提供的GPU版深度学习模型加速平台,可以和Tensor Serving一起部署模型,实现模型的快速运算,其特点是性能高、资源占用少。
1.1 模型训练
$ python train.py --batch-size 64 --data coco.yaml --weights yolov5l.pt --device 0,1
使用 --device 0,1指定多个GPU是没有用的!会衰减计算速度。推荐多GPU使用数据并行的方法。
$ python -m torch.distributed.launch --nproc_per_node 2 train.py --batch-size 64 --data coco.yaml --weights yolov5x.pt
--nproc_per_node: 指定你的GPU节点数;
--batch-size:这里的批量是总的批量,实际每个GPU的的batch为 64/32.
这里的处理方式和keras是一样的,采用数据并行可以提高我们的计算速度。
$ python -m torch.distributed.launch --nproc_per_node 2 train.py --batch-size 64 --data coco.yaml --cfg yolov5x.yaml --weights '' --device 2,3
数据并行运算的时候可以指定要使用的GPU: --device 2,3
$ python -m torch.distributed.launch --nproc_per_node 2 train.py --batch-size 64 --data coco.yaml --cfg yolov5x.yaml --weights '' --sync-bn
SyncBatchNorm多个GPU之间进行批量标准化!
下面介绍将模型转为ONNX模型,使用TensorRT部署……
2、yolov5模型转ONNX模型
2.1 环境准备
$ git clone https://github.com/ultralytics/yolov5 # clone repo
$ cd yolov5
$ pip install -r requirements.txt # base requirements
$ pip install onnx>=1.7.0 # for ONNX export
$ pip install coremltools==4.0 # for CoreML export
2.2 输出已训练的模型为ONNX模型
$ python models/export.py --weights yolov5x.pt --img 640 --batch 1 # export at 640x640 with batch size 1
export.py输出了三个模型,这里我们主要查看onnx模型!
使用https://netron.app/可以查看我们生成的ONNX模型结构。
文件中代码:
print('\nStarting ONNX export with onnx %s...'