论文阅读——《Camera Style Adaptation for Person Re-identification》及相关复现

#update

对Cycle-GAN网络结构的修改,将原论文结构中的的ResnetGenerator(图中的GeneratorA2B和GeneratorB2A)替换成VAE-Generator,构建了Cycle-VAE-GAN的新结构来进行相机风格间的转换,做了些实验和测试。

相关结果更新到:

https://blog.csdn.net/yxr403614258/article/details/105250512

===========================================================================(手动分割线)

         最近在做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)}的训练。

        ok,anyway,可能是自己的baseline本身精度就已经很高了。所以无论自己根据作者的train的方式还是原始的mgn的方法train,扩充样本都没法在market上涨点。也有可能自己用label smooth哪里出问题了。如果有哪个大佬也在自己的结构上复现过这个paper,麻烦抬我一手。欢迎讨论指导

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值