名称: senior-computer-vision
描述: 面向目标检测、图像分割和视觉AI系统的计算机视觉工程技能。涵盖CNN和Vision Transformer架构、YOLO/Faster R-CNN/DETR检测、Mask R-CNN/SAM分割,以及使用ONNX/TensorRT的生产部署。包含PyTorch、torchvision、Ultralytics、Detectron2和MMDetection框架。适用于构建检测流水线、训练定制模型、优化推理或部署视觉系统。
面向目标检测、图像分割和视觉AI系统部署的生产级计算机视觉工程技能。
# 为 YOLO 或 Faster R-CNN 生成训练配置
python scripts/vision_model_trainer.py models/ --task detection --arch yolov8
# 分析模型以寻找优化机会(量化、剪枝)
python scripts/inference_optimizer.py model.pt --target onnx --benchmark
# 构建带数据增强的数据集流水线
python scripts/dataset_pipeline_builder.py images/ --format coco --augment
本技能提供以下领域的指导:
| 类别 | 技术 |
|---|---|
| 框架 | PyTorch, torchvision, timm |
| 检测 | Ultralytics (YOLO), Detectron2, MMDetection |
| 分割 | segment-anything, mmsegmentation |
| 优化 | ONNX, TensorRT, OpenVINO, torch.compile |
| 图像处理 | OpenCV, Pillow, albumentations |
| 标注 | CVAT, Label Studio, Roboflow |
| 实验跟踪 | MLflow, Weights & Biases |
| 服务 | Triton Inference Server, TorchServe |
从零开始构建目标检测系统时使用此工作流。
分析检测任务需求:
检测需求分析:
- 目标物体:[列出需要检测的具体类别]
- 实时性要求:[是/否,目标FPS]
- 精度优先级:[速度与精度的权衡]
- 部署目标:[云端GPU、边缘设备、移动端]
- 数据集大小:[图像数量,每类标注数量]
根据需求选择架构:
| 需求 | 推荐架构 | 原因 |
|---|---|---|
| 实时 (>30 FPS) | YOLOv8/v11, RT-DETR | 单阶段,针对速度优化 |
| 高精度 | Faster R-CNN, DINO | 两阶段,定位更准 |
| 小物体检测 | YOLO + SAHI, Faster R-CNN + FPN | 多尺度检测 |
| 边缘部署 | YOLOv8n, MobileNetV3-SSD | 轻量级架构 |
| 基于Transformer | DETR, DINO, RT-DETR | 端到端,无需NMS |
将标注转换为所需格式:
# COCO 格式(推荐)
python scripts/dataset_pipeline_builder.py data/images/ \
--annotations data/labels/ \
--format coco \
--split 0.8 0.1 0.1 \
--output data/coco/
# 验证数据集
python -c "from pycocotools.coco import COCO; coco = COCO('data/coco/train.json'); print(f'图像数: {len(coco.imgs)}, 类别数: {len(coco.cats)}')"
生成训练配置:
# 用于 Ultralytics YOLO
python scripts/vision_model_trainer.py data/coco/ \
--task detection \
--arch yolov8m \
--epochs 100 \
--batch 16 \
--imgsz 640 \
--output configs/
# 用于 Detectron2
python scripts/vision_model_trainer.py data/coco/ \
--task detection \
--arch faster_rcnn_R_50_FPN \
--framework detectron2 \
--output configs/
# Ultralytics 训练
yolo detect train data=data.yaml model=yolov8m.pt epochs=100 imgsz=640
# Detectron2 训练
python train_net.py --config-file configs/faster_rcnn.yaml --num-gpus 1
# 在测试集上验证
yolo detect val model=runs/detect/train/weights/best.pt data=data.yaml
需要分析的关键指标:
| 指标 | 目标值 | 描述 |
|---|---|---|
| mAP@50 | >0.7 | IoU阈值为0.5时的平均精度均值 |
| mAP@50:95 | >0.5 | COCO主要指标 |
| 精确率 | >0.8 | 低误报率 |
| 召回率 | >0.8 | 低漏检率 |
| 推理时间 | <33ms | 针对30 FPS实时性 |
为生产部署准备已训练模型时使用此工作流。
# 测量当前模型性能
python scripts/inference_optimizer.py model.pt \
--benchmark \
--input-size 640 640 \
--batch-sizes 1 4 8 16 \
--warmup 10 \
--iterations 100
预期输出:
基准性能 (PyTorch FP32):
- 批大小 1:45.2ms (22.1 FPS)
- 批大小 4:89.4ms (44.7 FPS)
- 批大小 8:165.3ms (48.4 FPS)
- 内存:2.1 GB
- 参数量:25.9M
| 部署目标 | 优化路径 |
|---|---|
| NVIDIA GPU (云端) | PyTorch → ONNX → TensorRT FP16 |
| NVIDIA GPU (边缘) | PyTorch → TensorRT INT8 |
| Intel CPU | PyTorch → ONNX → OpenVINO |
| Apple Silicon | PyTorch → CoreML |
| 通用 CPU | PyTorch → ONNX Runtime |
| 移动端 | PyTorch → TFLite 或 ONNX Mobile |
# 使用动态批大小导出
python scripts/inference_optimizer.py model.pt \
--export onnx \
--input-size 640 640 \
--dynamic-batch \
--simplify \
--output model.onnx
# 验证 ONNX 模型
python -c "import onnx; model = onnx.load('model.onnx'); onnx.checker.check_model(model); print('ONNX 模型有效')"
使用校准数据进行 INT8 量化:
# 生成校准数据集
python scripts/inference_optimizer.py model.onnx \
--quantize int8 \
--calibration-data data/calibration/ \
--calibration-samples 500 \
--output model_int8.onnx
量化影响分析:
| 精度 | 模型大小 | 速度提升 | 精度损失 |
|---|---|---|---|
| FP32 | 100% | 1x | 0% |
| FP16 | 50% | 1.5-2x | <0.5% |
| INT8 | 25% | 2-4x | 1-3% |
# TensorRT (NVIDIA GPU)
trtexec --onnx=model.onnx --saveEngine=model.engine --fp16
# OpenVINO (Intel)
mo --input_model model.onnx --output_dir openvino/
# CoreML (Apple)
python -c "import coremltools as ct; model = ct.convert('model.onnx'); model.save('model.mlpackage')"
python scripts/inference_optimizer.py model.engine \
--benchmark \
--runtime tensorrt \
--compare model.pt
预期加速效果:
优化结果:
- 原始模型 (PyTorch FP32):45.2ms
- 优化后 (TensorRT FP16):12.8ms
- 加速比:3.5x
- 精度变化:-0.3% mAP
为训练准备计算机视觉数据集时使用此工作流。
# 分析图像数据集
python scripts/dataset_pipeline_builder.py data/raw/ \
--analyze \
--output analysis/
分析报告包含:
数据集分析:
- 总图像数:5,234
- 图像尺寸:640x480 至 4096x3072 (可变)
- 格式:JPEG (4,891), PNG (343)
- 损坏文件:12个
- 重复图像:45对
标注分析:
- 检测到的格式:Pascal VOC XML
- 总标注数:28,456
- 类别数:5 (汽车、行人、自行车、狗、猫)
- 分布:汽车 (12,340)、行人 (8,234)、自行车 (3,456)、狗 (2,890)、猫 (1,536)
- 无标注图像:234张
# 移除损坏和重复图像
python scripts/dataset_pipeline_builder.py data/raw/ \
--clean \
--remove-corrupted \
--remove-duplicates \
--output data/cleaned/
# 将 VOC 转换为 COCO 格式
python scripts/dataset_pipeline_builder.py data/cleaned/ \
--annotations data/annotations/ \
--input-format voc \
--output-format coco \
--output data/coco/
支持的格式转换:
| 源格式 | 目标格式 |
|---|---|
| Pascal VOC XML | COCO JSON |
| YOLO TXT | COCO JSON |
| COCO JSON | YOLO TXT |
| LabelMe JSON | COCO JSON |
| CVAT XML | COCO JSON |
# 生成增强配置
python scripts/dataset_pipeline_builder.py data/coco/ \
--augment \
--aug-config configs/augmentation.yaml \
--output data/augmented/
推荐用于检测的数据增强:
# configs/augmentation.yaml
augmentations:
geometric:
- horizontal_flip: { p: 0.5 }
- vertical_flip: { p: 0.1 } # 仅在方向无关时使用
- rotate: { limit: 15, p: 0.3 }
- scale: { scale_limit: 0.2, p: 0.5 }
color:
- brightness_contrast: { brightness_limit: 0.2, contrast_limit: 0.2, p: 0.5 }
- hue_saturation: { hue_shift_limit: 20, sat_shift_limit: 30, p: 0.3 }
- blur: { blur_limit: 3, p: 0.1 }
advanced:
- mosaic: { p: 0.5 } # YOLO风格马赛克
- mixup: { p: 0.1 } # 图像混合
- cutout: { num_holes: 8, max_h_size: 32, max_w_size: 32, p: 0.3 }
python scripts/dataset_pipeline_builder.py data/augmented/ \
--split 0.8 0.1 0.1 \
--stratify \
--seed 42 \
--output data/final/
划分策略指南:
| 数据集大小 | 训练集 | 验证集 | 测试集 |
|---|---|---|---|
| <1,000 张图像 | 70% | 15% | 15% |
| 1,000-10,000 | 80% | 10% | 10% |
| >10,000 | 90% | 5% | 5% |
# 用于 Ultralytics YOLO
python scripts/dataset_pipeline_builder.py data/final/ \
--generate-config yolo \
--output data.yaml
# 用于 Detectron2
python scripts/dataset_pipeline_builder.py data/final/ \
--generate-config detectron2 \
--output detectron2_config.py
| 架构 | 速度 | 精度 | 最佳适用场景 |
|---|---|---|---|
| YOLOv8n | 1.2ms | 37.3 mAP | 边缘、移动端、实时应用 |
| YOLOv8s | 2.1ms | 44.9 mAP | 速度与精度平衡 |
| YOLOv8m | 4.2ms | 50.2 mAP | 通用场景 |
| YOLOv8l | 6.8ms | 52.9 mAP | 高精度需求 |
| YOLOv8x | 10.1ms | 53.9 mAP | 最高精度需求 |
| RT-DETR-L | 5.3ms | 53.0 mAP | Transformer,无需NMS |
| Faster R-CNN R50 | 46ms | 40.2 mAP | 两阶段,高质量检测 |
| DINO-4scale | 85ms | 49.0 mAP | SOTA Transformer |
| 架构 | 类型 | 速度 | 最佳适用场景 |
|---|---|---|---|
| YOLOv8-seg | 实例分割 | 4.5ms | 实时实例分割 |
| Mask R-CNN | 实例分割 | 67ms | 高质量掩码 |
| SAM | 提示式分割 | 50ms | 零样本分割 |
| DeepLabV3+ | 语义分割 | 25ms | 场景解析 |
| SegFormer | 语义分割 | 15ms | 高效语义分割 |
| 方面 | CNN (YOLO, R-CNN) | ViT (DETR, DINO) |
|---|---|---|
| 所需训练数据 | 1K-10K 图像 | 10K-100K+ 图像 |
| 训练时间 | 快 | 慢(需要更多轮次) |
| 推理速度 | 更快 | 更慢 |
| 小物体检测 | 配合FPN效果佳 | 需要多尺度处理 |
| 全局上下文 | 有限 | 优秀 |
| 位置编码 | 隐式 | 显式 |
参见 references/computer_vision_architectures.md 了解:
参见 references/object_detection_optimization.md 了解:
参见 references/production_vision_systems.md 了解:
# 训练
yolo detect train data=coco.yaml model=yolov8m.pt epochs=100 imgsz=640
# 验证
yolo detect val model=best.pt data=coco.yaml
# 推理
yolo detect predict model=best.pt source=images/ save=True
# 导出
yolo export model=best.pt format=onnx simplify=True dynamic=True
```bash
python train_net.py