搞清楚這個老六的真面目!逐層‘剝開’人工智慧中的卷積神經網路(CNN)

果冻人工智能發表於2024-10-25

第三章:超越基礎——影像中的特徵檢測

上一篇《揭開計算機視覺的神秘面紗,原來機器是這樣“看圖”的!》

本篇序言:上一篇我們實現並訓練了一個神經網路,成功讓計算機“看懂”了影像。可以說,我們已經一隻腳跨進了AI研發的大門。不過,雖然我們邁入了AI這個神秘的領域,實際上,我們還只是站在門檻邊緣。這裡面有太多複雜的東西,連2024年AI領域的諾貝爾人工智慧獎得主都無法完全搞明白,因為神經網路實在太複雜了,一個人的能力根本無法解析它所學到的知識。今天這一篇,大家只需要記住兩個關鍵概念:“卷積”和“池化”。“卷積”是神經網路自己用來從圖片中抽取關鍵資訊的一種方法,而“池化”則是人類為了減小計算量和降低硬體負擔,專門設計來進一步縮小“卷積”處理後影像的大小。只要弄懂這兩個概念,後面的一切就會清晰許多。

(點選關注作者,及時獲取人工智慧領域的核心知識更新。本文作者擁有長達8年的人工智慧實際經驗,能為您帶來平時學不到的獨特知識。)

在上一篇中,我們透過建立一個簡單的神經網路,利用Fashion MNIST資料集的輸入畫素將影像與10個標籤匹配,每個標籤代表一種型別(或類別)的衣物。雖然 我們建立的網路在識別衣物型別方面做得不錯,但還是有一個明顯的不足。

我們的神經網路是在一些小的單色影像上進行訓練的,每張影像中只包含一件衣物,並且那件衣物都位於影像中心。如果要進一步提升模型的能力,我們需要讓它學會檢測影像中的特徵。比如,不再只是看影像中的原始畫素,而是想辦法把影像分解成它的基本元素。與其匹配原始畫素,匹配這些元素會幫助我們更有效地識別影像中的內容。

回想一下我們在上一篇用到的Fashion MNIST資料集——在識別鞋子時,神經網路可能是因為看到影像底部聚集的許多深色畫素,才判斷那是鞋底的。但是,如果鞋子不再居中,或沒有填滿整個畫面,這種邏輯就不適用了。

其中一種用來檢測影像特徵的方法,源自攝影和影像處理。如果你曾用過Photoshop或GIMP這樣的工具來銳化圖片,你實際上是在使用一種對影像畫素進行操作的數學濾波器。這種濾波器的另一個叫法就是“卷積”,而當你將這些卷積應用於神經網路時,就得到了大名鼎鼎的卷積神經網路(CNN)了。

在這一篇中,我們將學習如何使用卷積來檢測影像中的特徵,然後更深入地研究如何基於這些特徵進行影像分類。我們還會探索透過影像增強來提取更多特徵,使用遷移學習借鑑其他人訓練好的特徵,最後簡單看看如何用“dropout”技術來最佳化你的模型。

卷積

簡單來說,卷積就是一個權重濾波器,它會把一個畫素與其周圍的畫素進行運算,得到一個新的畫素值。舉個例子,回想Fashion MNIST中的那張踝靴影像,看看影像中畫素的數值變化,如圖3-1所示。

                                  圖3-1:帶卷積處理的踝靴影像

假設我們現在看的是一個影像中間的畫素,它的值是192(記住Fashion MNIST的資料集是單色影像,畫素值範圍從0到255)。中間這個畫素上面的畫素值是0,左上角的是64,依此類推。

接著,我們定義一個3×3的濾波器,如下面展示的那樣,濾波器的每個格子都有一個對應的值。我們要做的就是,把選中的畫素和它周圍的畫素值分別乘以對應的濾波器值,然後把結果加起來,這個新的總和就是我們要替換的畫素值。這個步驟會重複到影像中的每一個畫素。

比如,當前畫素的值是192,用濾波器處理後,新的畫素值會是:
new_val = (-1 * 0) + (0 * 64) + (-2 * 128) +
(.5 * 48) + (4.5 * 192) + (-1.5 * 144) +
(1.5 * 142) + (2 * 226) + (-3 * 168)
結果是577,這就是新的畫素值。用這個方法處理整張影像後,我們就得到了一個經過濾波器處理的影像。

接下來我們看看如果對一個更復雜的影像應用這個濾波器會有什麼效果,比如SciPy自帶的那個兩個人爬樓梯的512×512的灰度圖。用左邊負值、右邊正值的濾波器處理後,影像中大部分資訊都會被移除,只有垂直線條保留下來。你可以看到圖3-2的結果。


圖3-2:使用濾波器提取垂直線條

類似地,如果稍微調整濾波器,能突出影像中的水平線條,如圖3-3所示。

                                          圖3-3:使用濾波器提取水平線條

這些例子告訴我們,使用濾波器不僅能提取出影像中的特徵,還能減少影像中的冗餘資訊。隨著時間的推移,我們可以學習到更適合匹配輸入輸出的濾波器。

池化(Pooling)

池化就是在保留影像內容的語義資訊的同時,去掉一些畫素。這個過程更容易透過視覺示例來理解。圖3-4展示了最大池化的概念。


圖3-4:展示最大池化

在這個例子裡,左邊的框代表單色影像中的畫素。我們把這些畫素分成2×2的小塊,也就是把16個畫素分成了四個2×2的小陣列,稱為“池”。然後,我們從每個小塊裡挑出最大值,再把這些最大值組合成一張新的影像。這樣,左邊的畫素數量就減少了75%(從16個畫素減少到4個),新影像由每個池的最大值構成。

圖3-5展示了在應用最大池化後,圖3-2中的Ascent影像,垂直線條得到了增強。


圖3-5:經過垂直濾波和最大池化處理的Ascent影像

注意,經過濾波器處理的特徵不僅得到了保留,而且還得到了進一步增強。另外,影像的尺寸從512×512縮小到了256×256,只有原來的四分之一大小。

此外,還有其他的池化方法,比如最小池化,它選擇每個池中的最小畫素值;還有平均池化,它取每個池的畫素平均值。

本篇最講了機器學習中的兩個重要的概念:卷積和池化,下一篇我們將實現一個卷積神經網路以及探索它各層的功能。

相關文章