日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Pytorch神经网络实战案例】23 使用ImagNet的预训练模型识别图片内容

發布時間:2024/7/5 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch神经网络实战案例】23 使用ImagNet的预训练模型识别图片内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?1 案例基本工具概述

1.1 數據集簡介

Imagenet數據集共有1000個類別,表明該數據集上的預訓練模型最多可以輸出1000種不同的分類結果。

  • Imagenet數據集是目前深度學習圖像領域應用得非常多的一個領域,關于圖像分類、定位、檢測等研究工作大多基于此數據集展開。
  • Imagenet數據集文檔詳細,有專門的團隊維護,使用非常方便,在計算機視覺領域研究論文中應用非常廣,幾乎成為了目前深度學習圖像領域算法性能檢驗的“標準”數據集。
  • Imagenet數據集有1400多萬幅圖片,涵蓋2萬多個類別,其中有超過百萬的圖片有明確的類別標注和圖像中物體位置的標注。

1.2?預訓練模型

?PyTorch中提供了許多在可以被直接加載到模型中并進行器的eNet數據集上訓練好的模型,這些模型叫作預訓練模型預測。

1.2.1?預訓練模型簡介

預訓練模型都存放在PyTorch的torchvision庫中。torchvision庫是非常強大的PyTorch視覺處理庫,包括分類、目標檢測、語義分割等多種計算機視覺任務的預訓練模型,還包括圖片處理、錨點計算等很多基礎工具。

1.2.2 預訓練模型簡介

2 代碼實戰

2.1 案例概述

實例描述,將ImageNet數據集上的預訓練模型ResNet18加抗到內存,并使用該模型對圖片進行分類預測。

2.2 代碼實現:下載并加載預訓練模型-----ResNetModel.py(第1部分)

from PIL import Image import matplotlib.pyplot as plt import json import numpy as np import torch import torch.nn.functional as F from torchvision import models,transforms # 引入torchvision庫 import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'# 1.1 下載并加載預訓練模型:引入基礎庫,并使用torchvision庫中的API下載模型。 # Tip:本例使用的中文標簽總類別為1001類,索引值為0的類為None,代表未知分類;英文標簽總類注意別為1000類,沒有None類。 # 因為PyTorch中的模型是在英文標簽中訓練的,所以在讀取中文標簽時,還需要將索引值加1 model = models.resnet18(pretrained=True) # True代表要下載模型 ,返回一個具有18層的ResNet模型 model = model.eval()

2.3 代碼實現:加載標簽并對輸入數據進行預處理-----ResNetModel.py(第2部分)

# 1.2 加載標簽并對輸入數據進行預處理 labels_path = './models_2/code_01/imagenet_class_index.json' # 處理英文標簽 with open(labels_path) as json_data:idx_to_labels = json.load(json_data)def getone(onestr):return onestr.replace(',','') with open('models_2/code_01/中文標簽.csv','r+') as f:zh_labels = list(map(getone,list(f)))print(len(zh_labels),type(zh_labels),zh_labels[:5]) # 顯示輸出中文標簽transform = transforms.Compose([transforms.Resize(256), # 將輸入圖像的尺寸修改為256×256transforms.CenterCrop(224), # 沿中心裁剪得224×224transforms.ToTensor(),transforms.Normalize( # 圖片歸一化參數:對圖片按照指定的均值與方差進行歸一化處理,必須要與模型實際訓練的預處理方式一樣。mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])] )

2.4 使用模型進行預測

2.4.1 代碼操作概述

打開一個圖片文件,并將其輸入模型進行預測,同時輸出預測結果。

2.4.2 代碼實現:使用模型進行預測 -----ResNetModel.py(第3部分)

# 1.3 使用模型進行預測 # -------start-------- 將四通道中代表透明通道的維度A去掉,變為4通道的圖片 def preimg(img): # 圖片預處理函數:if img.mode == 'RGBA': # 實現兼容RGBA格式的圖片信息ch = 4print('ch',ch)a = np.asarray(img)[:,:,:3]img = Image.fromarray(a)return imgim = preimg(Image.open('models_2/code_01/book.png')) # 載入圖片 transforms_img = transform(im) # 調整圖片大小 inputimg = transforms_img.unsqueeze(0) # 增加批次維度 # -------end-------- 將四通道中代表透明通道的維度A去掉,變為4通道的圖片output = model(inputimg) # 輸入模型 output = F.softmax(output,dim=1) # 獲取結果# 從預測結果中取前3名 prediction_score , pred_label_idx = torch.topk(output,3) prediction_score = prediction_score.detach().numpy()[0] # 獲取結果概率 pred_label_idx = pred_label_idx.detach().numpy()[0] # 獲得結果ID predicted_label = idx_to_labels[str(pred_label_idx[0])][1]#取出標簽名稱 predicted_label_zh = zh_labels[pred_label_idx[0] + 1 ] #取出中文標簽名稱 print(' 預測結果:', predicted_label,predicted_label_zh,'預測分數:', prediction_score[0])

