论文解读 FashionKLIP: Enhancing E-Commerce Image-Text Retrieval with Fashion Multi-Modal

论文解读系列文章目录



一、3.1节中, 我们并未构建基于本体的知识图谱 (Deng et al., 2022)什么意思

在3.1节中提到,“我们并未构建基于本体的知识图谱 (Deng et al., 2022)”意味着作者在构建FashionMMKG(即Fashion Multi-Modal Conceptual Knowledge Graph,时尚多模态概念知识图谱)时,并未采用本体论(ontology-based)的方法。传统的基于本体的知识图谱通常涉及手动定义明确的分类和关系结构,以确保数据的语义一致性和上下文准确性。而在此研究中,作者选择了一种数据驱动的方式,自动从大量的时尚文本和图像数据中提取概念并构建层次结构。

这种方法主要是为了缩小模型与实际用户查询之间的差距,通过自动化过程动态更新概念层次,从而能够更灵活地适应实际应用中的多变时尚需求。

二、MMR是什么

在文中,MMR(Maximal Marginal Relevance)算法是一种用于提高检索结果多样性的方法。具体来说,MMR通过在选择相似内容的同时,避免内容之间的过度重复,从而提升检索结果的多样性。这在FashionMMKG构建时的视觉概念匹配阶段尤为重要。

在FashionKLIP的应用中,MMR算法用于为每个时尚概念选择一组视觉原型图像。具体过程是:首先根据图像和文本的特征余弦相似度选择出一批相似图像候选,然后通过MMR算法进一步筛选,使得最终选出的图像在保持相似性的同时,也具有足够的多样性。这样可以避免过于相似的图像,使得每个概念的视觉表示既包含共同特征,又体现多样性。

MMR的公式如下:
M M R ( v i ) = arg ⁡ max ⁡ v i ∈ C ∖ S [ λ ⋅ S i m ( c , v i ) − ( 1 − λ ) max ⁡ v j ∈ S S i m ( v i , v j ) ] MMR(v_i) = \arg\max_{v_i \in C \setminus S} [\lambda \cdot Sim(c, v_i) - (1 - \lambda) \max_{v_j \in S} Sim(v_i, v_j)] MMR(vi)=argviCSmax[λSim(c,vi)(1λ)vjSmaxSim(vi,vj)]
其中:

  • C C C 是候选图像集,
  • S S S 是已选图像集,
  • S i m ( ⋅ , ⋅ ) Sim(\cdot, \cdot) Sim(,) 表示余弦相似度,
  • λ \lambda λ 是一个调节相似性和多样性权重的系数,默认值为0.8。

该算法每次选择一个新图像,最大化与概念的相似性,并最小化与已选图像集的相似性,从而实现既保持相关性又避免重复的效果。

三、这个公式具体什么意思

MMR(Maximal Marginal Relevance)的公式用于在检索结果中平衡相似性和多样性,以选择一组既相关又具备多样性的结果。具体来说,这个公式中的每一部分都有特定的含义和作用:

M M R ( v i ) = arg ⁡ max ⁡ v i ∈ C ∖ S [ λ ⋅ S i m ( c , v i ) − ( 1 − λ ) max ⁡ v j ∈ S S i m ( v i , v j ) ] MMR(v_i) = \arg\max_{v_i \in C \setminus S} [\lambda \cdot Sim(c, v_i) - (1 - \lambda) \max_{v_j \in S} Sim(v_i, v_j)] MMR(vi)=argviCSmax[λSim(c,vi)(1λ)vjSmaxSim(vi,vj)]

公式详解

  1. ( v_i \in C \setminus S )
    这里的 ( C ) 是候选图像的集合,而 ( S ) 是已经被选中的图像集。公式右侧的操作对象 ( v_i \in C \setminus S ) 表示在候选集中排除已选图像,挑选出下一个最合适的图像 ( v_i )。

  2. ( Sim(c, v_i) )
    表示概念 ( c ) 与候选图像 ( v_i ) 的相似性度量,通常使用余弦相似度计算。相似度越高,意味着图像 ( v_i ) 与目标概念 ( c ) 更匹配。

  3. ( \lambda \cdot Sim(c, v_i) )
    这是一个加权相似度部分,控制公式对概念相似度的重视程度。权重 ( \lambda ) 的取值范围通常为 ( [0, 1] ),决定了结果与目标概念的匹配度。

  4. ( (1 - \lambda) \max_{v_j \in S} Sim(v_i, v_j) )
    这一部分衡量候选图像 ( v_i ) 与已选图像集中最相似的图像 ( v_j ) 的相似度。通过对这一部分的权重 ( (1 - \lambda) ) 控制,公式可以有效避免选择与已选集 ( S ) 中某个图像 ( v_j ) 过于相似的图像,从而提高多样性。

  5. (\arg\max)
    公式的整体目标是从候选集中选择能使该表达式最大化的 ( v_i ),即找到一个与概念 ( c ) 最相似,同时与已选图像集 ( S ) 不太相似的图像。

