(202301)pytorch图像分类全流程实战Task2:预训练模型预测

Task2:预训练模型预测

任务时间表
参考代码:B站up主同济子豪兄开源在GitHub的图像分类代码
task 2是使用预训练模型进行预测。但是我的数据集本身与ImageNet的数据差别过大了,是无法准确识别的。不过倒是可以判断出一些零件像什么。

使用resnet18进行预测

参考up主子豪大佬的代码,首先使用了resnet18模型进行预测。

载入模型

from torchvision import models
model = models.resnet18(pretrained=Ture) #即载入预训练模型 

不过在这里我出现了一个问题,载入权重文件失败。(大概是网络不好吧)
所以需要手动下载一个权重文件,并手动载入。

model = models.resnet18(pretrained=False) 
model.load_state_dict(torch.load('resnet18-f37072fd.pth'))

这里我下载的是resnet18-f37072fd.pth(链接奉上)

图像预处理

from torchvision import transforms

# 测试集图像预处理-RCTN:缩放裁剪、转 Tensor、归一化
test_transform = transforms.Compose([transforms.Resize(256),
                                     transforms.CenterCrop(224),
                                     transforms.ToTensor(),
                                     transforms.Normalize(
                                         mean=[0.485, 0.456, 0.406], 
                                         std=[0.229, 0.224, 0.225])
                                    ])

图像预处理的目的: 图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取、图像分割、匹配和识别的可靠性。
(更多关于图像预处理移步这位大佬的博客

载入图像

然后使用pillow载入图像

# 用 pillow 载入
from PIL import Image
img_pil = Image.open(img_path)

之所以用pillow,是因为transforms的方法仅支持处理PIL格式或张量。
载入图像

执行图像分类预测

input_img = test_transform(img_pil)
input_img = input_img.unsqueeze(0).to(device) #如果之前有定义了device的话
pred_logits = model(input_img) 

import torch.nn.functional as F
pred_softmax = F.softmax(pred_logits, dim=1) # 对 logit 分数做 softmax 运算

随后对置信度最大的一个或几个,解析出索引与置信度。(详细代码建议阅读up主同济子豪兄的GitHub仓库)

由原预训练权重得出的结果

结果
赫然可见它最有可能是小发夹,实际上它是一个螺旋齿轮,不过ImageNet这个数据集中应该是没有的,所以载入resnet18模型当然也测不出来。

稍稍迁移学习一下

model = torch.load("./checkpoints/mec11点54分.pth") 
# 本来该是 model = models.resnet18(pretrained=False) 的,不过我之前训练过一轮,loss有点大,所以有训练了一轮。
# 载入自己的权重文件使用torch.load()
model.fc = nn.Linear(model.fc.in_features, n_class)
optimizer = optim.Adam(model.parameters())

(其余代码略)
测试集上
似乎效果还是可以,下面我使用这个新生成的权重文件来预测,方法与之前使用resnet18差不多。
结果
emmm,可以说是相当尴尬了,不过应该是索引的问题,因为置信度很高。可能是我建数据集的时候生成的csv文件就是错的,可能是我之前建立数据集的时候重命名那一步出了问题(感觉这里的可能性是最大的),总之,置信度很高,但结果歪了啊。
在这里插入图片描述

问题解决(2023年1月20日)

确实是我的索引出现了问题,最开始生成的索引文件并没有按顺序,打开csv文件后我发现了这一点,应该是由于最初的索引是与训练集与验证集一起生成的,当时的文件夹并没有完成排序,可能与我按帧读取时的视频文件夹排序有关,因为我的视频文件是按照大小顺序排列的,大概是有这方面原因在。所以在生成索引文件时要注意原文件的排序
但我当时并没有立刻发现训练出的权重文件是按什么顺序的,也没有意识到我的索引文件是有问题的,我的第一反应是Linux上文件的排列顺序与Windows上文件的排列顺序是不同的,由此导致我的置信度很高但结果错误。经过查证,虽然Ubuntu与Windows的文件排列顺序确实有一些不同的地方,比如当时从jupyter lab的文件夹里看,英文开头的文件排在后面,但这并不是我错误的原因,况且我对该文件夹进行了 ‘os.dirlist’ ,发现文件目录列表依然是英文排在前面的,看来文件夹中看到英文在后并不是训练的顺序,英文在前这种排列才是训练时采用的。但还是应当注意在不同操作系统之间传递文件时要注意文件的变化,排列顺序只是一部分,还有编码等让人头大的问题。
随后我发现第77位是螺旋齿轮的排序就是我昨天使用tree命令得到的文件夹结构的排序,调整后能得到正确的结果了。在这里插入图片描述
在这里插入图片描述

补充:在训练时我采用的是tensorboard进行可视化。因为连不上wandb。最后的损失大概有0.4。

我在恒源云上进行训练,这几天全代金券白嫖,用的3090,24G显存,1.5元一小时。可以直接打开jupyter lab和tensorboard。也可以自己用Xshell或者是VSCode、Pycharm来连服务器。
也不隐瞒什么,那个恒源云的注册链接是我的邀请链接,从这里进去比在官网进去可以多得10元代金券,一份代金券是可以分多次使用直到用完的。并且只要你不充值一百元以上我都不会有啥邀请奖励。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要实现使用PyTorch进行预训练的图像增强,可以按照以下步骤进行操作: 1. 首先,导入PyTorch和相关的库,如torchvision和torch.nn。 2. 使用torchvision库加载预训练的VGG16模型。你可以使用以下代码来实现: ```python import torchvision.models as models vgg16 = models.vgg16(pretrained=True) ``` 3. 接下来,你可以选择要进行图像增强的方法。常见的图像增强方法包括:调整图像的大小、裁剪图像、旋转图像、改变图像的亮度和对比度等等。你可以根据具体需求选择适合的图像增强方法。 4. 对于每张图像,将其转换为PyTorch的Tensor格式,并通过VGG16模型进行前向传播,得到特征表示。你可以使用以下代码来实现: ```python import torchvision.transforms as transforms from PIL import Image # 定义图像处理的transform transform = transforms.Compose([ transforms.Resize((224, 224)), # 调整图像大小 transforms.ToTensor() # 将图像转换为Tensor ]) # 加载图像 image = Image.open('image.jpg') # 对图像进行处理 image = transform(image) # 添加一个维度作为batch维度 image = image.unsqueeze(0) # 将图像输入VGG16模型,得到特征表示 features = vgg16(image) ``` 5. 最后,你可以根据需要使用特征表示进行后续处理,比如分类、目标检测等。 以上就是使用PyTorch实现VGG16预训练模型进行图像增强的一般步骤。你可以根据具体需求进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【使用Pytorch实现VGG16网络模型】](https://blog.csdn.net/vcsir/article/details/126073144)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pytorch实战7:手把手教你基于pytorch实现VGG16](https://blog.csdn.net/weixin_46676835/article/details/129582927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早上真好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值