1. 从零开始:环境搭建与数据集准备
大家好,我是老张,一个在AI和计算机视觉领域摸爬滚打了十来年的“老码农”。今天,我想和大家分享一个非常实用的项目:用最新的YOLOv11模型,在TT100K数据集上训练一个交通标志检测器。这活儿听起来挺唬人,但跟着我的步骤走,保证你从环境配置到模型训练,每一步都清清楚楚,哪怕你是刚入门的小白,也能亲手把这个系统跑起来。
咱们先聊聊为什么选这个组合。交通标志检测是自动驾驶和智能交通系统里的“眼睛”,至关重要。而TT100K数据集,是清华大学和腾讯联合搞出来的一个“宝藏”数据集,里面有超过10万张图,标注了海量的交通标志,场景覆盖了白天黑夜、晴天雨天,非常贴近真实路况。但它的挑战也很大——很多标志在图片里就指甲盖那么大,属于典型的小目标检测难题。这时候,YOLOv11的优势就体现出来了。我实测对比过YOLOv5、v8和v11,在同样的硬件条件下,v11在保持高速度的同时,对小目标的检测精度确实有肉眼可见的提升。所以,这个组合,可以说是“强强联手”。
工欲善其事,必先利其器。第一步,咱们得把环境搭好。我强烈建议使用Miniconda来管理Python环境,它能帮你把项目依赖隔离开,避免各种版本冲突的“玄学”问题。打开你的终端(Windows用Anaconda Prompt,Linux/Mac直接用终端),执行下面这几条命令:
conda create -n yolo11_tt100k python=3.8.5
conda activate yolo11_tt100k
环境建好了,名字叫yolo11_tt100k。接下来安装PyTorch,这是深度学习的基础框架。安装命令取决于你的显卡。如果你用的是30系或40系的NVIDIA显卡,CUDA版本建议选11.3或更高:
# 适用于CUDA 11.3的30/40系显卡
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch
如果你的显卡比较老,比如是10系或20系的,可以用CUDA 10.2的版本:
# 适用于CUDA 10.2的显卡
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch
要是你的电脑没有NVIDIA显卡,只能用CPU跑(速度会慢很多,但学习没问题),那就装CPU版本:
# CPU版本
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cpuonly -c pytorch
安装完PyTorch,咱们来搞定YOLOv11。Ultralytics官方已经把v11集成到了他们的ultralytics库里,安装非常方便。咱们直接pip安装就行,但为了确保能装上最新的v11,我建议从GitHub上拉取源码安装:
pip install ultralytics
或者,如果你想用最新的、可能包含实验性功能的版本,可以克隆仓库安装:
git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics
pip install -e . # 以“可编辑”模式安装,方便后续修改代码
环境装好了,接下来就是数据集。原始的TT100K数据集有300多个类别,但很多类别样本极少,直接拿来训练效果会很差。我已经帮大家处理好了,筛选出了其中42个常见、样本量足够的类别,比如限速标志(pl30, pl40)、停车让行标志(p3)、注意行人标志(w57)等等。你需要下载这个处理好的数据集,然后解压到一个你记得住的路径,比如我放在D:/datasets/tt100k_42。
数据集的结构是这样的:
tt100k_42/
├── images/
│ ├── train/ # 训练图片
│ └── val/ # 验证图片
└── labels/
├── train/ # 训练标签(YOLO格式的.txt文件)
└── val/ # 验证标签
关键一步来了,我们需要创建一个YAML配置文件,告诉YOLO去哪里找数据和有哪些类别。在项目根目录下创建一个新文件,比如叫tt100k_42.yaml,内容如下:
# tt100k_42.yaml
path: D:/datasets/tt100k_42 # 改成你自己的数据集绝对路径
train: images/train # 训练集图片相对路径
val: images/val # 验证集图片相对路径
# 类别数量
nc: 42
# 类别名称列表
names: ['i2','i4','i5','il100','i160','il80','io','ip','p10','p11',
'p12','p19','p23','p26','p27','p3','p5','pó','pg','ph4','ph4.5',
'pl100','pl120','pl20','pl30','pl40','pl5','pl50','pl60','pl70',
'pL80','pm20','pm30','pm55','pn','pne','po','pr40','w1


1055

被折叠的 条评论
为什么被折叠?



