从零配置 YOLOv8 GPU 加速环境(RTX 2080 + Windows)完整教程
从零配置 YOLOv8 GPU 加速环境(RTX 2080 + Windows)完整教程
环境信息: Windows 10/11 · NVIDIA RTX 2080 (8GB) · Python 3.10 · CUDA 12.1
最终效果: YOLOv8n 推理速度 ~100 FPS(9.7ms/帧),3181 帧视频 30 秒跑完。
目录
- 一、环境准备
- 二、创建虚拟环境
- 三、安装 CUDA 版 PyTorch
- 四、安装 Ultralytics (YOLOv8)
- 五、验证 GPU 可用
- 六、视频检测实战
- 七、核心参数详解
- 八、模型选择指南
- 九、COCO 80 类别对照表
- 十、常见问题
一、环境准备
1.1 确认显卡和驱动
打开 PowerShell 或 CMD,运行:
nvidia-smi
正常输出类似:
+-----------------------------------------------------------------------------------------+
| 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):
python --version
本教程使用路径:C:\ZCY\WK\wkpy\Python310\python.exe
没有 Python? 去 python.org 下载,安装时勾选 "Add Python to PATH"。
二、创建虚拟环境
为什么要用虚拟环境? 避免深度学习依赖(PyTorch、CUDA 库)污染你的全局 Python 环境。
# 创建目录
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
创建完成后,目录结构:
C:\ZCY\WK\wkpy\YOLO\
├── env\ ← 虚拟环境
└── test\ ← 测试文件(模型、脚本、视频)
激活虚拟环境(以后每次用 YOLO 都要先激活):
C:\ZCY\WK\wkpy\YOLO\env\Scripts\activate
激活后,命令行前面会多一个 (env) 标识:
(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 执行安装
# 确保已激活虚拟环境
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 国内镜像加速(可选)
如果官方源下载太慢,使用清华镜像:
pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
⚠️ 国内镜像可能不是最新版本,建议先试官方源。
四、安装 Ultralytics (YOLOv8)
pip install ultralytics
Ultralytics 是 YOLOv8 的官方包,安装后自带 yolo 命令行工具。
五、验证 GPU 可用
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")
预期输出:
PyTorch 版本: 2.5.1+cu121
CUDA 是否可用: True
CUDA 版本: 12.1
GPU 名称: NVIDIA GeForce RTX 2080
显存大小: 8 GB
如果
CUDA 是否可用输出False,说明安装的是 CPU 版 PyTorch,需要回到第三步重新安装cu121版本。
六、视频检测实战
6.1 命令行方式
最简单的用法,一行命令搞定:
# 激活环境
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,所有参数集中管理,方便复用:
"""
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()
运行:
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)测试:
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 参数调优建议
场景 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 版:
pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
Q2: 显存不足(CUDA Out of Memory)
解决:
# 1. 减小推理尺寸
imgsz = 320 # 从 640 降到 320
# 2. 用更小的模型
model = YOLO("yolov8n.pt") # n < s < m < l < x
# 3. 减小 batch size(如果做批量推理)
# 4. 限制每帧检测数量
max_det = 100
Q3: 长视频处理时内存爆满
解决: 开启流式推理 stream=True:
results = model.predict(source="long_video.mp4", stream=True)
for r in results:
# 逐帧处理,不会把所有结果存内存
boxes = r.boxes
⚠️
stream=False(默认)会把每一帧的结果都存在内存里,视频越长内存占用越大。
Q4: 预训练模型检测效果不好
原因: COCO 预训练模型是通用模型,不针对特定场景。
解决: 用自己的数据集微调(Fine-tune):
# 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: 检测结果中有很多误检
解决:
# 提高置信度阈值
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 |
1 分钟 |
| 下载模型 | 首次运行自动下载 | 几秒 |
| 推理视频 | yolo detect predict ... |
取决于视频长度 |
核心就三步:装 PyTorch → 装 Ultralytics → 跑推理。
最后更新:2026-04-24

浙公网安备 33010602011771号