上一篇文章对一些概念有了大体了解,尽管并不深入,也不涉及太多原理,但是技术最重要的还是应用,可以先把 Demo 跑起来,在逐步优化的过程中继续学习底层原理,通过实践加深理解,从而达到更好的效果。
本文介绍 YOLO 进行图像目标识别的工具链,目的是让一个基于 YOLO v8 的视频图像目标识别Demo 工程跑起来,并在这个过程中了解需要用到哪些工具软件,以及如何配置这些工具。
一、工具及其作用
-
一台搭载 3070 8G 运存 GPU 的笔记本电脑,40G 运行内存,使用 Windows 11 系统,
-
CUDA 版本:12.3
-
PyTorch 版本: 2.5.1 + cu121
-
Conda
Conda 是一个开源的包管理系统和环境管理系统,帮助不同项目管理所需的不同版本的 python 版本和包文件。虽然 Conda 最初是为了解决 Python 在科学计算领域的不便之处而开发的,但它现在的应用并不只局限于基于 Python 的开发工作。 -
CUDA
CUDA (Compute Unified Device Architecture) 是 NVIDIA 推出的一种并行计算平台和编程模型,它是 NVIDIA 显卡能听懂的“底层语言”。CUDA作为软件和硬件的桥梁,以提供接口给软件保证上层应用能正确调用显卡。 -
PyTorch
- PyTorch 是一个开源的深度学习框架,广泛用于计算机视觉、自然语言处理等领域。PyTorch 本身只懂数学逻辑,不懂如何直接指挥显卡(GPU)的硬件电路去进行并行计算,但是 PyTorch 内部集成了针对特定 CUDA 版本编译好的二进制文件(.so或.dll),当用户执行tensor.to('cuda')时,PyTorch 会通过这些预编译的文件,调用底层的 CUDA 库,从而指挥 GPU进行加速计算。
- 可以认为,PyTorch 是“司机”,CUDA 是“引擎接口”,显卡是“发动机”。司机必须持有对应引擎接口的驾照(版本匹配)才能开车。
- 要根据 CUDA 的版本选择所安装的Pytorch 的版本,而 CUDA 的版本又跟显卡型号与显卡驱动有关。另外,如果电脑没有 NVIDIA 显卡,也可以使用纯 CPU 进行计算,但是性能会相对弱一些。 -
PyCharm
- PyCharm 是由 JetBrains 公司开发的一款集成开发环境(IDE),集成了编写、调试、测试、运行和管理 Python 项目所需的所有工具。代码的编写和调试工作主要在 PyCharm 中进行。
- 在已经选择使用 Conda 的情况下,PyCharm 不负责 安装复杂的底层库(如带 CUDA 的 PyTorch),它只需要调用 Conda 创建好的环境来运行代码即可,这样方便实现在 PyCharm 中快速切换环境以适用于不同的项目。 -
OpenCV ——计算机视觉的“瑞士军刀”
- OpenCV (Open Source Computer Vision Library) 是一个跨平台的计算机视觉库。它不直接做深度学习推理,但它处理图像的速度极快(C++底层),是深度学习模型的前后处理器。
- 举例说明在实际应用中 OpenCV 的作用
视频流获取:从本地摄像头、USB 相机、或网络视频流 (RTSP/UDP) 读取帧
图像预处理:
- 调整大小 (resize):将摄像头拍摄的 1920x1080 图片缩放到 YOLO 需要的 640x640。
- 色彩空间转换 (cvtColor):将 BGR (OpenCV 默认) 转为 RGB (PyTorch/YOLO 需要)。
- 归一化:将像素值从 0-255 缩放到 0-1。
结果可视化:
- 在识别到的目标上画矩形框 (rectangle)、写标签 (putText)。
传统算法辅助:
- 如果 YOLO 没检测到,可以用传统方法(如光流法、颜色阈值)做简单的运动检测或追踪。 -
YOLO
YOLO (You Only Look Once) 是目前最流行的单阶段目标检测算法, 包括多个版本,不同版本有不同的个应用场景和特性,可根据项目需求选择相应的版本。
关于PyTorch 和TensorFlow
PyTorch 和 TensorFlow 是目前最主流的两个深度学习框架,它们都能实现神经网络的构建、训练和部署,但在设计理念、使用习惯、生态系统和适用场景上有显著区别。在开发测试阶段首选 PyTorch,在工业部署方面一般选择 TensorFlow。
AI 总结上述工具的工作流:
在目标检测项目的开发工作流中,Conda 首先构建并隔离出独立的运行环境,确保所有依赖包(如 Python、PyTorch、OpenCV)版本兼容且互不冲突;PyCharm 作为集成开发平台,调用该 Conda 环境来编写、调试并运行代码。当输入图像或视频时,OpenCV 率先介入,负责读取数据流并进行解码、缩放、色彩转换等预处理,将其转化为模型可接受的张量格式;随后,PyTorch 加载预训练的 YOLO 模型,利用 CUDA 作为底层桥梁,将繁重的矩阵计算指令翻译并调度到 NVIDIA GPU 上进行并行加速推理,快速输出目标的类别与坐标;最后,结果返回给 OpenCV 进行后处理(如绘制检测框、标注置信度)并可视化展示。
整个过程中,Conda 保障环境稳定,PyCharm 提供代码编写支撑,OpenCV 负责媒体数据的“进”与“出”,而 PyTorch 结合 CUDA 与 YOLO 则完成了核心的“智能识别”计算。
二、注意事项
1. CUDA 安装注意事项
- 如果只需要训练、简单推理, 则无需单独安装 CUDA, 直接安装 pytorch
- 如果有部署需求, 例如导出 TensorRT 模型, 则需要进行 CUDA 安装 windows安装全局CUDA、cuDNN_cudnn v8.9.7
2. PyTorch 安装注意事项
- 16 XX 的显卡, 安装 cu 102 的版本, 否则可能训练出现问题
- 30 XX、40 XX 显卡, 要安装 cu 111 以上的版本, 否则无法运行
- 在一个单独的环境中, 能使用 pip 就尽量使用 pip, 实在有问题的情况, 例如没有合适的编译好的系
统版本的安装包, 再使用 conda 进行安装, 不要来回混淆
三、配置YOLO开发环境
1.安装 mini Conda 并创建环境
首先下载安装 mini Conda Miniconda - Anaconda
① Conda 的基本命令
-
列出已创建的所有环境
conda env list -
创建一个新的 python 环境
conda create --name <环境名称> -
激活 (进入) 一个已创建的环境
conda activate <环境名称>这将激活指定的环境。激活后,命令行提示符前会显示环境名称。
-
退出当前环境
conda deactivate
-
导出环境配置
conda env export > environment.yml将当前环境的配置导出到 environment. yml 文件中,包括所有已安装的包及其版本。
-
导入环境配置:
conda env create -f environment.yml这将根据
environment.yml文件中的配置创建一个新的环境。 -
查找可用包:
conda search <包名称>这将搜索并显示与指定名称匹配的可用包。
-
显示已安装的包:
conda list这将显示当前环境下已安装的所有包及其版本信息。
-
清理不再使用的包和缓存:
-
清理不再使用的包:
conda clean --packages这将清理不再被使用的包。
-
清理缓存:
conda clean --all这将清理不再被使用的缓存和索引文件,以释放磁盘空间。
-
-
移除环境:
conda env remove --name <环境名称>conda remove -n <需要删除的环境名> --all这将移除指定的环境。
-
环境重命名
conda rename -n text 1 text 2
② 创建 Conda Python 开发测试环境
- 创建基于 python 3.10.19 的环境
conda create --name yolo-beta python=3.10
- 进入已创建的 Conda 环境
conda activate yolo-beta
- 安装必要的包,如 pip 等,接下来的操作都在此虚拟环境中进行
- 要注意,虚拟环境的文件目录与宿主机实际目录相同,实际上只有包和工具是存在于虚拟环境的,实际运行中所需要的项目文件都是存在于宿主机目录的
- 可配置国内源以加快下载速度
2. 安装 PyTorch
PyTorch 官网:PyTorch
参考教程:YOLO 环境配置——安装 PyTorch
我的CUDA 版本是 12.3,安装的 PyTorch 版本是 2.5.1 + cu121。
在官网根据版本选择合适的安装命令
首先进入创建的环境,执行:
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121
推荐使用 pip 安装,而不是使用 conda 安装
验证是否已经正确安装 PyTorch
pip show torch
若打印的信息有“Version: 2.5.1+cu 121”字样即证明安装的是GPU版本的PyTorch
下面依次逐条输入
python
import torchvision
import torch
均无报错则说明 PyTorch 安装正常
继续输入
torch.cuda.is_available()
若返回 True 则表示是安装的 GPU 版本的 PyTorch
继续验证,输入
torch.randn(1).cuda()
该语句用于创建一个随机数并将其加载到 GPU 中,若返回“tensor([-1.6958],device='cuda: 0') 字样,则证明 PyTorch 可以正常调用 GPU。
3. 安装 PyCharm 并配置调用 Conda 环境
参考教程: YOLO 环境配置——安装 Pycharm
PyCharm 2.6 配置miniConda 环境报错
解决方法:版本问题,升级到 PyCharm 3.1 即可解决
参考:
lateinit property envs has not been initialized – IDEs Support (IntelliJ Platform) | JetBrains
2025.2.5: failure to use an existing Conda env : PY-85954 |
4. 安装 ultralytics(YOLO v8 源代码)
① 下载 ultralytics
ultralytics 是 YOLOv8 的官方 Python 包(SDK),由 Ultralytics 公司开发和维护。它不仅包含 YOLOv 8 模型,还提供了一整套工具链,用于训练、推理、验证、导出模型等.
GitHUB 地址: ultralytics/ultralytics: Ultralytics YOLO 🚀
可以直接下载 ZIP 文件解压,或者用命令在 Conda 环境中拉取
在 PyCharm 中打开项目后,其项目结构如图

