Schwertlilien
As a recoder: notes and ideas.

2026-1-4

数据这块持续推进。

但是对于方法这块我需要再斟酌:

1.我原先的使用强化学习的方法要全部放弃吗?是不是可以融入进来?

2.这个相关的方法需要怎么写?

3.实验方法/对比方法/消融实验我需要写表格写文档。

一句话说我要做的事情:

提高分割混合中餐菜品的精度。

Intro

回答:

  1. 为什么要做中餐?已答。
  2. 为什么要做语义分割?因为目标检测的精度不够。
  3. 为什么现有的方法失效了?
  4. 为什么我的方法就会有效?是针对挑战如何设计的模块,使得它是有效的?

【背景】

  1. 中餐很重要,占据全球很大一部分人口的饮食摄入。中餐的识别菜品是十分重要的。(帮助识别菜/有助于检索/营养评估等)直接关系到这些人的身体健康/营养摄入等。吃中餐的人占全球人口的比例非常大,主要由中国十四亿人口和全球数千万的华侨华人构成,同时还有大量被中餐吸引的外国食客,使其成为全球影响力最广的菜系之一。
  2. 考虑到在中餐食用的场景下,摄影一张中餐的图片。图片中会包含多道中餐菜品,甚至很大一部分的菜品会出现粘连的状态。但是现有的专用模型:目标检测/语义分割方法,通用大模型,在中餐的识别上准确度并不高。其原因可能与下列因素有关:
    1. 数据的收集上设想了理想场景:训练的图片都是分离的较开的图片/给定的label标注都比较粗泛(考虑到现有的中餐的数据集,分割和目标检测)
    2. 以至于在设计方法上并不面向这种挑战进行设计。主要针对西餐(与中餐特点明显)
  3. 为了解决这个问题,我们从两个维度来处理问题:一是数据上收集了2.5w的中餐数据集,覆盖菜品混合/拍摄角度光线/汤汁流溢等多种复杂场景。二是从方法上提出了基于强化学习的方法。

Related Work

OVFoodSeg:两个阶段。阶段一是是用100w的recipe 1m对应文字和食材信息学习食物大模型FoodLearner。阶段二是利用FoodSeg103微调大模型FoodLearner得到特征,直接输入SAN(分割模型)得到分割结果。

我个人的想法是:如果引入大模型,那么第一步的训练大模型是没有必要的。可以直接利用LLM API得到相关的信息+SAM实现。因此去超越它应该不难?

Method

目标:解决目前中餐识别上的精度/性能问题。“中餐的高歧义性”需要“随机策略探索”来解决。

问题定位(到底现在面对的是什么问题?):中餐有自己的特点(多食材炒作一道菜,一个碗里会有多道菜)。

1. 多食材炒成一道菜:这导致不同的类别看上去都很类似(有相似的食材/不同的烹饪方式等),即便是同一道菜,由于切割食材的方式不一样,看上去差别也会很大。类间距离大/类内距离小。  
1. 不同的菜边界上混合:聚焦在重点问题,就是要识别出哪一块区域是什么菜,那么对于边界,我们只是需要定位到某一个菜的中点,找到它的区域。或许对于边界并不需要太严格?avg pool增加边界的稳定性。

方法:为了解决问题:

1. 施加对齐Align约束:类似于K-means聚类。
1. avg pool:增加边界的稳定性。

模型框架

图像(img)首先进入DeepEncoder架构提取图像特征。然后进入基于DeepSeek-MoE的Encoder框架。

DeepEncoder(pretrained-model)

DeepEncoder=SAM-Based ViTDET+Conv16x+CLIP img Encoder

首先img分割成32x32的patch进入SAM-Based ViTDET,也就是使用SAM提取proposal的mask区域(这些mask应该是黑白的,然后与32x32的原图patch进行像素相加,突出显示可能是obj的地方),

然后进入Conv16x:施加BottleNeck,降低维数。

CLIP img encoder:得到更加高级/结合低级的特征进行。

Q:没有想好的是这个部分是否要freeze?如果冻结的话,那样提取出来的proposal是不会改变的。但是不冻结的话,更新会导致参数量变很多,或者如果不冻结能不能用LoRA?或者是$\Delta W$?

A:先冻结查看结果,然后再尝试加LoRA/Adaptor

基于DeepSeek-MoE的Decoder

特征—>RMS Norm+MHA(多头注意力机制)+残差+RMS Norm+DeepSeek-MoE(专用专家+共享专家),输出+softmax+linear,得到对img的分割logits。

这个框架基本就是transformer的Decoder,但是将FFN改成了DeepSeek-MoE,以及其他的一些小改动。

Q:对于Decoder的输出如何得到分割的结果我还是有点confused。

Encoder输出是:$F \in \mathbb{R}^{HW \times d}$, 然后reshape:

对于$q_k \in \mathbb{R}^{N \times d}$,

每个query Chans一个mask logit:

其中:$q_k^i$:第 $i$ 个 mask prototype;$F(x,y)$:像素 $(x,y)$ 的 embedding

Sigmoid激活得到概率mask:

mask组成最终分割:两种公式都可以,表示“只要有一个 prototype 覆盖该像素,就认为是前景”。

计算loss

策略优化

三个重要假设(你自己可能还没意识到):

  1. decoder 层 ≈ time step
  2. query 更新是一个 Markov decision process
  3. “更深层 = 更接近语义最优解”

我们将第 $k$ 层 Decoder 的更新过程建模为马尔可夫决策过程(MDP)。将每个decoder的输出都建模为时序动作信息(假设模型得到的结果应该是一次比一次好的)。假设在第$k$层decoder中($k=1,\dots,n$)

