从零配置 YOLOv8 GPU 加速环境(RTX 2080 + Windows)完整教程
一、环境准备
1.1 确认显卡和驱动
打开 PowerShell 或 CMD,运行:
powershell
nvidia-smi
正常输出类似:
highlighter-
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 591.86 Driver Version: 591.86 CUDA Version: 13.1 | +-----------------------------------------+------------------------+----------------------+ | GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC | | 0 NVIDIA GeForce RTX 2080 WDDM | 00000000:01:00.0 On | N/A | | | | MIG | +-----------------------------------------+------------------------+----------------------+
关键信息:
- Driver Version:你的显卡驱动版本,591.86 够新
- CUDA Version:驱动支持的最高 CUDA 版本(这里是 13.1),你实际安装的 CUDA Toolkit 版本可以低于这个数
如果nvidia-smi报错,说明:
- 没装 NVIDIA 驱动 → 去 NVIDIA 官网 下载安装
- 驱动太旧 → 更新到最新版
1.2 确认 Python
确保已安装Python 3.8 ~ 3.11(推荐 3.10):
powershell
python --version
本教程使用路径:C:\ZCY\WK\wkpy\Python310\python.exe
没有 Python?去 python.org 下载,安装时勾选"Add Python to PATH"。
二、创建虚拟环境
为什么要用虚拟环境?避免深度学习依赖(PyTorch、CUDA 库)污染你的全局 Python 环境。
powershell
# 创建目录 mkdir C:\ZCY\WK\wkpy\YOLO mkdir C:\ZCY\WK\wkpy\YOLO\env mkdir C:\ZCY\WK\wkpy\YOLO\test # 创建虚拟环境 C:\ZCY\WK\wkpy\Python310\python.exe -m venv C:\ZCY\WK\wkpy\YOLO\env
创建完成后,目录结构:
highlighter- Bash
C:\ZCY\WK\wkpy\YOLO\ ├── env\ ← 虚拟环境 └── test\ ← 测试文件(模型、脚本、视频)
激活虚拟环境(以后每次用 YOLO 都要先激活):
powershell
C:\ZCY\WK\wkpy\YOLO\env\Scripts\activate
激活后,命令行前面会多一个(env)标识:
highlighter-
(env) PS C:\>
退出虚拟环境:输入
deactivate
三、安装 CUDA 版 PyTorch
这是最关键的一步。必须安装带 CUDA 支持的 PyTorch,否则只能用 CPU(速度慢几十倍)。
3.1 选择 CUDA 版本
| 你的显卡 | 推荐 CUDA 版本 | 安装命令后缀 |
|---|---|---|
| RTX 20 系列 | CUDA 12.1 | cu121 |
| RTX 30 系列 | CUDA 12.1 | cu121 |
| RTX 40 系列 | CUDA 12.1 或 12.4 | cu121/cu124 |
3.2 执行安装
powershell
# 确保已激活虚拟环境 C:\ZCY\WK\wkpy\YOLO\env\Scripts\activate # 安装 PyTorch + torchvision + torchaudio(CUDA 12.1) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
⏱ 下载约 2~3 GB,取决于网速可能需要 5~15 分钟。
3.3 国内镜像加速(可选)
如果官方源下载太慢,使用清华镜像:
powershell
pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
⚠️ 国内镜像可能不是最新版本,建议先试官方源。
四、安装 Ultralytics (YOLOv8)
powershell
pip install ultralytics
Ultralytics 是 YOLOv8 的官方包,安装后自带yolo命令行工具。
五、验证 GPU 可用
python
import torch print("PyTorch 版本:", torch.__version__) print("CUDA 是否可用:", torch.cuda.is_available()) # 应输出 True print("CUDA 版本:", torch.version.cuda) # 应输出 12.1 print("GPU 名称:", torch.cuda.get_device_name(0)) # 应输出你的显卡型号 print("显存大小:", round(torch.cuda.get_device_properties(0).total_mem / 1024**3), "GB")预期输出:
highlighter- Python
PyTorch 版本: 2.5.1+cu121 CUDA 是否可用: True CUDA 版本: 12.1 GPU 名称: NVIDIA GeForce RTX 2080 显存大小: 8 GB
如果
CUDA 是否可用输出False,说明安装的是 CPU 版 PyTorch,需要回到第三步重新安装cu121版本。
六、视频检测实战
6.1 命令行方式
最简单的用法,一行命令搞定:
powershell
# 激活环境 C:\ZCY\WK\wkpy\YOLO\env\Scripts\activate # 基础用法 yolo detect predict model=yolov8n.pt source=你的视频.mp4 device=0 # 指定输出目录 yolo detect predict model=yolov8n.pt source=你的视频.mp4 device=0 project=C:\ZCY\WK\wkpy\YOLO\test # 更多参数 yolo detect predict model=yolov8n.pt source=你的视频.mp4 device=0 conf=0.5 imgsz=1280 save=True
结果保存在project/predict/目录下。
6.2 Python 脚本方式
创建run_detect.py,所有参数集中管理,方便复用:
python
""" YOLOv8 视频目标检测脚本 ======================== 用法:C:\ZCY\WK\wkpy\YOLO\env\Scripts\python.exe run_detect.py """ from ultralytics import YOLO # ============ 核心参数配置(只需改这里) ============ # 输入源:视频文件 / 图片 / 文件夹 / 摄像头(0) / RTSP流 source = r"C:\ZCY\WK\wkpy\YOLO\test\DJI_20260129175226_0065_W.MP4" # 模型:yolov8n / yolov8s / yolov8m / yolov8l / yolov8x model_file = "yolov8n.pt" # 设备:0=GPU, "cpu"=CPU device = 0 # 置信度阈值:0~1,越高越严格(建议 0.25~0.5) conf = 0.25 # IoU 阈值:同一物体重叠框合并(建议 0.45) iou = 0.45 # 推理尺寸:640(默认)/ 1280(高精度) imgsz = 640 # 是否保存结果 save = True # 输出目录 project = r"C:\ZCY\WK\wkpy\YOLO\test" # 跳帧:1=每帧都检测,2=隔1帧检测(速度翻倍) vid_stride = 1 # 只检测指定类别:None=全部,[0,2]=只检测人和车 classes = None # ============ 以下不用改 ============ def main(): import torch model = YOLO(model_file) # GPU 状态 if torch.cuda.is_available(): print(f"GPU: {torch.cuda.get_device_name(0)}") else: print("未检测到 GPU,使用 CPU") # 推理 results = model.predict( source=source, device=device, conf=conf, iou=iou, imgsz=imgsz, save=save, project=project, vid_stride=vid_stride, classes=classes, stream=True, verbose=True, ) # 统计 det_classes = {} total = 0 for r in results: for box in r.boxes: cls_id = int(box.cls[0]) name = model.names[cls_id] det_classes[name] = det_classes.get(name, 0) + 1 total += 1 print(f"\n检测完成!共 {total} 个目标") for k, v in sorted(det_classes.items(), key=lambda x: -x[1]): print(f" {k}: {v}") if __name__ == "__main__": main()运行:
powershell
C:\ZCY\WK\wkpy\YOLO\env\Scripts\python.exe C:\ZCY\WK\wkpy\YOLO\test\run_detect.py
6.3 实测效果
用一段 DJI 无人机视频(393 MB,3181 帧,384×640)测试:
highlighter- Arduino
GPU: NVIDIA GeForce RTX 2080 video 1/1 (frame 1/3181): 384x640 1 broccoli, 44.6ms video 1/1 (frame 2/3181): 384x640 1 broccoli, 9.1ms video 1/1 (frame 3/3181): 384x640 1 broccoli, 9.4ms ... Speed: 2.8ms preprocess, 9.7ms inference, 1.9ms postprocess per image at shape (1, 3, 384, 640)
| 指标 | 数值 |
|---|---|
| 推理速度 | 9.7 ms/帧(~103 FPS) |
| 预处理 | 2.8 ms |
| 后处理 | 1.9 ms |
| 总耗时 | 约 30 秒(3181 帧) |
七、核心参数详解
7.1 推理参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
source | str | - | 输入源:文件路径、文件夹、URL、摄像头(0)、RTSP流 |
model | str | yolov8n.pt | 模型文件路径 |
device | int/str | 0 | 0=第一块GPU,"cpu"=CPU |
conf | float | 0.25 | 置信度阈值,低于此值的结果被丢弃 |
iou | float | 0.45 | NMS IoU 阈值,重叠框合并阈值 |
imgsz | int | 640 | 推理图像尺寸(像素),支持 320/640/1280 |
vid_stride | int | 1 | 视频跳帧,2=每2帧检测1次 |
max_det | int | 300 | 每帧最大检测数量 |
classes | list | None | 只检测指定类别,如[0,2,7] |
save | bool | True | 是否保存结果 |
project | str | runs/detect | 输出目录 |
stream | bool | False | 流式推理(长视频必须开,否则爆内存) |
7.2 参数调优建议
highlighter-
场景 conf imgsz model vid_stride ──────────────────────────────────────────────────────────── 快速预览(看大概) 0.1 320 n 3 日常使用(平衡) 0.25 640 n/s 1 精细检测(要准) 0.5 1280 m/l 1 小目标检测 0.25 1280 m 1 实时摄像头 0.3 640 n 1
八、模型选择指南
YOLOv8 提供 5 个尺寸的模型,命名规则:yolo+v8+尺寸+.pt
| 模型 | 参数量 | mAP | 速度 (RTX 2080) | 适用场景 |
|---|---|---|---|---|
| yolov8n | 3.2M | 37.3 | ~100 FPS | 实时检测、快速预览 |
| yolov8s | 11.2M | 44.9 | ~80 FPS | 平衡速度与精度 |
| yolov8m | 25.9M | 50.2 | ~50 FPS | 通用场景推荐 |
| yolov8l | 43.7M | 52.9 | ~30 FPS | 高精度需求 |
| yolov8x | 68.2M | 53.9 | ~20 FPS | 最高精度 |
怎么选?
- 不确定 → 先用
yolov8n试效果,不够再换s或m- 显存不够 8GB → 用
n或s,配合imgsz=640- 追求精度 → 用
m或l,配合imgsz=1280
九、COCO 80 类别对照表
预训练模型基于 COCO 数据集训练,支持以下 80 类目标检测:
| 编号 | 英文 | 中文 | 编号 | 英文 | 中文 |
|---|---|---|---|---|---|
| 0 | person | 人 | 40 | wine glass | 酒杯 |
| 1 | bicycle | 自行车 | 41 | cup | 杯子 |
| 2 | car | 汽车 | 42 | fork | 叉子 |
| 3 | motorcycle | 摩托车 | 43 | knife | 刀 |
| 4 | airplane | 飞机 | 44 | spoon | 勺子 |
| 5 | bus | 公交车 | 45 | bowl | 碗 |
| 6 | train | 火车 | 46 | banana | 香蕉 |
| 7 | truck | 卡车 | 47 | apple | 苹果 |
| 8 | boat | 船 | 48 | sandwich | 三明治 |
| 9 | traffic light | 红绿灯 | 49 | orange | 橙子 |
| 10 | fire hydrant | 消防栓 | 50 | broccoli | 西兰花 |
| 11 | stop sign | 停止标志 | 51 | carrot | 胡萝卜 |
| 12 | parking meter | 停车计费器 | 52 | hot dog | 热狗 |
| 13 | bench | 长椅 | 53 | pizza | 披萨 |
| 14 | bird | 鸟 | 54 | donut | 甜甜圈 |
| 15 | cat | 猫 | 55 | cake | 蛋糕 |
| 16 | dog | 狗 | 56 | chair | 椅子 |
| 17 | horse | 马 | 57 | couch | 沙发 |
| 18 | sheep | 羊 | 58 | potted plant | 盆栽 |
| 19 | cow | 牛 | 59 | bed | 床 |
| 20 | elephant | 大象 | 60 | dining table | 餐桌 |
| 21 | bear | 熊 | 61 | toilet | 马桶 |
| 22 | zebra | 斑马 | 62 | tv | 电视 |
| 23 | giraffe | 长颈鹿 | 63 | laptop | 笔记本 |
| 24 | backpack | 背包 | 64 | mouse | 鼠标 |
| 25 | umbrella | 雨伞 | 65 | remote | 遥控器 |
| 26 | handbag | 手提包 | 66 | keyboard | 键盘 |
| 27 | tie | 领带 | 67 | cell phone | 手机 |
| 28 | suitcase | 行李箱 | 68 | microwave | 微波炉 |
| 29 | frisbee | 飞盘 | 69 | oven | 烤箱 |
| 30 | skis | 双板滑雪 | 70 | toaster | 烤面包机 |
| 31 | snowboard | 单板滑雪 | 71 | sink | 水槽 |
| 32 | sports ball | 球 | 72 | refrigerator | 冰箱 |
| 33 | kite | 风筝 | 73 | book | 书 |
| 34 | baseball bat | 棒球棒 | 74 | clock | 时钟 |
| 35 | baseball glove | 棒球手套 | 75 | vase | 花瓶 |
| 36 | skateboard | 滑板 | 76 | scissors | 剪刀 |
| 37 | surfboard | 冲浪板 | 77 | teddy bear | 泰迪熊 |
| 38 | tennis racket | 网球拍 | 78 | hair drier | 吹风机 |
| 39 | bottle | 瓶子 | 79 | toothbrush | 牙刷 |
十、常见问题
Q1:torch.cuda.is_available()返回 False
原因:安装了 CPU 版 PyTorch。
解决:卸载后重新安装 CUDA 版:
powershell
pip uninstall torch torchvision torchaudio pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
Q2: 显存不足(CUDA Out of Memory)
解决:
python
# 1. 减小推理尺寸 imgsz = 320 # 从 640 降到 320 # 2. 用更小的模型 model = YOLO("yolov8n.pt") # n < s < m < l < x # 3. 减小 batch size(如果做批量推理) # 4. 限制每帧检测数量 max_det = 100Q3: 长视频处理时内存爆满
解决:开启流式推理stream=True:
python
results = model.predict(source="long_video.mp4", stream=True) for r in results: # 逐帧处理,不会把所有结果存内存 boxes = r.boxes
⚠️
stream=False(默认)会把每一帧的结果都存在内存里,视频越长内存占用越大。
Q4: 预训练模型检测效果不好
原因:COCO 预训练模型是通用模型,不针对特定场景。
解决:用自己的数据集微调(Fine-tune):
powershell
# 1. 准备数据集(YOLO 格式) # 2. 训练 yolo detect train data=你的数据集.yaml model=yolov8n.pt device=0 epochs=100 imgsz=640 # 3. 用训练好的模型推理 yolo detect predict model=runs/detect/train/weights/best.pt source=视频.mp4 device=0
Q5: 检测结果中有很多误检
解决:
python
# 提高置信度阈值 conf = 0.5 # 从 0.25 提高到 0.5 # 降低 IoU 阈值(减少重复框) iou = 0.3 # 从 0.45 降到 0.3 # 只检测你关心的类别 classes = [0] # 只检测人
总结
| 步骤 | 命令 | 耗时 |
|---|---|---|
| 创建虚拟环境 | python -m venv env | 几秒 |
| 安装 PyTorch (CUDA) | pip install torch --index-url ...cu121 | 5~15 分钟 |
| 安装 Ultralytics | pip install ultralytics |