【貓狗數據集】對一張張圖像進行預測(而不是測試集)


數據集下載地址:

鏈接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw
提取碼:2xq4

創建數據集:https://www.cnblogs.com/xiximayou/p/12398285.html

讀取數據集:https://www.cnblogs.com/xiximayou/p/12422827.html

進行訓練:https://www.cnblogs.com/xiximayou/p/12448300.html

保存模型並繼續進行訓練:https://www.cnblogs.com/xiximayou/p/12452624.html

加載保存的模型並測試:https://www.cnblogs.com/xiximayou/p/12459499.html

划分驗證集並邊訓練邊驗證:https://www.cnblogs.com/xiximayou/p/12464738.html

使用學習率衰減策略並邊訓練邊測試:https://www.cnblogs.com/xiximayou/p/12468010.html

利用tensorboard可視化訓練和測試過程:https://www.cnblogs.com/xiximayou/p/12482573.html

從命令行接收參數:https://www.cnblogs.com/xiximayou/p/12488662.html

使用top1和top5准確率來衡量模型:https://www.cnblogs.com/xiximayou/p/12489069.html

使用預訓練的resnet18模型:https://www.cnblogs.com/xiximayou/p/12504579.html

計算數據集的平均值和方差:https://www.cnblogs.com/xiximayou/p/12507149.html

讀取數據集的第二種方式:https://www.cnblogs.com/xiximayou/p/12516735.html

epoch、batchsize、step之間的關系:https://www.cnblogs.com/xiximayou/p/12405485.html

 

首先我們上傳一些圖片到image文件夾中:

然后我們畫出這些圖片看看是什么樣子:

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。

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()

結果:

 

下一節,可視化相應的特征圖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM