快速结论:这个报错通常出现在你想用 Hugging Face Transformers 微调 CLIPSegForImageSegmentation 时,因为官方缺少微调脚本和数据集准备说明,容易在构造 labels 时传入错误类型或形状,触发 Finetune ClipSeg model 相关问题。优先确认 labels 是否为与 logits 同尺寸的浮点二值掩码。
适用环境:Issue 中确认使用 Transformers、CLIPSegForImageSegmentation、CLIPSegProcessor、Trainer 和 TrainingArguments;使用的是预训练模型 CIDAS/clipseg-rd64-refined。Issue 未提供操作系统、Python、CUDA、显卡等具体版本信息。
最快修复方案:Issue 中已确认的修复方向是:CLIPSegForImageSegmentation 在传入 labels 时会自动返回 loss,因此可以直接用 Trainer 或普通训练循环微调解码器;把 labels 构造成形状为 (batch_size, height, width) 的浮点二值掩码,并 resize 到与模型 logits 相同的空间尺寸,例如默认处理器下的 352×352。
注意事项:Issue 指出当前文档字符串把 labels 描述为形状 (batch_size,) 的 LongTensor,这是错误的,会导致抛出异常;实际应按浮点二值掩码传入。该 Issue 只提供了示例训练代码,没有给出完整的社区教程或数据集准备规范,实际微调效果仍需自行验证。
问题场景
用户在探索零样本医学图像分割时,发现 ClipSeg 很适合做细胞二值分割,但找不到任何关于如何微调 ClipSeg 模型的教程或 notebook,也不清楚如何准备数据集。用户在 GitHub 上请求官方提供微调脚本和“如何准备数据集”的说明,并认为 ClipSeg 在少样本场景下比从头训练 U-Net、R-CNN 更有潜力。
报错原文
Finetune ClipSeg model
原因分析
最可能的原因是官方缺少微调文档和示例,导致用户不确定 CLIPSegForImageSegmentation 的 labels 应该是什么类型和形状。Issue 中维护者指出,当前文档字符串对 labels 的描述是错误的,实际需要传入与 logits 空间尺寸一致的浮点二值掩码,而不是形状为 (batch_size,) 的 LongTensor。如果按文档传入错误类型或形状,就会在训练时抛出异常。
环境排查
- 确认已安装的
transformers版本是否包含CLIPSegForImageSegmentation的损失计算支持。 - 确认使用的预训练模型 ID,例如
CIDAS/clipseg-rd64-refined。 - 确认
CLIPSegProcessor输出的pixel_values空间尺寸,Issue 示例中默认为 352×352。 - 确认
labels是浮点二值掩码,取值范围[0, 1],形状为(batch_size, height, width),且与模型 logits 空间尺寸一致。 - 确认是否冻结了 CLIP backbone:Issue 示例中设置
model.clip.requires_grad_(False),只训练解码器。 - Issue 中没有提供 Python、CUDA、PyTorch、显卡等具体版本,需按你自身环境另行确认。
解决步骤
- 加载模型和处理器:使用
CLIPSegProcessor.from_pretrained(model_id)和CLIPSegForImageSegmentation.from_pretrained(model_id),其中model_id可参考 Issue 示例中的CIDAS/clipseg-rd64-refined。 - 冻结 CLIP backbone:调用
model.clip.requires_grad_(False),只微调解码器。 - 构建数据集:每条样本包含一张图像、一个文本提示,以及与图像同尺寸的二值掩码。
- 在 collate 函数中使用
processor同时处理文本和图像,得到inputs。 - 将掩码 resize 到与 logits 相同的空间尺寸,例如
352×352,转成 numpy 数组并堆叠,再转为torch.float并除以 255.0,放入inputs["labels"]。 - 使用
Trainer和TrainingArguments启动训练,设置remove_unused_columns=False,并传入自定义data_collator。 - 微调完成后,用
processor构造推理输入,执行model(**inputs).logits,再通过logits.sigmoid() > 0.5得到预测掩码。
验证方法
训练阶段确认传入 labels 后模型能正常返回 loss,不再因为 labels 类型或形状错误而抛出异常。推理阶段检查 logits 的形状与输入图像空间尺寸一致,例如 (batch_size, 352, 352),并对 logits.sigmoid() > 0.5 的结果目视或定量评估是否与目标掩码吻合。如果仍报错,优先检查 labels 是否为浮点二值掩码且已 resize 到与 logits 相同的空间尺寸。
参考来源
huggingface/transformers #24494
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug] Hybrid Search in dataset settings cannot persist reranking_enable=true when the retrieval method card is already selected, so rerank s](https://www.chat-gpts.plus/wp-content/uploads/2026/09/42553-e2af1a92-768x403.jpg)
![[Refactor/Chore] Improve vp check performance](https://www.chat-gpts.plus/wp-content/uploads/2026/09/38865-ee0372e8-768x403.jpg)
![[Bug]: GatedDeltaNet metadata builder classifies a stateless first chunk as a decode (same root cause as #51483)](https://www.chat-gpts.plus/wp-content/uploads/2026/09/51562-14e6939c-768x403.jpg)