本文采用的YOLOv5源码是ultralytics发行版3.1
YOLOv5源码测试与训练
1.Anaconda环境配置
1.1安装Anaconda
Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。
官方网址下载安装包:Free Download | Anaconda
开启终端安装
bash ~/Downloads/Anaconda3-2020.07-Linux-x86_64.sh
anaconda会自动将环境变量添加到PATH里面,但如果终端输入conda后,提示没有该命令。
可以自己配置环境变量。
sudo gedit ~/.bashrc
#在文件最后添加环境变量,保存退出,然后更新环境变量
export PATH=/home/meta/anaconda3/bin:$PATH
source ~/.bashrc
1.2conda虚拟环境中安装pytorch
首先创建虚拟环境,并激活
conda create -n yolov5_ultralytics python=3.7
conda activate yolov5_ultralytics
在新创建的虚拟环境下安装pytorch和其适配的cuda
conda install pytorch torchvision cudatoolkit=11.5 -c pytorch
2.下载项目文件到本地
2.1下载yolov5-ultralytics版本源码v3.1
Release v3.1 - Bug Fixes and Performance Improvements · ultralytics/yolov5 · GitHub
项目文件目录
2.2使用清华镜像源安装依赖包
在yolov5_ultralytics虚拟环境和yolov5项目目录下开启终端执行
终端进入虚拟环境命令,退出当前虚拟环境命令conda deactivate
conda activate yolov5_ultralytics
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
2.3下载预训练权重文件
yolov5s.pt,yolov5m.pt,yolov5l.pt,yolov5x.pt ,放置在weights文件夹下
2.4测试项目文件detect.py
终端执行
python detect.py --source ./inference/images/ --weights weights/yolov5s.pt --conf 0.4
将权重文件替换为yolov5x.pt后图片检测结果对比
3.准备VOC数据集
3.1从百度网盘下载VOC数据文件
- VOCtrainval_06-Nov-2007.tar
- VOCtrainval_11-May-2012.tar
- VOCtest_06-Nov-2007.tar
- get_voc_ubuntu.py
3个tar压缩包解压后组合成为一个文件夹VOCdevkit,将其拷贝到yolov5项目文件夹下。
3.2进行数据集的划分
终端执行python脚本,创建VOC文件夹,将数据文件转换为yolo格式
python get_voc_ubuntu.py
在VOCdevkit / VOC2007和VOCdevkit / VOC2012目录下生成了文件夹labels ;
在yolov5目录下生成了文件2007_train.txt, 2007_val.txt, 2007_test.txt, 2012_train.txt,2012_val.txt,train.txt, train.all.txt。
在VOC目录下生成了images和labels文件夹;
- labels下的文件是JPEGImages文件夹下每一个图像的yolo格式的标注文件,这是由annotations的xml标注文件转换来的
- yolov5目录下的train.txt和2007_test.txt分别给出了yolov5训练集图片和yolov5验证集图片的列表,含有每个图片的路径和文件名
- VOC/images文件夹下有train和val文件夹,分别放置yolov5训练集和验证集图片;VOC/labels文件夹有train和val文件夹,分别放置yolov5训练集和验证集标签(yolo格式)
4.修改配置文件
主要是修改data和models目录下的yaml文件
4.1新建data/voc.yaml
复制voc.yaml文件后修改,注释掉自动下载的代码即可。
4.2新建models/yolov5s-voc.yaml
复制yolov5s.yaml文件后修改,只需将类别数量改为nc: 20
5.终端训练VOC数据集
在yolov5_ultralytics虚拟环境和yolov5项目目录下
开启终端执行
python train.py --data data/voc-new.yaml --cfg models/yolov5s-voc.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 200
训练过程可视化
tensorboard --logdir=./runs
6.测试训练出的网络模型
在yolov5_ultralytics虚拟环境和yolov5项目目录下
开启终端执行,测试图片
python detect.py --source ./VOC/images/val/000001.jpg --weights
runs/exp0/weights/best.pt --conf 0.4
性能统计
python test.py --data data/voc-new.yaml --weights runs/exp0/weights/best.pt --batch-size 16
7.导出ONNX文件
ONNX(Open Neural Network Exchange),开放神经网络交换,是一种模型IR,用于在各种深度学习训练和推理框架转换的一个中间表示格式。在实际业务中,可以使用Pytorch或者TensorFlow训练模型,导出成ONNX格式,然后再转换成目标设备上支持的模型格式,比如TensorRT Engine、NCNN、MNN等格式。ONNX定义了一组和环境、平台均无关的模型结构和参数的标准格式,来增强各种AI模型的可交互性,开放性较强。
# for ONNX export
pip install onnx>=1.7.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# for CoreML export
pip install coremltools==4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple# export at 640x640 with batch size 1
python models/export.py --weights weights/yolov5s.pt --img 640 --batch 1