禪與奶罩識別藝術
在昨天的卷積:如何成為一個很厲害的神經網路 - 知乎專欄中,熱心網友提出了這樣的問題:
該文在卷積神經網路的構成上講解的比較直觀,但是沒有深入地探討數學原理。本文將詳細介紹卷積濾波器的具體機理,當然不要擔心數學問題,只要能熟練掌握百以內加減法和九九乘法表就可以。
之前在微博上關於神經網路的探討中,話題走向奇怪地走向了奶子(計劃通り),並且王司圖也做出了召喚柏木由紀的承諾,所以這次就以柏木由紀的照片為例,講解圖像處理的基本法。
01. 暗中觀察
現在我們談的「人工智慧」都是弱人工智慧,更確切地說,還是輔助計算工具。我們不能因為有了神經網路,就像卡茲一樣停止思考。
所以不管藉助神經網路解決任何問題,第一步也是最關鍵的一步,就是了解你的問題本身。反映在具體的應用上,就是要摸清業務背後的邏輯關係,而不是把數據往黑盒裡一扔,開始準備煉丹。如果一遍摸不清,那就再摸一遍。
現在我們要做一個物體識別的程序,上圖中可供識別的物體並不多,唯一涼鞋、一褲頭、一奶罩而已,那就奶罩吧。作為一個入門程序,現在那麼早就處理彩色圖片,是不理智、不合適的。所以我們要進行一些簡化,從皮相中剝離出骨相,把最核心的數學原理公然露出,放置Play。
經過「灰度->閾值」兩步,彩圖變成了黑白圖。接下來我們要從計算機視覺的角度去司圖,所以眼前的黑不是黑,你說的白也不是白,所見諸相非相,只是像素值,0 or 1。
02. 見微知著
暫時拋開圖片背景, 經過觀察可知,要從人的身體上識別出奶罩和褲頭,本質上是從白花花中尋找黑乎乎,其實就是從0中找到1。
那我們是不是需要整個奶罩呢?非也,只需要探測出奶罩的邊緣就可以了,這就如同棋道,金角銀邊爛肚皮,只要圍住了眼,就佔住了氣,從而控住了勢。
卷積濾波器是一個比圖片尺寸小的矩陣,這裡設為3x3。我們把圖片縮放至像素級(猜猜這是哪個部位),這裡每一個小方格背後就是0或1了。卷積核在輸入圖像上來回滾動、摩擦,那麼基本上會遇到三種區域(橙框):
- 全白(肉體)
- 全黑(奶罩)
- 黑白(肉體和奶罩的邊緣)
和下圖的對應關係應該也很明顯。
這時候,我們的卷積核就像情趣羽毛,掃遍每一個角落, 撩撥你的動感地帶。
03. 掐指一算
在上文的圖表中,我們已經見識到了多種濾波器和對應的濾鏡效果,比如邊緣檢測、銳化、均值模糊、高斯模糊。
來看第三種邊緣檢測卷積核,其矩陣為:再取包含邊緣的5x5區域,對應矩陣:
現在這個3x3矩陣(濾波器)要在5x5矩陣上摸一遍,當然摸不是為了爽,而是為計算一個值。計算方式如下圖,黃色方格與紅色數字即是卷積濾波器,而計算的方式就是重疊的對應元素相乘,再相加。(注意:這不是真正的「矩陣乘法」)
因為這裡的image在豎直方向上是不變的,所以只需要讓filter沿著最上端滑一圈就行了,總共有三次計算:
1.
2.3.最後生成的完整特徵映射(Feature Map)將是:
特徵映射的單元位置對應的是卷積核中心(8)的位置,特徵映射的取值有三種:
- -3:探測到奶罩邊緣,且卷積核位於奶罩外側
- 3:探測到奶罩邊緣,且卷積核位於奶罩內側
- 0: 沒有探測到邊緣特徵
現在你應該已經明白了,為什麼濾波器可以提取圖片的特徵。
歡迎在評論中提問、交流,也可以到集智的社區中留言。
近期,我們與「深度學習Keras」群(119427073)的群主@BigMoyan 、@SCP-173 達成了戰略合作,專門設立了「深度學習Keras」版塊,現在已經開始了資料分享和技術問答,歡迎感興趣的朋友們關注。
推薦閱讀: