當前位置:
首頁 > 科技 > 如何使用深度神經網路進行圖像分類?其中用到的技術哪些?

如何使用深度神經網路進行圖像分類?其中用到的技術哪些?

GIF/1.7M

原文來源:medium

作者:Abdellatif Abdelfattah

「機器人圈」編譯:嗯~阿童木呀

我們將要構建一個可以用來識別圖像的神經網路,其精確度可達到78.4%,與此同時,我們還將解釋整個過程中使用的技術。

介紹

近期以來,深度學習在各個領域應用廣泛,其取得的最近進展使得諸如圖像和語音識別等任務成為可能,不再遙不可及。

深度學習:機器學習演算法的一個子集,擅長於模式識別,但通常需要大量的數據。

深度學習在識別圖像中的對象方面具有非常優異的表現,因為它是通過3層或更多層人工神經網路實現的,其中每層都負責提取圖像的一個或多個特徵(詳情稍後介紹)。

神經網路:一種與人腦中神經元類似的計算模型。每個神經元接受一個輸入,執行一些操作,然後將輸出傳遞給下面的神經元。

神經網路表徵圖(src)

我們將教計算機識別圖像並將它們分類為以下10種類別中的一個類別:

為了實現這一目的,我們首先需要在計算機能夠識別一個新對象之前教它認識貓,狗和鳥等對象。計算機看到的貓越多,其識別貓的能力就越好。這就是所謂的監督學習。我們可以通過標記圖像來執行此任務,計算機將開始識別貓圖片中出現的模式,而這些模式在其他圖片中是不存在的,而後計算機將開始構建自己的認知。

我們將使用Python和TensorFlow來編寫程序。TensorFlow是一個由Google創建的開源深度學習框架,它可以讓開發者對每個神經元(在TensorFlow中被稱為「節點」)進行細粒度控制(granular control),這樣你就可以調整權重,實現最佳性能。TensorFlow有許多內置的庫(其中很少是可以用於我們的圖像分類任務中的),並有一個令人驚奇的社區,所以你將能夠在其中找到幾乎任何有關深度學習主題的開源實現。

那麼我們就開始行動吧——教計算機進行圖像分類!

用於圖像分類的機器學習

計算機能夠對數字進行計算,但無法以我們的方式來解讀圖像。因此我們必須以某種方式將圖像轉換為計算機能夠理解的數字。

在圖像處理中有兩種常用的方法:

1.使用灰度級(Greyscale):

圖像將被轉換為灰度級(灰色範圍從白色到黑色),計算機將根據顏色的深淺為每個像素分配一個值。所有的數字都將放在一個數組中,然後計算機將在該數組上進行計算。這是使用灰度級後所看到的數字8:

GIF/95K

圖像轉換為數字(src)

然後我們將結果數組輸入到計算機中:

結果數組(src)

2.使用RGB值:

顏色可以表示為RGB值(紅色,綠色和藍色的組合,範圍從0到255)。然後,計算機可以提取每個像素的RGB值,並將結果放在數組中進行解讀。

當計算機對一個新的圖像進行解讀時,它將使用相同的技術把圖像轉換為數組,繼而將數字模式與已知對象進行比較。然後計算機將為每個類分配一個置信度分數。具有最高置信度分數的類通常就是計算機所預測的那一個。

CNN(卷積神經網路)

簡而言之,在人工智慧領域中,用於提高圖像分類精確度的最流行技術之一就是卷積神經網路(簡稱CNN)。

卷積神經網路:一種特殊類型的神經網路,其工作方式與常規神經網路相同,只是開始時具有一個卷積層。

該技術不是將整個圖像作為數字數組,而是將圖像分解成多個圖塊,然後計算機會嘗試預測每個圖塊是什麼。最後,計算機試圖根據所有圖塊的預測結果來分析預測圖片中的對象。這使得計算機能夠並行化操作並檢測對象,而不管其位於圖像中的位置。

數據集

我們決定使用CIFAR-10數據集,該數據集由60,000個尺寸為32 x 32像素的圖像組成。該數據集包含10個相互排斥(不重疊)的類,每個類中含有6,000個圖像。圖像小巧,標記清晰,沒有雜訊,這些優點使得該數據集成為這項任務的理想選擇,而且只需要非常少的預處理就可以了。以下是從數據集中獲取的幾張圖片:

步驟1:預處理

