R2GAN

CVPR 2019 《R2GAN: Cross-modal Recipe Retrieval with Generative Adversarial Network》


R2GAN_第1张图片

R 2 G A N R^2GAN R2GAN全称Retrieval Generative Adversarial Network,它实现了根据文字描述来生成图像的传统任务,但这里不同之处在于做的是根据食谱来产生相应的食物的图像,想法很是新奇呀~作者认为通过这样的方式可以以一种对抗的方式学习兼容的跨模态的特征,并且可以使用生成图像来解释某些检索的结果。另外作者指出 R 2 G A N R^2GAN R2GAN的一个创新之处在于它的模型架构,这里使用了一个生成器和对偶的判别器,可以从文本嵌入空间和生成图像空间两个层级上设置损失项,并且通过在recipe1M数据集上进行试验证明了模型的效果。

背景这里就不写啦,反正就是食物很重要!


R 2 G A N R^2GAN R2GAN

Image-to-Recipe检索的目标是搜索相关菜谱,这些菜谱以文本形式描述给定的食物图片作为查询的菜肴的制作过程。与此类似,但方向相反,Recipe-to-Image检索是根据给定食谱烹饪的可能性对食物图像进行排序。

为了方便后面的介绍,这里先做一些符号的说明:

  • P = { p i = ( r i , v i ) } i = 1 N P=\left\{p_{i}=\left(r_{i}, v_{i}\right)\right\}_{i=1}^{N} P={pi=(ri,vi)}i=1N:表示食物和食谱配对数据的集合,其中 N N N表示数量, r i r_{i} ri表示食谱, v i v_{i} vi表示对应的食物图像
  • R R R:食谱的集合
  • V V V:食物图像的集合
  • c i ∈ C c_{i} \in C ciC:表示食物所属的类别信息

食谱和食物图像之间存在一对多的关系,并且这里食物的图像表示的只是烹调结束后的形态

由于文字和图像所属两个不同的域中,因此无法直接通过从各自空间提取的特征进行比较。因此,可以选择一种过渡的办法,即将两个不同域的东西映射到一种公共的隐式子空间中,它们在这个子空间中的特征可以直接比较。从数学上来说,即希望学习到映射 Φ \Phi Φ,它表达为 Ψ ( R , V ) → ( E R , E V ) \Psi(R, V) \rightarrow\left(\mathbf{E}_{\mathbf{R}}, \mathbf{E}_{\mathbf{V}}\right) Ψ(R,V)(ER,EV),当我们把食谱和食物图像输入到 Φ \Phi Φ后,它会给出位于同一子空间 R n × d \mathbb{R}^{n \times d} Rn×d的食谱的嵌入向量 E R E_{R} ER和图像的嵌入向量 E V E_{V} EV,这样我们就可以进行比较了。

整个模型的架构如下所示:


R2GAN_第2张图片

在食谱嵌入学习模块中使用了双向LSTM层级LSTM分别将食谱中的食材说明和烹调流程说明转换为嵌入向量的形式,然后将它们拼接起来得到食谱嵌入向量,最后放缩到隐式子空间的尺寸要求。在图像嵌入学习模块中使用CNN(ResNet-50)来提取图像特征,然后使用全连接层将其映射为和食谱嵌入向量相同维度的图像嵌入向量。

在得到两个域的嵌入向量后,将其输入到 R 2 G A N R^2GAN R2GAN的生成器后,它可以根据食谱嵌入向量和图像嵌入向量重建食物图像,分别记为 v f R v_{f}^R vfR v f I v_{f}^I vfI。模型使用一对判别器进行不同层级的判别, D 1 D_{1} D1用来判断重建后图像的真假,逼迫生成器生成更加高质量的图像; D 2 D_{2} D2用来判别生成的食物图像是来自于食谱还是真实图像,从而迫使 v f R v_{f}^R vfR所满足的分布和从真实图像 v r e a l v_{real} vreal得到的 v f I v_{f}^I vfI所满足的分布相似。通过对抗过程的不断进行,直到 v f R v_{f}^R vfR v f I v_{f}^I vfI和真实图像 v r e a l v_{real} vreal所满足的分布相同。

另外在学习嵌入向量的阶段,作者认为配对的食谱-食物习得的嵌入向量应该表示相同的语义,因此这里添加了语义学习模块,使得两个域中习得的嵌入向量的语义越相近越好。

在损失项的设计中使用了triplet ranking loss的形式, E E E表示嵌入向量, v v v表示重建图像,下标 q , p , n q,p,n q,p,n分别代表query、positive和negative。损失项这里使用的是最大间隔损失: L r a n k = max ⁡ { d ( E q , E p ) − d ( E q , E n ) + α 1 , 0 } + μ max ⁡ { d ( v q , v p ) − d ( v q , v n ) + α 2 , 0 } \begin{aligned} L_{r a n k}=& \max \left\{d\left(E_{q}, E_{p}\right)-d\left(E_{q}, E_{n}\right)+\alpha_{1}, 0\right\}+\\ & \mu \max \left\{d\left(v_{q}, v_{p}\right)-d\left(v_{q}, v_{n}\right)+\alpha_{2}, 0\right\} \end{aligned} Lrank=max{d(Eq,Ep)d(Eq,En)+α1,0}+μmax{d(vq,vp)d(vq,vn)+α2,0}其中 d ( . ) d(.) d(.)表示距离度量,从中可以看出模型希望正确配对的数据的概率越大越好,反之不配对的概率越小越好。这样的方式增强了学习的鲁棒性,在嵌入空间和重构图像空间内,使正对之间的距离始终小于负对之间的距离。

