视觉,说到底是个神奇的东西。不碰不摸,光靠眼睛就能感知周围的一切——温度、距离、形状、颜色。而机器要想复制这套能力,远比想象中困难。生物视觉系统的复杂性至今仍未完全解开,所以目前我们谈的“机器视觉”,实际是在可控环境中为特定任务设计的系统。工业场景刚好满足条件:环境可控、任务明确,于是成了机器视觉最大的应用阵地。
人眼靠视网膜上的锥体和杆状细胞捕捉光线,再经由神经纤维传给大脑皮层,才形成我们看到的图像。机器视觉的逻辑完全不同:输入是图像,输出是对图像的感知描述。这些描述与图像中的物体或场景一一对应,并指导后续动作——比如机器人抓取零件、检测缺陷、避障导航。

那么,走到今天,主流的机器视觉技术到底有哪些?
中流砥柱
卷积神经网络
在计算机视觉领域,卷积神经网络(CNN)是最普遍的模型结构。它用来提取特征,既能抓住相邻像素间的模式,又能保证参数数量不随图片尺寸爆炸。典型的结构是:多层卷积和池化层交替作用于输入图像,最后加上全连接层,ReLU激活函数通常放在卷积或全连接层的输出后,Dropout用来防过拟合——当然,后来BN出现后,Dropout基本被替代了。
自2012年AlexNet在ImageNet夺冠后,CNN就逐渐取代了传统算法,成为视觉任务的核心。这些年,研究人员从提升特征提取能力、改进梯度更新、缩短训练时间、可视化内部结构、减少参数量、轻量化、自动设计网络结构等方向,不断推动CNN进化。于是有了AlexNet、ZFNet、VGG、NIN、GoogLeNet、Inception系列、ResNet、WRN、DenseNet等一系列经典模型,以及MobileNet、ShuffleNet、SqueezeNet、Xception等轻量化模型。

·卷积网络示意图
经典模型(AlexNet)
AlexNet是第一个真正意义上的深度网络,几个关键特点:用ReLU做激活函数;在全连接层用Dropout防过拟合(后来被BN取代);因为GPU显存不够,用两个GPU在通道上分组训练;使用局部响应归一化(LRN),模拟生物神经元的侧抑制——激活的神经元会抑制相邻的,让响应大的卷积核更强,其他被抑制,从而减小核之间的相关性。LRN配合ReLU,让模型准确率提升了1%以上;还用了重叠池化,作者认为能丰富特征且更不容易过拟合。

集大成之作(ResNet)
经验告诉我们,网络越深越宽,特征提取能力应该越强。但到了某个临界点,层数再增加,准确率反而下降,收敛也变慢。传统卷积网络每一层只有一条连接,ResNet引入了残差连接,让信息在不同层之间流动得更顺畅。类似思路还有FractalNets、Stochastic Depth、Highway Networks等。它们共同的特征是缩短前面层到后面层的路径,核心目的只有一个:增加信息流动。
后起之秀
Transformers

Transformer是self-attention架构的典型代表,2017年以来在NLP领域攻城略地,尤其在机器翻译和文本生成这类序列到序列任务上表现惊人。2020年谷歌把纯Transformer结构ViT用在ImageNet分类任务上,性能居然和CNN不相上下。随后大量ViT衍生的Transformer也都在ImageNet上取得了成功。
Transformer相比CNN,优势在于较少的归纳偏置和先验知识,因此更适合作为不同学习任务的通用计算原语,参数效率和性能增益和CNN相当。但缺点也很明显:训练时对大数据机制依赖更强,因为不像CNN有明确的归纳先验。于是出现了新趋势——当self-attention和CNN结合时,能建立起强大的基线(比如BoTNet)。
Vision Transformer(ViT)直接把纯Transformer架构应用到图像块序列上进行分类,效果优异,在很多任务上超越了最先进的卷积网络,而且所需的预训练计算资源大大减少。

DETR是第一个成功将Transformer作为主要构建块的目标检测框架。它和之前高度优化的SOTA方法(比如Faster R-CNN)性能相当,但pipeline更简单、更灵活。

