當 AI 遇到狗年,說一說用深度學習識別不同品種的狗子
新的一年即將到來了,這里先祝各位新年快樂,狗年財運旺旺的 。在新年的最后一篇推送中,就簡單的介紹一下和狗相關的一項黑科技,狗練識別。
狗是已知的,人類最早馴化的動物了,早在一萬五千多年之前,還處在農業時代之前的原始人類就靠著幾根骨頭騙到了貪吃的灰狼,又等到了農業時代,人們發現狗真的是十項全能的好幫手,于是開始了對狗的定向演化,于是就有了許多看起來差異巨大的不同品種的狗,下圖所展示的只是一些常見的品種,你認出那些你熟悉的品種了嗎?
而根據不同品種的狗狗的照片,按照品種進行分類,在機器視覺中屬于Fine-grained classification,也就是根據圖像的細節進行分類,類似的問題還包括根據植物的照片判斷是那種花等,你也許會說,這樣的問題不應該很簡單嗎,用深度學習就行了,一層不行就再加一層。
且慢,讓我們先看看這個問題本身有那些本質的困難之處。首先是不同品種的狗都很相似,比如下圖的三種狗,若你不是狗專家,你能夠分清楚嗎?
第二個問題是即使是同一種狗,也會差距很大,例如下圖的三種狗,竟然是一家人,你說這叫AI頭大不頭大。
更要命的是不同的狗狗都有各自獨特的pose,而且他們所在的圖片的區域,圖片背后的背景是草地還是森林都不同。下圖展示了三只不同姿勢的狗狗。
正是由于有這三個問題,要做好狗臉識別,并不是一件簡單的事。所以說, 使用深度學習去解決具體問題,需要先調研清楚這個問題的背景和障礙,才能夠便于設計下一步具體優化方法。
該怎么做了?第一種思路是數據增強,也就是用 隨機應對隨機 。既然狗子的位置在照片中不固定,那就將原始的圖片隨機的裁剪一下,旋轉一下,將圖像的顏色做一些微調,總之就是想象一個熊孩子打開ps修改了每張狗子的照片,給你留下了一堆看起來和原始的訓練數據差不多的照片作為新的訓練集。下面給出了隨機剪裁之后得到的狗的照片示例。
而另一種方式,可以看成是 用有序來應對隨機 ,也就是先通過識別出狗子所在的區域,再將這個區域拉伸成一樣大小的圖片,來去除背景的干擾。例如下圖所示,展示了經過了背景去除和拉伸前后的狗子的照片,可以看到經過處理后的照片,只剩下了我們關心的狗子的信息。
接下來的問題是狗子的照片不夠多,斯坦福大學針對狗的品種識別,搞出了一個數據庫,里面有一百多種狗,一共一萬多張照片,但若是指望這些圖片就能夠訓練出一個靠譜的深度神經網絡,那效果多半不好。 數據增強雖然能夠改善預測的準確性,但其上限不高,畢竟原始的信息就那么多。
若是你自己做不到,不妨站在巨人的肩膀上。遷移學習正是這樣,深度學習的好處是模型不再是鐵板一塊,而是可以拆解成一層一層的,不用花一分錢,你可以拿大牛們訓練好的網絡,將其用做自己的用途。關于遷移學習,曾經寫過一篇名叫白話遷移學習的小文,感興趣的可以點擊深入了解。
而遷移學習遷移的是什么樣的神經網絡,自然是深度學習中最出名的卷積神經網絡,關于這個話題,可以參考你所不能不知道的CNN和 用CNN來識別鳥or飛機的圖像 ,這里就不再重復了。
但遷移學習并不意味著什么都不需要來做,你需要利用成熟的網絡提取出的高級特征,用他們來進行預測,但是要注意的是,你預測得出的結果并不是一個確定的狗的品種,而是這個圖屬于哪個品種的概率,而這又是怎么得出來的,靠的是一個名叫softMax的激活函數,這可是深度學習中最出名的兩個激活函數了,soft是保證輸出的結果是符合概率分布,也就是不會出現概率為120%的情況,而max是讓錯的更錯,從而提高學習的效率。
最后說一說這個例子的實現難度,類似Minst數據集的手寫數字識別,寵物狗的品種分類,也是一個相對容易上手的例子,你不需要昂貴的顯卡,就普通的個人電腦,就可以基于已有的圖像識別網絡,例如谷歌的Inception,來搭建一個屬于你的狗臉識別程序。除了用來展示,這個例子還可以鍛煉你診斷網絡的能力,訓練的太慢,不妨換換更快學習率,訓練的結果起伏太大,還可以再換換更慢的學習率啦。
開個玩笑,雖然學習率是深度學習中很重要的一個參數,但不是萬能的,這個例子的好處是讓你能夠直觀的看到你訓練出神經網絡有那些不足,又為什么會犯錯,例如下圖,如果是將圖片變成黑白的,神經網絡是不會犯錯的,但一旦加上了色彩,你就會發現神經網絡沒有將黃色那只分成拉布拉多犬,這時你就能發現,是你的神經網絡過擬合了,網絡中的一個神經元學到的速記口訣,但凡黃色的都不是拉布拉多,這時不管你怎么做數據增強,對數據又拉伸又旋轉,都無法教會這個神經元忘掉這個口訣,這也是我為什么上文說數據增強的效果是有上限的。
而這時如果你能用dropout機制,時不時的將這個背小抄的神經元踢下線,那么你的神經網絡就能夠有機會學到拉布拉多真正的特征,這也就解釋了為什么dropout機制是一種極為高效的防止模型過擬合的方法。
卷積神經網絡的另一個特點是能夠打破所謂的黑箱,讓你看看 網絡內部特征是如何一步步被抽象出來的 ,下圖依次分別展示了卷積神經網絡的輸入圖像和第一層的輸出結果,可以看出神經網絡第一層的卷積核提取出的特征分別是什么,又對圖像進行了怎樣的抽象。(雖然小編表示我就算看出神經網絡做了什么,也沒法說出來,不過這反而說明了網絡本身能做一些人無法明確言說的任務,而這正是深度神經網絡最革命性的創新)
在這篇小文的結尾,放上一章狗狗們的全家福照片,愿各位不管是什么汪,新的一年的事事興旺,合家安康。
參考資料
1)Using Convolutional Neural Networks to Classify Dog Breeds Hsu, David
2)Dog Breed Identification Whitney LaRow ,Brian Mittl, Vijay Singh
3)Automatic Dog Breed Identification Dylan Rhodes
來自:http://mp.weixin.qq.com/s/trUSob28kuKQDLbfR4hVlw