用YOLO11做了个目标检测项目,附完整步骤
1. 这不是又一个“安装教程”,而是真正在跑通的实操记录
你可能已经看过不少YOLO系列的介绍文章——讲架构、列参数、贴性能对比图。但真正卡在“我的代码跑不起来”“训练没反应”“推理结果全是空框”的人,从来不在少数。
这篇文章不一样。它不讲YOLO11有多先进,也不堆砌mAP和GFLOPs数据。它只记录我在真实镜像环境里,从打开终端到看到第一个检测框的全过程:哪些命令必须敲、哪些路径不能错、哪些报错能忽略、哪些提示意味着成功。所有操作均基于你手头已有的YOLO11镜像(含完整可运行环境),无需额外配置CUDA或PyTorch,开箱即用。
如果你正对着黑乎乎的终端发愁,不知道下一步该cd进哪个文件夹,或者train.py运行后屏幕静默三分钟——请放心往下看。每一步,我都替你试过了。
2. 镜像启动后,第一件事不是写代码,是确认环境
别急着跑模型。先花30秒确认你真的站在了正确的起点上。
2.1 进入项目主目录
镜像文档明确写了这行命令:
cd ultralytics-8.3.9/请务必执行。这不是可选项。YOLO11的训练脚本、配置文件、权重都在这个目录下。如果你跳过这步,在家目录或jupyter根目录直接运行python train.py,会得到清晰但冰冷的报错:
ModuleNotFoundError: No module named 'ultralytics'或更隐蔽的:
FileNotFoundError: [Errno 2] No such file or directory: 'train.py'执行后,用ls快速扫一眼关键文件是否存在:
ls -l你应该看到类似这些内容(不必完全一致,但核心文件名要对得上):
drwxr-xr-x 4 root root 4096 Dec 15 10:22 ultralytics/ -rw-r--r-- 1 root root 123 Dec 15 10:22 train.py -rw-r--r-- 1 root root 456 Dec 15 10:22 detect.py -rw-r--r-- 1 root root 789 Dec 15 10:22 coco8.yaml看到train.py、detect.py、coco8.yaml和ultralytics/文件夹,说明环境就绪。
2.2 检查Python与Ultralytics版本
虽然镜像是预装好的,但多一重验证更安心。运行:
python --version pip list | grep ultralytics预期输出(版本号可能略有浮动,但ultralytics必须在列表中):
Python 3.10.12 ultralytics 8.3.9如果ultralytics没出现,说明镜像环境异常,请重启实例并重试第一步。不要尝试手动pip install——镜像已固化依赖,强行安装可能破坏环境一致性。
3. 用最简方式,让YOLO11“动”起来
别一上来就训COCO。先让模型“说句话”,证明它听懂了你的指令。
3.1 一行命令,完成首次推理
在ultralytics-8.3.9/目录下,执行:
python detect.py --source assets/bus.jpg --weights yolov11n.pt --conf 0.25 --imgsz 640注意几个关键点:
--source assets/bus.jpg:镜像自带示例图,路径固定,别自己找图替换;--weights yolov11n.pt:使用轻量级预训练权重,启动最快;--conf 0.25:降低置信度阈值,避免因默认0.5太高而“看不见框”;--imgsz 640:统一输入尺寸,兼容性最好。
运行后,你会看到类似这样的日志流:
Ultralytics YOLOv11 Python-3.10.12 torch-2.3.0+cu121 CUDA:0 (Tesla T4) ... Results saved to runs/detect/predict成功标志:终端末尾出现Results saved to runs/detect/predict,且runs/detect/predict/目录下生成了bus.jpg(带红框的检测结果图)。
小技巧:如果想立刻查看效果,不用下载图片。在Jupyter中新建notebook,输入:
from IPython.display import Image, display display(Image('runs/detect/predict/bus.jpg'))红框、标签、置信度分数一目了然。
3.2 如果卡住或报错?先看这三点
| 现象 | 最可能原因 | 解决动作 |
|---|---|---|
| 终端长时间无输出,光标闪烁 | GPU未被识别或显存不足 | 执行nvidia-smi,确认有GPU进程;改用yolov11n.pt(最小模型)重试 |
报错No module named 'ultralytics' | 不在ultralytics-8.3.9/目录 | 执行cd ultralytics-8.3.9/,再运行命令 |
报错File not found: yolov11n.pt | 权重文件名拼写错误 | 镜像内实际文件名是yolo11n.pt(不是yolov11n.pt!),修正为--weights yolo11n.pt |
记住:YOLO11的权重文件前缀是yolo11,不是yolov11。这是官方命名,也是新手最容易输错的地方。
4. 训练自己的数据:从准备到收敛,只改3个地方
很多教程把数据集准备说得云山雾罩。其实对于YOLO11,只要结构对,两分钟就能搭好。
4.1 数据集目录结构,严格按这个来
假设你要训一个“检测办公室椅子”的小项目,数据放在my_chair/目录下。它的结构必须是:
my_chair/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ └── img2.jpg │ └── val/ │ ├── img3.jpg │ └── img4.jpg ├── labels/ │ ├── train/ │ │ ├── img1.txt │ │ └── img2.txt │ └── val/ │ ├── img3.txt │ └── img4.txt └── my_chair.yaml关键细节:
images/和labels/必须同级;train/和val/子目录必须存在(哪怕val/里只有1张图);.txt标签文件必须与同名.jpg在同一级目录(如img1.jpg对应img1.txt);my_chair.yaml是你的数据集配置文件,内容极简:
train: ../my_chair/images/train val: ../my_chair/images/val nc: 1 names: ['chair']
nc: 1表示1个类别;names: ['chair']是类别名,必须是列表格式,单类别也加方括号。
4.2 修改训练脚本,只动3行
打开train.py,找到这几行(通常在文件末尾附近):
if __name__ == '__main__': model = YOLO('yolo11n.pt') results = model.train(data='coco8.yaml', epochs=100, imgsz=640)改成:
if __name__ == '__main__': model = YOLO('yolo11n.pt') # 保持不变 results = model.train(data='../my_chair/my_chair.yaml', epochs=50, imgsz=640)仅3处修改:
data=路径指向你的my_chair.yaml(注意..返回上一级);epochs=50:小数据集50轮足够,避免过拟合;- 其他参数(
imgsz,batch,device)全部保留默认,不碰。
保存文件,运行:
python train.py你会看到实时训练日志,包括每轮的box_loss,cls_loss,mAP50-95等指标。训练完成后,模型自动保存在runs/train/exp/weights/best.pt。
成功标志:runs/train/exp/weights/目录下出现best.pt和last.pt两个文件。
5. 验证效果:用自己训的模型,检测新图
训练完不验证,等于没训。用刚生成的best.pt跑一次检测:
python detect.py --source assets/zidane.jpg --weights runs/train/exp/weights/best.pt --conf 0.3--source换成任意你想测的图(assets/下还有zidane.jpg,dog.jpg);--weights指向你训出的best.pt;--conf 0.3略微调低阈值,让结果更丰富。
结果图同样保存在runs/detect/predict/下。打开它,看红框是否精准落在椅子上——这才是闭环的最后一环。
6. 常见问题直击:那些文档里没写的“坑”
6.1 Jupyter里跑不起来train.py?换种姿势
镜像支持Jupyter,但直接在notebook里!python train.py常因路径或环境变量失败。推荐做法:
- 在Jupyter左侧文件浏览器,进入
ultralytics-8.3.9/目录; - 新建一个
.py文件(如my_train.py),把修改后的训练代码粘贴进去; - 在终端(非notebook)中执行:
cd ultralytics-8.3.9 && python my_train.py。
这样既利用Jupyter编辑便利,又保证执行环境纯净。
6.2 训练中途断了,能续吗?
能。YOLO11原生支持断点续训。只需把train.py里的model.train(...)改成:
results = model.train( data='../my_chair/my_chair.yaml', epochs=100, imgsz=640, resume=True # 👈 加这一行 )它会自动读取runs/train/exp/weights/last.pt继续训练。
6.3 想换GPU设备?不用改代码
镜像已预装CUDA驱动。若机器有多个GPU,只需在命令后加:
python train.py --device 1 # 使用第1号GPU(编号从0开始)或指定多卡:
python train.py --device 0,1 # 同时用GPU 0和1无需修改Python代码,命令行参数直接生效。
7. 总结:你刚刚完成的,是一套可复用的目标检测工作流
回顾一下,你亲手走通了:
- 环境确认:cd进对目录、验证ultralytics可用;
- 快速验证:一行命令跑通预训练模型推理;
- 数据准备:建立标准YOLO格式数据集,写极简yaml;
- 模型训练:修改3个参数,启动训练并获得best.pt;
- 效果验证:用自训模型检测新图,闭环验证。
这五步,就是工业界落地YOLO项目的最小可行路径。它不追求SOTA精度,但保证100%可运行、可调试、可交付。后续你可以:
- 把
yolo11n.pt换成yolo11m.pt提升精度; - 在
my_chair.yaml里增加test: ../my_chair/images/test做最终评估; - 用
model.export(format='onnx')导出ONNX部署到边缘设备。
技术的价值,永远在于它能否解决眼前的问题。而你现在,已经拥有了那个“能解决问题”的能力。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。