乾貨
觀點
案例
資訊
我們
★之前我進行過一個簡單的機器學習實驗,來判斷圖像是否為墨西哥卷餅。
使用相同的基於雲的認知機器學習技術 Custom Vision,我想處理一個更複雜的場景。
用機器學習演算法能否判斷貓的品種?
PS:文末有驚喜
★訓練數據集
按照慣例,我需要為機器學習演算法輸入一些圖像,讓其了解要學習的內容。
首先,我找到了貓的品種列表,包括圖像和名稱信息,然後以此為基礎在網上找圖片。
然後,我在 Flickr 上分別搜索每個貓的品種,並使用 Chrome 的擴展插件從第一頁開始下載圖像。
在找圖片時,之所以使用Flickr而不是谷歌圖片,是為了用 Chrome 擴展插件下載高解析度的圖像。
Flickr上的蘇格蘭折耳貓
我花了一個小時左右下載了圖片,然後對圖片進行處理。刪除了當中不是貓的圖片,避免影響訓練集。
然後,我刪除了同一個場景中相同貓的圖像。這是為了避免對演算法進行過度訓練,從而避免它尋找精確匹配的圖像,而不側重預測。
記住,機器學習的目的是為了讓演算法識別以前未見過的新信息,而不是尋找精確的匹配。
最後,我確保每個品種至少收集5張圖像,因為這是在 Custom Vision 上創建的標籤所需的圖像數量。
但是,有些常見的貓品種有超過20張圖像,而一些不常見的品種只有6張左右的可用圖像。
每個品種有不同數量的訓練圖像
這可能會導致識別結果產生偏差,但至少我們意識到演算法中的潛在偏差。
最後,我收集了超過900張貓的圖像,包含50個不同品種。
完成數據收集后,我將所有圖像上傳到 Custom Vision,並將每張圖像標記為相應品種。
之後,只需點擊一個按鈕來訓練演算法,它就可以在幾秒鐘內進行貓的品種預測。
測試數據集
有趣的部分開始了,讓我們先來看看演算法的性能。
性能還不錯
基於900張圖像和50個品種標籤,演算法的性能還不錯。
這比我預想的要好,鑒於它不僅僅是識別該圖像是否為貓。
對於沒有受過訓練的人來說,判斷貓品種間的細微差異也是很困難的。
以半信半疑的態度,我打算用之前從未見過的圖像對演算法進行測試。
首先是 Sola,我家耳朵並沒有折起來的蘇格蘭折耳貓。
首先,在已知我家貓是純種蘇格蘭折耳的前提下,我用演算法對它進行了測試。
Sola為蘇格蘭折耳的幾率為53.9%
測試我家貓很有意思,因為訓練集中的所有蘇格蘭折耳貓圖像中,貓都是折耳的。
我並不覺得這有什麼影響,接著測試了幾張 Sola 的照片。
Sola為蘇格蘭折耳的幾率僅為34.1%突然間,我的貓被判定為很可能是威爾士貓。
接著我檢查了訓練集中所有標有威爾士貓的圖像,竟然發現一隻看起來和 Sola 完全一樣的貓的圖像。
儘管每個貓的品種均有其獨特的外觀,但兩隻完成不同品種的貓也可能在面部形態上很相似。
也許有更多不同的威爾士貓圖像可以避免這樣的問題。
測試成功的例子
讓我們看看一些不同品種的測試成功例子。
96.9%為暹羅貓
99.8%為阿比西尼亞貓
99.9%為薩凡納貓
預測失敗的例子
之前暹羅貓演算法測試的效果很出色,讓我們再來看看。
首先,測試從背面拍攝的暹羅貓圖像會怎麼樣?
不可能是暹羅貓
老實說,這並不令人驚訝。
所有訓練圖像集的暹羅貓都是面朝相機,而不是看向旁邊的。
再來一張暹羅貓臉部特寫會怎麼樣?
11.1% 為暹羅貓
這個結果似乎與以前我家 Sola 臉部特寫的測試結果類似。
或許不僅僅通過貓的臉部來判斷時,該演算法的效果會更好。
老實說,如果暹羅貓訓練集有相似圖像的情況下,結果可能會比11.1%要好。
下面,讓我們測試一些不是貓的圖像。
狗、兔、豚鼠
你可能已經注意到,上面每個結果都有「貓」的標籤。
使用 Custom Vision,你至少需要兩個標籤來標記每個圖像。
讓我們來測試一下其他毛茸茸的動物圖像。
這貨絕對不是喵星人
有可能是貓
測試出來是貓
測試出來是貓
測試出來是貓
不可能是貓
顯然,如果看起來足夠相似,該演算法很難區分什麼是貓,什麼不是貓。
經過訓練的演算法很可能是基於顏色,圖案和整體形狀來進行模糊匹配。
結論
給定粗略的訓練集,經過訓練的演算法在特定的條件下能夠很好的判斷貓的品種。
然而,對於沒有訓練過的項目,該演算法表現的不太好,例如如何區分貓和非貓的動物。
所以在投入時間訓練任何機器演算法之前,對其能夠處理的範圍進行明確的定義是明智之舉。
原文鏈接:
你會感興趣的內容:
【品質乾貨】
如何從零設計結構清晰、操作友好的許可權管理模塊
Jmeter簡單介紹與搭配Jenkins實現自動化測試實踐
【答疑】
項目經理除了催進度還能做什麼?
【反爬蟲】
常見的反爬蟲和應對方法
【姿勢】
我是不是忘了什麼?哦,對了,驚喜!
我們是誰?
豈安科技!
我們在做什麼?
線上行為分析解決方案專家!讓互聯網更安全!
怎麼找到我們?