标注图像中的物体掩码是一项非常耗时耗力的工作(人工标注一个物体平均需要20到30秒),但在众多计算机视觉应用中(例如,自动驾驶、医学影像),它又是不可或缺的。而现有的自动标注软件,大多基于像素,因此不够智能,特别是在颜色接近的相邻物体上表现不好。有鉴于此,多伦多大学的研究人员lluís castrejón等提出了polygon-rnn标注系统,获cvpr 2017最佳论文提名。多伦多大学的研究人员david acuna、huan ling、 amlan kar等又在cvpr 2018提交了polygonrnn++,polygon-rnn的改进版本,并于近日发布了pytorch实现。
polygon-rnn++架构
polygon-rnn整体架构如下图所示:
和之前的polygon-rnn类似,polygon-rnn++使用了cnn(卷积神经网络)提取图像特征,然后使用rnn(循环神经网络)解码多边形顶点。为了提高rnn的预测效果,加入了注意力机制(attention),同时使用评估网络(evaluator network)从rnn提议的候选多边形中选出最佳。最后使用门控图神经网络(gated graph neural network,ggnn)上采样,以提高输出分辨率。
cnn部分,借鉴了resnet-50的做法,减少步长(stride),引入空洞卷积(dilation),从而在不降低单个神经元感受野(receptive field)的前提下,放大输入特征映射。此外还引入了跳跃连接(skip connection),以便同时捕捉边角等低层细节和高层语义信息。剩下的配置都是比较常规的,包括3x3卷积核、组归一化(batch normalization)、relu、最大池化(max-pooling)等。
蓝色张量传给gnn,橙色张量传给rnn
rnn部分,使用了双层convltsm(3x3核,64/16通道,每时步应用组归一化),以保留空间信息、降低参数数量。网络的输出为(d x d) + 1元素的独热编码。前d x d维表示可能的顶点位置(论文的试验中d = 28),而最后一个维度标志多边形的终点。
为了提升rnn部分的表现,加入了注意力机制。具体来说,在时步t,计算加权特征映射:
上式中,x为跳跃特征张量,h为隐藏状态张量,f1、f2使用一个全连接层将h1,t、h2,t映射至rdxdx128。fatt累加输入之和,通过一个全连接层将其映射至dxd。◦为哈达玛积(hadamard product)。直观地说,注意力机制使用之前的rnn隐藏状态控制图像特征映射中的特定位置,使rnn在下一时步仅仅关注相关信息。
另外,第一个顶点需要特别处理。因为,给定多边形之前的顶点和一个隐式的方向,下一个顶点的位置总是确定的,除了第一个顶点。因此,研究人员增加了一个包含两个dxd维网络层的分支,让第一层预测边,第二层预测顶点。测试时,第一个顶点取样自该分支的最后一层。
第一个顶点的选择很关键,特别是在有遮挡的情况下。传统的集束搜索基于对数概率,因此不适用于polygon-rnn++(在遮挡边界上的点一般在预测时会有很高的对数概率,减少了它被集束搜索移除的机会)。因此,polygon-rnn++使用了一个由两个3x3卷积层加上一个全连接层组成的评估网络:
该评估网络是单独训练的,通过训练最小化均方误差:
上式中,p为网络的预测iou,mvs和m分别为预测掩码、实际掩码。
在测试时,基于评分前k的第一个顶点预测通过经典集束搜索(对数概率,束宽为b)生成多边形。对应k个第一个顶点,共有k个多边形,然后让评估网络从中选出最优多边形。在论文的试验中,k = 5. 之所以首先使用集束搜索,而不是完全使用评估网络,是因为后者会导致推理时间过长。在b = k = 1的设定下,结合集束搜索和评估网络的配置,可以达到295ms每物体的速度(titan xp)。
与人交互时,人工纠正会传回模型,让模型重新预测多边形的剩余顶点。
如前所述,rnn输出的d x d维的多边形,d取28. 之所以不取更大的d,是为了避免超出内存的限制。为了增加最终的输出分辨率,polygon-rnn++使用了门控图神经网络进行上采样,将顶点视作图的节点,并在相邻节点中间增加节点。
ggnn定义了一个传播模型,将rnn推广至任意图,可以在每个节点上生成输出前有效地传播信息。
上式中,v为图的节点集,xv为节点v的初始状态,hvt为节点v在时步t的隐藏状态。矩阵a ∈ r|v|x2n|v|决定节点如何互相传递信息,其中n表示边的类型数。在试验中使用了256维gru,传播步数t = 5。
节点v的输出定义为:
f1和f2为mlp(多层感知器),试验中的大小分别为256 x 256、256 x 15 x 15.
如前所述,cnn部分112 x 112 x 256的特征映射(蓝色张量)传给ggnn。在图中的每个节点v周围(拉伸后),提取一个s x s块,得到向量xv,提供给ggnn。在传播过程之后,预测节点v的输出,即d' x d'空间网格上的位置。该网格以原位置(vx, vy)为参照,因此该预测任务其实是一个相对放置问题,并且可以视作分类问题,并基于交叉熵损失训练。训练的标准答案(ground truth)为rnn部分的输出,如果预测和标准答案中的节点的差异超过阈值(试验中为3格),则视为错误。
在试验中,研究人员令s = 1,d' = 112(研究人员发现更大的d'不能改善结果)。
基于强化学习训练
polygon-rnn基于交叉熵训练。然而,基于交叉熵训练有两大局限:
mle过度惩罚了模型。比如,预测的顶点虽然不是实际多边形的顶点,但在实际多边形的边上。
优化的测度和最终评估测度(例如iou)大不一样。
另外,训练过程中传入下一时步的是实际多边形而不是模型预测,这可能引入偏差,导致训练和测试的不匹配。
为了缓解这些问题,polygon-rnn++只在初始阶段使用mle训练,之后通过强化学习训练。因为使用强化学习,iou不可微不再是问题了。
在强化学习的语境下,polygon-rnn++的rnn解码器可以视作序列决策智能体。cnn和rnn架构的参数θ定义了选择下一个顶点vt的策略pθ。在序列结束后,我们得到奖励r = iou(mask(vs, m))。因此,最大化奖励的损失函数为:
相应地,损失函数的梯度为:
实践中常采用蒙特卡洛采样计算期望梯度。但是这一方法方差很大,而且在未经恰当地基于情境归一化的情况下非常不稳定。因此,polygon-rnn++采用了自我批判(self-critical)方法,使用模型的测试阶段推理奖励作为基线:
另外,为了控制模型探索的随机性,polygon-rnn++还在策略softmax中引入了温度参数τ。试验中,τ = 0.6.
试验结果
下图展示了polygon-rnn++在cityscapes数据集上的结果。cityscapes包含2975/500/1525张训练/验证/测试图像,共计8个语义分类。
可以看到,在各个分类上,polygon-rnn++都超越了其他模型,并且高于其中表现最好的模型差不多10%的iou。事实上,在汽车(cars)分类上,polygon-rnn++(79.08)战胜了人类(78.60)。而消融测试的结果也令人满意。
另外,polygon-rnn++对噪声的鲁棒性良好:
polygon-rnn++在跨领域的数据集上表现同样出色,这说明polygon-rnn++的概括性很好。
将GHz通信天线可集成到芯片上的设计方案详细介绍
苹果下调2018年Q4业绩预期,库克称iPhone销售低于预期
亚马逊公布最新Echo智能音箱 承诺将购买者所支付价格部分捐给慈善机构
来聊聊可达5011亿美元规模的可穿戴支付
新能源汽车核心三电系统之电机技术分析
PolygonRNN++自动标注使用CNN提取图像特征
Stability AI文本到图像模型套件迎来了新的发展里程碑
在FPC上开展SMD贴片的方案
如何推动全光网技术的发展
关于地物光谱仪的设计优点
中国移动和中国电信夹击中国联通,中国联通将日渐艰难
小米12搭载什么处理器_小米12的处理器是多少
贸易摩擦促使中国加速5G进程,5G将带动优质上市公司快速成长
5G时代促进多产业融合_折叠手机令人瞩目
运算放大器比较器和电路电压反相方程摘要
详解电流互感器的工作原理及误差
半导体教父张忠谋的退休生活:出书、演讲,只想帮年轻人更多
博通预计2018年第四季度的无线零部件业务营收将迎来环比25%的上涨
能源电力及工业互联网技术企业云涌科技发布2022第一季度报告
安捷伦信号发生器的使用方法