状态 $s_k$ 由当前的Query $q_k$ 定义。

Query的语义:每个Query贡献一个mask basis/prototype,多个Query的mask叠加构成最终的segmentation。

状态$s_k$:query查询/将状态建模为一组并行的mask prototypes,是当前模型对整张图像中“可能存在的N个语义区域”的内部表示。

$N$:查询对象的数量;$d$:隐藏层的特征维度;$q_k$:第$k$层decoder的query input,从$q_{k-1}$处理得到。每个 $q_k^i$:一个mask embedding

动作 $a_k$ 是 Query 的更新向量。

策略网络 $\pi_\theta(a_k|s_k)$ 输出动作的分布参数。

注意:这里使用了 softplus 保证方差为正,且加了 $\epsilon_{\min}$ 防止方差坍缩。

其中 $h_k$ 是经过 MoE 和 Attention 处理后的隐变量:

状态更新(下一层 Query):

为了让 RL 训练更稳定,我们使用增量奖励 (Incremental Reward),即:“这一步是否比上一步做得更好?”

设 $M_k$ 为第 $k$ 层预测的 Mask,$C_k$ 为预测的类别概率,$M^{gt}$ 和 $C^{gt}$ 为真值。

单步奖励 $r_k$ 定义为:

  • 解释
    • $\text{Dice}(\cdot)$:计算 Mask 和 GT 的 Dice 系数。
    • $\mathcal{P}(C_k, C^{gt})$:预测正确类别的概率值(即 Softmax 后对应 GT 类别的分数)。
    • 逻辑:如果第 $k$ 层的 Dice 比第 $k-1$ 层高,或者对正确类别的预测概率提升了,$r_k$ 就是正的,鼓励这个动作;反之则是负的,惩罚这个动作。
    • $\lambda_{\text{geo}}, \lambda_{\text{cls}}$:平衡系数,通常设为 1.0 或 2.0。

终极奖励 (Final Reward):为了防止中间层“刷分”但最终结果不好,通常在最后一层 $K$ 额外加上绝对分数:

$r_K = r_K + \text{Dice}(M_K, M^{gt}) + \text{Accuracy}(C_K, C^{gt})$

$\mathcal{L}_{ce}$的公式是:

其中$sgn(\cdot )$表示其中条件成立=1,否则为0;$p_{ij}^c$是$\text{softmax}(M_k)_{ij}^c$,$y_{ij}$是GT像素标签。这个函数进行类别的判别,强制每个pixel只属于一个语义类别。

$\mathcal{L}_{dice}$的公式:

其中$p_{ij}^c$:预测概率;$g_{ij}^c \in \{0,1\}$:one-hot GT;$\epsilon$:数值稳定项。这个函数用于缓解前景–背景 / 小区域不平衡,强调区域重叠质量

价值函数 $V(q_k^i)$

分割是集合预测问题,每个 Query 负责不同的物体。我们需要Per-Query Value Estimation。对于第 $k$ 层的第 $i$ 个 Query $q_k^i$:

  • 含义:这个 MLP 预测“当前这个 Query $q_k^i$ 在未来能获得多少累积奖励”。

优势函数 (Advantage) 使用 GAE (Generalized Advantage Estimation) 计算:

这会让训练比简单的 $A = R - V$ 稳定得多。

强化学习优化目标

在我们的场景下,可以简化为带 KL 约束的 PPO 形式。

我们的优化目标是最大化以下期望:

其中:

  • PPO Clip 项 $\mathcal{L}_{\text{clip}}^i(\theta)$

    这一项保证策略更新不要太激进,防止训练崩盘。

  • KL 散度项 $\mathbb{D}_{\text{KL}}$

    • $\pi_{\text{ref}}$ (参考策略):建议设为一个预训练好的、冻结的 Base 模型(即没有 RL 之前的监督学习模型)。
    • 作用:强迫你的 RL 模型不要忘记原本学到的知识(不要发生灾难性遗忘),只在 Base 模型的基础上做“微调优化”。

Experiment

训练

使用混合训练:

  1. 前几百个 Epoch 使用标准 BP 预热(Warm-up),因为 RL 很难从零开始学特征。
  2. 后半程加入 RL Loss 微调,声称这是为了“Refine uncertain boundaries”(精修模糊边界)。

在实验中你一定要做这组对比,否则 RL 很难说服人:

  1. baseline:decoder + aux loss
  2. 去掉 aux loss,只保留 final loss
  3. RL version(你这个)

只要 (3) > (1),你这套 method 就是成立的。

消融实验

采样策略分析:对比 Deterministic Update vs. Stochastic Update (你的方法)。

Reward 设计:对比仅使用 Final Reward vs. Step-wise Reward (每一层都算 Reward)。

MoE 专家数量:证明 MoE 对中餐多变性的有效性。

Discussion

为什么要使用RL?RL 是否真的比 deep supervision + aux loss 更有必要?

  • 建议修改为“解决多模态歧义(Multimodal Ambiguity)”。中餐图片中,一块模糊的区域可能同时像A也像B。传统的确定性 Decoder 只能选择一条路走到黑。引入 RL 的随机策略(Stochastic Policy),使得 Query 建模为一个分布而非点估计。在训练早期,较大的方差允许 Query 探索不同的语义中心;在训练后期,方差收敛,锁定最优解。这类似于贝叶斯推断或变分推断(Variational Inference)。

后续的研究方向:

多层级的标签+建立图模型/层次的语义分割

开放词汇的语义分割

搜索
匹配结果数:
未搜索到匹配的文章。