2.5 預測結果可視化

2.5.1 可視化代碼概述

將預測結果以圖的方式顯示出來。

2.5.2 代碼實戰:預測結果可視化-----ResNetModel.py(第4部分)

# 1.4 預測結果可視化 #可視化處理,創建一個1行2列的子圖 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 8)) fig.sca(ax1) #設置第一個軸是ax1 ax1.imshow(im) #第一個子圖顯示原始要預測的圖片 #設置第二個子圖為預測的結果,按概率取前3名 barlist = ax2.bar(range(3), [i for i in prediction_score]) barlist[0].set_color('g') #顏色設置為綠色 #預測結果前3名的柱狀圖 plt.sca(ax2) plt.ylim([0, 1.1]) #豎直顯示Top3的標簽 plt.xticks(range(3), [idx_to_labels[str(i)][1][:15] for i in pred_label_idx ], rotation='vertical') fig.subplots_adjust(bottom=0.2) #調整第二個子圖的位置 plt.show() #顯示圖像

?結果輸出:

3? 代碼總覽ResNetModel.py

from PIL import Image import matplotlib.pyplot as plt import json import numpy as np import torch import torch.nn.functional as F from torchvision import models,transforms # 引入torchvision庫 import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'# 1.1 下載并加載預訓練模型:引入基礎庫,并使用torchvision庫中的API下載模型。 # Tip:本例使用的中文標簽總類別為1001類,索引值為0的類為None,代表未知分類;英文標簽總類注意別為1000類,沒有None類。 # 因為PyTorch中的模型是在英文標簽中訓練的,所以在讀取中文標簽時,還需要將索引值加1 model = models.resnet18(pretrained=True) # True代表要下載模型 ,返回一個具有18層的ResNet模型 model = model.eval()# 1.2 還在標簽并對輸入數據進行預處理 labels_path = './models_2/code_01/imagenet_class_index.json' # 處理英文標簽 with open(labels_path) as json_data:idx_to_labels = json.load(json_data)def getone(onestr):return onestr.replace(',','') with open('models_2/code_01/中文標簽.csv','r+') as f:zh_labels = list(map(getone,list(f)))print(len(zh_labels),type(zh_labels),zh_labels[:5]) # 顯示輸出中文標簽transform = transforms.Compose([transforms.Resize(256), # 將輸入圖像的尺寸修改為256×256transforms.CenterCrop(224), # 沿中心裁剪得224×224transforms.ToTensor(),transforms.Normalize( # 圖片歸一化參數:對圖片按照指定的均值與方差進行歸一化處理,必須要與模型實際訓練的預處理方式一樣。mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])] )# 1.3 使用模型進行預測 # -------start-------- 將四通道中代表透明通道的維度A去掉,變為4通道的圖片 def preimg(img): # 圖片預處理函數:if img.mode == 'RGBA': # 實現兼容RGBA格式的圖片信息ch = 4print('ch',ch)a = np.asarray(img)[:,:,:3]img = Image.fromarray(a)return imgim = preimg(Image.open('models_2/code_01/book.png')) # 載入圖片 transforms_img = transform(im) # 調整圖片大小 inputimg = transforms_img.unsqueeze(0) # 增加批次維度 # -------end-------- 將四通道中代表透明通道的維度A去掉,變為4通道的圖片output = model(inputimg) # 輸入模型 output = F.softmax(output,dim=1) # 獲取結果# 從預測結果中取前3名 prediction_score , pred_label_idx = torch.topk(output,3) prediction_score = prediction_score.detach().numpy()[0] # 獲取結果概率 pred_label_idx = pred_label_idx.detach().numpy()[0] # 獲得結果ID predicted_label = idx_to_labels[str(pred_label_idx[0])][1]#取出標簽名稱 predicted_label_zh = zh_labels[pred_label_idx[0] + 1 ] #取出中文標簽名稱 print(' 預測結果:', predicted_label,predicted_label_zh,'預測分數:', prediction_score[0])# 1.4 預測結果可視化 #可視化處理,創建一個1行2列的子圖 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 8)) fig.sca(ax1) #設置第一個軸是ax1 ax1.imshow(im) #第一個子圖顯示原始要預測的圖片 #設置第二個子圖為預測的結果,按概率取前3名 barlist = ax2.bar(range(3), [i for i in prediction_score]) barlist[0].set_color('g') #顏色設置為綠色 #預測結果前3名的柱狀圖 plt.sca(ax2) plt.ylim([0, 1.1]) #豎直顯示Top3的標簽 plt.xticks(range(3), [idx_to_labels[str(i)][1][:15] for i in pred_label_idx ], rotation='vertical') fig.subplots_adjust(bottom=0.2) #調整第二個子圖的位置 plt.show() #顯示圖像

總結

以上是生活随笔為你收集整理的【Pytorch神经网络实战案例】23 使用ImagNet的预训练模型识别图片内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。