以 YOLOv5 为例,搭建一个完整的目标检测系统通常需要以下 5 个核心步骤。我会为你进行一个详细的拆解:
步骤 1: 环境准备
首先,你需要一个能运行 YOLOv5 的计算机环境。推荐使用带有 NVIDIA 显卡的电脑,因为训练过程非常依赖 GPU 进行加速。
-
安装操作系统:
- 推荐使用 Ubuntu 18.04/20.04,Linux 系统在深度学习领域有更好的兼容性和性能。
- 如果你只有 Windows 电脑,也可以使用,但后续步骤会略有不同,且某些依赖库的安装可能更复杂。
-
安装 GPU 驱动、CUDA 和 cuDNN:
- GPU 驱动: 从 NVIDIA 官网下载并安装对应型号的显卡驱动。
- CUDA Toolkit: YOLOv5 依赖于 CUDA 进行 GPU 计算。需要安装与你的驱动和将要安装的 PyTorch 版本兼容的 CUDA(例如 CUDA 11.3)。
- cuDNN: NVIDIA 提供的深度学习加速库,需要与 CUDA 版本匹配。
-
安装 Anaconda (推荐):
-
Anaconda 可以方便地管理不同的 Python 环境,避免包版本冲突。
-
下载并安装 Anaconda 后,创建一个新的环境:
bashconda create -n yolov5 python=3.8 conda activate yolov5
-
-
克隆 YOLOv5 仓库并安装依赖:
-
打开终端,克隆 ultralytics 官方的 YOLOv5 仓库:
bashgit clone https://github.com/ultralytics/yolov5.git cd yolov5 -
安装所有必需的 Python 库。推荐使用
requirements.txt文件:bashpip install -r requirements.txt这会自动安装 PyTorch、TorchVision、OpenCV 等一系列库。
-
验证环境 :
在 YOLOv5 目录下,运行以下命令。如果能成功下载预训练权重并在屏幕上显示检测结果,说明你的环境配置成功了。
bash
python detect.py --source data/images/zidane.jpg --weights yolov5s.pt --conf 0.25
步骤 2: 数据准备与标注
这是最耗费人力但至关重要的一步。你需要为你的特定任务准备图像数据并进行标注。
-
收集图像:
- 收集大量包含你想要识别的物体的图像。图像应该尽可能多样化,包括不同的角度、光照条件、背景和物体姿态。
- 一个好的起点是收集几百到上千张高质量图像。
-
标注数据:
-
你需要使用标注工具在图像上框出物体,并为每个框分配一个类别标签。
-
推荐工具 :
- LabelImg : 一个简单易用的图形化标注工具,生成 YOLO 格式的
.txt文件。 - CVAT: 一个更强大的在线标注平台,支持团队协作,适合大规模项目。
- LabelImg : 一个简单易用的图形化标注工具,生成 YOLO 格式的
-
标注格式 : YOLO 使用一种特定的文本格式。对于每张图片
image.jpg,会有一个对应的image.txt文件,其中每一行代表一个物体:<class_id> <x_center> <y_center> <width> <height>class_id: 物体类别的索引(从 0 开始)。x_center,y_center,width,height: 归一化后的坐标(范围在 0 到 1 之间)。
-
-
组织数据集目录:
-
将你的数据集按照以下结构组织,这是 YOLOv5 推荐的格式:
/path/to/your/dataset ├── images │ ├── train │ │ ├── image1.jpg │ │ └── image2.jpg │ └── val │ ├── image3.jpg │ └── image4.jpg └── labels ├── train │ ├── image1.txt │ └── image2.txt └── val ├── image3.txt └── image4.txt -
训练集 (train): 用于训练模型的主要数据(通常占 80-90%)。
-
验证集 (val): 用于在训练过程中评估模型性能,防止过拟合(通常占 10-20%)。
-
步骤 3: 配置文件修改
在开始训练前,你需要修改两个关键的配置文件。
-
创建数据集配置文件:
-
在
yolov5/data/目录下,复制一个现有的配置文件(如coco128.yaml)并改名,例如my_custom_data.yaml。 -
打开
my_custom_data.yaml并修改以下内容:yaml# train and val data paths train: /path/to/your/dataset/images/train # 训练集图片目录的绝对路径 val: /path/to/your/dataset/images/val # 验证集图片目录的绝对路径 # number of classes nc: 2 # 你的数据集有多少个类别 (例如,识别苹果和橙子,nc=2) # class names names: ['Apple', 'Orange'] # 类别名称列表,顺序必须和标注时的 class_id 对应
-
-
选择并修改模型配置文件:
- YOLOv5 提供了多个不同大小的模型(
yolov5s.yaml,yolov5m.yaml,yolov5l.yaml,yolov5x.yaml)。s代表 small,模型最小,速度最快,但精度可能稍低。对于初学者,建议从yolov5s.yaml开始。 - 打开你选择的模型配置文件(如
models/yolov5s.yaml)。 - 只需要修改一个地方 : 将
nc: 80(默认是 COCO 数据集的 80 个类别) 修改为你的数据集的类别数,例如nc: 2。
- YOLOv5 提供了多个不同大小的模型(
步骤 4: 开始训练
一切准备就绪后,就可以启动训练了。在 YOLOv5 根目录下运行以下命令:
bash
python train.py --img 640 --batch 16 --epochs 100 --data my_custom_data.yaml --weights yolov5s.pt --cache
命令参数解释:
--img 640: 训练时将图像缩放至 640x640 像素。--batch 16: 每个批次处理 16 张图片。这个值受限于你的 GPU 显存,显存越大,batch可以设置得越大。如果显存不足,可以减小它,例如--batch 8或--batch 4。--epochs 100: 训练将进行 100 个轮次。一个轮次意味着模型将学习完整个训练数据集一次。--data my_custom_data.yaml: 指定你刚刚创建的数据集配置文件。--weights yolov5s.pt: 指定预训练权重。使用yolov5s.pt可以让模型在 COCO 数据集上的知识基础上进行迁移学习 ,这会极大地加快训练速度并提高最终性能。如果你想从零开始训练(不推荐),可以使用--weights ''。--cache: 将数据集缓存到内存中,加速训练。
训练过程中:
- 你会看到一个进度条,显示当前的轮次、损失值(loss)等信息。
- 训练过程中的结果(如模型权重、验证集上的预测图像)会保存在
runs/train/exp/目录下(每次运行train.py,exp会递增为exp1,exp2等)。 - 训练结束后,最佳的模型权重会被保存为
best.pt,最后一轮的权重为last.pt。
步骤 5: 使用训练好的模型进行检测
训练完成后,你可以使用 best.pt 这个最佳模型来对新的图片或视频进行预测。
bash
python detect.py --source path/to/your/test_image.jpg --weights runs/train/exp/weights/best.pt --conf 0.4
命令参数解释:
--source path/to/your/test_image.jpg: 指定输入源。可以是单张图片、一个图片目录、一段视频,甚至是电脑的摄像头 (--source 0)。--weights runs/train/exp/weights/best.pt: 指定你训练好的模型权重文件的路径。--conf 0.4: 设置置信度阈值。只有检测框的置信度高于 0.4 时,才会被显示出来。
查看结果 :
检测结果图像或视频会保存在 runs/detect/exp/ 目录下。打开后,你就能看到你的模型在新数据上的识别效果了!
后续优化
模型第一次训练的结果可能并不完美。你可以通过以下方式进行迭代优化:
- 分析结果 : 查看
runs/train/exp/目录下的results.png,它展示了训练过程中各项指标的变化曲线。如果验证集的指标(如 mAP)不再提升甚至下降,说明可能发生了过拟合。 - 增加数据: 收集更多、更具多样性的图像数据是最有效的改进方法。
- 检查标注: 回顾你的标注数据,确保没有错误(如漏标、错标、框位置不准确)。
- 调整超参数 : 你可以修改
data/hyps/hyp.scratch-low.yaml等超参数文件,然后在训练时通过--hyp参数指定它,以探索更好的模型性能。 - 尝试更大的模型 : 如果
yolov5s的精度不够,可以尝试yolov5m或yolov5l,它们拥有更深、更宽的网络,能学习到更复杂的特征,但训练和推理速度会变慢。
按照以上步骤,你就可以成功地使用 YOLOv5 训练出一个属于你自己的物体识别模型了。祝你成功!