文本嵌入空间的距离函数为余弦相似度,像素级图像空间的距离度量方式是欧式距离。

对抗损失项如下所示: L D 1 = E x ∼ p i m a g e [ log ⁡ D 1 ( x ) ] + E E V ∼ p i m a g e [ log ⁡ ( 1 − D 1 ( G ( E V ) ) ) ] L D 2 = E E V ∼ p i m a g e [ log ⁡ D 2 ( G ( E V ) ) ) ] + E E R ∼ p recipe [ log ⁡ ( 1 − D 2 ( G ( E R ) ) ) ] \begin{aligned} L_{D_{1}}=& \mathbb{E}_{x \sim p_{i m a g e}}\left[\log D_{1}(x)\right]+\\ & \mathbb{E}_{\mathbf{E}_{\mathbf{V}} \sim p_{i m a g e}}\left[\log \left(1-D_{1}\left(G\left(\mathbf{E}_{\mathbf{V}}\right)\right)\right)\right] \\ L_{D_{2}}=& \mathbb{E}_{\mathbf{E}_{\mathbf{V}} \sim p_{i m a g e}}\left[\log D_{2}\left(G\left(\mathbf{E}_{\mathbf{V}}\right)\right)\right) ]+\\ & \mathbb{E}_{\mathbf{E}_{\mathbf{R}} \sim p_{\text {recipe}}}\left[\log \left(1-D_{2}\left(G\left(\mathbf{E}_{\mathbf{R}}\right)\right)\right)\right] \end{aligned} LD1=LD2=Expimage[logD1(x)]+EEVpimage[log(1D1(G(EV)))]EEVpimage[logD2(G(EV)))]+EERprecipe[log(1D2(G(ER)))] L G = 1 2 ( E E V ∼ p image [ log ⁡ ( 1 − D 1 ( G ( E V ) ) ) ] ) + E E R ∼ p recipe [ log ⁡ ( 1 − D 2 ( G ( E R ) ) ) ] \begin{aligned} L_{G}=& \frac{1}{2}\left(\mathbb{E}_{\mathbf{E}_{\mathbf{V}} \sim p_{\text {image}}}\left[\log \left(1-D_{1}\left(G\left(\mathbf{E}_{\mathbf{V}}\right)\right)\right)\right]\right)+\\ & \mathbb{E}_{\mathbf{E}_{\mathbf{R}} \sim p_{\text {recipe}}}\left[\log \left(1-D_{2}\left(G\left(\mathbf{E}_{\mathbf{R}}\right)\right)\right)\right] \end{aligned} LG=21(EEVpimage[log(1D1(G(EV)))])+EERprecipe[log(1D2(G(ER)))]

为了重建后的图像尽可能多地保留原始图像的信息,这里还使用了特征层和图像层的两级损失,如下所示: L recon = 1 2 ( ∥ Φ ( v real ) − Φ ( v f I ) ∥ 2 2 + ∥ Φ ( v f I ) − Φ ( v f R ) ∥ 2 2 + β ( ∥ v real − v f I ∥ 2 2 + ∥ v f I − v f R ∥ 2 2 ) ) \begin{aligned} L_{\text {recon}}=& \frac{1}{2}\left(\left\|\Phi\left(v_{\text {real}}\right)-\Phi\left(v_{f}^{I}\right)\right\|_{2}^{2}+\right.\\ &\left\|\Phi\left(v_{f}^{I}\right)-\Phi\left(v_{f}^{R}\right)\right\|_{2}^{2}+\\ & \beta\left(\left\|v_{\text {real}}-v_{f}^{I}\right\|_{2}^{2}+\left\|v_{f}^{I}-v_{f}^{R}\right\|_{2}^{2}\right) ) \end{aligned} Lrecon=21(Φ(vreal)Φ(vfI)22+Φ(vfI)Φ(vfR)22+β(vrealvfI22+vfIvfR22))其中 ∣ ∣ Φ ( . ) − Φ ( . ) ∣ ∣ 2 2 ||\Phi(.)-\Phi(.)||_{2}^2 Φ(.)Φ(.)22表示特征层级的损失, ∣ ∣ v 1 − v 2 ∣ ∣ 2 2 ||v_{1}-v_{2}||_{2}^2 v1v222表示图像层级的损失,这里的距离度量都是用的是余弦距离。

最后一个就是上述的语义损失项 L s e m = − log ⁡ exp ⁡ ( E c ) ∑ i exp ⁡ ( E c i ) L_{s e m}=-\log \frac{\exp \left(E_{c}\right)}{\sum_{i} \exp \left(E_{c_{i}}\right)} Lsem=logiexp(Eci)exp(Ec)

因此整个模型的损失函数为 L f u l l = L r a n k + γ L r e c o n + λ L s e m L_{f u l l}=L_{r a n k}+\gamma L_{r e c o n}+\lambda L_{s e m} Lfull=Lrank+γLrecon+λLsem,而生成器的损失项为 L G f u l l = L G + δ L r e c o n L_{G_{f u l l}}=L_{G}+\delta L_{r e c o n} LGfull=LG+δLrecon


实验

数据集:Recipe 1M

与其他跨模态方法的定量评估比较


R2GAN_第3张图片

模型效果可视化结果


R2GAN_第4张图片

消蚀结果,证明所提出的各部分的有效性


R2GAN_第5张图片

消蚀实验所对应的模型架构


R2GAN_第6张图片

总结

解决问题的角度很新颖,但是整个模型架构感觉还好,而且生成的图像确实差强人意,只能大概看出它是食物,图像的质量并不高~

只是个人愚见

你可能感兴趣的:(GAN)