CVPR2018行人重识别系列:用GAN进行数据增强

本文总结了CVPR2018上三篇关于行人重识别(person re-id)使用GAN进行数据增强的论文。这些方法旨在解决跨摄像头视角变化和跨域数据风格差异问题,通过CycleGAN生成风格迁移后的图像,有效提高了模型泛化能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言

近年CVPR2018录用了很多person re-id相关论文,本着学习和总结的原则,来对目前行人重识别上最新的方法进行一个总结,由于本人水平有限,对于文章的理解可能存在不全面的地方,我尽可能的对方法进行的归类,在每个类别下面对相关文章进行简单介绍,也便于以后自己查阅。


本文主要是对目前读到的三篇用GAN进行数据增强的文章进行介绍,分别是《Camera Style Adaptation for Person Re-identification》,《Image-Image Domain Adaptation with Preserved Self-Similarity and Domain-Dissimilarity for Person Re-identification》,《Person Transfer GAN to Bridge Domain Gap for Person Re-Identification》。其中第三篇是spotlight。相关试验都取得了比较显著的效果。虽然个人觉得用GAN造图对于刷准确率有点投机取巧的味道,但是对于reid这种本身标注代价很大的任务,却有着十分显著的作用,下面进行正题。


2.文章内容

  对于Camera Style Adaptation,它的思想非常简单,行人重识别可以理解成一种跨摄像头的行人细粒度检索,每个摄像头的景象都有不同的特点,那么我们只要想方法,把同一个人在一个镜头下出现的某个状态分别移植到各个镜头下面,就能极大的提高网络对于视角变化的适应性。

  现在对于行人重识别网络的学习,都是设法去学习一个跨境头不变的描述子空间,使特征尽可能排除无关背景,但这种方法会极大的造成过拟合,这也一定程度上解释了在一个数据集上训练的网络在另一个数据及上验证效果非常差。因此数据增强(data augmentation)方法就吸引了很多学者的注意,比如翻转,裁剪,以及去年出来的random erasing。想法很简单,就是想尽办法折腾数据集,使数据集尽可能的扩充并且产生一些随机性,避免过拟合的产生。这对于行人重识别任务非常的重要,因为目前常用的数据集也仅仅只有几万个bounding box(目前好像有例如Mars等新的数据集,还没有去了解),这对于神经网络的训练来说,还是远远不够的。因此个人觉得数据增强的方法,对于reid来说还是非常重要的。这篇文章想解决的核心问题可以归纳为两点:

     1.风格同化,减小不同摄像头由于视角,背景灯外界因素对于检索任务的干扰。

     2.扩充数据,通过更大的数据来训练网络,避免过拟合的产生。


方法的核心是通过CycleGAN来进行数据扩充,CycleGAN是伯克利的大牛们在2017年提出的一种unpair的图像生成方法,这对于行人重识别问题简直是契合无比,因为想找到不同摄像头下成对的训练数据几乎不可能,至于CycleGAN的细节,大家可以去看相关文章和博客,对于原理部分不过多赘述。

