第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
⚠️ 注意: 千万别用CPU版本的PyTorch!我之前有个学生装错了,跑一个模型等了半小时还没出结果。检查方法:在Python里输入 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 服务器端
💡 小技巧: 如果你只是做Demo验证,用yolov8n.pt就够了。我一般先用nano模型调通流程,再换大模型提升精度。

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()
🔑 关键点: 第一次跑的时候,如果发现FPS(帧率)很低,别慌。检查一下是不是用了CPU推理。用 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应该能跑起来了。如果还有问题,别急,下一章咱们会深入讲解模型结构,到时候你就能理解为什么有些参数要这么设了。