复现 YOLOv7 代码的步骤相对清晰,主要分为以下几个部分:
- 环境准备
- 克隆 YOLOv7 仓库
- 准备数据集
- 训练模型
- 验证和测试
- 推理(Inference)
下面是一个简化的流程来帮助你复现 YOLOv7 代码:
1. 环境准备
首先,你需要确保你有适当的 Python 环境。YOLOv7 使用 PyTorch,所以需要安装相应版本的 PyTorch。
# 创建 Python 虚拟环境(可选)
python3 -m venv yolo_env
source yolo_env/bin/activate # Linux/macOS
yolo_env\Scripts\activate # Windows
# 安装 PyTorch (请根据你的 CUDA 版本选择合适的版本)
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1
# 安装其他依赖
pip install -U pip setuptools
pip install -r requirements.txt
2. 克隆 YOLOv7 仓库
YOLOv7 的官方代码托管在 GitHub 上,可以通过以下命令克隆仓库:
git clone https://github.com/WongKinYiu/yolov7.git
cd yolov7
3. 准备数据集
YOLOv7 需要标准的数据集格式,通常是 YOLO 格式,数据集包括图片(如 .jpg
或 .png
)和标注文件(.txt
格式,文件中每行格式为:class_id x_center y_center width height
)。
如果你使用的是 COCO 或 VOC 格式的数据集,YOLOv7 也提供了转换脚本。假设你已经有数据集准备好(比如 COCO 数据集或你自己收集的标注),你可以将数据集放到适当的文件夹里,并确保标注格式符合 YOLOv7 的要求。
4. 训练模型
YOLOv7 提供了多种预训练模型(例如 yolov7.pt
),你可以直接使用预训练模型进行微调,也可以从头开始训练模型。
训练命令
假设你已经准备好数据集并配置了数据集路径,你可以开始训练。训练时需要指定数据配置文件(.yaml
格式)和配置的模型结构。
python train.py --img-size 640 --batch-size 16 --epochs 50 --data ./data/custom_data.yaml --cfg ./models/yolov7.yaml --weights 'yolov7.pt' --device 0
--img-size 640
:指定输入图像的尺寸。--batch-size 16
:指定每个训练批次的样本数。--epochs 50
:训练的轮数。--data
:数据集的配置文件(包含训练集、验证集的路径,以及类数等信息)。--cfg
:模型结构配置文件。--weights
:预训练权重路径,若不使用预训练权重可将其设为''
。--device
:指定训练的设备,0
为第一块 GPU,cpu
为使用 CPU。
5. 验证和测试
训练过程中,YOLOv7 会定期保存模型,并在训练后自动进行验证。你可以使用如下命令测试训练后的模型:
python test.py --weights runs/train/exp0/weights/best.pt --data ./data/custom_data.yaml --img-size 640 --conf-thres 0.001 --iou-thres 0.65 --task test
此命令会使用 best.pt
模型进行测试,并评估模型在测试集上的表现。
--weights
:指定训练好的权重文件。--task test
:执行测试任务。--conf-thres
:设置置信度阈值,低于该值的检测结果会被丢弃。--iou-thres
:IoU 阈值,用于 NMS(非极大值抑制)。
6. 推理(Inference)
当模型训练完毕并评估满意时,可以使用以下命令来进行推理(预测):
python detect.py --weights runs/train/exp0/weights/best.pt --img-size 640 --conf-thres 0.25 --source ./data/images
--source
:指定测试图片或视频的路径,可以是文件夹路径、单个图片文件路径、视频文件路径等。--weights
:使用训练好的模型进行推理。--img-size
:指定输入图像的尺寸。--conf-thres
:设置置信度阈值。
推理后,YOLOv7 会生成带有检测框的图片,并保存到指定目录。
结语
YOLOv7 复现的过程其实是比较直接的,官方提供的代码已经很清晰并且易于理解。你可以根据需求进行调整,选择合适的模型结构和训练策略来优化你的应用场景。