前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【猫狗数据集】对一张张图像进行预测(而不是测试集)

【猫狗数据集】对一张张图像进行预测(而不是测试集)

作者头像
西西嘛呦
发布2020-08-26 10:26:01
发布2020-08-26 10:26:01
77900
代码可运行
举报
运行总次数:0
代码可运行

数据集下载地址:

链接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw

提取码:2xq4

创建数据集:https://cloud.tencent.com/developer/article/1686281

读取数据集:https://cloud.tencent.com/developer/article/1686162

进行训练:https://cloud.tencent.com/developer/article/1686203

保存模型并继续进行训练:https://cloud.tencent.com/developer/article/1686210

加载保存的模型并测试:https://cloud.tencent.com/developer/article/1686223

划分验证集并边训练边验证:https://cloud.tencent.com/developer/article/1686224

使用学习率衰减策略并边训练边测试:https://cloud.tencent.com/developer/article/1686225

利用tensorboard可视化训练和测试过程:https://cloud.tencent.com/developer/article/1686238

从命令行接收参数:https://cloud.tencent.com/developer/article/1686240

使用top1和top5准确率来衡量模型:https://cloud.tencent.com/developer/article/1686244

使用预训练的resnet18模型:https://cloud.tencent.com/developer/article/1686248

计算数据集的平均值和方差:https://cloud.tencent.com/developer/article/1686271

读取数据集的第二种方式:https://cloud.tencent.com/developer/article/1686278

epoch、batchsize、step之间的关系:https://cloud.tencent.com/developer/article/1686123

首先我们上传一些图片到image文件夹中:

然后我们画出这些图片看看是什么样子:

代码语言:javascript
代码运行次数:0
运行
复制
import cv2
import matplotlib.pyplot as plt
import glob

# 使用matplotlib展示多张图片
def matplotlib_multi_pic1():
  i=0
  for img in glob.glob('/content/drive/My Drive/colab notebooks/image/*.jpg'):
    img_name=img.split("/")[-1]
    img = cv2.imread(img)
    title=img_name
    #行,列,索引
    plt.subplot(3,3,i+1)
    plt.imshow(img)
    plt.title(title,fontsize=8)
    plt.xticks([])
    plt.yticks([])
    i+=1
  plt.show()
matplotlib_multi_pic1()

接着在test文件夹中新建一个test_from_image.py。

代码语言:javascript
代码运行次数:0
运行
复制
import torchvision
import sys
import torch
import torch.nn as nn
from PIL import Image
sys.path.append("/content/drive/My Drive/colab notebooks")
import glob
import numpy as np
import torchvision.transforms as transforms

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model=torchvision.models.resnet18(pretrained=False)
model.fc = nn.Linear(model.fc.in_features,2,bias=False)
model.to(device)
model.eval()
save_path="/content/drive/My Drive/colab notebooks/output/resnet18_best.t7" 
checkpoint = torch.load(save_path)
model.load_state_dict(checkpoint['model'])
print("当前模型准确率为:",checkpoint["epoch_acc"])
images_path="/content/drive/My Drive/colab notebooks/image/"
transform = transforms.Compose([transforms.Resize((224,224))])
def predict():
  true_labels=[]
  output_labels=[]
  for image in glob.glob(images_path+"/*.jpg"):
    print(image)
    if "cat" in image.split("/")[-1]:
      tmp=0
    else:
      tmp=1
    true_labels.append(tmp)
    image=Image.open(image)
    image=image.resize((224,224))
    tensor=torch.from_numpy(np.asarray(image)).permute(2,0,1).float()/255.0
    print(tensor.shape)
    tensor=tensor.reshape((1,3,224,224))
    tensor=tensor.to(device)
    #print(tensor.shape)
    output=model(tensor)
    print(output)
    _, pred = torch.max(output.data,1)
    output_labels.append(pred.item())
  return true_labels,output_labels

true_labels,output_labels=predict()
print("正确的标签是:")
print(true_labels)
print("预测的标签是:")
print(output_labels)

说明:这里需要注意的地方有:

  • 图像要调整到网络输入一致的大小,即224×224
  • 将【高,宽,通道】要转换成【通道,高,宽】的格式
  • 输入的是【batchsize,C,H,W】,因此我们要增加一个batchsize维度
  • 之前训练好的模型是使用cuda(),因此要将模型和数据放在GPU中
  • 一定要转换状态,即model.eval()

结果:

下一节,可视化相应的特征图。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档