本地图片分类怎么做?用 Torchvision ResNet50 输出 Top-5 标签

用 Torchvision ResNet50 和权重自带预处理输出图片 Top-5,核对类别映射、候选分数与业务边界。

要给一张图片输出候选类别,可以在本地使用 Torchvision 的 ResNet50 预训练权重。模型返回的是 ImageNet 类别分数;它不负责给图片中的每个物体画框,也不能直接识别你的业务专属标签。

准备环境与图片

使用兼容的 PyTorch、Torchvision 与 Pillow 环境。按 PyTorch 的安装选择器安装与你系统匹配的版本;CPU 示例不要求 CUDA。准备有使用权的 photo.jpg,最好先用单个清晰主体的 RGB 照片。首次使用默认权重会联网下载,离线环境需事先准备模型缓存。

本地图片分类怎么做?用 Torchvision ResNet50 输出 Top-5 标签

python -m pip install torch torchvision pillow

以下流程按官方模型文档编写,未在具体图片和硬件上实测。保存代码为 classify.py,与图片放在同一目录,再运行 python classify.py;记录实际 torch 和 torchvision 版本便于复现。

使用权重自带的预处理

import torch
from PIL import Image
from torchvision.models import resnet50, ResNet50_Weights

weights = ResNet50_Weights.DEFAULT
model = resnet50(weights=weights).eval()
image = Image.open("photo.jpg").convert("RGB")
batch = weights.transforms()(image).unsqueeze(0)
with torch.inference_mode():
    logits = model(batch)[0]
    probabilities = logits.softmax(dim=0)
    scores, indices = probabilities.topk(5)
categories = weights.meta["categories"]
for score, index in zip(scores.tolist(), indices.tolist()):
    print(index, categories[index], round(score, 4))
assert logits.numel() == len(categories)

weights.transforms() 包含这组权重要求的缩放、裁剪和归一化,不能只把图片变成张量就当作同一输入。eval() 与 inference_mode() 分别切换评估行为和关闭梯度记录,两者用途不同。

核对 Top-5,而不是只相信第一名

验证时应出现五条类别和分数,类别名称来自同一 weights 的 categories;检查最高分主体是否与图片可见内容相符。保留原图、五条候选和模型版本,不能把最高分当成确认事实。

例如模型可能给动物照片输出多个相近品种;若业务只需要“猫或狗”,仍要先建立类别映射并用代表性样本验证。若图片含多个物体,裁剪可能只保留中央主体,这不是目标检测遗漏的证据,而是分类输入范围的限制。

常见失败与下一步

图片打不开时核对路径和格式;下载失败时检查官方权重地址与缓存;torchvision 算子报错时检查包版本是否匹配,不先改类别列表。若换 GPU,模型和输入都要移动到同一设备。

下一步用十张已知类别的授权图片,记录 Top-1 和 Top-5 是否包含正确类别,再决定是否需要业务微调。Softmax 分数不是校准后的正确率,陌生类别也会被分配到已有类;医疗、产品缺陷等专业任务不能直接用此通用分类结果作决定。

资料与适用版本

以下官方资料核对于 2026 年 10 月 1 日;安装和界面以实际使用版本为准。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30659.html

赞 (0)
AI小管家的头像AI小管家
CVAT 视频标注怎么做?用 Track 跟踪目标并核对关键帧
上一篇 1天前
图片文字怎么本地识别?用 EasyOCR 读取中英文并保留坐标
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部