Python實現“鳥臉識別”,看看什么鳥最貪吃
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
網友cldud1245是一個鳥類愛好者(以下簡稱喂鳥哥),最近打算自學Python。
擁有其他語言編程經驗的他,可不打算按部就班從Hello World做起,一上來就挑戰圖像識別!
他用一個攝像頭對著自家后院的喂鳥器,拍到來覓食的鳥就嘗試判斷鳥的種類,并通過Twitter機器人實時發布判斷結果。

運行第一天就拍到了17次!最多的時候每十幾分鐘就有鳥來光顧。
其中卡羅萊納山雀總共來過8次,就是還不能準確判斷是否是同一只。

使用的技術都是開源的!
喂鳥哥把代碼放到了Github上開源,只有一個文件、三百多行。來看看他是怎么實現的吧!
作為初學者,他使用的都是已存在的開源項目,沒有自己訓練新的模型。
目標檢測模型使用的是隨TensorFlow目標檢測API發布的SSD Openimages v4。
鳥類分類模型是TensorFlow Hub上由Google發布的基于MobileNet V2的輕量級模型。
圖像處理就是經典的Open CV了。
不過鳥類分類模型中給出的結果都是拉丁文學名,為了方便大家看懂他又寫了一個爬蟲從維基百科上把對應的俗名爬了下來。

另外,該項目Github中有詳細的思路解說,感興趣的話可以去學習一下!
還有進步空間
從Twitter上發布的結果目前看來準確率還有待提高,比如拍到飛行中的鳥識別起來會遇到困難。

有時也會把兩只鳥識別成三只。喂鳥哥打算用非極大值抑制 (Non-Maximum Suppression)來修復這個問題。

不過這才是項目運行的第一天。
喂鳥哥使用鳥類百科圖冊進行測試,結果還是很準確的,所以懷疑攝像頭是否還不夠清晰

有人建議他,把網友指出正確名稱的評論爬取下來,與圖片一起再加入數據集進行訓練,就可以不斷提高精度。
還有人提議下一步要識別鳥的個體身份,看看到底是同一只鳥反復來吃東西,還是只是一個品種的很多只鳥。
One More Thing
回復中有人問到:“但是它能判斷照片是不是在國家公園拍攝嗎?”

這個梗來自網絡漫畫網站XKCD在2014年發表的一幅漫畫。

如果要判斷一張照片是否在國家公園拍攝,只需要判斷一下圖片的地理標記信息就行了。
但是要判斷照片里有沒有鳥,則是一個困難的多的問題。
Flickr的工程師看到后接受了這個挑戰,用當時剛剛掀起新一輪熱潮的深度學習做出了漫畫中描述的這款程序Park or Bird(現已停止訪問)。

來看看當時的深度卷積神經網絡的架構。

隨著技術的發展,今天的我們不僅能識別照片中是否有鳥,還能判斷鳥的種類,甚至識別鳥的個體身份也不再是天方夜譚。