2025-9-3
分析一下我们数据集的情况:多菜同盘、混合/覆盖、酱汁漫流、同名食材多烹法外观差异巨大。
在自助餐或学校食堂餐盘的场景下,在CV领域构成了一个独特而复杂的挑战。其核心特征在于,场景是由两类截然不同的视觉元素构成的混合体:一类是离散、可数的物体,例如一块排骨、一个虾仁或一朵西兰花;另一类则是无定形、不可数的区域,例如一摊米饭、一汪酱汁或一盘混合翻炒的蔬菜。这种结构使得传统的图像分割范式难以完全胜任。
两层任务 + 三层本体 + 属性多标签 + 关系图谱:
- 任务层
Seg-A(基础):菜品级全景分割(panoptic)——每道“菜/主食”为一个实例,像素唯一归属;
Seg-B(精细子集):食材级实例分割(instance/parts)——只在人群常见菜上做“组成食材”掩码与部件关系;
同时提供弱标注(食材成分表、烹法/刀工/酱汁等属性标签)覆盖全量,降低成本。 - 本体层(Ontology)
Level-1:大类(主食、热菜、凉菜、汤/粥、配菜/小食、饮品/甜品、酱汁/汤汁、装饰/点缀);
Level-2:菜系/菜型/主材系(炒菜、焖/烧、炸、蒸、拌…;禽畜/水产/蔬菜/豆制品/菌菇…);
Level-3:菜名/主材(“宫保鸡丁”“红烧肉”“西红柿炒蛋”“米饭”“面条”……)。
——烹饪方式、刀工、酱汁口味等全部做成“属性标签”,而不是细分为类别(关键以减少长尾)。 - 关系层
part_of(成分属于某道菜)、overlaps_with(混合/覆盖)、z_order(前后遮挡次序)、has_sauce、dyed(被染色)、served_with(配主食)等。
长尾分布与细粒度的冲突:规则里有意“归一化食材名”,比如猪肉不分五花肉/梅花肉,但这会损失细粒度差异。对下游任务(比如 VQA 问“这是五花肉还是瘦肉?”),模型没法回答。反过来,如果你全都细分,会产生极度长尾,难训练。
问询GPT老师原话
我现在想和你讨论一些相关的问题。实际上FoodSeg103数据集是第一个出现的食物分割数据集。我现在也在做一个食品分割数据集,与这个数据集不同的是,我将聚焦在中餐的数据集上,而且是学校餐盘或事自助餐的形式。但是这样的图片数据具有以下的特点:每张图片中都存在主食和几道菜。主食一般是单独的一种食材,或是米饭或是面等;但是菜,以炒菜为主;炒菜一般会有多种食材混合进行炒制;在同一个餐盘中不同的炒菜之间边界不清晰,可能不同的菜会出现混合、覆盖等情况,还会有汁水流满了整个餐盘、将米饭染成别的颜色等;我现在想收集这个数据集用来做分割任务或是开放词汇分割、以及后续的进行营养评估和VQA等。但是目前在收集数据集以及标注的时候遇到了问题,为了能够支撑更多的下游任务,我的标注到底应该怎么标注比较好?:
同一道食材的不同烹饪方式(糖醋排骨、红烧肉、小酥肉等)是否要分开算不同的标签还是说算作一个标签?要是算作不同的标签,那么我将他们划分为不同类别的依据或理由是什么?那么其他的肉和菜是不是也能这么分?有没有更加细致的、合理的划分方式
除了默认的炒菜之外,还有不同的烹饪方式、以及调料用的不同、将食材切成片、丝、丁状等都会导致其外观上的不同,这种情况要怎么办?
GPT说多加后缀标签,比如菜品的颜色,状态。
color_dominant(红/黄/褐/绿)、texture(油亮/干爽/汤汁),训练技巧:将这些属性文本与类别名组成prompt 组句(如 “a dish of stir-fried shredded pork with green pepper, glossy sauce”),用于 open-vocab 的文本编码器对齐;属性无需是类别即可发挥监督作用。关于炒菜之间混合:因为每道菜都会用到多种食材,那么当菜与菜之间混合的时候,该怎么处理(分割标注之类的)、算法能够将其分开吗?感觉会有很大的难度?
- Seg-A(菜品级 panoptic):每像素唯一归属,不允许重叠;遇到混合处由标注员判断“主导菜”归属,另在关系里记录
overlaps_with。 - 不确定边界:提供trimap 边界带或boundary-uncertain mask(0/0.5/1),训练时可用柔性边界损失(如 Lovász + Boundary loss),降低苛刻边界对模型的噪声伤害。
- 汁水/汤汁:建议单列 “sauce/gravy/broth” (酱汁肉汁)为 stuff 类(非实例),可多处连续涂抹,既真实反映漫流,又不与菜品实例冲突。
- Seg-B(精细子集的 ingredient 实例):允许部件/食材实例在逻辑上从属于菜品实例(part_of),并可重叠(annotation 里分层存 RLE,多实例可共享像素)。训练时可选amodal/visible双版本(可选)。
现实妥协:全量做“多实例重叠像素”成本极高,因此将重叠与部件级放在精选 20–50 道高频菜上做“精注集”,其余只做菜品级。
- Seg-A(菜品级 panoptic):每像素唯一归属,不允许重叠;遇到混合处由标注员判断“主导菜”归属,另在关系里记录
支撑下游任务:为了能够支撑更多的下游任务比如VQA,开放词汇分割,我的标注、分割应该怎么设计呢?比如我在划分标签的时候设计类别具有细粒度,划分大类子类等?背景要不要细分?等等。具体的得到的json文件中的每个图片的标注的格式,应该是什么样子呢?
- 语言侧-开放词汇分割
- 每个实例提供短标题(“西红柿炒蛋”/“stir-fried tomato with egg”)、属性列表、成分表(ingredients=[tomato, egg, scallion, oil, salt, sugar])、可拼接的模板 caption:
“a Chinese cafeteria dish of {method} {main_ingredient} with {aux_ingredients}, {flavor}, served with {staple}” - 提供别名/中英双语/同义词(open-vocab 强相关)。
- 每个实例提供短标题(“西红柿炒蛋”/“stir-fried tomato with egg”)、属性列表、成分表(ingredients=[tomato, egg, scallion, oil, salt, sugar])、可拼接的模板 caption:
- VQA 生成
- 依注释自动生成计数/存在/比较/属性/关系/搭配/营养问答对。
- 例:“盘中是否有红烧肉?”、“这道菜是否油亮?”、“米饭是否被酱汁染色?”、“主食是什么?”、“含蛋白质最高的是哪道菜?”
- 营养估算
- 为主材维护每 100g 营养表(可用权威表对齐 ID);
- 标注估计份量/体积 proxy(mask 面积 × 盘面尺度估计 × 厚度先验),或至少给“份数等级(S/M/L)”;
- 关系
served_with记录菜与主食配对,便于一餐汇总。
- 语言侧-开放词汇分割
长尾分布:因为每道菜都是不同的食材之间组合,因此虽然食材的种类有限,但是有限的食材能够得到很多的不同类别的菜,他们的标签应该如何划分才能尽可能的减少长尾分布?
类目三层 + 属性表述:稀有变体不升类,用“主材类 + 属性”表示。
频度阈值:仅当类在训练集中样本数≥K(如 200)且外观稳定,才晋升为“显式类别”。
合并规则:极相似菜名并类(“鱼香肉丝/鱼香里脊”→“鱼香肉类丝/块类”+ 属性=丝/块);
数据切分:提供base/novel 拆分文件,让稀有类在 novel 中以 OV 方式被评测。
重采样:对“高价值但中等频率”的类做多视角/多餐盘补采,保证训练可学;
属性均衡:在采集时关注属性分布(干/湿、红/黄/绿、丁/丝/片),提升泛化。
这个任务会比较困难:因为分割上十分困难,以及标签上十分的多等等。我想知道要怎么设计这个数据集的标注、分割。对于不同的食材组成的菜、不同的菜组成一幅图片,这本身就有细粒度了;对于划分的时候,我能做细粒度分割吗?我能识别出那种每个食材都出现过,但是出现的新的食材组合出的标签吗?这种情况可以如何处理?
能细粒度分割,但要分层目标:
- 菜品级:全量可做;
- 食材级:做“精注子集 + 全量弱标注(成分表)”。
新组合识别(组合泛化)————-此处有疑问:这个到底要怎么做?是食材级别还是菜品级别?
- 训练中通过文本组合 prompt(主材 + 属性 + 搭配)形成组合式类别描述;
- 利用 CLIP/OVHead 在推理时对新组合文本打分,实现零样本组合识别;
- 在精注子集中提供真实组合,提升组合泛化能力(compositional generalization)。
新类别的处理:GPT认为一个新类别的划分必须满足下面三个要求:
- 该“菜名/变体”在你的场景很高频(如“红烧肉”“糖醋里脊”“鱼香肉丝”“宫保鸡丁”“西红柿炒蛋”),
- 具有稳定的外观模板(形态/配色/典型搭配“花生米/青椒段”等),
- 对下游(营养估算、VQA)具有明显区分价值。
满足三条即可升为 Level-3 类别;否则继续作为“主材类 + 属性”。
猪肉—》肉末—〉肉末蒸蛋
输入:图片(多道菜
输出:知道这张上有什么菜,在哪里,叫什么
以菜品级标注做食材级识别
大部分数据是单个食材成菜—》多食材成菜
[“腊肉”][“藕”][“辣椒”]
Json—attributes:
1 | [ingridient: |