基于pytorch的CAM代码单张图片实战(超详细版,修改部分已经详细标出)

本文介绍了如何修改代码以使用本地json文件,替代在线获取标签数据。同时,针对torchvision的版本更新,调整加载预训练模型的参数。文章对比了SqueezeNet1_1、ResNet101和DenseNet161在自行车识别上的性能,并展示了模型对摩托车图片的分类结果,揭示了不同模型的分类倾向。
摘要由CSDN通过智能技术生成

源代码来源:

https://blog.csdn.net/zsx1713366249/article/details/87902476

运行处理:

一. 自行下载json文件,链接如下:

https://pan.baidu.com/s/1QZDay0aOVkpDGaC4EF3VzA
提/取/码:1211

将下载后的json文件放在代码运行的文件夹
在这里插入图片描述

二. 修改相关代码:

1.1 删除:

LABELS_URL = 'https://s3.amazonaws.com/outcome-blog/imagenet/labels.json'  

1.2 添加:

jsonfile = r'labels.json'   # 保存在当前代码运行的文件夹的话就不用修改了
with open(jsonfile, 'r') as load_f:
load_json = json.load(load_f)

2.1 删除:

classes = {int(key):value for (key, value) in requests.get(LABELS_URL).json().items()}

2.2 添加:

classes = {int(key): value for (key, value)
          in load_json.items()}

注意: 从 torchvision 0.13开始,加载预训练模型函数的参数从 pretrained = True 改为 weights=预训练模型参数版本。
若版本不匹配会出现以下问题:

UserWarning: The parameter ‘pretrained’ is deprecated since 0.13 and will be removed in 0.15, please use ‘weights’ instead.

3.1 修改部分如下:

if model_id == 1:
 net = models.squeezenet1_1(weights = models.SqueezeNet1_1_Weights.IMAGENET1K_V1)

elif model_id == 2:
 net = models.resnet101(weights = models.ResNet101_Weights.IMAGENET1K_V1)

elif model_id == 3:
 net = models.densenet161(weights = models.DenseNet161_Weights.IMAGENET1K_V1)

三. 选择不同Model

由于模型在运行代码时下载较慢,因此可以提前下载放在如下文件夹中:

在这里插入图片描述

1. 下载模型方式

  • 一开始运行代码时,文件夹中没有模型,运行后会有如下正在从蓝色网址下载模型到红色文件夹位置的情况:

在这里插入图片描述

  • 直接点击蓝色部分,即可下载选用的模型:(下载速度远远快于运行代码下载)

在这里插入图片描述

  • 找到刚刚下载的模型文件:

在这里插入图片描述

  • 复制到红色字体部分指示的文件夹中:

在这里插入图片描述

  • 重新运行代码即可:
    结果如下

在这里插入图片描述
model_id = 1时:
在这里插入图片描述

model_id = 2时:
在这里插入图片描述
model_id = 3时:
在这里插入图片描述

结论: 可见在该种辨别自行车的情况下,模型1的效果更精确

测试本机图片(以摩托车为例):

1. 网上下载任意一张摩托车图片:
在这里插入图片描述
注释:

# response = requests.get(IMG_URL)
# img_pil = Image.open(io.BytesIO(response.content))

添加:

img_path = "C:/Users/86156/Pictures/Saved Pictures/motuo_test1.jpg"
# 地址为自己下载图片后保存的位置
img_pil = Image.open(img_path)

解决OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.报错问题
参考:https://huaweicloud.csdn.net/637f7cebdacf622b8df86187.html
本人是使用第一个解决方法解决的,注意双引号自己需要在英文输入法下重新改一下,直接复制博文中的会报错。

结果如下:

model_id = 1时:

在这里插入图片描述

输出的预测分值排名在前五的五个类别的预测分值和对应类别名称:

在这里插入图片描述

结论:在model1的预测模型下,网络倾向于将该图片分类为:mountain bike, all-terrain bike, off-roader类

model_id = 2时:

在这里插入图片描述

输出的预测分值排名在前五的五个类别的预测分值和对应类别名称:
在这里插入图片描述

结论:在model2的预测模型下,网络倾向于将该图片分类为:crash helmet类

model_id = 3时:

在这里插入图片描述

输出的预测分值排名在前五的五个类别的预测分值和对应类别名称:
在这里插入图片描述

结论:在model3的预测模型下,网络倾向于将该图片分类为:crash helmet类

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值