GAN提高人体重识别准确率

论文地址https://arxiv.org/abs/1701.07717内容简介

这篇文章的主要贡献是只使用原始数据集进行半监督学习,提高行人重识别的Baseline。这里有两个挑战:

怎么从原始数据集中获得更多的训练数据

怎么使用生成的没有标签的新数据

本文提出的解决方法是:使用GAN进行新数据的生成,使用LSRO(label smoothing regularization for outliers) 方法利用没标签的新数据。

具体实现

作者使用真实数据集训练一个DCGAN模型,然后用DCGAN作为数据生成工具,生成没有标签的数据。然后用真实数据和生成的没有标签的数据进行分类训练。这里作者的分类模型是resnet50。求损失函数采用作者提出的LSRO方式,如上面公式,如果当前数据是生成的数据,即 那么损失函数采用 这种形式,即认为生成的数据属于每一个类的概率是相同的 ,(K是总类别数量)。如果当前的数据是真实数据,即 那么采用 损失函数。

说明一下公式是如何推导出来的:

如上图,公式(1)(3)(3)是交叉熵损失函数,LSR为了使标签更平滑,修改了q(k)函数,使得那些非ground truth类别也会分配到一个较低的分值.如公式(4),这里 取值一般是0.1

公式(5)是(1)和(4)整合得到.

以上是作者提到的LSR方法.后来作者以此为灵感提出了LSRO方法:如果训练数据一共有K类,那么生成的图片属于每个类的概率是 .可以写成下图中(6)式

结合(1)(2)(6)可以写出(7)式.

实验 & 结果

1)作者将LSRO和两个已有的方法(All in one 和 Pseudo label)进行比较。 All in one方法不同于LSRO方法,他将生成模型产生的图片当做一个新的类别

Pseudo方法不同于LSRO方法,他将网络的softmax输出的最大概率值所对应的分类当做是生成图片的标签。

作者主要使用Market-150这个数据库进行实验,只使用了在Market-150数据库上由dcgan生成的图片.

除此之外,作者还用到了DukeMTMC-reID和CUB-200-2011对他们的方法进行了评估。

实现细节:

1)使用Tensorflow和DCGAN包训练GAN模型,训练数据被resize到128X128大小,并随机翻转。训练30个epochs。生成数据时随机输入100维的向量,将大小resize到256X256并且用CNN训练(使用LSRO方法)

2)CNN re-ID baseline采用ResNet50。

修改ResNet50的全连接层,使得输出类别为751,702,1367.分别对应Market-1501,DukeTMC-reID和CUHK03的类别数。所有训练图片被resize到256x256然后随机裁剪到224x224并随机翻转。同时在全连接层之前加入dropout层,dropout rate在CUHK03数据集上设置为0.5,在Market-1501和DukeMTMC-reID数据集上设置为0.75。梯度下降的冲量(momentum)设置为0.9,初始学习率为0.002,40个epoch后到0.0002。训练到第50个epoch结束。在测试过程中,作者提取了最后一个卷积层中的2048维特征。采用余弦距离来计算两幅图像的相似度进行排名。

LSRO与All in one、Pseudo label对比

在Market-1501上rank-1:accuracy=78.06%, mAP = 56.23%

在CUHK03上rank-1:accuracy=73.1%, mAP = 77.4%

然后作者又在这篇论文的基础上加上GAN生成的图片和LSRO方法,发现也work的很好,达到了最好的效果。

在Market-1501上rank-1 accuracy=83.97%, mAP=66.07%

在在CUHK03上rank-1 accuracy = 84.6%, mAP = 87.4%

如下图:

思考:

一开始并没有弄清行人重识别的概念,一直按照分类的思想去理解,论文有很多不能理解的地方,后来查阅资料,还有数据集了解到行人重识别一般指图像检索而不是图像分类。

reID主要解决的是下图中红框所提到的内容:

欢迎关注:)

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171210G0P15K00?refer=cp_1026

扫码关注云+社区