公式的工作原理

  • 当 ( \lambda ) 接近 1 时,公式更关注选择与概念最相似的图像,而多样性则会减弱。
  • 当 ( \lambda ) 接近 0 时,公式更多地关注多样性,即避免选择与已选图像集过于相似的图像,而相似性的重要性降低。

这种权衡确保了最终选出的图像集在与概念保持高相关性的同时,具备较好的多样性,从而使得图像集合在视觉上既符合概念特点又不会显得重复。

四、argmax在数学方面什么意思,举例说明

在数学中,(\arg\max) 表示“使得某个表达式达到最大值的变量的取值”。它的作用是找到使目标函数(或表达式)最大化的变量值。

例子
假设我们有一个函数 ( f(x) = - (x - 3)^2 + 4 ),我们希望找到 ( x ) 的值,使得 ( f(x) ) 最大。

步骤 1:构造表达式
函数 ( f(x) = - (x - 3)^2 + 4 ) 是一个倒开的抛物线(因为前面的负号),其最高点为最大值。

步骤 2:使用 arg ⁡ max ⁡ \arg\max argmax
我们可以写成:
arg ⁡ max ⁡ x f ( x ) = arg ⁡ max ⁡ x [ − ( x − 3 ) 2 + 4 ] \arg\max_x f(x) = \arg\max_x \left[ - (x - 3)^2 + 4 \right] argxmaxf(x)=argxmax[(x3)2+4]
这里的 arg ⁡ max ⁡ x \arg\max_x argmaxx 表示寻找使得 f ( x ) f(x) f(x) 最大的 x x x 值。

步骤 3:找到最大值点
可以看到,当 x = 3 x = 3 x=3 时, ( x − 3 ) 2 = 0 (x - 3)^2 = 0 (x3)2=0,从而 f ( x ) = 4 f(x) = 4 f(x)=4,这是该函数的最大值。因此:

arg ⁡ max ⁡ x f ( x ) = 3 \arg\max_x f(x) = 3 argxmaxf(x)=3

这意味着,在所有可能的 x x x 值中,当 x = 3 x = 3 x=3 时,函数 f ( x ) f(x) f(x) 取得最大值 f ( 3 ) = 4 f(3) = 4 f(3)=4

应用中的示例
arg ⁡ max ⁡ \arg\max argmax 应用中,我们通常会对一组数值或一组函数进行比较。例如,在分类问题中,假设一个模型对类别 A A A B B B C C C 给出概率:

  • P ( A ) = 0.2 P(A) = 0.2 P(A)=0.2
  • P ( B ) = 0.5 P(B) = 0.5 P(B)=0.5
  • P ( C ) = 0.3 P(C) = 0.3 P(C)=0.3

如果我们想知道最可能的类别是哪一个,我们可以写成:
arg ⁡ max ⁡ category P ( category ) \arg\max_{\text{category}} P(\text{category}) argcategorymaxP(category)
通过比较,我们可以得到:
arg ⁡ max ⁡ category P ( category ) = B \arg\max_{\text{category}} P(\text{category}) = B argcategorymaxP(category)=B
因为 P ( B ) = 0.5 P(B) = 0.5 P(B)=0.5 是最大值,所以最可能的类别是 B B B

因此, arg ⁡ max ⁡ \arg\max argmax 帮助我们找到使表达式最大化的变量的取值,广泛应用于优化和决策问题中。

五、详细解释一下CAV

CVA(Concept-Visual Alignment,概念-视觉对齐)在本文中的作用是通过对齐文本中的概念与其视觉原型,增强跨模态(即图像和文本之间)的语义理解。CVA的目标是将文本中的抽象概念与视觉图像中对应的特征进行更精确的对齐,从而提高检索模型在图像-文本匹配任务中的表现。以下是CVA的具体实现和原理。

