这是从《深度学习知识框架》里拆出来的专题文章,专门讲计算机视觉(CV)。
很多人一提到 CV,就会同时看到这些词:
- 图像分类
- 目标检测
- 语义分割
- 实例分割
- ResNet
- YOLO
- U-Net
单独看每个词都不难,但放在一起就容易乱。
所以这篇文章的目标很明确:先理任务,再理模型,再给一条能落地的学习路线。
目录
1. CV 四大任务层次
CV 任务之间其实是递进关系,每往后一步,都是在前一个任务上“多问一个问题”。
| 任务 | 核心问题 | 输出形式 | 难度 |
|---|---|---|---|
| 图像分类 | 图片里是什么? | 类别标签 + 置信度 | 入门 |
| 目标检测 | 图片里有什么?分别在哪里? | 边界框 + 类别 + 置信度 | 中等 |
| 语义分割 | 每个像素属于哪个类别? | 像素级分类图 | 中等偏上 |
| 实例分割 | 每个像素属于哪一个具体目标? | 像素级分类 + 个体区分 | 更高 |
一句话理解:
- 分类 只问“是什么”
- 检测 继续问“在哪里”
- 语义分割 细化到“每个像素是什么”
- 实例分割 再进一步到“每个像素属于哪个对象实例”
2. 图像分类与架构演进
图像分类是 CV 的基础任务,很多后续任务都会建立在它学到的特征表示之上。
2.1 经典架构演进
| 架构 | 年份 | 核心创新 | 意义 |
|---|---|---|---|
| LeNet | 1998 | 卷积 + 池化 | 奠定 CNN 基础 |
| AlexNet | 2012 | GPU 训练 + ReLU + Dropout | 深度学习在 ImageNet 爆发 |
| VGG | 2014 | 小卷积核堆叠,结构规整 | 迁移学习里很经典 |
| ResNet | 2015 | 残差连接 | 解决深层网络难训练问题 |
| EfficientNet | 2019 | 复合缩放 | 速度和精度平衡好 |
| ViT | 2020 | 纯 Attention | 把 Transformer 引入视觉 |
2.2 为什么 ResNet 这么重要?
ResNet 最核心的设计是:
输出 = F(x) + x
它多了一条“直接通道”,让梯度在反向传播时可以更顺畅地往前传。
这解决了一个老问题:网络越深,越难训练。
所以如果你刚学 CV,最推荐先读懂 ResNet,因为后面很多模型本质上都是在它的思路上继续改进。
3. 目标检测:不仅要知道是什么,还要知道在哪里
目标检测比图像分类更难,因为它不仅要分类,还要预测位置,而且一张图里目标数量是不固定的。
3.1 两大主流路线
两阶段检测:Faster R-CNN
思路是:
- 先在整张图上提出很多“可能有目标”的候选框
- 再对每个候选框做分类和位置精修
优点是精度通常更高,缺点是速度偏慢。
单阶段检测:YOLO 系列
思路是:
- 直接一次前向传播,同时预测边界框、类别和置信度
优点是速度快,适合实时场景,所以在实际项目里非常常见。
3.2 三个必须知道的概念
IoU(交并比)
用来衡量预测框和真实框重叠得有多好。
一般来说,IoU > 0.5 才算“基本检测对了”。
NMS(非极大值抑制)
模型往往会给同一个目标预测出很多重叠框,NMS 的作用就是:
保留最靠谱的那个,把重复框去掉。
mAP
检测任务的核心评估指标,综合考虑精确率和召回率。
如果你看论文或 benchmark,经常会看到 mAP@0.5、mAP@0.5:0.95 这类指标。
4. 语义分割与 U-Net
语义分割的目标是:给图像里的每一个像素都分一个类别。
4.1 语义分割和实例分割的区别
- 语义分割:所有同类目标用同一种标签
- 实例分割:不仅分出类别,还要区分每个具体个体
比如一张街景图里有 5 个人:
- 语义分割只会告诉你“这些像素都属于人”
- 实例分割会告诉你“这是人1、这是人2、这是人3……”
4.2 U-Net 为什么经典?
U-Net 是语义分割里最经典的结构之一,特别适合医学影像等场景。
它的结构可以理解成一个“U”字:
- 左边是编码器:不断下采样,提取更抽象的语义特征
- 右边是解码器:不断上采样,把分辨率恢复回来
4.3 它最巧妙的地方:跳跃连接
U-Net 会把编码器早期的高分辨率特征,直接拼接到解码器对应层。
这很重要,因为:
- 编码器学到“是什么”
- 跳跃连接保留“在哪里、边界在哪”
所以最后输出的分割图会更细、更准。
4.4 分割任务常见指标
Pixel Accuracy:像素准确率IoU:交并比Dice:医学影像里非常常见
5. CV 学习路线图
如果你是从零开始,我更建议按下面这条路线走,而不是一上来就追最新大模型。
| 步骤 | 建议任务 | 预计时间 | 重点掌握 |
|---|---|---|---|
| Step 1 | CIFAR-10 分类 | 2~4 周 | CNN 基础、数据增强、过拟合诊断 |
| Step 2 | 迁移学习做自定义分类 | 1~2 周 | 冻结层、微调、构造数据集 |
| Step 3 | YOLOv8 目标检测 | 2~3 周 | 边界框、NMS、IoU、mAP |
| Step 4 | U-Net 语义分割 | 2~3 周 | 编解码结构、像素级损失、IoU |
每一步的建议
- Step 1:尽量自己手写一个简单 CNN 或 ResNet 块,不要只会调库
- Step 2:理解迁移学习非常重要,因为真实项目的数据通常不多
- Step 3:先拿少量数据把检测流程跑通,再考虑标更多数据
- Step 4:先用公开数据集练手,别一开始就自己造数据集
实战入口推荐
如果你现在就想动手,建议直接接着看这篇:
👉 PyTorch 实战 CIFAR-10:手写 ResNet 并把准确率做到 94% 左右
学 CV 最怕的不是资料少,而是顺序乱。先把“任务层次 → 架构演进 → 项目练手路线”这条主线建立起来,后面就会清晰很多。