Devil in the Details: Towards Accurate Single and Multiple Human Parsing
CE2P是一个端到端的人体解析的框架,现已开源,代码连接 。
Abstract
人体解析方面的研究由于其广泛的应用吸引了广大学者的兴趣。这篇文章的作者提出了一个端到端的人体解析框架(CE2P)来达到state of art的效果。并在一些列比赛中拔得头筹。
Introduction
人体解析是一种细粒度分割,也就是对图片的每个像素预测其类别。
解析现在主要有两大类解决方案:
1)High-resolution Maintenance,这种方法通过获得高分辨率的特征来恢复细节信息。它存在的问题是,由于卷积中的池化操作和卷积中的步长,会让最终生成的特征较小。解决方法是,删除一些下采样操作(max pooling etc.)或从一些低层特征中获取信息。
2)Context Information Embedding. 这种方法通过捕获丰富的上下文信息来处理多尺度的对象。ASPP和PSP是使用这一方式解决问题的主要结构。
CE2P主要包括三大模块:
1)一个高分辨率的embedding 模块,作用是放大特征图以恢复细节
2)一个全局上下文embedding 模块,作用是编码多尺度的上下文信息
3)一个边缘感知模块,用于整合对象轮廓的特征,以细化解析预测的边界
Contribution
1)作者分析了一些人脸解析方法,验证其有效性。并说明如何使用这些方法来达到更好的效果
2)作者利用了人脸解析中一些有效的方法,构建了CE2P框架
3)CE2P框架达到了公开数据集state-of-art的效果
4)代码开源,可以作为baseline使用
Key Modules of CE2P
CE2P将局部细节,上下文信息和边缘信息融合进一个网络结构。基本结构如下图:
Context Embedding Module(上下文嵌入模块)
全局上下文信息有助于预测细粒度的类别。例如:左右鞋子看起来十分相似,如果要区分,就要结合全局信息例如腿或者身体的方向。
特征金字塔是一种捕获全局特征的方法。 我们对从ResNet-101中提取的特征执行四次平均池化操作(从代码上看,四次平均池化采用Adaptive average pooling,再进行平均池化后,又进行了的卷积,保证所有经过池化后的数据都有相同的channel,再之后使用了BN),以生成尺寸分别为1×1,2×2,3×3,6×6的多尺度上下文特征,这些特征使用上采样(双线性插值)来保证和resnet101中的特征的尺寸相同 ,再将插值过后的特征和原始的特征向量concat到一起。然后,采用1×1卷积来减少信道并更好地整合多尺度上下文信息(从代码中看,这使用的是的卷积+BN,输入是concat的结果,输出的channel是我们预计的channel)。 最后,上下文嵌入模块的输出作为全局先验上下文被馈送到下面的高分辨率模块中。
流程大概是这样:
High-resolution Embedding Module(高分辨率嵌入式模块)
在人体解析中经常存在一些需要分割的小物体,因此,高分辨率的特征向量对于最终的预测结果有极大的影响。为了恢复丢失的细节,我们采用了一个简单而有效的方法,嵌入来自中间层的低级视觉特征来补充高级语义特征。我们使用conv2的特征来获取高分辨率的细节信息,使用context embedding module来获取全局信息,最终我们通过2次的卷积来更好融合本地和全局特征,得到第一个人体解析预测。
Edge Perceiving Module(边缘感知模块)
边缘感知模块可以对边缘进行预测以得到更好的预测结果。如框架图所示,我们通过对conv2, conv3, conv4分别进行的卷积+BN+卷积来获得2-channel的分数map,并将conv3, conv4输入得到的结果进行插值来得到和conv2结果相同的宽和高,将上述结果concat到一起,再经过的卷积来得到最终结果(最终结果的channel为2)。边缘损失函数就是通过这个结果得出。
将下面图片中的edge_feature和高分辨率嵌入式模块中去掉最后1个卷积的结果concat到一起,做一个conv+BN+dropout,+conv得到第二个解析结果。在解析过程中加入了边缘信息,可以让结果更加准确。
CE2P有三个模块组成,而它的输出由2个pasing结果和一个边缘预测结果组成。损失函数公式如下:
是一个带权重的交叉熵损失函数。label为真实边缘的二分图。
表示预测的解析结果和真实结果解析结果的交叉熵损失函数。
Multiple Human Parsing(MHP)
MHP的含义的对图片中的多个人物进行解析,也就是图片上不只有一个人,此时我们不仅仅要区分人体的各个部分,还要判断这个部分属于哪个人。作者设计了一个新的框架结构M-CE2P,这个结构结合了CE2P和Mask R-CNN。具体结构如下图所示:
M-CE2P使用了三个分支,,下面详细介绍一下三个分支。
Global Parsing
虽然CE2P是一个单人人体解析框架,但是它也可以在多人物人体解析中表现很好的效果。因此,我们首先将CE2P应用在全部图片上做一个global parsing,该分支为。然后将这个分支输出的结果作为local parsing的补充。global parsing可以为多人物的遮挡问题提供上下文信息。但是,此时对于一些小物体(比如人体某部位)可能会被忽略。
Local Parsing with Predicted Instance Masks
为了解决所存在的问题,作者考虑将人体定位作为一个预处理步骤来产生更准确的解析结果。作者提出了一个2阶段的针对人体local parsing。具体操作如下:
1)使用Mask R-CNN提取整个图片中的人体部分
2)将这些部分resize到适合CE2P适合当输入的尺寸
在推理阶段,使用Mask R-CNN得到输入图片的子图片(原图可能包括多个人物,子图片中只有单个人物),然后将子图输入到训练好的CE2P中得到解析预测。为了得到原始图片的解析结果,作者将子图片的解析预测resize到原始的图片大小通过双线性插值(我理解这个原始大小是指子图片大小,看过代码再修改准确结果),最后将子图片的confidence maps用0填充边缘,来达到和的confidence map一样的大小。并且通过前景信道上的元素求和和背景信道上的最小化进一步融合在一起。(不太理解)
Local Parsing with Ground-truth Instance Masks
和很相似,都是从将原始多人物图片中提取子图片(子图片中只包括单个人)。只是提取子图片的方式不同,是通过Mask R-CNN获得子图片,而是同ground-truth获得子图片。使用这个分支,可以让local parsing的结果更加准确。
最后,三个分支的结果通过逐元素相加得到最终的解析结果。此时的结果不能区分某个部件属于哪个人。
Instance-level Parsing and Label Refinement
使用上面的几个步骤,我们可以得到非实例级别的预测结果,为了得到实例级别的label我们需要考虑两个方面:
1)instance assignment,例如:我们直接将Mask R-CNN得到的human mask去指定每个像素属于哪个实例。
2)label refinement,扩大有相同parsing label但是超过人体实例的邻接像素。例如:头发,手等部位很容易超过人体mask范围,作者对于边界像素使用广度搜索,找到那些解析认为是背景的像素,但实际是某个实例一部分的像素。
Experimental Results
CE2P的输入是。作者使用了和Deeplab一样的训练策略,例如:基本的学习率是0.007,训练大约150个epochs,数据增强使用了random scale(0.5~1.5),crop,左右翻转。
解析度量标准
PA(Pixel Accuracy)正确像素占总像素比例
MAP (Mean Pixel Accuracy)每个类内被正确预测的比例,最后结果取平均
MIou(Mean Intersection over Union)计算真实集合和预测集合的交并比。这个比例可以变形为正真数(intersection)比上真正、假负、假正(并集)之和。在每个类上计算IoU,之后平均。