亚洲av成人无码网天堂,少妇白浆高潮无码免费区,小污女小欲女导航,色欲久久综合亚洲精品蜜桃,亚洲,欧美,日韩,综合

訂閱
糾錯
加入自媒體

如何構建一個 CNN 模型,以從圖像中對幼苗的種類進行分類?

介紹本文將學習和構建一個 CNN 模型,以從圖像中對幼苗的種類進行分類。該數據集有12組圖像,我們的最終目的是從圖像中對植物物種進行分類。

我們將執(zhí)行多個步驟,例如導入庫和模塊、讀取圖像并調整它們的大小、圖像清理、圖像預處理、模型構建、模型訓練、減少過度擬合,最后對測試數據集進行預測。

目錄

問題陳述

導入庫

獲取數據并調整圖像大小

清理圖像并去除背景

將標簽轉換為數字

定義我們的模型并拆分數據集

防止過擬合

定義卷積神經網絡

將 CNN 擬合到數據上

混淆矩陣

獲得預測

問題陳述

該數據集由奧爾胡斯大學信號處理小組提供。這是一個典型的圖像識別問題陳述。我們提供了一個圖像數據集,其中包含處于不同生長階段的植物照片。每張照片都有其唯一的 ID 和文件名。

該數據集包含來自 12 個植物物種的 960 種獨特植物。最終目標是構建一個能夠從照片中確定植物種類的分類器。

物種列表

Black-grass

Charlock

Cleavers

Common Chickweed

Common wheat

Fat Hen

Loose Silky-bent

Maize

Scentless Mayweed

Shepherds Purse

Small-flowered Cranesbill

Sugar beet

導入庫

首先導入所有必要的庫以供我們進一步分析。我們將使用 NumPy、Pandas、matplotlib、OpenCV、Keras 和 sci-kit-learn。

檢查以下命令以導入所有必需的庫

import numpy as np # MATRIX OPERATIONS

import pandas as pd # EFFICIENT DATA STRUCTURES
import matplotlib.pyplot as plt # GRAPHING AND VISUALIZATIONS
import math # MATHEMATICAL OPERATIONS
import cv2 # IMAGE PROCESSING - OPENCV
from glob import glob # FILE OPERATIONS
import itertools
# KERAS AND SKLEARN MODULES
from keras.utils import np_utils
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers import BatchNormalization
from keras.callbacks import ModelCheckpoint,ReduceLROnPlateau,CSVLogger
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
# GLOBAL VARIABLES
scale = 70
seed = 7

獲取數據并調整圖像大小

為了訓練我們的模型,我們需要先讀取數據。我們的數據集有不同大小的圖像,因此我們將調整圖像的大小。讀取數據并調整其大小只需一步即可完成。查看以下代碼以獲取有關如何執(zhí)行不同操作的完整信息。path_to_images = 'plant-seedlings-classification/train/png'
images = glob(path_to_images)
trainingset = []
traininglabels = []
num = len(images)
count = 1
#READING IMAGES AND RESIZING THEM
for i in images:
   print(str(count)+'/'+str(num),end='r')
   trainingset.append(cv2.resize(cv2.imread(i),(scale,scale)))
   traininglabels.append(i.split('/')[-2])
   count=count+1
trainingset = np.asarray(trainingset)
traininglabels = pd.DataFrame(traininglabels)

清理圖像并去除背景

這是執(zhí)行清理的一個非常重要的步驟。清理圖像是一項艱巨的任務。我們將執(zhí)行以下步驟以清理圖像

將 RGB 圖像轉換為 HSV

為了去除噪聲,我們將不得不模糊圖像

為了刪除背景,我們將不得不創(chuàng)建一個遮罩。new_train = []
sets = []; getEx = True
for i in trainingset:
   blurr = cv2.GaussianBlur(i,(5,5),0)
   hsv = cv2.cvtColor(blurr,cv2.COLOR_BGR2HSV)
   #GREEN PARAMETERS
   lower = (25,40,50)
   upper = (75,255,255)
   mask = cv2.inRange(hsv,lower,upper)
   struc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))
   mask = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,struc)
   boolean = mask>0
   new = np.zeros_like(i,np.uint8)
   new[boolean] = i[boolean]
   new_train.append(new)
   if getEx:
       plt.subplot(2,3,1);plt.imshow(i) # ORIGINAL
       plt.subplot(2,3,2);plt.imshow(blurr) # BLURRED
       plt.subplot(2,3,3);plt.imshow(hsv) # HSV CONVERTED
       plt.subplot(2,3,4);plt.imshow(mask) # MASKED
       plt.subplot(2,3,5);plt.imshow(boolean) # BOOLEAN MASKED
       plt.subplot(2,3,6);plt.imshow(new) # NEW PROCESSED IMAGE
       plt.show()
       getEx = False

1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

    掃碼關注公眾號
    OFweek人工智能網
    獲取更多精彩內容
    文章糾錯
    x
    *文字標題:
    *糾錯內容:
    聯系郵箱:
    *驗 證 碼:

    粵公網安備 44030502002758號