② 下载官方预训练的示例模型
下载地址: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov8n.pt
将模型文件放入 ultralytics 源码的根目录
③ 运行 YOLO v 8 的示例程序
现在先在 Conda 环境中使用命令行运行示例程序进行测试
进入 ultralytics 源码目录
pushd C:\Users\XTX\Desktop\ultralytics-main
pushd <一个文件夹路径>
这个命令的作用类似于 cd, 运行后可以进入文件夹
相比 cd, pushd 的好处是可以直接进入其他盘
注意是 pushd 而不是 pushed
当在此目录下操作完,想回到原来的目录时,只需输入:popd
激活 conda 环境
conda activate yolo-beta
将 ultralytics 作为一个包安装到环境中
pip install -e .
运行示例程序
yolo detect predict
该命令将会使用 yolov 8n. pt 模型检测 ultralytics/assets/中的两张图片,结果将会保存在 runs/detect/preditc 文件中
接下来使用 PyCharm IDE 运行 YOLO
5. 在 IDE 中运行目标检测 Demo
使用官方的实例模型 yolov8n.pt 进行一个无人机视角的地面目标检测,工程结构如图

运行结果

工程代码如下
import cv2
import torch
from ultralytics import YOLO
import time
import os
# 1. 检查 CUDA 是否可用
if not torch.cuda.is_available():
print("❌ CUDA 不可用,请检查驱动、PyTorch 安装或环境。")
exit(1)
else:
print("✅ CUDA 可用!设备:", torch.cuda.get_device_name(0))
# 2. 加载 YOLOv8 模型(轻量版)
model = YOLO('yolov8n.pt')
model.to('cuda')
print("🚀 YOLOv8 模型已加载到 GPU")
# 3. 打开视频文件(使用你指定的 drone_detection.mp4)
video_path = "drone_detection.mp4"
if not os.path.exists(video_path):
print(f"❌ 视频文件不存在: {video_path}")
exit(1)
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print(f"❌ 无法打开视频文件: {video_path}")
exit(1)
# 获取视频基本信息
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(f"📹 视频信息: {width}x{height} @ {fps:.1f} fps")
# 4. ✅ **关键:只在循环外创建一次窗口**
window_name = "YOLOv8 循环检测 (关闭窗口退出)"
cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
cv2.resizeWindow(window_name, 800, 600)
# 5. 初始化性能统计
frame_count = 0
last_time = time.time()
current_fps = 0
print("🔄 视频将循环播放,关闭窗口右上角 × 退出程序...")
print("💡 请直接点击窗口的 × 按钮,不要按键盘。")
# 6. 主循环:安全、稳定、无重复窗口
while True:
# 检查窗口是否被用户手动关闭
if cv2.getWindowProperty(window_name, cv2.WND_PROP_VISIBLE) < 1:
print("\n👋 用户关闭窗口,程序安全退出。")
break
ret, frame = cap.read()
if not ret:
# 视频结束 → 重置到开头,**不重建窗口!**
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
continue # 重新读取第一帧
frame_count += 1
# --- GPU 推理 --- results = model(frame, verbose=False)
# --- 绘制检测框 --- for r in results:
boxes = r.boxes
for box in boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0].tolist())
conf = box.conf.item()
cls = int(box.cls.item())
label = f"{model.names[cls]} {conf:.2f}"
color = (0, 255, 0)
cv2.rectangle(frame, (x1, y1), (x2, y2), color, 2)
cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
# --- 计算并显示实时 FPS --- current_time = time.time()
elapsed = current_time - last_time
if elapsed >= 0.5: # 每 0.5 秒更新一次,避免抖动
current_fps = frame_count / elapsed
frame_count = 0
last_time = current_time
fps_text = f"FPS: {current_fps:.1f}"
cv2.putText(frame, fps_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 2, cv2.LINE_AA)
# --- 显示帧(仅显示到已存在的窗口)---
cv2.imshow(window_name, frame)
# --- 关键:使用 waitKey(1) 防止卡死,同时允许窗口关闭事件传播 --- if cv2.waitKey(1) & 0xFF == 27: # ESC 作为备用退出(可选)
print("\n👋 按 ESC 退出程序。")
break
# 7. 释放资源
cap.release()
cv2.destroyAllWindows()
至此已经把一个 YOLO 目标识别工程运行起来了,后面将学习如何标注自己的数据集,并根据数据集训练模型。
参考教程:
YOLO 环境配置
YOLOv5 环境安装
评论区