您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Pytorch中如何實現病蟲害圖像分類,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
PyTorch是一個開源的Python機器學習庫,基于Torch,用于自然語言處理等應用程序。
2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一個基于Python的可續計算包,提供兩個高級功能:
1、具有強大的GPU加速的張量計算(如NumPy)。
2、包含自動求導系統的深度神經網絡。
兩者之間區別很多,在本篇博客中只簡單描述一部分。以圖片的形式展現。
前者為機器學習的過程。
后者為深度學習的過程。
本次實驗使用的是coco數據集中的植物病蟲害數據集。分為訓練文件Traindata和測試文件TestData.,
TrainData有9種分類,每一種分類有100張圖片。
TestData有9中分類,每一種分類有10張圖片。
在我下一篇博客中將數據集開源。
下面是我的數據集截圖:
import torch from torch.utils.data import Dataset, DataLoader import numpy as np import matplotlib import os import cv2 from PIL import Image import torchvision.transforms as transforms import torch.optim as optim from torch.autograd import Variable import torch.nn as nn import torch.nn.functional as F from Test.CNN import Net import json from Test.train_data import Mydataset,pad_image
# 構建神經網絡 class Net(nn.Module):#定義網絡模塊 def __init__(self): super(Net, self).__init__() # 卷積,該圖片有3層,6個特征,長寬均為5*5的像素點,每隔1步跳一下 self.conv1 = nn.Conv2d(3, 6, 5) #//(conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1)) self.pool = nn.MaxPool2d(2, 2)#最大池化 #//(pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) self.conv2 = nn.Conv2d(6, 16, 5)#卷積 #//(conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1)) self.fc1 = nn.Linear(16*77*77, 120)#全連接層,圖片的維度為16, #(fc1): Linear(in_features=94864, out_features=120, bias=True) self.fc2 = nn.Linear(120, 84)#全連接層,輸入120個特征輸出84個特征 self.fc3 = nn.Linear(84, 7)#全連接層,輸入84個特征輸出7個特征 def forward(self, x): print("x.shape1: ", x.shape) x = self.pool(F.relu(self.conv1(x))) print("x.shape2: ", x.shape) x = self.pool(F.relu(self.conv2(x))) print("x.shape3: ", x.shape) x = x.view(-1, 16*77*77) print("x.shape4: ", x.shape) x = F.relu(self.fc1(x)) print("x.shape5: ", x.shape) x = F.relu(self.fc2(x)) print("x.shape6: ", x.shape) x = self.fc3(x) print("x.shape7: ", x.shape) return x
img_path = "TestData/test_data/1/Apple2 (1).jpg" #使用相對路徑 image = Image.open(img_path).convert('RGB') image_pad = pad_image(image, (320, 320)) input = transform(image_pad).to(device).unsqueeze(0) output = F.softmax(net(input), 1) _, predicted = torch.max(output, 1) score = float(output[0][predicted]*100) print(class_map[predicted], " ", str(score)+" %") plt.imshow(image_pad) # 顯示圖片
以上就是Pytorch中如何實現病蟲害圖像分類,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。