论文阅读——《Camera Style Adaptation for Person Re-identification》及相关复现
最近在做reid跨域相关的project,所以拿近两年顶会上的几篇paper过来学习。希望可以通过GAN或者VAE在reid跨域问题上做一些工作。
先简单介绍下这篇paper。郑哲东大佬2018年的工作了,PT-GAN也是同组的相比于这个有推进的工作。主要都是利用cycle-GAN来实现不同camera间或者dataset间的风格转换。这篇paper通过cycle-GAN生成的fake image加上原始image来进行数据扩充,以提高baseline的精度。笔者也做了很详细的实验。我参照作者的思路,在自己修改的MGN的baseline上复现。
具体论文的细节很多博客都有,包括翻译,这里就不赘述了。我主要说下自己对原作者放的code的复现和一些自己实践的结果。git:https://github.com/zhunzhong07/CamStyle
下表是自己在market上复现作者的代码train出6个camera style transform的model,然后生成转换风格后的图像,进行数据扩充后的结果。结构用的云从大佬的MGN的结构,自己有小改动.
具体实现的细节:
1.首先,以MGN模型作为baseline对原始的Market-1501数据集进行train 。mAP: 88.43 rank1: 95.01。
2.然后,通过Cycle-GAN训练得到6个camera之间的风格迁移的转换模型:
Market-c1-c2:存放cam1_style<——>cam2_style相互转换的模型文件。
通过以上模型生成Cam1<——>Cam2的相机风格迁移的图片(命名格式与market数据集一致,在尾部加入_fake_AtoB):
全部生成的camera_style transformed image:
最终生成12828*5=64140张fake数据。
3.由于参考论文中的baseline与MGN不同,且训练方法不同,所以首先尝试在MGN的结构下直接对原始market-1501数据集进行扩充训练,数据扩充方案如下:
(1) 暴力扩充 。 将所有生成的64140张fake_img直接放入原始market数据集中,总共12828+64140张train img进行训练。得到mAP: 84.39 rank1: 94.33
结论:直接将5倍fake数据扩充进去,反而会增加更多的冗余信息,造成模型精度下降。
(2)仅扩充cam_1<->X image。 仅将cam1与其他摄像头的风格转换的图像放入训练集中(希望减少信息冗余,使用较为统一的风格能对训练起到好的效果)。共12828+21004张。得到mAP: 86.40 rank1: 94.95
(3)参考论文中数据扩充比例:real:fake=12828:4276=3:1.从所有生成的64140张风格图像中随机选取4276张扩充到原始market数据集中训练。得到mAP: 87.98 rank1: 95.13
4.加入参考论文中使用的lsr_loss(label smooth regularization),共一路输入送入训练,即:
(1) Real 12828+ fake (all camstyle img)64140张train img作为一路输入送入训练,loss使用1*CrossEntropy+2*Triplet+0.8*Lsr。得到mAP: 84.75 rank1: 94.18
(2) Real 12828+ fake (cam_1<->X image)21004张train img作为一路输入送入训练,loss使用1*CrossEntropy+2*Triplet+0.8*Lsr。得到mAP: 86.67 rank1: 95.01
(3)Real 12828+ fake (参考论文中随机选取比例)4276张train img作为一路输入送入训练,loss使用1*CrossEntropy+2*Triplet+0.8*Lsr。得到mAP: 87.83 rank1:95.07
loss使用1*CrossEntropy+2*Triplet+0.5*Lsr。得到mAP: 88.11 rank1:94.92
5.借鉴论文中训练方法(论文方法:分两路数据送入且real和fake的batch_size比值3:1,real和fake数据分别使用不同的loss训练),即:
一路为real_img送1*CrossEntropy+2*Triplet,一路为fake_img使用的1*lsr_loss,训练方案如下:
(1)real和fake的batch_size比值1:1(8*4/8*4)送入,每次epoch训练随机选取real_img_number=fake_img_number=4*749=2996:
a)送入 Real 12828和 fake 64140(all camstyle img),得到mAP: 86.79 rank1: 95.22
b) 送入 Real 12828和 fake 21004 (cam_1<->X image),得到mAP: 86.94 rank1: 0.9516
(2)real和fake的batch_size比值2:1(8*4/8*2)送入,每次epoch训练随机选取real_img_number=4*749=2996,fake_img_number=2*749=1498:
a)送入 Real 12828和 fake 64140(all camstyle img),得到mAP: 87.43 rank1: 95.10
b) 送入 Real 12828和 fake 21004 (cam_1<->X image),得到mAP: 83.10 rank1: 93.85
(3)real和fake的batch_size比值3:1(8*3/8*1),送入每次epoch训练随机选取real_img_number=,3*749,fake_img_number=1*749:
a)送入 Real 12828和 fake 64140(all camstyle img),得到mAP: 87.27 rank1: 95.16
b) 总体效果不如2:1的比值,所以未进行 {送入 Real 12828和 fake 21004 (cam_1<->X image)}的训练。