快速搭建yolo测试环境,超简明的神经网络训练说明书
1 快速搭建yolo测试环境
相对于更早的版本,v5是比较舒服的,直接把仓库拉下来就行,不用单独搞测试脚本和权重文件
$ git clone https://github.com/ultralytics/yolov5.git
然后就是切到目录下安装依赖的第三方库:
$ cd yolov5
$ pip install -r requirements.txt
当然可能 clone 不顺畅, 就去github 上下载压缩包然后解压到这儿也是一样的,仓库链接是这个:
https://github.com/ultralytics/yolov5
然后就可以找个图片测试检测了:
$ python detect.py --source path_to_your_image.jpg
这里我找了个猪头,放在上一级目录中的:
运行命令:
$ python.exe .\detect.py --source ..\pig.png
输出如下:
虽然检测结果不咋地,橙色标注的是输出的结果,检测到鸟、狗和牛,就是没检测到猪,无语(ˉ▽ˉ;)…
如上图红色标注的信息所显示的那样,输出带标记的图片在yolov5-master/runs/exp2目录下。
下图更直观哈,可以参考下图去找输出的图片:
换了个车的图片,这个结果比较准确,检测到了车和驾驶室里的人,我一开始都没看到这个人
2 自行训练
三步走,准备数据集、配置 data.yaml 文件、运行训练命令
首先建立数据集,将数据集图片放到 train/ 和 val/ 子文件夹中,分别用于训练和验证,文件目录如下:
datasets/
└── dataset/├── images/│ ├── train/│ └── val/└── labels/├── train/└── val/
images/train目录下就是训练集的图片,如下图所示。这里简单找了一些猫狗的图片,用于说明训练步骤,实际上这几张图片肯定是不够的。
images/val/目录下也是图片,只不过是测试集的,要和训练集的不一样。
然后使用标注工具(如 LabelImg 或 CVAT)对图片中的目标进行标注。
LabelImg :https://github.com/HumanSignal/labelImg
CVAT:https://github.com/cvat-ai/cvat
注意标注文件格式为 YOLOv5 格式,以 .txt 格式存储,每个图片对应一个 .txt 文件,文件名与图片名相同。每个 .txt 文件的内容格式如下:
<class_id> <x_center> <y_center> <width> <height>
class_id:类别编号(从 0 开始)。
x_center 和 y_center:目标框的中心坐标,范围为 [0, 1]
width 和 height:目标框的宽度和高度,范围为 [0, 1]
比如这样:
然后在 datasets/your_dataset/ 文件夹中创建一个 data.yaml 文件,内容如下:
yaml
train: datasets/your_dataset/images/train # 训练集图片路径
val: datasets/your_dataset/images/val # 验证集图片路径nc: 3 # 类别数量(根据你的数据集修改)
names: ['cat', 'dog', 'person'] # 类别名称(根据你的数据集修改)
然后用下面这个命令开始训练模型,
python train.py --img 640 --batch 16 --epochs 100 --data datasets/your_dataset/data.yaml --weights yolov5s.pt
训练过程中,终端会显示每个 epoch 的损失值、精度等信息。
如上图提示信息说明的那样,训练完成后,模型权重会保存在 runs/train/exp/weights/ 文件夹下,下图可见有两个.pt文件,best.pt就是我们刚才指定的权重文件名,是我们训练的结果。
说明一下参数的含义:
--img 640:输入图片的尺寸(默认 640x640)。
--batch 16:批量大小(根据你的 GPU 显存调整)。
--epochs 100:训练的轮数。
--data datasets/your_dataset/data.yaml:数据集配置文件路径。
--weights yolov5s.pt:预训练权重文件(yolov5s.pt 是 YOLOv5 的小模型,其他可选模型包括 yolov5m.pt、yolov5l.pt 和 yolov5x.pt)。
训练完了就可以评估、测试模型了,
python val.py --data datasets/your_dataset/data.yaml --weights runs/train/exp/weights/best.pt --img 640
这个命令可以用测试集评估模型,–weights用于指定权重参数,就用刚才训练得到的那个就行。
3 使用
和一开始一样,指定输入就行。当然还要指定用我们训练得到的那个权重文件,当然也可以用其它的权重文件,只要和具体的任务目标相契合就行。检测没训练过的目标那肯定是不行的,新增检测类型是需要重新训练的。
python detect.py --source test_image.jpg --weights runs/train/exp/weights/best.pt --img 640