Transformer的变体研究目前非常活跃,主要方向包括:模型轻量化、跨模块连接加强、自适应计算时间、分而治之策略、循环Transformer、等级化Transformer等。
欺骗机器的眼睛
对抗性示例
最近引起研究界注意的一个问题是,这些视觉系统对对抗样本的敏感性。一个对抗性例子就是一张加了噪声的图像,故意让系统做出错误预测。想要在现实世界部署这些系统,就必须能检测到这类样本。因此,近年来的工作尝试在训练过程中加入对抗样本,让系统变得更鲁棒。
现阶段对模型攻击的分类主要有两大类:攻击训练阶段和攻击推理阶段。
训练阶段的攻击
训练阶段的攻击,核心是对模型参数施以微小扰动,让模型性能和预期产生偏差。比如直接替换训练数据的标签,使样本和标签不对应,最后训练出来的模型自然偏离预期。或者通过网络在线获取训练数据的输入权,操纵恶意数据扰动在线训练过程,最终产出脱轨的结果。
推理阶段的攻击
推理阶段的攻击,当模型训练完成后,可以把它看作一个黑盒或白盒。白盒攻击需要知道模型内部所有参数——这在实际中不太现实,但有实现的可能,所以需要有这种假设。黑盒攻击更贴近现实:通过输入输出猜测模型内部结构;加入较大扰动进行攻击;构建影子模型进行关系人攻击;抽取模型训练的敏感数据;模型逆向参数等。
对抗攻击的防御机制。抵御对抗样本的一种方法是,基于附加信息引入辅助块模型(AuxBlocks)进行额外输出,作为一种自集成防御机制,尤其对黑盒和白盒攻击效果不错。另一种是防御性蒸馏——把训练好的模型迁移到结构更简单的网络中,达到防御效果。
对抗学习的应用实例:自动驾驶和金融欺诈。自动驾驶是未来智能交通的方向,但安全性未完全检验前,人们很难完全信任。虽然很多车企和科技公司已经做了大量实验,但对抗样本技术对自动驾驶仍是巨大挑战。几个攻击实例:对抗攻击让图片中的行人在模型面前“隐身”;对抗样本让模型“无视”路障;用AI生成特定对抗样本图像,就能让特斯拉Autopilot输出错误识别结果,导致雨刷误启动;在道路特定位置贴上几个对抗样本贴纸,让自动驾驶汽车并入反向车道;在Autopilot系统中用游戏手柄控制车辆行驶方向;对抗样本让行人被机器学习模型“隐身”。
自学也能成才
自监督学习
深度学习需要大量干净的标记数据,但这对于很多应用来说很难获得。手动标注海量数据需要大量人力,耗时又昂贵。而且真实世界的数据分布一直在变化,模型必须持续用新数据训练。自监督方法通过使用大量原始未标注数据来解决这些挑战。这种情况下,监督信号来自数据本身(不是人工标注),目标完成一个间接任务。间接任务通常是启发式的(如旋转预测),输入和输出都来自未标注数据。定义间接任务的目的,是让模型学习到相关特征,这些特征之后能用于下游任务(通常有少量标注可用)。
自监督学习是一种数据高效的学习范式。监督学习让模型擅长特定任务,而自监督学习则允许学到不专门用于解决特定任务的一般表示,它封装了更丰富的统计信息,可服务于各种下游任务。在所有自监督方法中,对比学习进一步提升了提取特征的质量。自监督学习的数据高效特性使其非常适用于迁移学习。
目前的自监督学习领域大致分为两个分支。一个用于解决特定任务,例如场景去遮挡、自监督深度估计、光流估计、图像关联点匹配等。另一个用于表征学习。监督表征学习的典型例子是ImageNet分类,而无监督表征学习中最主要的方法就是自监督学习。
自监督学习依赖于数据的空间和语义结构。对于图像,空间结构学习极为重要,因此在计算机视觉领域应用广泛。一种方式是把旋转、拼接、着色等不同技术作为从图像中学习表征的前置任务。着色任务中,输入灰度照片,要求生成彩色版本。另一种广泛使用的方法是放置图像块。例如Doersch等人的论文:利用大量未标注图像数据集,随机提取图像块对,然后让CNN预测第二块相对于第一块的位置。其他方法还包括修复图像、判断分类错误的图像等。
从2012年AlexNet问世到现在,十年间机器视觉技术日新月异。在很多领域,机器视觉已经逐渐接近甚至超越人眼。随着技术进步,无论安全防护、自动驾驶、缺陷检测还是目标识别,机器视觉一定会带来更多惊喜。
