如何通過人工神經網絡實現圖像識別?

Siwindy

首先,我們需要把圖像轉換成神經網絡能夠接受的格式(

表示,representation)。然後,我們設計一個神經網絡模型(model)。之後我們在一大堆圖像上訓練(train)上一步設計的神經網絡。最後我們用訓練好的網絡來識別圖像。

表示

圖像如何表示?假設我們有一個圖像,該圖像的大小是646x454。那麼,我們可以用一個[646, 454]的矩陣來表示這個圖像,矩陣中的每個元素對應一個像素。這是一個非常簡單直接的做法。假設我們用1表示對應像素為黑色,用0表示對應像素為白色,那麼我們的矩陣就由大量1和0組成。大概就是這副樣子:

646x454太大了,畫不下,上面是一個4x4的示意圖,你可以把它想象成是由646x454個元素組成的巨大矩陣。

顯然,這個矩陣只能表示真黑白圖像。如果我們要表示灰度圖像,那麼我們可以用一個數字表示像素的亮度(intensity)。比如,下面這個矩陣(同樣需要你發揮想象力,將它想象成一個646x454的巨大矩陣)。

那麼,如果是彩圖怎麼辦?很簡單,再增加一個維度。用[646, 454, 3]表示。(數字3是因為一般我們用RGB系統表示色彩,比如,[1.0, 0.0, 0.0]表示紅色)。

所以,某種意義上說,灰度圖像(也就是我們平常說的黑白照片)才是真2D圖像。;-)

想一想,真3D圖像該怎麼表示?(想到了請留言討論。)

模型

將圖像轉換為矩陣或張量後,我們就可以讓神經網絡學習這些矩陣或張量了。最早的神經網絡就是這麼幹的。當然,這麼幹有一個缺點,就是隻能處理尺寸非常小的圖像,否則算力負擔太重。

所以,後來人們提出了卷積網絡(CNN),大大提升了處理圖像的性能。現在CNN是圖像識別的主流。

(圖為Yann LeCun1994年提出的LeNet5,是最早出現的CNN之一。)

CNN的基本思路很簡單,圖像中有很多空間關係,比如線條什麼的。直接學習像素,不好好利用這些空間關係,太傻了。

從上圖我們可以看到,CNN不同層學習不同層次的空間關係(特徵),從細小的局部的邊緣,逐漸到高層的抽象特徵。

訓練

簡單來說,訓練過程分為以下幾步:

  1. 蒐集大量圖像
  2. 如果圖像不夠,我們通過數據增強手段生成一些新圖像,比如平移幾個像素,縮放一下圖像,這樣可以避免模型過擬合
  3. 將圖像分為訓練集和測試集(比如,按80%和20%的比例切分)
  4. 在訓練集上訓練
  5. 用測試集評估模型的表現

訓練成功後,就可以將新圖像傳給神經網絡,讓神經網絡自動識別。


分享到:


相關文章: