论文地址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主要解决的是下图中红框所提到的内容:
欢迎关注:)
本文来自企鹅号 - 算法入门媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 算法入门媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。