CycleGAN的核心是优化以下Loss Function

                                         

  前面两个部分是对两个mapping function的损失,最后一个部分是避免A全部映射到B的一张图片,限制mapping空间大小所做的限制。保证domain A转换到domain B还能够再转换回来,这也是CycleGAN名字的由来。它的方法可以以下几点来总结:

      1.先在CycleGAN中添加一个identity mapping loss,这是为了保证转换后前景例如颜色等人物信息损失尽可能的小。

      2.改进后的CycleGAN进行数据增强,同时利用GAN造图的一些弊端生成噪音,配合其他数据增强方法,例如翻转,随机擦除等避免过拟合的产生。

      3.利用基于ResNet50的标准IDE方法(ID-discriminative-embedding)来进行分类训练,同时利用cross-entropy作为训练的损失函数,同时利用LSR(label smoothing regularization)来作为造出图的label,总之就是对于GAN生成的图赋予他一个smoothing label,而不是一个0,1的绝对label。



  对于本文,个人觉得作者使用一个稍加改进的CycleGAN进行样本扩充,并引进噪音,利用一个baseline的网络进行训练,并将造出来的图的标签平滑化,引入一个平滑超参,来一定程度上抑制假图带来的负面影响。可以将其总结为跨镜头转换。以上总结了作者的动机,以及这种方法的优点。但是这种方法的缺陷也很明显,需要为每一对摄像头训练一个CycleGAN,代价太大。最后放上一些GAN造出的图片。

                                   


  要是说上面一篇文章是解决跨镜头的问题,下面两篇文章解决的就是跨域的问题,我们知道,目前的方法在单独的数据集上能够一般都能够获得80%+的rank-1等准确率,当时将A域训练得到的模型直接transfer到域B上进行测试,效果就很变得非常差,主要是因为两个域风格之间存在巨大的差异,包括光照,背景风格等等。因此解决这种跨域问题也是研究上一个重要的分支。

    《Image-Image Domain Adaptation with Preserved Self-Similarity and Domain-Dissimilarity for Person Re-identification》这篇文章,他要解决的核心问题就是如何将通过域A训练好的模型在域B上获得较好的效果,注意一点,这个方法本身没有起到数据增强的作用,只是为了减小两个域之间的差距(虽然样本的确有可能增加的)。也是通过GAN造图的方式实现。

   它的核心思想是以下两点:

          1.GAN造图之后的人物应该尽可能和source domain的距离尽可能的近,尽可能保留ID信息。

          2.两个数据集肯定不存在同一个人,因此GAN造图之后的样本应该尽可能和target domain的距离尽可能远,尽可能形成相异的ID信息。

  下面具体的讲一下,domain adapation一直是reid中的一个重要问题,由于reid数据标注的代价远大于其他视觉任务,因此找到一种有效的跨域方法至关重要。风格迁移等类似的方法很多,但是都要求source/target domain包含相同的类别。因此现在的趋势主要是寻找一个image-level的风格迁移而不是约束较多的domain-level。基于以上背景,作者的思路如下:

          1.传统的domain adapation都是假定source/target ID一致

          2.image-level的风格迁移逐渐成为主流

          3.直接转换之后,前后的ID相关的细节等信息会损失

          4.因此对于RE-ID任务,我们需要寻找一个image-level的风格迁移方法,能够尽可能保证source domain的信息不丢失    ,同时尽可能保证和target damain的信息尽可能的远

    基于以上考量,作者提出来一个SPGAN的东西,这东西其实就是CycleGAN加上一定的改进,再加上一个控制正负样本对远近的SiaNet,网络结构如下:

                                            

   和上面一篇类似,CycleGAN部分都添加了一个identity loss,尽可能保证转换前后的相似性

                                                      

   与此同时,针对SiaNet再次设计了一个loss,当然其实就是constrastive loss:

                                                    

  公式很好理解,对于正样本对,i=1,欧氏距离就是损失,对于负样本对,i=0,对于负样本对的重要性由m决定,特别的当m=0时,负样本对不反向传播。然后这两个网络的几个loss合起来,进行整个SPGAN的训练:

                                                   

