第1章:环境搭建与YOLO推理实战
1.1 为什么环境搭建是第一个坎?
说实话,我见过太多同学在环境配置上卡了两三天。明明代码逻辑都懂,结果一跑就报错。嗯,这很正常。
我个人习惯把环境搭建分成三步走:
- 第一步:装好PyTorch和CUDA —— 这是深度学习的基础设施
- 第二步:下载YOLOv8的预训练权重 —— 省去自己从头训练的时间
- 第三步:跑一个车辆检测Demo —— 验证整个链路是否通顺
你想想看,如果连Demo都跑不起来,后面那些模型优化、部署落地就更别谈了。所以这一章,咱们就把这个坎迈过去。
1.2 PyTorch/CUDA环境配置
先说说CUDA。CUDA是NVIDIA的并行计算平台,说白了就是让GPU帮你干活。没有它,你的显卡就是个摆设。
第一步:检查你的显卡
打开终端,输入:
nvidia-smi
如果能看到显卡信息,比如“NVIDIA GeForce RTX 3060”,那就说明驱动装好了。如果报错,去NVIDIA官网下载对应驱动。
第二步:安装CUDA Toolkit
我个人建议用CUDA 11.8或12.1,这两个版本兼容性最好。我在项目中遇到过用CUDA 12.0结果某些库不兼容的情况,折腾了半天。
安装命令(以CUDA 11.8为例):
# 创建虚拟环境(强烈推荐)
conda create -n yolo_env python=3.9
conda activate yolo_env
# 安装PyTorch(官方推荐方式)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
import torch; print(torch.cuda.is_available()),如果返回True,说明CUDA生效了。
1.3 下载YOLOv8预训练权重
YOLOv8是Ultralytics公司推出的最新版本。相比YOLOv5,它在小目标检测和推理速度上都有提升。我个人觉得,对于自动驾驶场景,YOLOv8的nano模型(yolov8n.pt)就够用了,轻量又快速。
下载方式很简单:
# 安装ultralytics库
pip install ultralytics
# 下载预训练权重(会自动下载到当前目录)
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # 自动下载
如果你网络不好,也可以手动下载。我曾经在客户现场,网络被防火墙限制,只能拿U盘拷权重文件。嗯,这种场景下,提前准备好离线包很重要。
预训练权重文件大小对比:
| 模型 | 大小 | 适用场景 |
|---|---|---|
| yolov8n.pt | 6.3 MB | 边缘设备、实时检测 |
| yolov8s.pt | 22.5 MB | 一般车载场景 |
| yolov8m.pt | 52.1 MB | 高精度需求 |
| yolov8l.pt | 87.6 MB | 服务器端 |
1.4 跑一个车辆检测Demo
好了,环境搭好了,权重也下载了。现在咱们来点真格的——用YOLOv8检测图片里的车辆。
先准备一张测试图片,比如从网上下载一张高速公路的照片。然后写代码:
from ultralytics import YOLO
import cv2
# 加载模型
model = YOLO('yolov8n.pt')
# 读取图片
img = cv2.imread('highway.jpg')
# 推理
results = model(img)
# 可视化结果
annotated_img = results[0].plot()
cv2.imshow('Vehicle Detection', annotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
跑完之后,你会看到图片上每个车辆都被框出来了,还标有置信度。比如“car 0.92”表示检测到一辆车,置信度92%。
为什么会这样?因为YOLOv8内部已经训练好了,它知道车长什么样。你想想看,它看过几百万张带标注的图片,早就记住了。
如果你用的是视频流(比如行车记录仪),代码也差不多:
cap = cv2.VideoCapture('road_video.mp4')
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model(frame)
annotated_frame = results[0].plot()
cv2.imshow('YOLOv8 Detection', annotated_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
model.to('cuda') 切换到GPU,速度能提升10倍以上。
1.5 避坑指南
我曾经在部署时遇到一个坑:模型在PC上跑得好好的,一上嵌入式设备就报错。后来发现是CUDA版本不匹配。所以这里总结几个常见问题:
- CUDA版本不一致: 用
nvidia-smi查看驱动支持的CUDA版本,再用nvcc --version查看实际安装的版本。两者要匹配。 - 显存不足: 如果报“CUDA out of memory”,试试减小batch size,或者换更小的模型(比如yolov8n)。
- OpenCV报错: 安装
pip install opencv-python即可,别装成opencv-contrib-python,那个太大。
嗯,到这里,你的YOLOv8车辆检测Demo应该能跑起来了。如果还有问题,别急,下一章咱们会深入讲解模型结构,到时候你就能理解为什么有些参数要这么设了。