如何創(chuàng)建一個能夠區(qū)分或識別圖像的系統(tǒng)?
介紹你是否曾經偶然發(fā)現一個數據集或圖像,并想知道是否可以創(chuàng)建一個能夠區(qū)分或識別圖像的系統(tǒng)?圖像分類的概念將幫助我們解決這個問題。圖像分類是計算機視覺最熱門的應用之一,是任何想在這個領域工作的人都必須知道的概念。
在本文中,我們將看到一個非常簡單但使用頻率很高的應用程序,那就是圖像分類。我們不僅將看到如何使一個簡單和有效的模型分類數據,而且還將學習如何實現一個預先訓練的模型,并比較兩者的性能。在本文結束時,你將能夠找到自己的數據集并輕松實現圖像分類。先決條件:Python編程Keras及其模塊基本了解圖像分類卷積神經網絡及其實現遷移學習的基本認識聽起來有趣嗎?準備創(chuàng)建你自己的圖像分類器吧!目錄圖像分類理解問題陳述設置圖像數據讓我們構建我們的圖像分類模型數據預處理數據擴充模型定義和訓練評估結果遷移學習的藝術導入基礎MobileNetV2模型微調訓練評估結果下一步是什么?什么是圖像分類?圖像分類是分配輸入圖像(一組固定類別中的一個標簽)的任務。這是計算機視覺的核心問題之一,盡管它很簡單,卻有各種各樣的實際應用。讓我們舉個例子來更好地理解。當我們進行圖像分類時,我們的系統(tǒng)將接收圖像作為輸入,例如,一只貓,F在,系統(tǒng)將已知一組類別,它的目標是為圖像分配一個類別。這個問題似乎很簡單,但對于計算機來說卻是一個很難解決的問題。你可能知道,電腦看到的是一組數字,而不是我們看到的貓的圖像。圖像是由0到255的整數組成的三維數組,大小為寬x高x 3。3代表紅色、綠色、藍色三個顏色通道。那么我們的系統(tǒng)如何學習識別這幅圖像呢?通過卷積神經網絡。卷積神經網絡(CNN)是深度學習神經網絡的一種,是圖像識別領域的巨大突破。到目前為止,你可能已經對CNN有了一個基本的了解,我們知道CNN由卷積層、Relu層、池化層和全連接層組成。
要閱讀關于圖像分類和CNN的詳細信息,你可以查看以下資源:https://www.analyticsvidhya.com/blog/2020/02/learn-image-classification-cnn-convolutional-neural-networks-3-datasets/
https://www.analyticsvidhya.com/blog/2019/01/build-image-classification-model-10-minutes/
現在我們已經理解了這些概念,讓我們深入了解如何構建和實現圖像分類模型。理解問題陳述考慮下面的圖像:
一個精通體育運動的人可以認出橄欖球的形象。圖像的不同方面可以幫助你識別它是橄欖球,它可以是球的形狀或球員的服裝。但你有沒有注意到,這張照片很可能是一個足球形象?讓我們考慮另一張圖片:
你認為這個圖像代表什么?很難猜對吧?對于沒有受過訓練的人來說,這幅圖像很容易被誤認為是足球,但實際上,這是橄欖球的圖像,因為我們可以看到后面的球門柱不是網,而且尺寸更大,F在的問題是,我們能否建立一個能夠正確分類圖像的系統(tǒng)。這就是我們項目背后的想法,我們想要建立一個系統(tǒng)能夠識別圖像中所代表的運動。這里分為橄欖球和足球兩大類。問題陳述可能有點棘手,因為體育運動有很多共同的方面,盡管如此,我們將學習如何解決問題,并創(chuàng)建一個良好的表現系統(tǒng)。設置我們的圖像數據由于我們正在處理一個圖像分類問題,我使用了兩個最大的圖像數據源,即ImageNet和谷歌OpenImages。我實現了兩個python腳本,我們可以輕松地下載圖像。一共下載了3058張圖片,分為train和test兩部分。我用訓練文件夾有2448張圖片,測試文件夾有610張圖片,進行了80-20的分割。橄欖球和足球兩個類別各有1224張圖片。我們的數據結構如下:輸入 3058橄欖球 - 310足球 - 310橄欖球 - 1224足球 - 1224訓練 - 2048測試 - 610我們來建立我們的圖像分類模型!步驟1: 導入所需的庫這里,我們將使用Keras庫來創(chuàng)建模型并對其進行訓練。我們還使用Matplotlib和Seaborn來可視化我們的數據集,以便更好地理解我們將要處理的圖像。另一個處理圖像數據的重要庫是Opencv。import matplotlib.pyplot as plt
import seaborn as sns
import keras
from keras.models import Sequential
from keras.layers import Dense, Conv2D , MaxPool2D , Flatten , Dropout
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam
from sklearn.metrics import classification_report,confusion_matrix
import tensorflow as tf
import cv2
import os
import numpy as np
步驟2: 加載數據接下來,讓我們定義數據的路徑。讓我們定義一個名為get_data()的函數,它使我們更容易創(chuàng)建我們的訓練和驗證數據集。我們定義了我們將要使用的兩個標簽“Rugby”和“Soccer”。我們使用Opencv imread函數讀取RGB格式的圖像,并將圖像大小調整到我們想要的寬度和高度(在本例中都是224)。labels = ['rugby', 'soccer']
img_size = 224
def get_data(data_dir):
data = []
for label in labels:
path = os.path.join(data_dir, label)
class_num = labels.index(label)
for img in os.listdir(path):
try:
img_arr = cv2.imread(os.path.join(path, img))[...,::-1] #convert BGR to RGB format
resized_arr = cv2.resize(img_arr, (img_size, img_size)) # Reshaping images to preferred size
data.append([resized_arr, class_num])
except Exception as e:
print(e)
return np.array(data)
Now we can easily fetch our train and validation data.
train = get_data('../input/traintestsports/Main/train')
val = get_data('../input/traintestsports/Main/test')
步驟3: 可視化數據讓我們可視化我們的數據,看看我們到底在使用什么。我們使用seaborn來繪制這兩個類中的圖像數量,你可以看到輸出是什么樣的。l = []
for i in train:
if(i[1] == 0):
l.append("rugby")
else
l.append("soccer")
sns.set_style('darkgrid')
sns.countplot(l)
輸出:

請輸入評論內容...
請輸入評論/評論長度6~500個字
最新活動更多
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達AI統(tǒng)治的開始
- 2 北電數智主辦酒仙橋論壇,探索AI產業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀”爆發(fā)至今,五類新物種登上歷史舞臺
- 5 國產智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計算迎來商業(yè)化突破,但落地仍需時間
- 7 東陽光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長空間
- 8 地平線自動駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營收大增主靠小件,虧損繼續(xù)又逢關稅,能否乘機器人東風翻身?