限定标签的场景识别,可以先用 CLIP 比较一张图片与几条候选描述的匹配程度。这里演示室内、街道、海滩和一个宽泛的其他候选。它解决的是候选集合内的相对排序,不是证明图片只能属于其中某一类。
先定标签含义,再写对应文本
准备一张自有 scene.jpg,先人工写出场景类别以及是否模糊。室内与街道可能同时出现,例如透过窗户看到道路;若业务需要多标签,不能硬套单选。将这些歧义提前记录,比事后调整分数更有效。

python -m pip install torch "transformers==4.57.1" pillow
本例使用 Python 3.11、CPU 和 CLIP 4.57.1 接口;首次加载联网下载权重。英文短描述与模型卡展示的调用方式保持一致。本文未运行该场景模型,没有提供实测准确率。
把图像和候选文本一起送入模型
保存为 scene_labels.py,运行 python scene_labels.py。
from PIL import Image
import torch
from transformers import CLIPModel, CLIPProcessor
name = "openai/clip-vit-base-patch32"
processor = CLIPProcessor.from_pretrained(name)
model = CLIPModel.from_pretrained(name).eval()
labels = ["室内", "街道", "海滩", "其他或无法确认"]
prompts = ["a photo taken indoors", "a photo of a street",
"a photo of a beach", "a photo of another scene"]
image = Image.open("scene.jpg").convert("RGB")
inputs = processor(text=prompts, images=image, padding=True, return_tensors="pt")
with torch.inference_mode():
scores = model(**inputs).logits_per_image[0].softmax(dim=-1)
for index in torch.argsort(scores, descending=True).tolist():
print(labels[index], round(float(scores[index]), 4))
解释分数时最容易出错的地方
输出列出四个候选的排序和相对分数。候选变更后 softmax 分数也会变,不能把“海滩 0.8”解释为在所有可能场景中有 80% 正确率。增加“其他”文字也不自动获得可靠的未知类别检测。
准备三张人工明确的对照图,再加入夜景、近景和混合场景,记录每张图的前两名、分差与人工判断。检查清晰样本是否命中,再看歧义样本是否需要复核。
怎样接入真实分类规则
只有在自己的带标签样本上核对过门槛,才决定哪些候选可进入自动分类、哪些进入人工队列。不同措辞会改变匹配结果,修改提示文本后要复跑同一组对照样本。
本题输出文本候选类别,图库以图搜图则输出相关图片路径,两者输入和验收目标不同。若希望开放式描述场景,应使用描述任务并逐项核对事实,不把这四条候选扩写成未经验证的说明。
资料与适用范围
本文依据 2026 年 10 月 1 日读取的项目资料编写。安装后请记录实际依赖版本;版本升级时先用小样本核对接口和输出。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30746.html