共计 2496 个字符,预计需要花费 7 分钟才能阅读完成。
为什么目标检测值得学
目标检测能同时识别物体类别和位置,是智能监控的核心技术;在自动驾驶中实时检测行人车辆,直接关系生命安全;工业质检通过像素级定位缺陷,效率超人工十倍。掌握它,就拿到了 AI 落地的通行证。

模型选型:速度与精度的平衡术
- Faster R-CNN:两阶段检测标杆,mAP 高但速度慢(5FPS),适合服务器端部署
- SSD:单阶段多尺度检测,平衡性较好(22FPS@VOC),移动端友好
- YOLOv5:2023 年实测性价比之王,640 分辨率下可达 140FPS(RTX3090),训练代码开箱即用
实测对比:同一张 Tesla T4 显卡上,YOLOv5s 比 SSD 快 3 倍,mAP 仅低 2 个百分点
三分钟环境准备
AIStudio 已预装 PyTorch1.7+,只需两行代码激活环境:
!pip install -U torch==1.7.0 torchvision==0.8.1
!git clone https://github.com/ultralytics/yolov5
数据准备的黄金法则
格式转换黑科技
当你的数据是 VOC 格式时,用这个脚本一键生成 YOLO 格式:
# voc2yolo.py
import xml.etree.ElementTree as ET
import os
def convert(size, box):
dw = 1./size[0]
dh = 1./size[1]
x = (box[0] + box[1])/2.0
y = (box[2] + box[3])/2.0
w = box[1] - box[0]
h = box[3] - box[2]
x = x*dw
w = w*dw
y = y*dh
h = h*dh
return (x,y,w,h)
# 使用时注意修改 VOC 文件夹路径
数据标注自查清单
- 检查标签文件是否与图像一一对应
- 验证坐标是否归一化到 [0,1] 区间
- 确认类别索引从 0 开始连续编号
模型配置精要
修改 models/yolov5s.yaml 的关键参数:
# 控制模型深度和宽度
depth_multiple: 0.33 # 浅层网络适合小目标
width_multiple: 0.50 # 通道数压缩比
anchors:
- [10,13, 16,30, 33,23] # P3/8 小目标检测层
- [30,61, 62,45, 59,119] # P4/16
- [116,90, 156,198, 373,326] # P5/32
训练代码的隐藏参数
分布式训练加速技巧:
train.py
--batch-size 64
--device 0,1 # 指定多卡训练
--epochs 300
--data coco128.yaml
--weights yolov5s.pt
--hyp data/hyps/hyp.scratch-low.yaml # 调参秘籍
评估指标解密
mAP@0.5 的计算流程:
1. 对每个类别计算 PR 曲线
2. 计算曲线下面积(AP)
3. 所有类别 AP 取平均
实测技巧:验证时添加
--task study参数可分析最佳置信度阈值
性能优化三板斧
混合精度训练
在 AIStudio 的 A100 显卡上开启 FP16:
python train.py --batch 64 --device 0 --epochs 100 --data coco.yaml
--weights yolov5s.pt --hyp hyp.finetune.yaml --img 640 --adam
--patience 0 --batch-size 64 --workers 8 --project runs/train
--name exp --exist-ok --quad --cos-lr --sync-bn --noval --noautoanchor
--evolve 300 --bbox_interval 1 --save_period -1 --artifact_alias latest
--freeze 10 --multi-scale --single-cls --optimizer AdamW --lr0 0.0032
--fraction 0.2 --label-smoothing 0.1 --cache ram --image-weights
--patience 0 --seed 42 --local_rank 0 --fp16
数据增强组合拳
# data/hyps/hyp.scratch-low.yaml
hsv_h: 0.015 # 色相抖动
hsv_s: 0.7 # 饱和度增强
hsv_v: 0.4 # 明度变化
fliplr: 0.5 # 水平翻转
mosaic: 1.0 # 马赛克增强
mixup: 0.2 # 图像混合
显存不足救急方案
- 降低
--batch-size到 8 或 16 - 添加
--linear-lr降低初始学习率 - 使用
--cache disk替代 RAM 缓存
生产环境血泪史
标签错位终极解法
当发现预测框整体偏移时:
1. 检查标注工具是否使用 RGBA 格式导致坐标错位
2. 验证图像加载时是否自动旋转(EXIF 信息)
3. 排查数据增强是否引入异常变换
类别不平衡妙招
- 对稀少类别启用
--image-weights - 在 loss 计算时添加类别权重:
# utils/loss.py class ComputeLoss: def __init__(self, model, autobalance=False): self.cls_pw = torch.ones(nc) * 0.5 # 修改此处的权重系数
过拟合预警信号
- 训练 loss 持续下降但验证集 mAP 波动
- 预测时出现异常密集的重复框
- 在干净测试集上表现突然下降
模型导出实战
生成 ONNX 格式并验证:
python export.py
--weights runs/train/exp/weights/best.pt
--img 640 --batch 1
--device 0 --simplify --dynamic
# 验证导出结果
import onnxruntime
sess = onnxruntime.InferenceSession("yolov5s.onnx")
outputs = sess.run(None, {"images": dummy_input})
思考题进阶
- 当检测电梯按钮这类固定长宽比目标时,如何重新设计 Anchor Boxes?
- 将模型量化到 INT8 时,发现 mAP 下降 7%,有哪些补偿方案?
建议在 AIStudio 上创建「YOLOv5 调优实验室」项目实操验证
正文完