后面的训练过程都是相对经典的老套路,没有过多创新,只有一点进行了一些修改,就是引入了Local Max Pooling,它能够一定程度上消除噪音数据带来的负面影响(不太清楚为什么),将最后的feature map不进行GAP,而是分割成几个stripe进行局部的pooling,最后串联

                                              

   总之,这篇文章主要就是在上一篇文章的网络结构部分添加了一个SiaNet,从而改进了loss function,构成所谓的SPGAN,整套流程的话和前一篇差不多,都是一个组内搞出来的,风格比较相似。总之考虑到数据标注的复杂性,这种跨域的风格迁移在reid的应用上有着十分重要的意义。


  最后是这一篇spotlight《Person Transfer GAN to Bridge Domain Gap for Person Re-Identification》,这篇文章和上一篇文章想法大体一致,都是希望通过GAN来讲domain A的人物及风格迁移到domain B中再进行训练。但是目的和一些细节方面存在差异。

  这篇文章一共有两个贡献,其中一个是新的数据集,还有一个就是迁移方法,文章首先分析了当前现有数据集的一些缺陷。主要是以下三个方面(当然这也是新数据集考虑到的方面):


       1.相比于现实场景,人物数量和bounding box数量还是太少

       2.同一个数据集虽然背景不同,但是风格,例如光照等条件都基本一致,存在一定的相似性,需要风格差异较大的环境

       3.没有考虑同一大场景下随着时间推移造成的光照差异,例如上午的人和傍晚的人进行匹配

  

因此他们提出的数据集:


        1.人物数量更多,摄像头更多(不过离现实场景还是有差距)

        2.考虑到了室内室外场景的匹配,同一数据集下风格差距增大

        3.分不同时间段采集,考虑到了很多不同的时间场景

  

  同时他们又提出了一种PTGAN(person transfer GAN),也是利用添加了人物一致性损失的CycleGAN进行造图,方法基本和上面方法类似,只不过他的主要目的不同于data augment的目的,更多了是为了避免高昂的标注代价,尝试将有标签的数据集迁移到无标签的数据集上,缩小domain gap。下面简单提一下新数据集MSMT17

   该数据集利用15个摄像头,12个室外,3个室内,选了四个不同的天气进行早中晚分别一个小时的监控,利用RCNN来进行行人检测。包含更多的人,更丰富的背景信息,以及随着时间推移而产生的光照变化。作者在进行训练-测试集划分的时候采用1:3的比例,而不同于以外基本均分的思路,这样是为了节约高额的标注代价,寻找更强力的模型来利用尽可能少的数据获得更鲁邦的效果,关于数据集的具体细节可以参考论文或者作者主页。

    PTGAN的构成和以上两种方法基本一致,都是通过CycleGAN的三个loss加上一个人物的ID loss,但是这里的ID loss和上面有些区别:

                     

  此处的M表示一张图片的前景掩码,其实就是计算变换前后的图片前景的差距,本身和上面两篇文章的id loss没有太多差异,就是换了一个形式。至于这个语义分割,作者采用了PSPNet。

   试验部分就不在过多介绍,总之考虑到作者的目的是bridge domain gap,因此在实验中作者将在market1501和CUHK03上表现比较好的baseline模型直接应用到MSMT17上,效果大大降低,这也证明了domain gap的存在,接着作者利用PTGAN来进行transfer,主要分为大数据集向小数据集transfer,大数据集向大数据集transfer。对于前者,由于小数据集摄像头不多,可以按照每个摄像头分别训练一个PTGAN来进行迁移,但是这对于大数据集来说代价十分高昂,因为大数据集不仅数量多,摄像头也多,因此对于后者,作者不区分摄像头,直接训练一个PTGAN,实验证明效果也不错。


     以上就是目前对CVPR2018已经读到的GAN在reid中的应用的一个简单总结,基本来说核心都是应用CycleGAN unpair的特性加上保持人物id信息的限制,尽可能的生成满足其他数据集风格的同时保证人物一致性的图片,总体来说,还是比较清晰直观的。


                                


