MMYOLO 目标检测快速入门指南:15分钟完成猫类检测
目标检测简介
目标检测是计算机视觉中的基础任务之一,它不仅能识别图像中的物体类别,还能精确标定物体的位置(通过边界框表示)。MMYOLO 是一个基于 PyTorch 的 YOLO 系列目标检测开源工具箱,支持多种 YOLO 变体算法。
环境配置
基础环境安装
首先需要准备 Python 和 PyTorch 环境:
conda create -n mmyolo python=3.8 -y
conda activate mmyolo
conda install pytorch torchvision -c pytorch
对于 CPU 用户,可以使用 cpuonly
版本的 PyTorch。
MMYOLO 安装
安装 MMYOLO 及其依赖:
pip install -U openmim
mim install -r requirements/mminstall.txt
mim install -r requirements/albu.txt
mim install -v -e .
注意:建议使用全新虚拟环境以避免与旧版本冲突。
数据集准备
本教程使用一个包含 144 张猫图片的小型数据集,数据已整理为 COCO 格式:
data/cat/
├── annotations/ # 标注文件
│ ├── trainval.json
│ └── test.json
└── images/ # 所有图片
可通过以下命令快速获取数据集:
python tools/misc/download_dataset.py --dataset-name cat --save-dir ./data/cat --unzip --delete
模型配置
我们以 YOLOv5-s 为例,针对小数据集调整了默认配置:
- Anchor 调整:根据数据集特点重新计算合适的 anchor
- 训练参数:从 8 卡×16 batch size 调整为单卡×12 batch size
- 训练周期:从 300 epoch 减少到 40 epoch
- Backbone 冻结:固定 backbone 权重防止小数据过拟合
配置文件主要修改项:
_base_ = 'yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py'
data_root = './data/cat/'
class_name = ('cat',)
num_classes = 1
max_epochs = 40
train_batch_size_per_gpu = 12
模型训练
启动训练命令:
python tools/train.py configs/yolov5/yolov5_s-v61_fast_1xb12-40e_cat.py
在 GTX 1660 显卡上,完整训练约需 8 分钟。训练过程中会输出损失值和评估指标。
训练技巧
- 恢复训练:添加
--resume
参数可从断点继续训练 - 节省显存:使用
--amp
开启混合精度训练 - 可视化:支持 WandB 和 TensorBoard 等多种后端
模型测试
评估训练好的模型:
python tools/test.py configs/yolov5/yolov5_s-v61_fast_1xb12-40e_cat.py \
work_dirs/yolov5_s-v61_fast_1xb12-40e_cat/epoch_40.pth \
--show-dir show_results
测试结果会保存在 show_results
目录,包含预测框与真实框的对比可视化。
特征可视化
MMYOLO 提供了特征图可视化工具,可用于分析模型表现:
# 可视化 backbone 特征
python demo/featmap_vis_demo.py data/cat/images/IMG_20221020_112705.jpg \
configs/yolov5/yolov5_s-v61_fast_1xb12-40e_cat.py \
work_dirs/yolov5_s-v61_fast_1xb12-40e_cat/epoch_40.pth \
--target-layers backbone
# Grad-CAM 可视化
python demo/boxam_vis_demo.py data/cat/images/IMG_20221020_112705.jpg \
configs/yolov5/yolov5_s-v61_fast_1xb12-40e_cat.py \
work_dirs/yolov5_s-v61_fast_1xb12-40e_cat/epoch_40.pth \
--target-layer neck.out_layers[2]
模型部署
MMYOLO 提供 EasyDeploy 工具简化模型部署流程:
- 导出 ONNX 模型:
python projects/easydeploy/tools/export_onnx.py \
configs/yolov5/yolov5_s-v61_fast_1xb12-40e_cat.py \
work_dirs/yolov5_s-v61_fast_1xb12-40e_cat/epoch_40.pth \
--work-dir work_dirs/yolov5_s-v61_fast_1xb12-40e_cat \
--img-size 640 640 --batch 1 --device cpu --simplify --opset 11
- TensorRT 转换:
python projects/easydeploy/tools/build_engine.py \
work_dirs/yolov5_s-v61_fast_1xb12-40e_cat/end2end.onnx \
--img-size 640 640 --device cuda:0
- 推理演示:
python projects/easydeploy/tools/image-demo.py \
data/cat/images/IMG_20210728_205312.jpg \
configs/yolov5/yolov5_s-v61_fast_1xb12-40e_cat.py \
work_dirs/yolov5_s-v61_fast_1xb12-40e_cat/end2end.engine \
--device cuda:0
总结
通过本教程,我们完成了从环境配置、数据准备、模型训练到部署的全流程。MMYOLO 提供了一套完整的工具链,即使是小数据集也能快速实现目标检测任务。对于实际应用场景,可以根据需求调整模型结构和训练参数以获得更好的性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考