从零开始YOLOv5的识别示例
1. 环境配置
# Anaconda3.12下载安装:https://www.anaconda.com/download/success
# Path环境变量:D:\ProgramData\anaconda3\Scripts
conda create -n yolov5
activate yolov5
# YOLOv5:https://github.com/ultralytics/yolov5
git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 官方模型体验
# 官方权重文件验证官方图片
python detect.py --weights yolov5s.pt --source data/images/bus.jpg
# 本地摄像头
python detect.py --source 0
# 视频文件
python detect.py --source data/video/test_video.mp4
3. 自己图像标注
3.1 数据集准备
选择要识别的几个物品,收集20-50张不同角度图片
3.2 软件准备
pip install labelimg
mkdir test_img
mkdir test_label
labelimg
3.3 标签准备
按8-2比例将图片分为训练集和验证集,标注后生成YOLOv5所需的labels文件夹,结构如下:
test_dataset/
├── images/
│ ├── train/ # 训练图片
│ └── val/ # 验证图片
└── labels/
├── train/ # 训练标签
└── val/ # 验证标签
- VOC标签为xml文件
- yolo标签为txt文件
- createML标签为json格式
3.4 软件调试
可能因为版本原因,变量定义为float,函数调用要求int,做个类型转换即可。
#\Python313\Lib\site-packages\labelImg\labelimg.py : 965行
bar.setValue(int(bar.value() + bar.singleStep() * units))
# \Python313\Lib\site-packages\libs\canvas.py : 526 - 531行
p.drawLine(int(self.prev_point.x()), 0, int(self.prev_point.x()), int(self.pixmap.height()))
p.drawRect(int(left_top.x()), int(left_top.y()), int(rect_width), int(rect_height))
4. 自己模型训练
4.1 环境准备
pytorch安装,版本参考pytorch官网
全系统环境参考 感知识别算法的系统环境部署流程
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
pip install -r requirement.txt
4.2 创建配置文件
在data目录下创建test_dataset.yaml,指定数据集路径和类别:
path: test_dataset/images #数据集目录,相对于data目录
train: train #训练集目录,相对于path
val: val #验证集目录
nc: 2 # 类别数
names: # 类别名称
0: 木凳
1: 边牧
最终目录结构如下:
yolov5
├─data/
│ └── test_dataset.yaml # 配置文件
├─test_dataset/
├─ images/
│ ├── train/ # 训练图片
│ └── val/ # 验证图片
└─ labels/
├── train/ # 训练标签
└── val/ # 验证标签
4.3启动训练:
python train.py --epochs 30 --data data/test_dataset.yaml --weights yolov5s.pt
训练完成后,权重保存在runs/train/exp3/weights/best.pt。
5. 测试自己模型
python detect.py --weights runs/train/exp3/weights/best.pt --source data/images/test_image.jpg