Dinov2ForImageClassification标签数量异常,无法实现ImageNet 1000分类
Dinov2ForImageClassification返回2分类而非ImageNet 1000分类的解决方案
问题原因
facebook/dinov2-base是无监督预训练的特征提取模型,本身没有附带ImageNet 1000分类任务的分类头(classifier层)。当你用Dinov2ForImageClassification加载该模型时,Transformers库会自动初始化一个新的分类头——如果未明确指定num_labels,默认会创建适配2分类的结构,这就是你得到形状为torch.Size([1, 2])的logits的原因。错误提示里的“分类头权重未从 checkpoint 初始化”也印证了这一点:新的分类头是随机初始化的,必须经过下游任务训练才能生成有效预测。
解决方案
有两种可行方案,根据你的需求选择:
方案一:直接使用ImageNet微调好的预训练模型
官方已在Hugging Face Hub上提供了完成ImageNet 1000数据集微调的Dinov2分类模型,这类模型自带1000类的分类头,可直接用于推理:
from transformers import AutoImageProcessor, Dinov2ForImageClassification import torch from datasets import load_dataset # 加载示例图片 dataset = load_dataset("huggingface/cats-image") image = dataset["test"]["image"][0] # 加载微调后的ImageNet分类模型 image_processor = AutoImageProcessor.from_pretrained("facebook/dinov2-base-finetuned-imagenet") model = Dinov2ForImageClassification.from_pretrained("facebook/dinov2-base-finetuned-imagenet") # 处理输入并推理 inputs = image_processor(image, return_tensors="pt") with torch.no_grad(): logits = model(**inputs).logits # 输出结果:logits形状为[1, 1000] predicted_label_idx = logits.argmax(-1).item() predicted_label = model.config.id2label[predicted_label_idx] print(f"预测标签:{predicted_label}")
方案二:手动指定分类头维度,自行微调
如果你需要基于基础模型自定义训练流程,可在加载模型时明确指定num_labels=1000,让库初始化适配ImageNet 1000分类的分类头,之后用ImageNet数据集完成训练:
from transformers import AutoImageProcessor, Dinov2ForImageClassification import torch from datasets import load_dataset # 加载示例图片 dataset = load_dataset("huggingface/cats-image") image = dataset["test"]["image"][0] # 加载基础模型时指定1000分类的头 image_processor = AutoImageProcessor.from_pretrained("facebook/dinov2-base") model = Dinov2ForImageClassification.from_pretrained("facebook/dinov2-base", num_labels=1000) # 处理输入(此时分类头权重随机,需训练后才能得到有效预测) inputs = image_processor(image, return_tensors="pt") with torch.no_grad(): logits = model(**inputs).logits # logits形状为[1, 1000] predicted_label_idx = logits.argmax(-1).item()
注意:方案二中的分类头是随机初始化的,直接推理会得到无意义的结果,必须完成ImageNet数据集的微调训练后才能用于实际预测。
内容的提问来源于stack exchange,提问作者Ofir Shifman
相关产品推荐
相关产品推荐

