深度学习是利用“多层神经网络”实现人工智能的一种方式
计算机视觉:“对图像中的客观对象构建明确而有意义的描述”,识别图片中的含义进行处理
1.图像分类——“图里有狗”
判断整张图片属于哪个类别,判断图片是“猫”还是“狗”
思路:输入不同类别的图像,给每个相同类别的图像打上相同标记,训练一个分类器来学习每个类别的外部特征。
目前较为流行的图像分类架构是卷积神经网络(CNN)——将图像送入网络,然后网络对图像数据进行分类。
输入数据首先经过卷积层,在卷积层中每次只关注图像中的一个小局部区域, 每个节点只需要处理离自己最近的邻近节点。 一点一点看完了就能组成大概的轮廓,每次只看一点点像扫描仪一样滑动的过程就是滑动窗口。
经过卷积层后再通过池化层, 池化层是简化图像、减小数据量的,它会从每一小块区域中选出一个最“突出的”像素(最大值), 只看重要的信息。
2.目标检测——“图里有狗,狗在哪个位置”
识别图像中存在的物体,并给出这些物体的位置和边界, 识别并框出图像中的“人”、“车”、“狗”等多个物体
第一种模型是基于区域的卷积神经网络( R-CNN ):图像太大了,不能一个像素一个像素去搜索,所以我们就先找“可能有物体的区域”,再用 CNN 进行识别。
模型进化历程:R-CNN → Fast R-CNN → Faster R-CNN
(1)R-CNN
原理流程:
- 选择性搜索提取大约 2000 个区域(region proposals)
- 每个区域都单独送入 CNN 提取特征
- 然后将特征送入:
-
- SVM分类器(判断类别)
- 边界框回归器(微调位置)
问题:
- 每个区域都要单独跑一次 CNN,太慢!
- 所有区域都要存储特征,占用硬盘!
- 推理速度很慢,无法实时!
(2) Fast R-CNN
两大改进点:
- 整张图只跑一次 CNN,生成一个大的特征图!
- 所有的区域建议直接在这张特征图上进行提取(用 ROI pooling 层)
此外:
- 用 Softmax 替代 SVM 进行分类
- 整个网络是端到端训练的
效果:
- 更快、更省空间
- 但 区域建议(selective search)仍然太慢
(3)Faster R-CNN 真正意义上的“端到端目标检测模型”
核心创新:引入 RPN(Region Proposal Network)
- 不再用传统的“选择性搜索”了
- RPN 是一个小的 CNN 网络,能自动从特征图中生成“候选框”
- 每个位置输出 k 个框,每个框预测:
-
- 是否包含目标(分类)
- 框的位置(回归)
好处:
- 快得多!RPN 速度远胜选择性搜索
- 可端到端训练(共享卷积层)
进化小结表:
模型 | 特征提取 | 区域提议方式 | 分类方式 | 是否端到端 | 速度 |
R-CNN | 每个区域单独提取 | 选择性搜索 | SVM + 回归 | ❌ | 慢 |
Fast R-CNN | 整图提特征 | 选择性搜索 | Softmax + 回归 | ✅ | 中等 |
Faster R-CNN | 整图提特征 | RPN(神经网络) | Softmax + 回归 | ✅ | 快 |
3.语义分割( 像素级的图像理解任务 )“图里每个像素属于哪个类别”——区分狗的每个像素,背景的每个像素
对图像中每个像素分割(“语义”层面),不同类别区域的像素赋不同标签,把图中“人”、“树”、“地面”分别涂上不同颜色。 因此,与分类不同,我们需要用模型对密集的像素进行预测。
解决方案就是加州大学伯克利分校提出的全卷积网络( FCN ),它提出了端到端的卷积神经网络体系结构,在没有任何全连接层的情况下进行密集预测。
(1)传统方式:滑动窗口 + 分类
- 对每个像素,取它周围一块图像(patch)送入分类网络
- 每个像素一个窗口,分类后拼起来就是分割图
好处:简单直接
问题:
- 重叠太多,特征不能共享,效率极低
- 无法处理大图和复杂结构
(2)全卷积网络(FCN,全称 Fully Convolutional Network)
加州大学伯克利分校提出,开创了现代语义分割范式
核心思想:
- 把分类网络里的全连接层全部取消!
- 用卷积 + 上采样实现“像素级分类”
- 不管输入图像大小如何,输出都是对应大小的 mask 图
优点:
- 端到端训练
- 比滑动窗口快很多
- 支持任意尺寸图像
缺点:
- 由于池化层损失了空间细节,结果很模糊、边界不清晰
(3) FCN 优化:SegNet
- 是 FCN 的一个改进版
- 引入了编码器-解码器结构:
-
- 编码阶段(下采样):抽取高层特征
- 解码阶段(上采样):逐步还原像素分布
- 同时在解码阶段加入了 skip connections(跳跃连接)
-
- 保留原始分辨率信息,辅助边界还原
更高精度
更强细节还原能力
模型稍微更复杂
(4)更进一步:DeepLab 系列 & RefineNet
- DeepLab:
-
- 使用了 空洞卷积(Dilated Convolution)
-
-
- 保留大感受野,不损失分辨率
-
-
- 引入了 CRF 后处理增强边界质量
- RefineNet:
-
- 利用多层 skip connection 汇聚多尺度特征
- 更加强调边界对齐和细节保持
关键术语解释
名词 | 含义 |
FCN | 全卷积网络,端到端的语义分割框架 |
上采样 | 将低分辨率特征图还原为高分辨率,用于逐像素输出 |
反卷积 / 转置卷积 | 一种常用的上采样操作,用于图像放大 |
空洞卷积(dilated conv) | 在卷积核之间插入空洞,扩大感受野不增加计算 |
跳跃连接(skip connection) | 保留原始特征用于后期融合,提升细节还原能力 |
4.实例分割—— “图里有狗,狗在哪,且区分不同的狗”
结合目标检测和语义分割, —— 在图像中,实例分割不仅要识别出物体的类别(比如狗、车、人等),还要将同一类别的多个实例分开,并为每个实例的每个像素生成准确的边界。
实例分割将不同类型的实例进行分类,比如用 5 种不同颜色来标记 5 辆汽车
(1)Mask R-CNN:
- Mask R-CNN是实例分割领域的开创性工作,它是在Faster R-CNN(目标检测模型)基础上进行扩展的。
- 在Faster R-CNN中,目标检测任务通过生成候选框(Region Proposal)来确定物体的位置,Mask R-CNN通过在每个候选框上添加一个分支,预测每个候选框对应物体的像素级别的分割掩膜(mask)。
- 其网络架构包括:
-
- Backbone:用于提取图像的特征(通常是ResNet或者其他强大的卷积网络)。
- Region Proposal Network (RPN):生成可能包含物体的区域(候选框)。
- RoIAlign:用于精准地从每个候选区域中提取特征。
- Mask Branch:通过FCN生成每个实例的像素级分割掩膜。
- Bounding Box Branch:预测候选框的位置并进行微调。
优点:
- 高精度:能够同时进行目标检测和像素级的实例分割。
- 端到端训练:Mask R-CNN可以同时训练目标检测、边界框回归和分割掩膜。
- 可扩展性:易于在其他任务上进行扩展,比如人脸识别、姿态估计等。
缺点:
- 由于每个候选区域都需要生成一个掩膜,计算量较大。
- 在复杂的场景中,可能会出现候选区域和物体边界不准确的情况,导致分割质量下降。
(2)PANet (Path Aggregation Network):
- PANet是一种提升实例分割精度的网络,它在Mask R-CNN的基础上增加了路径聚合模块,通过细化信息流和多尺度特征融合来改善实例分割性能。PANet通过增强网络的特征提取能力,提高了分割掩膜的准确性。
(3)YOLACT:
- YOLACT(You Only Look At Coefficients)是一种高效的实例分割方法,采用实时实例分割,具有较高的速度。YOLACT与Mask R-CNN不同,它通过将实例分割拆分成两个步骤:首先预测每个物体的特征(类似于目标检测的bounding box),然后通过系数与特定的原型进行结合,生成最终的分割掩膜。
- 优点:速度较快,适用于实时任务。
- 缺点:在复杂图像和小物体上分割效果较差。
5.关键点检测—— “图里有狗的头部、耳朵、尾巴位置”
检测图像中特定的关键点,如人体的“头部、手肘、膝盖”等。 用来做姿态识别、动作分析(如跳舞识别、体操评分)。
目标:检测图像中特定的关键点,通常是一些重要的结构点,例如人体的关节点、面部五官、物体的特征点等。
常见应用:
- 人体姿态估计:分析人的动作,比如姿势识别、跳舞动作分析、运动员动作评估等。
- 人脸关键点检测:比如眼睛、鼻子、嘴巴等,应用于面部表情识别、面部识别解锁、表情分析等。
- 手势识别:通过识别手指的关键点来实现手势操作(如VR、AR中的控制)等。
关键技术与方法:
- OpenPose:一个非常著名的实时多人姿态估计库,它能从图片中检测到多个人体的关节位置,并准确追踪每个人的动作。
- HRNet(High Resolution Network):一种高分辨率网络,通过保持较高的分辨率来提高关键点检测的精度,适用于人体姿态、面部标记等任务。
进展: 随着深度学习的进步,基于CNN的关键点检测技术得到了很大提升,尤其是在姿态估计、表情识别等领域表现得越来越成熟。