今天读的是CVPR2014 的“Decorrelating Semantic Visual Attributes by Resisting the Urge toShare”。此文的一大亮点不在于它的方法,而是正视现在热门的Visual Attributes based的方法,并开门见山地说出了“Existingmethods to learn visual attributes are prone to learning the wrong thing”,指出现在我们所说Attribute的学习很可能只是学到一些相关的attribute,而不是要学习的attribute本身。比如对于图1反映的情况,当我们要去学一个“furry”的属性时,搞不好我们其实学的是“brown”这个属性(因为有“brown”这个属性的图恰恰都有“furry”这个属性)
图1
那么应该如何解决这个问题呢?作者的提供的思路是属性分组+局部属性(空间稀疏化)+特征选择的组合(和我自己在做的思路一致啊,再次说明了出文要趁早)。这样做为什么可行呢?原因很直接:首先,对于属性分组,我们可以按语义将属性划分为不同的子集,比如颜色={“黑”,“红”},皮肤纹理={“有毛”,“有斑点”}等等。那么对于不同的分组,我们自然可以为它选择不同的图像特征进行描述,比如颜色用颜色直方图,皮肤纹理用glcm,而不是每个图像都用所有特征的串联,这就可以一定程度上避免刚刚说到学到相似属性的问题。第二,局部属性(文章中叫空间稀疏化),其实就是将原图划分为块,再每块都当作一个实例来处理。那么这样就可以避免一些背景或者是物体本身的干扰,比如当我要学习“游泳”这个属性时避免学到海豚图像中的海的“蓝色”。特征选择(特征空间的稀疏化)和第一个目的一样,只不过是当比如学习颜色特征时,采样一些自动得方法,而不是用户实现定义。
文章中具体的实现用的是Multi-Task Learning。这块我没有研究过因此文中的数值解法是否可行就不得而知了。还是从公式入手看看文章是怎么做的吧:
首先,定义训练的损失函数L: