在上一篇中,我们读到了预训练特征与模型微调等在模型训练方面提升效率和降低成本的优化方案,本篇开始会深入一些细节的应用领域。这次会从最常见的应用——图像识别开始,主要会涉及两个标题中提到的细分领域。 本文还是以翻译PPT页内容为主,打星号的部分则是我的补充说明。这个系列课件读到现在,页内容基本只能提供概念性的了解,技术细节我页会在文末引用一些详细解读的资料。
*这里semantic segmentation是语义分割,这里特指图像中的特定模式形成的“语义”概念。这是中文互联网上常规的翻译,也是相对准确的翻译。
物体探测:使用包围盒,将物体按预先划分的类型,定位其中的每个实例。
图像语义分割:定位(图像中)预先划分的类型对应的所有像素。
*图中是图像语义分割的另一个例图,也更接近大家在自动驾驶识别技术中见到的样子。
(蓝字)注:同类的实例不会被分隔开——图中框出的车辆,其实不止一辆。
*如果有用Iphone等智能机的相册功能,会有按人查看的功能,其原理是很类似的。
车牌识别(例如,AllGoVision产品)——*这个在国内已经完全普及了。
工地行人探测。(*其实探测人有很多其它的应用,课件举例的在国内来说挺小众的)
*图中是将图像中的部分识别出,并重新赋予材质纹理的案例。
*就是俗称“抠图”的一项技术,在图像处理领域已经很普遍了。
*图中应该是Maybelline官网上提供的预览妆造效果的功能。
*这方面随着特斯拉的推进和普及,大家应该对于这项技术的进展和由于识别不当导致的事故都有所了解了。
*我个人今年也在武汉体验了全自动驾驶的萝卜快跑网约车——除了停车部分问题比较大,行驶过程体验上已经比较适配城市交通的环境了。
3 PASCAL VOC探测挑战:R-CNNs——PASCAL VOC detection challenge: R-CNNs
*VOC是Visual Object Classes的缩写,即虚拟物体分类。
*MSCOCO是Microsoft COCO: Common Objects in Context的缩写,是一个数据集。
*IoU是Intersection over Union的缩写,即交并比(如图中的公式)。
*这里使用IoU作为评分方式,并设置一定的阈值作为正确探测的度量值(例如图中50%或更高)。
*mAP是mean Average Precision,一般译作全类平均精度。
*参照图中的几个例子,紫色部分识别错误,因此AP是0;绿色部分只识别了一个,因此AP是0.5——依此类推。
*因为是过时方案,细节就不展开了。大致的思路是先以一定规格的包围盒窗口扫描屏幕,可调整包围盒尺寸重复多轮。
*先以方形窗口作为起步。在图中的情况中,如何从该包围盒进一步定位出人物?(在这套算法里比较难实现)
一种补救方式是,通过不同尺寸的“窗口”来扫描屏幕。
而识别出目标位置的汽车又需要图中(另一种)尺寸的包围盒。
进一步作为补救方式,可能检测窗口不能是正方形的,需要有不同的宽高比。
*图中的情况下,目标人物就比较接近能被识别出来了。
*这里就不一一总结页中列出的局限性了,简单来说就是:要检测的窗口尺寸有多种、宽高比也需要有多种,才能实现比较好的检测结果;但这又会导致需要的窗口数量很多(且数量越多才约精确),导致算法执行非常缓慢。
首个超过人工特征识别的CNN。
依据其技术方案起名:区域目标的CNN特征识别。
*SVM是Support Vector Machine的缩写,即支持向量机。这是一种分类器,后续会介绍到。
*这套算法核心解决的就是避免穷举,借助CNN优化了物体分类的过程。并且这套方案后续也进行了多轮优化。
使用选择性搜索算法(生成约2K个包围盒)来定位“物体”:
比起滑动窗口方案考虑更少的区域;
区域中也更可能包含目标物体。
*关于使用了Selective Search算法,课件中并没有写到,是其它资料中介绍的。文末会附链接。
微调:替换预训练的AlexNet中的FC8,以涵盖图像探测数据集中的全数种类,并将其训练以用于图像分类(使用最大化IoU分类,阈值0.5)。
*这里Fine-tune就是指的对已有成熟模型的局部改造,具体可以参考上一篇。
区域是以各项异性(长宽不同)缩放的方式来适配需要的分辨率的。
*如图,输入区域被调整成227*227*3的图像输入。(可能之前没写到过,这里再提一下,这里的*3是指RGB)。
分类器被训练以用于识别特征,并从预训练数据集中的分类数据中为其指定一个分类。
回归因子被训练以用于提炼每个区域的位置、宽度和高度。
*如图,其实这里只的提炼也可以理解成应用模型参数进行区域变换(中心、宽高)的过程。
训练的进程较慢——需要训练3个模型。
测试时间较长——约1分钟一张图像。
*这里在课件的基础上补充一些思想脉络,来尝试说清楚这个问题。
*首先,R-CNN的一个问题是区域之间可能有重叠重复计算卷积,这部分在计算量上有浪费;其次就是需要调整尺寸,对于源数据进行缩放变形一定程度上会导致失真。
*这里提出的SPP——Spatial Pyramid Pooling是一个特殊池层,用来将N*N的特征图表示成为21维的固定维度的向量,然后输入全连接层。
*而Fast R-CNN中的RoI(Region of Interesting)池层是一个特殊单层简化SPP层,元图像中选择的区域会被映射到Rol层中再进一步提取数据,并传入全连接层。
*如图,可以看到损失函数组合了Softmax和L2两种。(两种之前都分别读到过)
(红框)当预测真类型判断错误时,应用较大的惩罚系数;(蓝框)其它情况惩罚值相对较低。
*这部分主要是衡量定位的精度, SSE之前提到过是残差平方和。这里主要是计算预测位置和真值位置之间的误差并评分。
*这里和以下部分简单介绍了对于初始目标选择框的进一步改进,但没有展开讲。想详细了解可以看文末的资料。
*这里使用了滑动窗口方式对卷积层特征图进行了提取,并进一步提取到分类层和回归因子层。具体参数可以参照图中,这里的anchor是指此方案中的K个不同的矩形框。
训练RPN(区域候选网络)
通过预训练的RPN中的候选区域来训练Fast R-CNN
微调独属于RPN的层
微调Fast R-CNN中的全连通层
4 PASCAL VOC语义分割挑战:全卷积网络——PASCAL VOC semantic segmentation challenge: fully convolutional networks
*回到VOC挑战,图中展示了语义分割提供的训练数据样本。
输入:任意尺寸的RGB图像。
输出:和输入图像同尺寸的结果图像。
*如图所示,假设有5种类型,就会有5张不同的分类结果。
在VOC的案例中,一共有21个分类——20种物体加背景层。
(紫色)图像识别的部分使用了预训练的ImageNet分类器,如:AlexNet、VGG、GoogleNet等。
为使这一架构全卷积化,方案中以卷积层替换了全连通层。
由于不存在全连通层了,因此对于输入节点的数量没有了限制(因而任意尺寸 的图像都能被支持)。
这项改动的另一个结果是,不同于分类器,一项类型会指向一个“稀疏区域”。
如果将ImageNet训练的分类器卷积化,每个稀疏区域需要多少类型?
在VOC挑战的案例中,还是20个物体类型和1个背景。
*图中列举出了一些简单的超采样案例,能输出2倍于输入的结果。
也被称为“分数步长卷积”(对应步长大于1的卷积)、“反向卷积”,以及不正确地被称为“devonvolution layer”。
下一项挑战:如何从稀疏区域分类中解码出高度细节化的像素分类?
FCN16:累加低层级的预测,由较细颗粒的特征(pool4)结合较粗的特征的超采样得出。
使用跳过连接方案能在保持语义划分正确的前提下获得更好的细节(如图)。
看似很复杂,所以为什么不直接保持图像尺寸(的数量级)来解决逐像素的识别问题?——因为这样的数量级在计算量上是不可行的,模型参数会太多。
*这里就是对上述一些过程的回顾。需要注意这种编解码肯定是有损的。
*这里的损失函数被称为Multinomial Logistic Loss ——多项式逻辑损失函数。
在预训练的网络的基础上更新权重——也被称为,微调。
*从图中可以看出,相对之前提出的方案肯定是有了较大的进化。
*这套方案的要点主要是全连接层转为卷积层,以及后续对卷积层数据超采样到像素级。
如果说之前读到ImageNet那一篇引入的是单图单物体分类,这次则是介绍了单图多物体识别的技术发展——以及在这个基础上的物体分类和图像语义分割。
需要注意的是,如果以1秒24帧以上的标准来看,最后的比较粗粒的FCN-8也还没达到“实时识别“的要求。后续把更快更好的识别应用于自动驾驶领域,人们还是进一步不断迭代了算法的速度和精度的。
下一篇会读到一个新话题,循环神经网络——Recurrent neural networks。
评论区
共 条评论热门最新