自然界有些動物,長成什麼不好,偏偏要長成食物於是乎,便有了很多鬼畜的精神汙染圖片,比如泰日天和炸雞腿...
沙皮狗和你家的毛毯
柯基屁股和吐司(真的超像,不信你問問你家老司基...)
土狗和麵包圈
還有就是大招:吉娃娃和小松糕....
前段時間,像上圖這樣關于吉娃娃和小松糕蜜汁相似的照片紅遍了網絡。不要說欺負圖像識別AI了,甚至很多人類都受到了精神汙染。
於是乎,這類圖片在人工智慧(AI)領域的許多演講中被頻繁提及,當然我也不能免俗。
但是,我對此始終有一個疑問,也從沒見其他人解答過,那就是:現在的AI在區分吉娃娃和小松糕上,到底能做到多好?出於寓教於樂的目的,今天我們就來詳細八一八這個問題。
知道你們加班辛苦了,今天可以邊看文章邊吸狗
自從 1957 年感知機算法被發明以來,由人工神經網絡進行二元分類在理論上就是可行的了。也許你覺得現在的AI團隊總是吹得天花亂墜,看看當年:1958年《紐約時報》報導說,這個發明是個起點,將讓計算機「能走路,能說話,能讀能寫,能自我複製,能意識到自己的存在。」 實際上,雖然類似 Mark 1 感知機這樣的算法是為了圖像識別而設計的,但實際工作中它們只能識別具有明顯差異的圖案。這使得它們無法識別大部分視覺媒體中的複雜圖像。
(Mark1地址:https://blog.knoldus.com/2017/09/12/introduction-to-perceptron-neural-network/)
不久以後,對 AI 的幻想破滅了,隨之而來的是人工智慧的冬天。從那時至今,多層認知(流行於1980年代)和卷積神經網絡(揚·勒丘恩在1998年開創的)等技術在圖像識別領域已經大幅超過原有的單層感知算法。
在 ImageNet 等大型帶標籤數據集和強大的GPU運算能力的幫助下,諸如 AlexNet、VGG、Inception和ResNet 等更高級的神經網絡模型在計算機視覺領域取得了無可比擬的展新成就。
■ 計算機視覺與圖像識別API
如果你是一名機器學習工程師,你可以輕易用Keras/Tensorflow 或PyTorch 來測試或者微調這些已經預先訓練好了的模型。如果你對自己動手調試神經網絡並不在行,那你也不必擔憂。幾乎所有的科技巨頭和人工智慧初創企業都聲稱要「將AI大眾化」,並為此提供和簡單易用的計算機視覺應用程式接口(API)。
那麼,圖像識別哪家強?為了回答這個問題,你必須清晰地界定自己的商業目標、產品使用場景、測試資料庫以及識別標準,才能以此比較各種不同的識別方案,判斷哪個更適合你。
然而,我們在這並不打算弄什麼嚴肅調查,只是從宏觀角度橫向對比一下各類平臺在分析反饋時的不同之處。為此,我將把「區分奇娃娃和小松糕」這個任務餵給幾大不同的API,來看看結果吧!
首先,我把上面那張經典的狗餅乾圖拆成了16個獨立的測試圖像。接著,用Gaurav Oberoi 寫的這個開原始碼來處理於合併不同API的返回結果。在這個過程中,每張圖象將被推送給六個不同的圖像識別API,並獲取對應的返回數據。
絕大部分結果都是由機器猜測可能性最高的幾個標籤構成的,例外有二:一是微軟,它的 API 返回的既有標籤也有文字說明;另一個是 Cloudsight ,他們使用了人機混合識別技術,只返回一句描述文本。這也正說明了為何 Cloudsight 在處理複雜圖片時能提供一句準確到可怕的描述語句,但處理時間比其他API長了 10 到 20 倍。
下圖是一張輸出數據的範例。所有這16張「奇娃娃和小松糕」圖的測試結果可以在這裡(http://www.topbots.com/downloads/code/vision/chihuahua_vs_muffin/)看到。
原始碼地址:
https://github.com/goberoi/cloudy_visionhttps://github.com/goberoi/cloudy_vision
程序的表現如何?除了微軟——它將小松糕識別成某種毛絨玩具動物了——其他的API都能成功認出這圖是一種食物。但這食物到底是麵包、蛋糕、曲奇還是松糕,則是眾說紛紜。Google是唯一能認出「松糕」的API,因為在它返回的標籤中,認為「松糕」的可能性最高。
作為對比,看一看狗圖的分析結果:
再一次證明,這些程序都幹得不錯。所有API都成功識別出了狗,雖然有一些不能準確識別具體的品種。
當然,也有少數識別失敗的情況。微軟三次返回了錯誤的描述文本,將松糕描述成毛絨玩具或者泰迪熊什麼的。
總的來說,Google是最牛逼的松糕鑑定者,7 張松糕的圖片中,有 6 張 Google 返回的標籤中都將「松糕」標籤的可能性排在最前。其他的 API 並沒有將松糕排在前面,只是返回了一些不那麼精確的標籤,比如「麵包」、「餅乾」或者「紙杯蛋糕」等。
然而,在勝利的光環之下,Google也被某一張松糕圖片騙到了,返回了「鼻子」以及「犬類品種」的猜測標籤。
看來就算世界上最牛逼的機器學習平臺也被我們這個純搞笑的狗餅乾挑戰給坑了啊。在區分哪是食物哪是夥伴這方面,即使是人類兒童也能輕易打敗深度學習程序。
小試牛刀之後,我更想知道,在實際的照片(而不是那些特意挑出來,十分相似的玩梗照片)裡,AI 能不能很好的分辨奇娃娃和小松糕。ImageNet 裡剛好有1750 張奇娃娃和 1335 張各式各樣的松糕照片。
吉娃娃圖片地址:http://image-net.org/synset?wnid=n02085620
鬆餅圖片地址:http://image-net.org/synset?wnid=n07690273
許多照片對 AI 來說還是非常容易識別的,因為吉娃娃的品種特徵非常明顯,比如凸出的眼睛和尖尖的耳朵。比如下圖這隻:
但另一方面,有些照片也非常刁鑽。有時同一張圖中有多個對象,有時對象帶著其他裝飾物或者被遮擋住了,這就給 AI 的識別帶來了額外的挑戰,失敗率明顯增加了。
在上圖中,帶著帽子和護目鏡的狗讓許多AI(和許多人類)無法正確識別出它的品種。IBM Watson成功的識別出了帽子,但卻沒能認出帶著帽子的狗或者人。
在圖片等未結構化的現實數據中,人類手工增加的表情並不一定就百分百正確。標籤有可能誤標,也有可能充滿額外的「噪音」。下圖就是一個例子,這張圖在 ImageNet 資料庫中被歸類在「松糕」類裡。
松糕分類地址:http://image-net.org/synset?wnid=n07690273
人類能很快發現這個「偽裝的松糕」其實是個「紙杯蛋糕」。令人驚喜的是,許多 AI 也能確實地認出這一點,它們返回的猜測標籤都是「蛋糕」、「紙杯蛋糕」或「餅乾」,比 ImageNet 的數據更接近實際。Cloudsight 的人機混合識別系統給出的描述文本則更加精確到「餅乾怪紙杯蛋糕」這樣的結果,不得不說,弄出這種東西讓 AI 來識別的人實在是太刁鑽了.
通過同時使用多種模型和 API,我們得以從一種非常有趣的角度來觀察這種「標籤噪音」。在 ImageNet的「松糕」分類中,各種不同的松糕(麥麩的、玉米的以及酥皮發泡的)其實長得往往大相逕庭。這其中的許多往往被錯誤地貼上了紙杯蛋糕或是其他類型的烘培食品的標籤。
將海量的圖片餵給多個不同的圖像識別API,並對比分析結果中的相同和不同的部分,就能有條不紊地標記出可能被標上了錯誤標籤的圖片。
說句奇怪的題外話:在搜索ImageNet中各種不同的松糕分類時,我無意中翻到了一個叫「松糕人」的分類,分類描述是「曾經是賣松糕的流動攤販」。所以,如果你想要找一些什麼人拿著松糕的照片,你知道該去哪找了吧。
■ 玩點別的花招?單純為了找點樂子,我試著用一些奇奇怪怪的照片來欺負AI,比如:
這是其中一張既有狗又有食物的照片的分析結果:
只有 IBM 和 Cloudsight 識別出圖中存在某種食物。然而,IBM 似乎發揮了某種奇特的想像力,猜測了「章魚燒」、「餃子」和「奶油酥卷」這一串可能性。
同樣,長的像狗的紙杯蛋糕也引起了不小的混亂:
不知因為什麼獨特的理由,微軟又把這張圖描述成「一群毛絨玩具」。Google 認為這張圖含有「長的像狗的哺乳動物」的可能性(0.89)大於「蛋糕」的可能性(0.79)。Clarifai倒是以非常高的確定性認為圖中同時包含「食物」(0.99)和「哺乳動物」(0.96)。
在這些複雜而不尋常的情況下,Cloudsight 的「人類描述」能力展現出了強大的威力。Cloudsight 識別最後一張圖的時候給出的描述是「12 塊西高地白梗犬形的紙杯蛋糕」,而且它還認出了前面一張圖片來自著名的吉娃娃和餅的段子。
當然,我們並不是用這些戲謔的試驗來斷定哪個 API 就一定比其他的好,但你總是可以從它們的反饋結果中發現一些定性的區別。
亞馬遜的 Rekognition
不僅能很好地識別圖像中的主要物體,還能識別許多周圍的次要物體,比如圖像中的一個人、一隻鳥或是一件家具。Rekognition 也能提供一些定性的形容,比如「可愛的」或「超可愛的」。它返回可能性最高的標籤時,主觀描述和客觀描述的標籤總能保持美妙的平衡。
Google 的視覺 API 和 IBM 的 Watson 視覺都十分忠實於原圖。它們總是只給出一些直截了當的描述性標籤。二者的表現看起來不相上下,只是 IBM 通常給出的標籤數量會比每張圖片的平均標籤數量多一些些。
微軟的圖像識別結果總是返回一些較寬泛類別的標籤,比如「狗」、「犬類」或者「哺乳動物」,而從沒有具體到「奇娃娃」或者「松糕」的程度。令人驚異的是,微軟似乎還有種奇怪的習慣,自動生成的描述語句中,特別愛把糕點識別為「毛絨玩具」。也許你會覺得 ResNet 背後的公司應該做的更好,也許這個毛絨玩具的問題可能只是因為數據集的一種巧合,總之,我建議你自己也去試試這個API做一些健壯性測試看看。
Cloudsight 採用了一種混合了人類標籤和機器分類的算法,這個 API 比其他幾個的運行速度都慢。但這也意味著,對於困難或不尋常的圖片,Cloudsight 的描述將會儘可能做到最準確,就比如之前的那「12塊西高地白梗犬形的紙杯蛋糕」。
Clarifai 的反饋標籤數是目前最多的(每張圖20個),然而沒有一次能正確識別出狗的品種「奇娃娃」。相反,它更常給出的是更通用的標籤比如「狗」、「哺乳動物」或乾脆就是「動物」。它做的較好的方面是添加了一些定性的主觀標籤,比如「可愛的」、「有趣的」、「超可愛的」以及「美味的」。同時它也返回一些抽象的概念,例如「面部表情」或者「沒有人」。在你為那些廣告圖片或者其他面向客戶的圖片生成更豐富的說明時,這個功能也許會派上用場。
正如前面提到的,為了用上這些 API,你必須清晰地界定自己的商業目標、產品使用場景,準備合適的測試資料庫以及定義成功的識別標準。同時你還得考慮諸如成本、速度以及能獲得的標籤數量等不同因素。
這裡是一份這些指標的匯總表,各項數據基於上述 16 張圖的測試結果。亞馬遜的 Amazon Rekognition 服務比其他全自動 API 的速度快上一點點。採用人機混合結構的 Cloudsight 不出意料是最慢的,而且只返回一條描述文字。Clarifai 總是默認返回 20 條標籤。
這些API的使用收費情況可以在各自的價格頁面上看到。大部分 API 都提供一個免費配額,並且按每月處理數量收費。在我寫這篇文章的時候,每項服務中處理一張圖片的基礎價格大約如下(單位是美元)。此類定價將會不定期變化,所以具體價格請以具體平臺為準。
· Amazon — $0.001
· Microsoft — $0.001
· IBM Watson — $0.002
· Google Cloud — $0.0015
· Cloudsight — $0.02
· Clarifai — $0.0015
大部分的API收費都在每張圖片$0.001 到 $0.002美金之間,如果你每月訂購幾百萬張圖片的處理量的話。Cloudsight 的價格比較誇張,如果你訂購每月3萬張圖片的話,平均每張價格達$0.02之多——如果你訂的更少的話,價格更高,最高可能達到每張$0.07!
如果你打算放任自己心中那既不科學又狂野的八卦之火,調戲那些圖像識別 AI,你也許會想知道:最早玩出「奇娃娃和松糕「這個梗的 Karen Zack 已經弄出了一大堆」動物vs食物「的相似對比圖片,你大可以弄來給AI搞一個跑分什麼的!
作者:Mariya Yao,商用人工智慧研究及投資策略公司 TOPBots 的首席技術官及研發設計部門主管。
譯者:歐剃
編輯:之餚
出處:https://medium.freecodecamp.org/chihuahua-or-muffin-my-search-for-the-best-computer-vision-api-cbda4d6b425d
— 完 —
人工智慧熱潮下,相關領域的人才缺口高達 500 萬。深度學習技術廣泛應用於圖像處理、文本處理等領域,加入該納米學位,跟隨 Google 無人車之父 Sebastian Thrun、GANs 之父 Ian Goodfellow 學習 Pytorch、Keras 和 TensorFlow 框架,自主搭建卷積和循環網絡、GANs 和深度強化學習模型,挑戰矽谷名企合作實戰項目,一站式全面掌握深度學習技術,成為年薪百萬深度學習專家。戳「閱讀原文」立即了解,獲取課程大綱!