<think>嗯,用户想了解基于GAN行人重识别ReID)代码。首先,我需要明确GANReID中的应用场景。行人重识别主要是在不同摄像头下匹配同一行人GAN可能用于生成多视角数据或增强特征鲁棒性。 接下来,用户可能需要代码的结构和关键点。GAN通常包括生成器和判别器,不过在ReID中,生成器可能用来生成不同姿态的行人图像,或者进行跨域适应。需要提到常见的GAN变体,比如DCGAN或CycleGAN,以及它们在ReID中的具体应用。 然后,代码实现部分需要考虑数据集,比如Market-1501或DukeMTMC,数据预处理步骤,比如归一化、随机裁剪。网络架构方面,生成器可能使用编码器-解码器结构,判别器则要区分真实和生成图像,或者进行身份验证。 损失函数是关键,除了传统的GAN损失,可能还需要ID损失、三元组损失等来保持行人身份的一致性。训练策略方面,交替训练生成器和判别器,可能需要渐进式训练或加入注意力机制。 评估指标方面,用户可能想知道如何测试生成模型的效果,比如mAP和CMC曲线。同时,要提到现有项目,如open-reid或fast-reid,供用户参考。 最后,给出一个简化的代码框架,帮助用户理解整体流程。可能还需要提醒注意数据隐私和计算资源的问题。确保回答结构清晰,分步骤解释,让用户能逐步理解和实现。</think>好的,我将分步骤为您介绍基于GAN行人重识别(Person ReID)实现思路和关键代码结构。以下是技术实现的核心要点: 1. **任务定义** 行人重识别目标:跨摄像头匹配同一行人。传统难点包括姿态变化、遮挡、低分辨率等。 GAN的作用:生成多视角/跨域数据 或 学习域不变特征 2. **常用GAN变体** - **DCGAN**:基础生成对抗网络 - **CycleGAN**:用于跨域风格转换 - **SpGAN**:特定于行人重识别的对抗生成 - **CamStyle**:解决摄像头风格差异 3. **核心代码模块** ```python # 生成器 Generator (示例:U-Net结构) class Generator(nn.Module): def __init__(self): super().__init__() self.downsample = nn.Sequential( nn.Conv2d(3, 64, 4, 2, 1), nn.LeakyReLU(0.2) ) self.up_sample = nn.Sequential( nn.ConvTranspose2d(64, 3, 4, 2, 1), nn.Tanh() ) # 判别器 Discriminator (加入ID分类) class Discriminator(nn.Module): def __init__(self, num_ids): super().__init__() self.feature_extractor = resnet50(pretrained=True) self.classifier = nn.Linear(2048, num_ids) ``` 4. **关键损失函数** $$ \mathcal{L}_{total} = \lambda_{adv}\mathcal{L}_{adv} + \lambda_{id}\mathcal{L}_{id} + \lambda_{tri}\mathcal{L}_{triplet} $$ - **对抗损失**:$\mathcal{L}_{adv} = \mathbb{E}[\log D(x)] + \mathbb{E}[\log(1 - D(G(z)))]$ - **身份损失**:交叉熵损失保持行人ID一致性 - **三元组损失**:增强特征判别性 5. **训练流程伪代码** ```python for epoch in epochs: # 训练生成器 generate_fake = G(real_images) g_loss = adv_loss(D(fake), real) + id_loss(fake, labels) g_loss.backward() # 训练判别器 real_loss = adv_loss(D(real), True) fake_loss = adv_loss(D(fake.detach()), False) d_loss = real_loss + fake_loss + id_loss(D(real), labels) d_loss.backward() ``` 6. **数据增强策略** - 随机擦除(Random Erasing) - 姿态引导生成(Pose-guided Generation) - 摄像头风格迁移(Camera Style Transfer) 7. **评估指标** - **mAP**(Mean Average Precision) - **CMC**(Cumulative Matching Characteristics) - **Rank-1/Rank-5** 准确率 **推荐实现路径**: 1. 使用PyTorch框架 2. 基于现有ReID基准代码(如fast-reid, open-reid) 3. 集成GAN模块进行联合训练 **典型论文参考**: - CVPR 2018《CamStyle: A Camera Style Adaptation Framework》 - ICCV 2019《Joint Discriminative and Generative Learning》 **注意事项**: - 需要平衡GAN训练稳定性与ReID特征学习 - 建议分阶段训练:先预训练ReID模型,再联合优化 - 注意生成图像与真实数据的分布对齐 需要具体代码实现细节,可以提供更具体的应用场景(如跨域适应/姿态生成),我将进一步说明技术选型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值