Associative Embedding: End-to-End Learning for Joint Detection and Grouping(发表于2017年6月)
是bottom-up方法。这篇文章提出的方法是同时输出检测目标和分组,所以是一站式的方法,而且还用在了两个小领域:多人姿态检查,目标分割。
这篇论文读起来非常难懂,不是因为晦涩,而是因为作者定位太高。以后写论文,创新点就是要当作创新点来写,不要输出自己的价值观。看这篇论文可以直接从第三节开始,或者更直接,从3.3节开始,前面都是价值观的输出,更何况好多姿态识别中的优秀论文也只是一点点创新点。
多人姿态检测的方法用的更多的是bottom-up方法,即先检测关节然后分组,目标分割是检查相关像素然后分组,多目标追踪是检测个体然后分成不同轨迹,所以这些方法一般都是两个阶段的流程。而相互依赖的两个步骤会造成误差的叠加,作者要从这个角度发力,优化现有网络得到一个单阶段就能完成任务的网络。这篇文章就是将检测和分组合并到一个过程,构建完全端到端网络的过程。作者认为后一阶段可以完全嵌入到前一个阶段,嵌入式联接(embedding一般称为编码,其实名字也不重要):associative embedding。
基本方法是在检测环节直接给检测结果编号,表明它属于哪个物体,所得到的这些编号标签就代表了分组。
因为这重新将神经网络回到了黑盒时代——让神经网络去得到准确的编号标签,所以在训练的时候需要特别设计loss function,促使统一物体有相同标签,不同的物体不同。
因为ground truth中并没有现成的这种标签,所以不用在‘标签号大小’上对ground truth负责。
而且重点不是标签的大小,而是保证他们是不同的就好了,所以网络可以自己决定标签号大小,只要符合ground truth分组。
网络方法,在多人姿态识别时,用到了堆叠Hourglass网络的方法,由此产生每一个关节的位置heatmap和关节点的标签heatmap,然后将关节使用相同标签分组。
创新点:
就是嵌入式关联方法,这些图像识别任务(2个,姿态检测和目标分割)就变成单个过程。并将这个过程在多人姿态估计上面的应用也有一些创新点。
编码矢量Vector Embeddings :
许多方法都用到了编码向量,图像相似度评估,图像分类,自然语言等等。这篇文章用vector embedding用在关节检测的‘标签’识别上(后面提到就明白了)。
感知单元perceptual organization:
(这篇文章中的侧重点有点Multi-Context Attention for human pose estimation中提到的attention 的感觉)是将影像的像素归为组,目标……的过程,用于目标分割再重组,提取图片的内容结构的过程。这个方法简单的历史:这个方法的分为两个阶段——检测基础单元然后分组。分组方法包括光谱聚类,conditional random fields以及generative probabilistic models。这些方法都需要先提前检测到这些基本单元,但在聚集成组的方式上不一样。
这篇文章提出的‘标签’识别方法和光谱聚类有些联系(ps:光谱聚类是图像有n个维度,那每个像素就会产生一组向量,相当于一条曲线。曲线间的相似度可以用于聚类)。从视觉单元到一般化的特征值产生embedding,好比从底层次特征到高层次的视觉特征编码,然后使用光谱聚类计算。
Our approach is also related to the work by Harley et al. on learning dense convolutional embeddings [24], which trains a deep network to produce pixel-wise embeddings for the task of semantic segmentation. Our work differs from theirs in that our network produces not only pixel-wise embeddings but also pixel-wise detection scores.
多人姿态检测:
single person pose estimation [50, 48, 52,40, 8, 5, 41, 4, 14, 19, 34, 26, 7, 49, 44]. For multiperson
pose, prior and concurrent work can be categorized as either top-down or bottom-up. Top-down approaches [42, 25, 15] first detect individual people and then estimate each person’s pose. Bottom-up approaches [45, 28, 29, 6] instead detect individual body joints and then group them into individual。
首先是总体结构:
visual tasks多是可视单元visual units的检测,通常通过为候选项(不同肢体,目标与背景)打分的方式来量化任务。然后,associative embedding也是为候选项打分的同时也为归类标记记号。然后loss function将促使网络学得同组有相同的标记记号。
层叠Hourglass 沙漏结构:
沙漏会输出不同scale下的每个关节的heatmap,热点图中peak峰值就作为关节位置。然后这篇问题又做了些修改:增加了输出特征数的层。
多人姿态检测:
对于同关节,所得的热点图中有多个peak就对应多个人。那如何产生关节以及关节分组?使用了标签方法,产生关节是就是普通的检测的方法。分组是使用了non-maximum suppression一种滤波方法得到关节位置后,然后比较关节距离,close enough的归为同组。然后训练的时候,将特别考虑detection loss和grouping loss。在构建grouping loss的时候,分别计算了一个人作为整体的各关节,以及不同个体间的标签号,目的是让个体内的肢体分组编码是相同的,不同个体是不同的。
分组编码:
方法是先获得躯干编码再获取四肢编码,对于新检测到的肢体,分别与现有的个体(注意是个体,每次检测同一肢体,相同肢体的个数就代表了个体数。强调不用,是因为待会要进行新得肢体的合并归组)技术计算匹配度,如果非常相近(specific threshold)就认为是匹配的,相近距离使用了tag distance和detection score。如果不满足,就新开一个标签(同样的,此时代表了个体),然后循环直至没有漏下的肢体。这样就用heatmap得到各个肢体limb,又得到了group tag。
然后对于图片中个体的大小不同带来的影响,使用了如下方法:将不同scale尺度下所得热点图加到一起,然后将不同尺度下的标签对应坐标点合到一块组成vector,然后计算vector的距离(大概像是两曲线的余弦夹角)。
最后,也是这篇文章最关键的地方(使整个方法起作用的地方),是设计loss,让神经网络学习如何自己打标签,最后的目的是肢体的标注正确和不同肢体联接正确(同一个人的肢体不被标注到其他人身上)。
然后精度还是不错。
MPII的总体评价精度 mAP=77.5
使用神经网络自己学习特征这个想法很有神经网络的思维特点,物体检测中的SSD等就是去训练神经网络自己去学习定位框。这个方法还有待深入研究,因为将网络黑盒化了,不过值得深入研究。