CVA 的工作原理

CVA主要包含以下步骤:

  1. 概念提取(Concept Extraction)
    从文本描述中提取出多个层次的概念(例如,从“海蓝色棉质运动短裤”中提取“运动短裤”、“棉质运动短裤”、“海蓝色棉质运动短裤”等概念)。这些概念通过自然语言处理工具识别出核心词语及其修饰词,形成了概念的层级结构(如“运动短裤”是一个根节点,而“海蓝色”是更细分的修饰节点)。

  2. 概念-视觉

### NeXtSRGAN 超分辨率 GAN 的实现 NeXtSRGAN 是一种基于 Super-Resolution GAN 的改进模型,其核心在于利用 ConvNeXt 构建判别器网络以提升图像细节的表现力和生成质量。以下是有关其实现的关键部分: #### 判别器设计 ConvNeXt 结构被引入到判别器的设计中,通过分层特征提取来增强对高分辨率图像真实性的判断能力。ConvNeXt 使用深度可分离卷积以及残差连接机制,在保持计算效率的同时提升了性能[^1]。 ```python import tensorflow as tf from tensorflow.keras import layers def convnext_block(input_tensor, filters, kernel_size=7): x = layers.DepthwiseConv2D(kernel_size=kernel_size, padding='same')(input_tensor) x = layers.LayerNormalization(epsilon=1e-6)(x) x = layers.Dense(filters * 4)(x) x = layers.Activation('gelu')(x) x = layers.Dense(filters)(x) return layers.Add()([input_tensor, x]) def build_discriminator(img_shape=(128, 128, 3), num_blocks=3): input_img = layers.Input(shape=img_shape) x = layers.Conv2D(64, kernel_size=3, strides=2, padding="same")(input_img) x = layers.LeakyReLU(alpha=0.2)(x) current_filters = 64 for _ in range(num_blocks): x = convnext_block(x, current_filters) current_filters *= 2 if current_filters > img_shape[-1]: break x = layers.Conv2D(current_filters, kernel_size=3, strides=2, padding="same")(x) x = layers.LeakyReLU(alpha=0.2)(x) x = layers.Flatten()(x) output = layers.Dense(1, activation='sigmoid')(x) model = tf.keras.Model(inputs=input_img, outputs=output, name="convnext_discriminator") return model ``` 上述代码展示了如何构建一个基于 ConvNeXt 的判别器架构。它采用逐步下采样的方式减少空间维度并增加通道数,从而捕获更深层次的语义信息[^2]。 #### 生成器设计 对于生成器而言,可以借鉴已有的超分辨率技术如 EDSR 或 RCAN 来搭建基础框架,并调整参数适配具体应用场景需求[^3]。 ```python def res_block(input_tensor, filters): shortcut = input_tensor x = layers.Conv2D(filters, kernel_size=3, padding='same', use_bias=False)(input_tensor) x = layers.ReLU()(x) x = layers.Conv2D(filters, kernel_size=3, padding='same', use_bias=False)(x) return layers.Add()([shortcut, x]) def upscale_ps(input_tensor, factor=2): return layers.UpSampling2D(size=factor, interpolation='bilinear')(input_tensor) def build_generator(lr_shape=(32, 32, 3)): inputs = layers.Input(shape=lr_shape) x = layers.Conv2D(64, kernel_size=9, padding='same')(inputs) x = layers.ReLU()(x) residual = x for _ in range(16): x = res_block(x, 64) x = layers.Conv2D(64, kernel_size=3, padding='same')(x) x = layers.BatchNormalization()(x) x = layers.Add()([residual, x]) x = upscale_ps(x, factor=4) out = layers.Conv2D(3, kernel_size=9, padding='same', activation='tanh')(x) generator_model = tf.keras.models.Model(inputs=[inputs], outputs=out, name="generator") return generator_model ``` 此段脚本定义了一个典型的残差块堆叠型生成器结构,适用于大多数 SISR(Single Image Super Resolution)任务中的低频重建阶段。 #### 训练过程概述 训练过程中需注意平衡生成器与判别器之间的对抗关系,通常会设置不同的损失函数组合来优化整体表现效果。例如 LSGAN 提倡使用的最小二乘误差替代传统交叉熵作为目标函数之一;而针对特定数据集特性还可能加入感知损失(perceptual loss),风格迁移项(style transfer term)等辅助约束条件进一步改善视觉体验品质。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值