06 配置与使用
6.1 安装
1 | cd /home/cp/work2/visualAlgo/YOLO/yolov5-7.0 |
PyTorch 是否带 CUDA,应按本机驱动从 PyTorch 官方安装对应版本。仅执行 requirements.txt 不保证获得正确的 CUDA wheel。
验证环境:
1 | python - <<'PY' |
6.2 权重
源码目录不等于权重包。常用权重:
1 | yolov5n.pt 最小最快 |
传入不存在的官方权重名时,attempt_download() 会尝试下载。离线机器应提前复制 .pt。
也可执行:
1 | bash data/scripts/download_weights.sh |
6.3 快速检测
1 | python detect.py \ |
结果默认写入:
1 | runs/detect/exp/ |
常见 source:
1 | --source image.jpg |
常见选项:
1 | --save-txt # 保存 class xywh |
6.4 自定义数据集
目录:
1 | datasets/mydata/ |
data/mydata.yaml:
1 | path: ../datasets/mydata |
标签:
1 | 0 0.512 0.480 0.200 0.350 |
含义为 class cx cy w h,坐标归一化。类别必须从 0 连续编号,且小于 nc。
6.5 训练
迁移学习
1 | python train.py \ |
从零训练
1 | python train.py \ |
自动 Batch
单 GPU 可使用:
1 | --batch-size -1 |
冻结 Backbone
1 | --freeze 10 |
表示冻结模型前 10 层,适合小数据集初期迁移。
6.6 恢复训练
1 | python train.py --resume runs/train/exp/weights/last.pt |
恢复需要 last.pt 中仍包含:
- epoch
- optimizer
- EMA
- opt/hyp
训练结束时 strip_optimizer() 会移除优化器状态并转 FP16;被 strip 的部署权重不适合完整恢复。
6.7 多 GPU DDP
1 | python -m torch.distributed.run \ |
源码明确不推荐传统 DataParallel。DDP 的 batch-size 是总 batch,会按 WORLD_SIZE 分给各 GPU。
6.8 验证
1 | python val.py \ |
主要输出:
验证时低 conf-thres 是为了保留完整 PR 曲线,不等同于部署阈值。
6.9 分割
1 | python segment/train.py \ |
6.10 分类
1 | python classify/train.py \ |
6.11 PyTorch Hub
本地源码(以下直接传图片的写法适用于检测模型;v7.0 的分类/分割模型不会自动套用 AutoShape):
1 | import torch |
若输入是 OpenCV 数组,AutoShape 注释期望 RGB:
1 | rgb = cv2.imread("image.jpg")[:, :, ::-1] |
仓库中的 sample_detect.py 是该模式的最小示例。
6.12 导出
ONNX
1 | python export.py \ |
TensorRT
1 | python export.py \ |
OpenVINO
1 | python export.py --weights best.pt --include openvino |
其他 --include 格式见:
1 | python export.py --help |
6.13 ONNX + OpenCV DNN
1 | python detect.py \ |
这会让 DetectMultiBackend 调用 cv2.dnn.readNetFromONNX(),而不是 ONNX Runtime。
6.14 常见问题
yolov5s.pt 不存在
源码没有内置权重。联网时自动下载;离线时手动放到当前目录或传绝对路径。
CUDA 不可用
检查:
1 | torch.cuda.is_available() |
若为 False,通常是安装了 CPU 版 PyTorch、驱动不匹配或容器没挂 GPU。
标签越界
日志出现:
1 | Label class X exceeds nc=N |
说明标签类别 ID 大于数据集 YAML 中类别数,或类别不是从 0 开始。
OOM
依次尝试:
- 减小
--batch-size - 减小
--img - 使用
--batch-size -1 - 使用更小模型
- 关闭 cache 或改 disk
框映射不准
不要直接把网络输入坐标画到原图;必须用 scale_boxes() 消除 Letterbox 的缩放和 padding。
RK3588 NPU
.pt 默认只能走 PyTorch CPU/GPU。RK3588 NPU 通常要:
1 | .pt → ONNX → RKNN → RKNN Runtime |
--device 不能让 PyTorch .pt 自动运行在 RK NPU。
正在加载留言…