【1】基于 GTX1660 Super + Docker + YOLOv8 的目标检测训练完整实践(Ubuntu22.04)

本文基于如下环境,完整演示如何从零开始搭建 YOLOv8 训练环境,并使用 COCO128 数据集训练 YOLOv8n 模型,同时深入讲解 YOLOv8 的训练原理、参数含义、模型结构、ONNX 导出以及后续模型压缩优化路线。

本文适合:

  • AI 初学者
  • 想学习目标检测的工程师
  • 想学习模型训练/部署/压缩的开发者
  • 想学习 YOLOv8 工业化流程的同学

使用项目:

一、实验环境

本文使用如下环境:

项目 配置
GPU GTX1660 Super 6GB
OS Ubuntu 22.04
Docker镜像 nvcr.io/nvidia/pytorch:24.12-py3
CUDA 容器内自带
框架 PyTorch
模型 YOLOv8n
数据集 COCO128

二、为什么选择 YOLOv8

YOLO(You Only Look Once)是当前最主流的目标检测模型之一。

YOLO特点:

  • 单阶段检测
  • 推理速度快
  • 精度高
  • 部署简单
  • 工业应用广泛

YOLOv8 相比 YOLOv5 的升级:

特性 YOLOv5 YOLOv8
Head Anchor-Based Anchor-Free
Backbone C3 C2f
损失函数 较旧 更先进
部署 较方便 更方便
泛化能力 一般 更强

三、YOLOv8 模型结构原理

YOLOv8 网络整体结构:

复制代码
Input
 ↓
Backbone
 ↓
Neck
 ↓
Head

1.Backbone(主干网络)

作用:

复制代码
提取图像特征

例如:

  • 边缘
  • 纹理
  • 物体轮廓

YOLOv8 使用:

复制代码
C2f模块

相比 YOLOv5:

  • 参数更少
  • 梯度传播更稳定
  • 推理更快

2.Neck(特征融合)

作用:

复制代码
融合不同层的特征

原因:

  • 小目标需要高分辨率特征
  • 大目标需要深层语义特征

YOLOv8 使用:

复制代码
FPN + PAN

实现多尺度特征融合。


3.Head(检测头)

作用:

预测:

复制代码
边界框
类别
置信度

YOLOv8 最大变化:

复制代码
Anchor-Free

相比传统 Anchor:

  • 更简单
  • 泛化更强
  • 更容易训练

四、为什么选择 YOLOv8n

YOLOv8 模型有:

模型 参数量 特点
n 最小 最快
s 平衡
m 精度更高
l 更强
x 超大 最强

GTX1660S 只有 6GB 显存,因此推荐:

复制代码
YOLOv8n

优点:

  • 显存占用低
  • 训练速度快
  • 适合学习
  • 容易部署

五、Docker 训练环境搭建


1.启动 Docker 容器

执行:

复制代码
docker run --gpus all -it --rm \
-v /home/workspace:/workspace \
--shm-size=16g \
nvcr.io/nvidia/pytorch:24.12-py3

参数说明:

参数 作用
--gpus all 使用GPU
-v 挂载目录
--shm-size 增大共享内存
--rm 退出自动删除

2.验证 GPU

进入容器后:

复制代码
nvidia-smi

正常会看到:

  • GTX1660 Super
  • CUDA 信息
  • 显存占用

六、安装 YOLOv8


1.克隆仓库

复制代码
cd /workspace

git clone https://github.com/ultralytics/ultralytics.git

2.进入项目

复制代码
cd ultralytics

3.安装依赖

复制代码
pip install -e .

4.验证安装

复制代码
yolo version

看到版本号说明安装成功。

七、下载 COCO128 数据集

COCO128 是官方提供的小型测试集。

特点:

  • 仅128张图片
  • 适合快速测试
  • 适合学习

1.下载数据集

复制代码
cd /workspace

mkdir datasets

cd datasets

wget https://ultralytics.com/assets/coco128.zip

2.解压

