DG-Net快速理解

简介: reid相关DG-Net算法快速理解。

Joint Discriminative and Generative Learning for Person Re-identification


论文地址:https://arxiv.org/abs/1904.07223
源码:https://github.com/NVlabs/DG-Net (正在跑)
视频链接:https://www.bilibili.com/video/av51439240/ (还没来得及看)


论文快速理解

限制行人重识别效果的一大问题是 不同摄像头下同一人的特征差异较大,即intra-class variation的影响。同时常用的行人重识别数据集中数据量的大小限制了模型效果。所以作者希望在扩增训练数据的同时增强数据的invariance。

一般用GAN来辅助行人重识别任务,都是直接用GAN完成数据扩增的部分,生成大量fake数据,在这些数据上进行训练。作者认为在这种情况下,GAN的部分也是一个单独的模型,和reid模型仍然是分开的。

论文中提出了名为DG-NET的模型。利用了GAN来进行数据扩增从而辅助REID模型的分类效果。并且GAN和REID模型是联合在一起形成了一个统一的框架来进行的。

image.png

Generative module

首先介绍generative module生成模块,在这一部分,作者使用了两个encoder对原始输入图像进行编码,分别将原始输入图像投射到appearance space和structure space。其中appearance包括衣服颜色、纹理风格等相关的特征,而structure包括身体大小、姿态、位置、背景等因素。作者希望实现的情况是使用不同的appearance和structure的组合,来生成大量的1.质量足够好分不出真假;2. 包含足够多的diversity的新数据。

由于structure code中可能保留更多的spatial resolution,G生成器可能会忽略掉appearance的作用而过分看重structure,一个处理方法是,把structure encoder的输入转成灰度图

在生成模块的生成过程中,要考虑到以下的情况。

  1. self-identity generation

    1. appearance和structure都来自于同一张图片的情况,希望通过decoder生成的新的图像和原图实现像素层次上的一致,pixel-wise loss
      $$ L^{img_1}_{recon}=E[||x_i-G(a_i,s_i)||_1] $$

    2. appearance来自和structure同一人的情况,希望通过decoder生成的信徒下和原图实现像素层次上的一致,即给定一人的structure,使用该人的appearance都需要还原到structure对应的原图。
      $$ L^{img_2}_{recon}=E[||x_i-G(a_t,s_i)||_1] $$

    3. to force the appearance codes of different images to stay apart,use identification loss。这个部分个人理解就是确保原始图像分类正确。
      $$ L^s_{id}=E[-log(p(y_i|x_i))] $$

  2. cross-identity generation

    这种情况即appearance和structure来自不同人的情况。在该部分计算损失时就不考虑像素层次上一致了。考虑的时能够在生成图像上编码出原有的两个空间code。
    $$ L^{code_1}_{recon}=E[||a_i-E_a(G(ai,sj)||_1]\\ L^{code_1}_{recon}=E[||s_j-E_s(G(ai,sj)||_1] $$
    第一行是使用appearance encoder对生成图像进行编码出的新的appearance code需要和用于生成图像的appearance code一致。第二行是structure code。

    同时我们希望生成的图像和它的appearance code具有一样的类别。
    $$ L^c_{id}=E[-log(p(y_i|x^i_j))] $$
    生成和分解的部分都有了,就需要再考虑一下对抗损失。尽可能把原始图像判断为真图像,生成图像判断为假图像。
    $$ L_{adv}=E[logD(x_i)+log(1-D(G(a_i,s_j))] $$

    Discriminative Module

    判别模块组合在生成模块里面,一起共享appearance encoder,用于最后的行人重识别。作者为了充分利用生成图像,提出了两个损失。

    1. Primary feature learning

      这一部分比较神奇,作者使用在原始数据集上训练的REID模型作为老师,让自己的架构里要训练的模型向老师模型的结果进行学习,这属于模型蒸馏的一个技巧。
      $$ L_{prim}=E[-\sum^K_{k=1}q(k|x^i_j)log(\frac{p(k|x^i_j)}{q(k|x^i_j)})] $$
      使用KL散度作为两个模型的学到的概率分布的损失。

    2. Fine-grained feature mining
      $$ L_{fine}=E[-log(P(y_j|x^i_j))] $$
      这里把同一个structure code和不同的appearance code组合起来的生成图像都认为是和structure code一个类别。这一部分和前面的正好相反,个人感觉应是模拟同一人的不同衣服的变化。

最终对appearance encoder,structure encoder,decoder和discriminator进行联合训练。得到的损失函数是
$$ L_{total}(E_a,E_s,G,D)=\lambda_{img}L^{img}_{recon}+L^{code}_{recon}+L^s_{id}+\lambda_{id}L^c_{id}+L_{adv}+\lambda_{prim}L_{prim}+\lambda_{fine}L_{fine} $$
也就是把之前提到的所有损失都计算进来了。

相关文章
|
9月前
|
机器学习/深度学习 JavaScript IDE
DG-Net++快速理解
reid相关DG-Net++算法快速理解。
|
开发框架 .NET 数据库
.NET6新东西---TryGetNonEnumeratedCount
.NET6新东西---TryGetNonEnumeratedCount
115 0
.NET6新东西--CallerArgumentExpression
.NET6新东西--CallerArgumentExpression
179 0
.NET6新东西--CallerArgumentExpression
|
API
.NET6新东西--ConfigurationManager
.NET6新东西--ConfigurationManager
229 0
.NET 6新东西--PeriodicTimer
.NET 6新东西--PeriodicTimer
160 0
|
Oracle 网络协议 关系型数据库
Oracle Net Manager使用
本文目录 1. 简介 2. 服务名的原理 3. 服务名配置的具体步骤 4. 总结
399 0
Oracle Net Manager使用
|
监控 C#
VS2012 C#使用/配置Log4Net
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨如何在VS2012中使用Log4Net 1、首先在项目中添加Nuget程序包.
1510 0
|
Oracle 网络协议 关系型数据库