首先,我們需要為數據添加一些變化,因為數據集中的圖像是非常有組織的,並且幾乎不包含任何雜訊。我們將使用名為imgaug的Python庫人為地添加雜訊。接下來我們要對圖像進行隨機組合:

1.圖像的裁剪部分

2.水平翻轉圖像

3.調整色調,對比度和飽和度

經過上述組合操作之後的圖片外觀效果

以下是用於圖像預處理操作的Python代碼:

步驟2:拆分我們的數據集

對於使用整個大型數據集的模型來說,計算其梯度需要花費很長時間。因此,我們將在優化器的每次迭代期間使用一小批圖像。批量大小通常是32或64—我們將使用的是64,因為我們有相當多的圖像。然後將數據集分為含有50,000張圖像的訓練集,以及包含10,000張圖像的測試集。

步驟3:構建一個卷積神經網路

神經網路架構

現在我們已經完成了對數據集的預處理和拆分操作,那麼,接下來我們可以開始實現神經網路。我們將要有3個具有2×2最大池化(max-pooling)的卷積層。

最大池化(max-pooling):一種通過獲取網格的最大像素值來減小圖像尺寸的技術。此外該技術還有助於減少過度擬合,使模型更為通用。以下示例顯示了2 x 2 最大池化的工作原理:

2 x 2最大池化(src)

之後,我們將添加2個完全連接層。由於完全連接層的輸入應該是二維的,卷積層的輸出是四維的,所以我們需要在它們之間有一個扁平層(flattening layer)。

在完全連接層的最末端是一個softmax層。

可是說參數識別是一項非常具有挑戰性的任務,因為我們有如此多的參數需要調整。因此,我們閱讀了大量的資料,並試圖找出一種實現方法。但是,效果並不明顯,因為它似乎需要大量的經驗。所以我們發現了一個由Alex Krizhevsky搭建的架構,他使用這種結構,並贏得了ImageNet LSVRC-2010的冠軍。而相較於他的工作任務,我們的任務就簡單的多了,所以我們只使用3個卷積層,並在每個層之間保持一個梯度。

結果

既然我們已經有一個已訓練的神經網路,那麼我們就可以使用它來進行試驗了!然後,我們讓計算機解讀10,000個未知圖像,其達到的精度為78.4%(7844/10000)。有趣的是,不正確的預測看起來與計算機所認為的非常接近。

錯誤預測的樣本

以右上方的圖片為例,圖片看起來就像一隻坐在卡車上的貓,所以對於計算機來說,將其預測為卡車也是很合理的。

結論

以上就是對使用神經網路進行圖像識別的詳細介紹,總而言之,現如今,我們可以使用TensorFlow構建一個人工卷積神經網路,其識別圖像的精確度為78%。我們要對圖像進行預處理操作從而使其更為通用,然後將數據集拆分成多個批次,最後構建和訓練模型,從而使其能夠識別圖像。

註:點擊GitHub repo查看完整代碼資源。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器人圈 的精彩文章:

對抗樣本到底會不會對無人駕駛目標檢測產生干擾?又有人質疑了!
AI變革傳統行業,為何人工智慧需要找到應用場景?
目標識別很難?對於Google卷積神經網路不過是小case
強化學習的福音!自然語言幫助互動式機器學習演算法提高效率
fastText、TextCNN這有一套NLP文本分類方法庫

TAG:機器人圈 |

您可能感興趣

如何用卷積神經網路構建圖像?
深度神經網路是如何成為圖像大師的?
使用經典模型進行圖像分類
如何通過人工神經網路實現圖像識別?
深度學習不是萬靈藥!神經網路3D重建只是圖像分類
網路攝像機的顯示設置都代表什麼意思?應用在哪些場景?對圖像質量有何影響?
使用生成式對抗網路進行圖像去模糊
如何用 Python 和深度神經網路識別圖像?
用這種方法實現無監督端到端圖像分類!
如何利用深度學習技術處理圖像水印?
神經網路新發現:其實CNN的圖像分類策略遠比我們想像的簡單!
發刊詞:使用神經網路玩轉圖像和自然語言識別
英特爾與諾華合作,用深度神經網路提速藥物圖像分析
從網路設計到實際應用,深度學習圖像超解析度綜述
在玩轉圖像分類器後,他總結了這八個深度學習最佳實踐……
使用機器學習模型快速進行圖像分類識別
如何可視化卷積網路分類圖像時關注的焦點
殘差密集網路:利用所有分層特徵的圖像超解析度網路
如何優化你的圖像分類模型效果?
如何做一個「實用」的圖像數據集