万物·炼器 | 从零打造工业级旋转目标检测网络 —— 写在前面的话

4 阅读7分钟

写在前面的话

万物·炼器 | 从零打造工业级旋转目标检测网络 —— 借鉴 YOLO11 OBB 的设计之道

一个面向卷积神经网络与目标检测初学者的“从零手搓”系列。
不满足于会调用YOLO,而是希望把一个现代目标检测模型真正拆开、看懂、写出来,并最终学会根据自己的任务需要去修改它。
YOLO11 OBB 是本系列后期用于深入理解目标检测的一张参考蓝图,但这个系列并不是只为“旋转目标检测”而写。


《万物·炼器》 是一个围绕 卷积神经网络与目标检测 展开的系列学习项目。

项目包含:

  • 系列技术文章;
  • 与文章同步的实验代码;
  • 从简单网络到完整检测器的逐步实现;
  • 对 YOLO11 OBB 关键结构与设计思想的分析;
  • 从普通目标检测进一步走向 OBB 旋转目标检测的完整扩展过程;
  • 学习过程中形成的实验、验证与调试记录。

旋转目标检测(OBB)会在后面的内容中占据重要位置,但它更像是这个系列最终选择的一条“进阶实战路线”,而不是整个系列唯一的主题。

系列文章中的卷积、反向传播、Backbone、FPN、多尺度特征、检测头、标签分配、Loss 等内容,本质上都属于通用的卷积神经网络与目标检测知识。

这个系列不会一上来就告诉你:

model = YOLO(...)
model.train(...)

然后模型就跑起来了。

我们更希望把这些看似“黑盒”的东西一层一层拆开。

例如:

  • 一层卷积到底做了什么?
  • 卷积核里的参数是怎么学出来的?
  • Loss 为什么能够让几十层之前的参数发生变化?
  • Backbone、Neck、Head 分别负责什么?
  • 为什么目标检测需要多尺度特征?
  • FPN 为什么要做上采样和特征融合?
  • 为什么成熟网络不是简单地不断堆叠 Conv2d
  • Bottleneck、C2f、C3k2、SPPF 为什么这样设计?
  • DFL 到底在预测什么?
  • TAL 为什么能够决定哪些预测点应该成为正样本?
  • ProbIoU 为什么适合旋转框?
  • 普通目标检测又是怎样一步一步变成 OBB 旋转目标检测的?

最终,希望我们不仅能够“使用一个 YOLO 模型”,而是真正知道:

一个现代目标检测网络究竟是怎样炼成的。

1. 为什么会有这个系列?

最初写这些文章,其实并不是为了写教程,而是为了学习。

在学习卷积神经网络和目标检测的过程中,我经常遇到一个问题:

很多东西看资料的时候似乎“看懂了”。

但是如果合上资料,重新问自己:

为什么要这样设计?

或者:

如果不用现成框架,让我自己写出来,我会不会?

很多时候就抓瞎了。于是我开始尝试费曼学习法:

把自己当成老师,把文章写给一个几乎不了解人工智能的人看。

如果一个知识点不能用简单、清楚的话解释出来,那么很可能还没有真正理解它。

所以这个系列有一个很朴素的目标:

尽量把目标检测中的复杂概念,写成一个有 Python 基础、但几乎没有人工智能背景的人,也能够一步一步看懂的内容。

某种意义上,这些文章首先是写给我自己的学习笔记。

如果它们也能够帮助其他正在学习目标检测的人少走一些弯路,那就更有意义了。

2. 这个系列有什么特点?

(1) 尽可能从零开始

默认读者:

  • 会一些 Python;
  • 知道什么是类和函数;
  • 能看懂基本 PyTorch 代码;

但不要求已经系统学习过深度学习。一些经常被教程一笔带过的内容,也会尽量重新解释。例如:

  • Tensor 到底是什么;
  • 卷积层的参数从哪里来;
  • 一个神经元怎样计算;
  • 特征图是什么;
  • 通道是什么;
  • 下采样是什么;
  • 计算图是什么;
  • 梯度是什么;
  • loss.backward() 到底发生了什么。

(2) 不满足于“会调用”

很多教程最终会变成:

model = YOLO(...)
model.train(...)

这样当然方便。但这个系列更感兴趣的是:

这些代码背后到底发生了什么?以及我想要改代码的话该怎么改?

因此会自己实现大量核心模块,并通过:

  • Tensor Shape;
  • Forward;
  • Backward;
  • 梯度;
  • Loss;
  • 中间输出;
  • 实验结果;

去验证自己的理解。

(3) 尽量说人话

数学公式无法完全避免。但如果能够先用直觉解释清楚,就不会急着堆公式。

一个公式真正出现之前,我们会尽量先回答:

它到底想干什么?

然后再去理解公式里的符号。

(4) 文章和代码一起推进

这里的代码不是单独准备的一堆 Demo,文章讲到哪里,代码就尽量实现到哪里。

整个项目更像是一个模型不断升级的过程:

能跑
  ↓
能检测
  ↓
能多尺度检测
  ↓
结构更加稳定
  ↓
更加接近成熟检测器
  ↓
支持 OBB
  ↓
能够训练和推理
  ↓
能够针对实际任务继续修改

3. 适合哪些读者?

这个系列主要写给:

  • 会一些 Python,但刚开始学习人工智能的人;
  • 正在学习 PyTorch 的同学;
  • 第一次接触目标检测的读者;
  • 会使用 YOLO,但不知道 YOLO 内部发生了什么的人;
  • 会训练 YOLO,但不知道如何修改网络的人;
  • 看过很多目标检测教程,却始终觉得知识比较零散的人;
  • 想系统理解 Backbone、Neck、Head、Loss 等模块的人;
  • 想系统学习目标检测的人;
  • 想学习如何阅读深度学习框架源码的人;
  • 想根据自己的实际任务修改 YOLO 的工程人员或学生。

如果你已经能够熟练实现检测器、阅读大型深度学习框架源码,那么前面的内容可能会比较基础。 不过后面的 OBB、DFL、TAL、ProbIoU、Loss 和完整检测流程,仍然可以作为一套系统化的实现笔记。

4. 关于 AI

这个项目是在 AI 辅助下完成的

AI 参与了包括但不限于:

  • 技术资料整理;
  • 源码辅助分析;
  • 概念讨论;
  • 文章结构优化;
  • 表达方式修改;
  • 代码检查;
  • 实验思路讨论;
  • Bug 排查;
  • 技术问题交叉验证。

但这里并不是简单地让 AI:

“生成一篇目标检测教程。”

AI 更像一个随时可以讨论问题的:

学习伙伴 + 代码审阅助手 + 技术讨论对象。

5. License

本项目中的原创文章、代码、图片、示意图及其他原创内容,其著作权归作者所有。

公开访问并不代表授予复制、转载、修改、分发或使用许可。

在未获得作者明确授权的情况下,不得以任何形式:

  • 转载、复制或大段摘录本项目中的文章;
  • 修改、整理后再次发布本项目内容;
  • 将本项目文章、代码、图片或其他内容用于其他网站、公众号、课程、出版物或知识付费内容;
  • 将本项目代码全部或部分用于其他项目、产品或商业应用;
  • 对本项目内容进行二次分发、二次开发或重新包装发布;
  • 以其他方式使用本项目中的原创内容。

如需转载、引用、修改、二次开发、项目使用或商业使用,请提前联系作者并取得明确授权。

个人可以在线阅读本项目内容,用于个人学习和研究;正常的少量引用应注明出处及本项目来源。

未经授权,请勿转载、复制、修改、分发或用于其他项目。