手把手教你yolov5
YOLOv5不是手把手教官方Ultralytics团队维护的版本,但它在GitHub上拿了二十几k的手把手教star。这事挺魔幻的手把手教——大家用着顺手,也就不管是手把手教不是亲生的了。你要是手把手教想跑通目标检测,这玩意儿确实是手把手教最省心的选择。
先装环境。手把手教Python 3.8以上,手把手教PyTorch 1.8+,手把手教然后git clone https://github.com/ultralytics/yolov5,手把手教进目录跑pip install -r requirements.txt。手把手教别用conda硬刚,手把手教容易出幺蛾子。手把手教我见过有人在这步卡了一下午,手把手教最后发现是手把手教numpy版本冲突——直接删了重装就好。
推理测试,拿官方权重试试手。命令行敲:
python detect.py --source data/images/bus.jpg --weights yolov5s.pt 第一次运行会自动下载权重文件,80MB左右,网速慢就抽根烟等会儿。跑完在runs/detect/exp里能看到标注好的图,框得还挺准。这里有个坑:如果你用的是CPU版PyTorch,速度会慢得让人怀疑人生,建议有显卡就上GPU版,哪怕是个1050Ti都比纯CPU强十倍。
训练自己的数据集才是重头戏。先准备数据——用LabelImg或者labelme标注,格式要转成YOLO的txt格式,每行是class_id x_center y_center width height,坐标都是归一化后的比例值。没有现成数据集的话,去Roboflow上找,它可以直接导出YOLOv5格式,省得自己写转换脚本。
目录结构得按官方要求摆:
datasets/ mydata/ images/ train/ val/ labels/ train/ val/ data.yaml data.yaml里写清楚类别数和类别名,路径用绝对路径最稳妥——相对路径在Windows上经常因为反斜杠问题报错。
训练命令长这样:
python train.py --data datasets/mydata/data.yaml --weights yolov5s.pt --epochs 100 --batch-size 16 这里有个细节:--weights参数用预训练权重做迁移学习,收敛快得多。你要是从零开始训,效果差且时间翻倍,除非你的数据集特别特殊,否则别这么做。
训练时盯着终端看loss曲线。我自己的经验是,前10个epoch loss下降很快,后面就磨磨蹭蹭。到第50个epoch左右,如果val精度还在涨,就让它跑完;如果已经平台期了,直接Ctrl+C,用--epochs 50重来也不亏。
训完的模型在runs/train/exp/weights/里,有best.pt和last.pt。用best.pt去测测试集,别手滑用了last——那货通常是过拟合的。
部署的时候,转成ONNX或者TensorRT能提速不少。YOLOv5官方仓库提供了export.py脚本:
python export.py --weights best.pt --include onnx 在Jetson Nano上,TensorRT比PyTorch直接跑快三倍,但配置过程略折腾,需要装一堆CUDA库。你要是只做demo,ONNX就够了,OpenCV的DNN模块能直接加载。
最后说点实在的:YOLOv5的调参空间不大,重点在数据质量。我试过把训练集里模糊的图片全删掉,mAP直接涨了4个点。别迷信网络结构改动,先把数据洗干净比什么都强。另外,小目标检测是它的弱项,如果你要检测远处的小物体,考虑把输入分辨率从640调到1280,代价是显存占用翻倍——看你显卡扛不扛得住。
跑通一遍流程后,你会觉得这东西其实挺无脑的。但正是这种无脑,让YOLOv5成了工业界的默认选项。毕竟在大多数场景下,稳定可复现比花哨的技巧更值钱。
(责任编辑:知识)