复制代码
unzip coco128.zip

目录结构:

复制代码
datasets/
└── coco128/
    ├── images/
    ├── labels/
    └── coco128.yaml

八、开始训练 YOLOv8


1.训练命令

复制代码
cd /workspace/ultralytics

yolo detect train \
model=yolov8n.pt \
data=/workspace/datasets/coco128.yaml \
epochs=50 \
imgsz=640 \
batch=16 \
device=0 \
workers=4

九、训练参数详细解释


1.model

复制代码
model=yolov8n.pt

作用:

加载预训练模型。

本质:

复制代码
迁移学习

即:

复制代码
COCO预训练
↓
你的数据集微调

优点:

  • 收敛快
  • 精度高
  • 不容易过拟合

2.data

复制代码
data=coco128.yaml

指定数据集配置文件。

包括:

  • 训练集路径
  • 验证集路径
  • 类别数量
  • 类别名称

3.epochs

复制代码
epochs=50

含义:

整个数据集训练 50 次。

例如:

复制代码
1 epoch =
所有图片完整训练一次

4.batch

复制代码
batch=16

含义:

一次送入 GPU 的图片数量。

GTX1660S 推荐:

imgsz batch
640 8~16

如果显存不足:

复制代码
nvidia-smi

观察显存。


5.imgsz

复制代码
imgsz=640

输入图片大小:

复制代码
640x640

越大:

  • 精度更高
  • 更慢
  • 更吃显存

6.workers

复制代码
workers=4

数据加载线程数。

CPU 核数较多时可以增大。

十、训练过程解析

训练过程中:

复制代码
数据读取
↓
数据增强
↓
Forward
↓
计算Loss
↓
Backward
↓
更新参数

十一、YOLOv8 Loss 组成

YOLOv8 Loss:

复制代码
总Loss =
Box Loss +
Cls Loss +
DFL Loss

数学表达:

L=Lbox+Lcls+LdflL = L_{box} + L_{cls} + L_{dfl}L=Lbox​+Lcls​+Ldfl​


1.Box Loss

作用:

复制代码
预测框位置误差

例如:

  • x
  • y
  • w
  • h

2.Classification Loss

作用:

复制代码
类别预测误差

例如:

  • cat
  • dog
  • person

3.DFL Loss

YOLOv8 的高级边框回归方式。

作用:

复制代码
提升边框精度

十二、训练输出结果

训练完成后:

复制代码
runs/detect/train/

会生成:

文件 作用
best.pt 最优模型
last.pt 最后模型
results.png loss曲线
confusion_matrix.png 混淆矩阵

十三、推理测试

使用训练后的模型:

复制代码
yolo detect predict \
model=runs/detect/train/weights/best.pt \
source=/workspace/datasets/coco128/images/train2017

输出目录:

复制代码
runs/detect/predict/
相关推荐
涛声依旧-底层原理研究所1 小时前
防止Agent胡来五大安全防线
人工智能·python
拓朗工控1 小时前
工业视觉检测工控机采购的技术避坑指南
人工智能·计算机视觉·视觉检测·工业电脑·视觉工控机
RSTJ_16251 小时前
PYTHON+AI LLM DAY FIFITY-THREE
开发语言·人工智能·python
programhelp_1 小时前
Roblox Coding OA 面经分享|题量不小,但整体更偏工程思维
人工智能·算法·面试
周末也要写八哥1 小时前
机器学习评价指标之平均概念
人工智能·算法·机器学习
侃谈科技圈1 小时前
端侧AI基础设施:核心环节与代表企业
人工智能
Juicedata1 小时前
降低数据存储成本:JuiceFS v1.4 分层存储设计解析
人工智能·开源
乐迪信息1 小时前
乐迪信息:港口船舶盲区看不清?AI视觉检测精准识别
大数据·人工智能·安全·计算机视觉·目标跟踪·视觉检测
不知名的老吴1 小时前
机器学习评价指标之综合指标的关系
人工智能·机器学习