0 创建虚拟环境
conda create -n lifting_yolo11 python=3.10 -y
1 T4的cuda信息
1.1 Tesla T4 先确认显卡和驱动:
输入命令nvidia-smi和nvcc -V
显示如下:
(base) yili@yili-asr2:/mnt/1E84006284003F31/jonesky2025-2026$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Wed_Jun__2_19:15:15_PDT_2021
Cuda compilation tools, release 11.4, V11.4.48
Build cuda_11.4.r11.4/compiler.30033411_0
1.2 环境搭建
显示 Tesla T4,且 CUDA Version 为 11.4
事实 1:pytorch1.13.1官方没有 cu114 预编译 whl 包,之前这里是我的错误,不要用 cu114。
事实 2:PyTorch2.0 及以上,官方预编译包最低 cu117,你的机器不能直接 pip 装 2.x。
事实 3:cu113 编译的 pytorch,可以跑在系统 nvcc11.4,只要驱动≥470(向下兼容)。
事实 4(采用方案):
CUDA Runtime 是向下兼容:
cu113编译出来的 pytorch,可以跑在系统 CUDA Toolkit 11.4 环境,只要驱动版本≥470
pytorch1.13.1 没有 cu113 的官方 whl;pytorch1.12.1 才有 cu113 官方预编译 whl。
到官网https://pytorch.org/get-started/previous-versions/ 上面搜11.3,发现conda和pip安装的两个命令,我们选较新torch1.12
ultralytics 版本严格锁死
8.3.0,更高版本不兼容 torch1.12,因为yolo11是ultralytics8.3.0正式发布的,官方当时给的要求必须大于等于这个版本
开始安装
1.先安装torch\torchvision\torchaudio
方式1:在线安装,很慢
pip install torch==1.12.1+cu113 torchvision==0.13.1 torchaudio==0.12.1 \ --extra-index-url https://download.pytorch.org/whl/cu113 \ --resume-retries 20 --retries 20--resume‑retries开启断点续传,不用每次从头下载。
方式2:离线安装(本次采用这个)
1)你自己电脑浏览器下载这 3 个 whl
- torch:
https://download.pytorch.org/whl/cu113/torch-1.12.1%2Bcu113-cp310-cp310-linux_x86_64.whl - torchvision:
https://download.pytorch.org/whl/cu113/torchvision-0.13.1%2Bcu113-cp310-cp310-linux_x86_64.whl - torchaudio:
https://download.pytorch.org/whl/cu113/torchaudio-0.12.1%2Bcu113-cp310-cp310-linux_x86_64.whl
注意:cp310 对应你的 python3.10;linux_x86_64 服务器版本。
2)把 3 个.whl文件上传到服务器,放到你当前目录
建议严格按照 torch → torchvision → torchaudio 的顺序 pip install torch-1.12.1+cu113-cp310-cp310-linux_x86_64.whl pip install ./torchvision-0.13.1+cu113-cp310-cp310-linux_x86_64.whl pip install ./torchaudio-0.12.1+cu113-cp310-cp310-linux_x86_64.whl2.后续其他包安装
pip install ultralytics==8.3.0 pip install "tensorboard<3.0" -i https://pypi.tuna.tsinghua.edu.cn/simple 输入 yolo checks ,报错ModuleNotFoundError: No module named 'numpy.core.multiarray' 解决如下: pip uninstall numpy opencv-python opencv-python-headless -y pip install numpy==1.23.5 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install opencv-python-headless==4.8.1.78 -i https://pypi.tuna.tsinghua.edu.cn/simple # 校验numpy python -c "import numpy; print('numpy:',numpy.__version__)" # 校验opencv python -c "import cv2; print('cv2:',cv2.__version__)" # ultralytics整体环境检查 yolo checks如果这些全部正常,你的环境基本就是:
服务器 NVIDIA Driver ↓ 最高 CUDA 11.4 Conda lifting_yolo11 ↓ Python 3.10 ↓ PyTorch 1.12.1 ↓ CUDA Runtime 11.3 ↓ Ultralytics 8.3.0 ↓ YOLO111.3 检查ultralytics安装是否成功
yolo checks
再查看版本
yolo version
顺便检查torch
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
2 yolo11预训练模型准备
本项目正式基线训练使用 Ultralytics 官方的 COCO 预训练权重:yolo11s.pt
其中:
yolo11表示 YOLO11 系列。s表示 Small 规模,精度、速度和 T4 显存占用比较均衡。.pt是 PyTorch 权重文件。
方式1:无需准备
- 训练命令中的
model=yolo11s.pt会让 Ultralytics 在当前目录找不到该文件时自动从官方地址下载,因此联网环境不必提前手工下载: - 参数model直接等于模型名词即可
方式2:提前下好模型
官网模型下载:
方式1:https://github.com/ultralytics/assets/releases/tag/v8.3.0
方式2:Ultralytics YOLO11 | Ultralytics 然后点击Performance下面具体的yolo11s或yolo11m,调整具体页面,然后点右上角clone model即可下载
训练时,参数指定具体模型路径: model=..\..\weights\yolo11s.pt
3 数据检查
3.1 图片数量和标注文件数量核对
cd /mnt/1E84006284003F31/jonesky2025-2026/1.起重作业项目/模型训练/yolo_dataset
#统计train图片数量 ls -1 ./images/train | wc -l #统计train标签数量 ls -1 ./labels/train | wc -l #统计val图片数量 ls -1 ./images/val | wc -l #统计val标签数量 ls -1 ./labels/val | wc -l3.2 文件命名检查
扫描 4 个数据集文件夹,找出文件名包含中文、空格、全角字符的文件并打印完整路径。 YOLO 数据集严禁文件名带中文、空格,会导致训练读取异常、标签匹配失败。
find ./images/train ./images/val ./labels/train ./labels/val -maxdepth 1 -type f | perl -ne 'chomp; $fn = $1 if /\/([^\/]+)$/; print "$_\n" if $fn =~ /\s|[^\x20-\x7E]/'4 模型训练
4.1 参数说明
| 参数 | 含义说明 | 补充 / 适配当前环境 |
|---|---|---|
model=yolo11s.pt | 预训练权重文件;yolo11s = 小模型,速度快、精度中等;yolo11m 更大精度更高 | 无网络手动上传文件到当前目录;自动下载失败可离线导入 |
data=data.yaml | 数据集配置文件路径,包含训练 / 验证集路径、类别名称、类别总数 | 当前目录直接读取,文件内path: .适配本机路径 |
epochs=150 | 完整训练轮次,模型完整遍历全部图片 150 次 | 轮数越大拟合越好,但容易过拟合;配合 patience 早停 |
imgsz=960 | 输入网络图片统一分辨率,长宽都缩放至 960 像素 | 960 识别小物体更好,但显存占用大幅提升;OOM 报错改成 640 |
batch=8 | 单次 GPU 并行训练图片数量(批次大小) | 显存不足优先降到 4/2;越大训练收敛越快 |
device=0 | 指定使用的 GPU 编号,0 代表第一张显卡 | 无 GPU 环境改为device=cpu;多卡填0,1 |
workers=4 | 数据加载进程数,多线程读取本地图片加速训练 | Linux 推荐 4;Windows 必须 = 0;出现 dataloader 管道报错改为 0 |
patience=30 | 早停机制:连续 30 轮验证集 mAP 无提升,自动终止训练 | 防止过拟合,节约训练时间;设 0 关闭早停 |
optimizer=auto | 优化器选择,auto 默认使用 AdamW | 可选:SGD、Adam;AdamW 对目标检测收敛更稳 |
cos_lr=True | 开启余弦退火学习率调度 | 训练初期学习率高快速收敛,后期缓慢下降精细调优;False 则固定步长衰减 |
mosaic=0 | 马赛克数据增强开关;1 开启、0 关闭 | PyTorch1.12.1 老旧版本开启会算子报错,强制关闭 |
mixup=0 | 图片混合增强,两张图融合生成新样本;0 关闭 | 同上,老 Torch 环境兼容,全程禁用 |
copy_paste=0 | 复制粘贴增强,复制物体粘贴到其他图扩充样本;0 关闭 | 开启会引发旧框架报错,固定设 0 |
project=../../runs/detect | 训练结果根目录 | ../是 Linux 上级目录,代表训练结果存在数据集上两级文件夹,不污染数据集 |
name=lift_yolo11s_img960_e150 | 本次实验文件夹名称 | 权重、曲线图、预测图、日志都会存在../../runs/detect/lift_yolo11s_img960_e150 |
注意:
close_mosaic=20:前 20 轮关闭马赛克,20 轮后自动开启为什么删掉:你的 PyTorch1.12.1 不支持 mosaic 增强,20 轮后开启会直接训练崩溃,因此该参数不可使用,全程固定mosaic=0。- Mosaic 是 YOLO 系列经典数据增强手段,操作逻辑: 随机选取4 张训练图片,分别裁剪目标区域,拼接成一张新大图,再随机缩放、翻转、色彩扰动。 简单说:1 张合成图 = 4 张原图混合。
- 虽然永不了
mosaic,但是可用其他早期版本的参数实现类似功能,适配 ultralytics==8.3.0 + PyTorch1.12.1,新增补偿增强参数,标注补偿用途
hsv_h=0.015 hsv_s=0.7 hsv_v=0.4 # 色彩抖动(亮度/饱和度/色相随机变换) flipud=0.0 fliplr=0.5 # 左右翻转(上下翻转关闭,起重设备上下颠倒无意义) scale=0.5 # 随机缩放,模拟远近物体| 参数 | 详细含义 | 环境适配 & 特殊说明 |
|---|---|---|
model=yolo11s.pt | 训练初始化预训练权重;s 为轻量模型,速度快、精度中等 | 自动下载权重,无外网可手动上传至当前目录 |
data=data.yaml | 数据集配置文件,定义训练 / 验证路径、目标类别 | 当前目录读取,文件内path: .适配数据集根目录 |
epochs=200 | 完整遍历数据集的总训练轮次 | 提升轮次弥补关闭 mosaic 带来的特征学习不足 |
imgsz=960 | 输入网络图像统一缩放分辨率 | 高分辨率强化吊钩、小人等小目标识别,抵消无 mosaic 的劣势 |
batch=8 | 单次 GPU 并行训练图片数量 | 显存溢出可下调为 4/2 |
device=0 | 指定使用 GPU 卡号,0 代表第一张显卡 | 无 GPU 则改为device=cpu |
workers=4 | 数据加载多进程数量 | Linux 推荐 4;出现加载报错改为 0 |
patience=50 | 早停阈值:连续 50 轮 val 指标不提升则停止训练 | 延长早停等待,给模型充足学习时间 |
optimizer=auto | 优化器,auto 默认 AdamW | 收敛稳定,适合检测任务 |
cos_lr=True | 开启余弦退火学习率 | 前期大步快速拟合,后期精细微调目标特征 |
mosaic=0 | 马赛克增强开关,0 = 关闭 | PyTorch1.12.1 强制关闭,开启会训练报错崩溃 |
mixup=0 | 图像混合增强开关,0 = 关闭 | 老旧 PyTorch 算子不兼容,必须禁用 |
copy_paste=0 | 物体复制粘贴增强,0 = 关闭 | 老旧 PyTorch 算子不兼容,必须禁用 |
hsv_h=0.015 | HSV 色相随机扰动幅度 | 【mosaic 补偿增强,兼容 PyTorch1.12.1】随机改变画面色调,适应工地不同光照、色差 |
hsv_s=0.7 | HSV 饱和度随机扰动幅度 | 【mosaic 补偿增强,兼容 PyTorch1.12.】随机增减画面鲜艳度,应对阴天 / 强光拍摄画面 |
hsv_v=0.4 | HSV 亮度随机扰动幅度 | 【mosaic 补偿增强,兼容 PyTorch1.12.1】模拟逆光、阴影、强光等工地复杂光线 |
flipud=0.0 | 上下翻转概率 0 = 不开启 | 【mosaic 补偿增强,兼容 PyTorch1.12.1】起重设备上下颠倒不符合真实工况,禁用避免引入无效样本 |
fliplr=0.5 | 左右翻转概率 50% | 【mosaic 补偿增强,兼容 PyTorch1.12.1】设备左右镜像属于合理工况,扩充样本多样性 |
scale=0.5 | 随机缩放系数 | 【mosaic 补偿增强,兼容 PyTorch1.12.1】随机放大缩小图像,模拟远距离 / 近距离拍摄,弥补小目标训练不足 |
project=../../runs/detect | 训练结果根目录 | Linux 路径写法,结果保存在数据集上级两级文件夹 |
name=lift_yolo11s_img960_e200 | 本次实验文件夹名 | 权重、训练曲线、预测图全部存到此文件夹 |
4.2 模型训练命令
- 无数据增强版的模型训练命令
cd /mnt/1E84006284003F31/jonesky2025-2026/1.起重作业项目/模型训练/yolo_dataset yolo detect train \ model=yolo11s.pt \ data=data.yaml \ epochs=150 \ imgsz=960 \ batch=8 \ device=0 \ workers=4 \ patience=30 \ optimizer=auto \ cos_lr=True \ mosaic=0 \ mixup=0 \ copy_paste=0 \ project=../../runs/detect \ name=lift_yolo11s_img960_e150- 数据增强版的模型训练命令(先用这版试试)
cd /mnt/1E84006284003F31/jonesky2025-2026/1.起重作业项目/模型训练/yolo_dataset yolo detect train \ model=yolo11s.pt \ data=data.yaml \ epochs=200 \ imgsz=960 \ batch=8 \ device=0 \ workers=4 \ patience=50 \ optimizer=auto \ cos_lr=True \ mosaic=0 \ mixup=0 \ copy_paste=0 \ hsv_h=0.015 \ hsv_s=0.7 \ hsv_v=0.4 \ fliplr=0.5 \ scale=0.5 \ project=../../runs/detect \ name=lift_yolo11s_img960_e200