2025-9-2
CVPR2024: OVFoodSeg: Elevating Open-Vocabulary Food Image Segmentation via Image-Informed Textual Representation
以two-stage训练
一、Stage I:FoodLearner Pre-training 的 Loss
总目标
Stage I 是 FoodLearner 预训练,要解决的问题:
- ITC Loss → 图文全局对齐(image-text matching at embedding level)
- ITM Loss → 图文局部匹配(二分类 matching/not matching)
- LM Loss → 保证 FoodLearner 真的把视觉知识“注入”到文本中
1. ITC Loss (Image-Text Contrastive Loss)
公式
$L_{ITC} = \frac{1}{2}\big(CE(p_{t2i}, GT_{t2i}) + CE(p_{i2t}, GT_{i2t})\big)$
符号
- $\hat{T}_{query}$:图像经过 FoodLearner 得到的 query tokens(视觉增强后的表示)。
- $\hat{T}_{text}$:文本经过 FoodLearner 得到的文本 tokens。
- $\phi$:温度参数,控制分布的尖锐程度(越大越“硬”)。
- $\langle a, b \rangle$:余弦相似度(cosine similarity)。
- $p_{t2i}$:text-to-image 相似度概率分布,表示给定一段文本,它和不同图像匹配的概率。
- $p_{i2t}$:image-to-text 相似度概率分布,表示给定一张图,它和不同文本匹配的概率。
- $GT_{t2i}, GT_{i2t}$:真实标签(1 表示配对正确,0 表示错误)。
设计 ITC?
- CLIP 训练的核心思想就是用 对比学习 让图像和文本 embedding 在语义空间对齐。
- 在 FoodLearner 里保留 ITC,可以保证增强后的 embedding 仍然能维持这种 跨模态对齐能力。
2. ITM Loss (Image-Text Matching Loss)
公式
$L_{ITM} = CE(p_{itm}, GT_{itm})$$p_{itm} = \frac{1}{Q}\sum_{t=1}^Q FC(\tilde{T}^t_{query})$
符号解释
- $Q$:query token 的数量。
- $\tilde{T}_{query}$:图像 embedding + 文本 token 一起输入 FoodLearner 后得到的 multimodal token 表示。
- $FC(\cdot)$:全连接层输出一个概率。
- $p_{itm}$:预测的图文是否匹配的概率。
- $GT_{itm}$:ground truth(1 表示匹配,0 表示不匹配)。
为什么设计 ITM?
- ITC 是全局对齐,但可能忽略了细节。
- ITM 强制模型 逐对判断 “这张图片和这句话是不是一对”,
- 能让模型更细粒度地学习对齐关系。
- 这也是很多 VLM(比如 BLIP2)常用的 trick。
3. LM Loss (Language Modeling Loss)
公式
$L_{LM} = \frac{1}{W}\sum_{w=1}^W CE(p^w_{word}, GT_{word})$
符号解释
- $W$:句子中的 token 数。
- $T_{text}$:文本 tokens。
- $\hat{T}_{query}$:FoodLearner 生成的 query tokens,包含视觉信息。
- $\tilde{T}_{text} = FL(NULL, \hat{T}_{query}; T_{text})$:融合 query 和文本后得到的新文本 token 序列。
- $p^w_{word} = FC(\tilde{T}^w_{text})$:预测第 $w$ 个 token 的概率分布(softmax over vocabulary)。
- 含义:在看到前面 token 和 query 的条件下,预测第 $w$ 个词是哪个词。
- $GT_{word}$:真实的第 $w$ 个词。
为什么设计 LM?
- 如果只做 ITC/ITM,FoodLearner 可能只学到 embedding 层面的对齐,而没有真正把视觉知识“写进”文本 embedding。
- LM loss 让模型尝试 在文本生成中使用视觉信息,从而保证文本 embedding 真正带有图像特征。
- 类似于“图像指导下的语言建模”。
Stage I 总损失
$L_{StageI} = L_{ITC} + L_{ITM} + L_{LM}$
👉 三者结合:
- ITC 保证语义空间对齐
- ITM 保证图文匹配更精细
- LM 保证视觉信息融入文本
二、Stage II:Segmentation Learning 的 Loss
Stage II 主要任务是 open-vocabulary segmentation,所以损失函数分为两个部分:分类 + 掩码。
1. 分类损失(Cross-Entropy)
公式
$P^i_{cls} = \frac{\exp(\tau \cdot \langle T_{proposal}, \tilde{E}^i_{text}\rangle)}{\sum_j \exp(\tau \cdot \langle T_{proposal}, \tilde{E}^j_{text}\rangle)}$$L_{cls} = CE(P_{cls}, GT_{cls})$
符号解释
- $T_{proposal}$:来自 SAN 的 region-level token(对应图像某个区域)。
- $\tilde{E}^i_{text}$:image-informed 的第 $i$ 类文本 embedding。
- $\langle \cdot, \cdot \rangle$:余弦相似度。
- $\tau$:温度参数(论文里设为 100)。
- $P^i_{cls}$:proposal 属于第 $i$ 类的概率。
- $GT_{cls}$:proposal 的真实类别。
为什么用 Cross-Entropy?
- 分类任务标准做法就是 softmax + CE。
- 能最大化正确类别的概率,同时压低错误类别的概率。
2. 掩码损失(Dice Loss)
公式
$L_{mask} = Dice(P_{mask}, GT_{mask})$
符号解释
- $P_{mask}$:预测的二值 mask(像素概率)。
- $GT_{mask}$:真实的分割掩码。
Dice 系数公式(用于衡量两个集合的重叠度):
$Dice(A, B) = \frac{2|A \cap B|}{|A| + |B|}$
Dice Loss = $1 - Dice$。
为什么选 Dice Loss?
- 在分割任务里,类别经常不平衡(前景小,背景大)。
- Dice Loss 专门解决这个问题,因为它直接衡量 预测区域和真实区域的重叠程度。
- 比 CE 更适合 mask 预测。
Stage II 总损失
$L_{StageII} = L_{cls} + L_{mask}$
三、总结
- Stage I (FoodLearner Pre-training)
- ITC:全局语义对齐(保证 embedding 匹配)。
- ITM:细粒度对齐(二分类匹配任务)。
- LM:把图像知识融入文本表示。
- Stage II (Segmentation Learning)
- CE 分类损失:保证区域分类正确。
- Dice 掩码损失:保证像素分割正确,特别适合前景稀疏的场景。