简介
细粒度图像识别不仅要区分主体和背景,还需要网络可以分层分解对象的形状及外观特征进行建模,之前从未有研究使用无监督学习方法进行建模,现有的细粒度识别主要是以监督学习为主。细粒度图像的标注成本很高,导致数据规模较小,其次无监督学习可以发现数据中未被标记的信息。相关的工作有InfoGAN,通过最大化潜在编码和生成数据之间的信息来进行图片信息分层。传统的GAN在无任何监督的情况下只能输出无分层的图像,无法有效控制背景、姿态,部分有监督的GAN可以生成特定姿态、形状的细粒度图像,不过不能分层。于是以作者将这些方法结合起来。
本文提出了一种可以生成细粒度对象细节分层图像的无监督GAN框架FineGAN。本框架无标签监督的情况下生成的图像可以解析和生成背景、对象形状、外观特征并最后拼接在一起。本方法的核心在于使用信息理论在每个因素和其潜在编码之间强制执行高交互信息,通过对各组双亲孩子节点添加约束,以诱导网络捕获学习对象的形状、纹理等所需要的层次结构。
FineGAN会在父级和子级之间生成自动遮罩,用于让潜在编码专注于相关的对象区域,并将跨阶段生成的特征拼接在一起,最后形成各不相同的特征图
通过实验,本架构可以在细粒度数据集上生成鸟、狗、汽车数据集上生成逼真的图像,并进行定量的评估,同时还可以使用本方法对真实图像进行聚类,聚类结果比传统无监督学习方法准确得多。
方法核心
训练目标
本文的目标是学习一个无监督的生成模型FineGAN,用于生成和真实数据集相匹配的高质量图像,同时分解图像的相关变化因素,其中包括背景、形状、外观、姿态、透视。如果成功完成了上述任务,说明架构成功地将每个潜在信息与特定的细粒度类别关联到一起,于是可以将学习到的特征用于真实图像分类。
分层细粒度分解
上图展示了网络的完整架构,将图像分解为三个阶段:背景、父级、子级。
背景生成阶段生成逼真的背景图像,然后将父级阶段生成的轮廓拼接在背景上,生成父图像,子阶段使用适当的颜色和纹理填充对象的轮廓、特征,生成最后的子图像。本文使用三级生成的内容进行约束,分别加权求和,从而可以端到端的进行训练。
不同阶段使用不同的编码进行调节,将服从标准正态分布的噪声向量输入到各阶段的中作为编码以生成不同的图像。
潜在编码的关系
父码和子码之间施加了两个约束,父码的类别数设置小于子代码的类别数,每个父码都会关联多个子码,这些约束有助于让网络捕捉形状和外观
背景和父码,背景和物体往往存在某种相关性,为了避免背景和对象的冲突,在训练期间背景码要求和子码相同,保证物体存在于真实可能出现的背景里。
背景阶段
背景阶段合成背景图像,用作父阶段和子阶段的画布,由生成器和判别器组成,生成器以输入的编码为条件,控制类内背景细节。设置一个对象边界检测器,用于检索器定位其中非目标的背景块,然后使用对抗损失和辅助背景损失来生成一个高背景概率的小块
父级阶段
得到背景之后,使用两个生成器,分别生成父级实体和父级遮罩,通过和背景接得到父级图像。然后使用鉴别器 进行判别,因为无监督训练,鉴别器从未见过实体,所以需要使用信息理论从而区分出主题的形状,具体方式是使用损失函数来最大化交互信息,使其逼近后验概率,这里只是用父级生成的前景形状进行判别。
子级阶段
前几个阶段的结果只包含了背景和物体轮廓,剩下就是用适当的细节填充。首先子编码对对象的颜色和纹理信息进行编码,然后将生成的特征送入残差卷积网络后,输入和父级阶段一样的生成器生成信息,填充到父级阶段的轮廓中。鉴别器使用和真实样本的差距来附加损失 ,其次使用和父级阶段相同的后验概率最大化交互信息
无监督分类
使用已经训练好的FineGAN模型后可以对细粒度图想进行聚类分析。同时可以使用最后生成的图像获得从图像到编码的映射,所以整个流程就是
- 随机生成一批编码,包括父、子、背景,生成子图像
- 两个卷积神经网络分别通过子图像预测父编码和子编码,计算交叉熵
- 更新编码器,不断重复直到收敛
通过这种方法训练的卷积神经网络可以准确提取真实图像的特征,将特征连接后即可使用k均值法进行无监督对图像进行分组
总结
FineGAN生成的图像是十分逼真,不过Github上下载运行时遇到不少困难。本文使用生成对抗网络分别生成背景、轮廓、纹理,对应了卷积神经网络中不同层次负责的部分。本文的方法明显优于其他无监督聚类方法,不过远远落后于有监督细粒度图像识别,可以尝试结合有监督方法改进网络。可以尝试使用这种方法生成的图片在其他网络上进行训练测试,如果和原本数据集效果类似的话可以大幅度增加数据集中的样本量,降低网络过拟合训练集的情况。
不过本文也有一些问题,比如子级分类的依据是网络自己学习的,比如汽车数据集上有使用颜色进行分组,这显然不是理想的结果,同时没有对不同物种的姿态做判别,比如将鸟类的特征附加在鸭子和燕鸥身上,这可能会作为噪声干扰网络。