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,再进行平均池化后,又进行了 1 ∗ 1 1*1 1∗1的卷积,保证所有经过池化后的数据都有相同的channel,再之后使用了BN),以生成尺寸分别为1×1,2×2,3×3,6×6的多尺度上下文特征,这些特征使用上采样(双线性插值)来保证和resnet101中的特征的尺寸相同 ,再将插值过后的特征和原始的特征向量concat到一起。然后,采用1×1卷积来减少信道并更好地整合多尺度上下文信息(从代码中看,这使用的是 3 ∗ 3 3*3 3∗3的卷积+BN,输入是concat的结果,输出的channel是我们预计的channel)。 最后,上下文嵌入模块的输出作为全局先验上下文被馈送到下面的高分辨率模块中。
流程大概是这样:
High-resolution Embedding Module(高分辨率嵌入式模块)
在人体解析中经常存在一些需要分割的小物体,因此,高分辨率的特征向量对于最终的预测结果有极大的影响。为了恢复丢失的细节,我们采用了一个简单而有效的方法,嵌入来自中间层的低级视觉特征来补充高级语义特征。我们使用conv2的特征来获取高分辨率的细节信息,使用context embedding module来获取全局信息,最终我们通过2次 1 ∗ 1 1*1 1∗1的卷积来更好融合本地和全局特征,得到第一个人体解析预测。
Edge Perceiving Module(边缘感知模块)
边缘感知模块可以对边缘进行预测以得到更好的预测结果。如框架图所示,我们通过对conv2, conv3, conv4分别进行 1 ∗ 1 1*1 1∗1的卷积+BN+ 3 ∗ 3 3*3 3∗3卷积来获得2-channel的分数map,并将conv3, conv4输入得到的结果进行插值来得到和conv2结果相同的宽和高,将上述结果concat到一起,再经过 1 ∗ 1 1*1 1∗1的卷积来得到最终结果(最终结果的channel为2)。边缘损失函数就是通过这个结果得出。
将下面图片中的edge_feature和高分辨率嵌入式模块中去掉最后1个卷积的结果concat到一起,做一个 1 ∗ 1 1*1 1<