1
本文作者: AI研習(xí)社-譯站 | 2018-09-12 10:46 |
雷鋒網(wǎng)按:本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 Face detection - An overview and comparison of different solutions,作者為 David Pacassi Torrico。
翻譯 | 李灝 江舟 校對(duì) | Lamaric 審核 | Lamaric
哪一個(gè)人臉識(shí)別 API 是最好的?讓我們看看亞馬遜的 Rekognition、谷歌云 Vision API、IBM 沃森 Visual Recognition 和 微軟 Face API。
Part 1:基于互聯(lián)網(wǎng)提供軟件服務(wù)的供應(yīng)商
TLDR:如果你想盡可能快的使用 API,可以直接查看我在 Github 上的代碼。
你曾經(jīng)有過(guò)人臉識(shí)別的需要嗎?
可能只是為了提高圖片裁剪成功率,保證一張輪廓圖片真實(shí)的包含一張人臉,或可能只是簡(jiǎn)單從你的數(shù)據(jù)集中發(fā)現(xiàn)包含指定人物的圖片(在這種情況下)。
哪一個(gè)人臉識(shí)別軟件服務(wù)供應(yīng)商對(duì)你的項(xiàng)目來(lái)說(shuō)是最好的呢?
讓我們深入了解它們?cè)诔晒β?,定價(jià)和速度方面的差異。
在這篇文章里,我將會(huì)分析以下人臉檢測(cè) API:
亞馬遜 Rekognition
谷歌云 Vision API
IBM 沃森 Visual Recognition
微軟 Face API
人臉檢測(cè)是如何工作的?
在我們深入分析不同的解決方案之前,讓我們首先了解下人臉檢測(cè)是如何工作的。
Viola–Jones 人臉檢測(cè)
2001 年這一年,Jimmy Wales 和 Larry Sanger 建立了維基百科,荷蘭成為世界上第一個(gè)將同性婚姻合法化的國(guó)家,世界也見(jiàn)證了有史以來(lái)最悲慘的恐怖襲擊之一。
與此同時(shí),兩位聰穎的人,Paul Viola 和 Michael Jone,一起開(kāi)始了計(jì)算機(jī)視覺(jué)的革命。
直到 2001 年,人臉檢測(cè)還不是很精確也不是很快。而就在這一年,Viola Jones 人臉檢測(cè)框架被提出,它不僅在檢測(cè)人臉?lè)矫嬗泻芨叩某晒β?,而且還可以進(jìn)行實(shí)時(shí)檢測(cè)。
雖然人臉和物體識(shí)別挑戰(zhàn)自 90 年代以來(lái)就一直存在,但在 Viola - Jones 論文發(fā)布后,人臉及物體識(shí)別變得更加繁榮。
深度卷積神經(jīng)網(wǎng)絡(luò)
其中一個(gè)挑戰(zhàn)是自 2010 年以來(lái)一直舉辦的 ImageNet 大規(guī)模視覺(jué)識(shí)別挑戰(zhàn)。在前兩年,頂級(jí)團(tuán)隊(duì)主要是通過(guò) Fisher 向量機(jī)和支持向量機(jī)的組合工作,而 2012 年這一切改變了。
多倫多大學(xué)的團(tuán)隊(duì)(由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 組成)首次使用深度卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行物體檢測(cè)。他們以 15.4 % 的錯(cuò)誤率獲得第一名,而第二名隊(duì)伍的錯(cuò)誤率卻高達(dá) 26.2 %!
一年后,2013 年,前五名的每個(gè)團(tuán)隊(duì)都在使用深度卷積神經(jīng)網(wǎng)絡(luò)。
那么,這樣的網(wǎng)絡(luò)是如何工作的呢?
今年早些時(shí)候,谷歌發(fā)布了一個(gè)易于理解的視頻:
亞馬遜、谷歌、IBM 和微軟現(xiàn)在使用著什么?
從那以后,并沒(méi)有太大變化。今天的供應(yīng)商仍然使用深度卷積神經(jīng)網(wǎng)絡(luò),當(dāng)然可能會(huì)與其他深度學(xué)習(xí)技術(shù)相結(jié)合。
顯然,他們沒(méi)有公布自己的視覺(jué)識(shí)別技術(shù)是如何工作的。我發(fā)現(xiàn)的信息是:
亞馬遜:深度神經(jīng)網(wǎng)絡(luò)
谷歌: 卷積神經(jīng)網(wǎng)絡(luò)
IBM: 深度學(xué)習(xí)算法
微軟: 人臉?biāo)惴?/p>
雖然它們聽(tīng)起來(lái)都很相似,但結(jié)果有一些不同。
在我們測(cè)試它們之前,讓我們先看看定價(jià)模型吧!
定價(jià)
亞馬遜、谷歌和微軟都有類似的定價(jià)模式,這意味著隨著使用量的增加,每次檢測(cè)的價(jià)格會(huì)下降。
然而,對(duì)于 IBM,在你的免費(fèi)層使用量用完之后,你就要為每次調(diào)用 API 支付相同的價(jià)格。
Microsoft 為你提供了最好的免費(fèi)協(xié)議,允許你每月免費(fèi)處理 30000 張圖片。
如果你需要檢測(cè)更多,則需要使用他們的標(biāo)準(zhǔn)協(xié)議,是從第一張圖片開(kāi)始付費(fèi)的。
價(jià)格比較
話雖如此,讓我們計(jì)算三種不同配置類型的成本。
條件 A:小型初創(chuàng)公司/企業(yè)可每月處理 1000 張圖片
條件 B:擁有大量圖像的數(shù)字供應(yīng)商,每月可處理 100,000 幅圖像
條件 C:數(shù)據(jù)中心每月處理 10,000,000 張圖像。
從數(shù)據(jù)上看,對(duì)于小客戶來(lái)說(shuō),定價(jià)沒(méi)有多大差別。雖然亞馬遜從第一張圖片開(kāi)始收費(fèi),但處理 1000 張圖片仍然只需要一美元。然而,如果你不想支付任何費(fèi)用,那么谷歌、IBM 或微軟將是你想要選擇的供應(yīng)商。
注意:亞馬遜提供了免費(fèi)協(xié)議,你可以免費(fèi)處理前 12 個(gè)月,每月 5000 張圖片!然而,在這個(gè) 12 個(gè)月的試用期后,你就需要從這時(shí)第一張圖片付費(fèi)了。
大量使用 API 的情況
如果你確實(shí)需要處理數(shù)百萬(wàn)張圖片,那么比較每個(gè)供應(yīng)商的處理規(guī)模就變得很重要了。
以下是在一定數(shù)量的圖片后,為 API 使用支付的最低價(jià)格列表。
IBM 會(huì)不斷向你收取每 1,000 張圖片 4.00 美元的費(fèi)用(無(wú)縮放比例)
Google 在第 5,000,000 張圖片之后,價(jià)格降到 0.60 美元(每 1000 張圖片)
亞馬遜會(huì)在第 100,000,000 張圖片之后,價(jià)格降到 0.40 美元(每 1000 張圖片)
微軟會(huì)在第 100 ' 000 ' 000 張圖片之后,價(jià)格降到 0.40 美元(每 1000 張圖片)
因此,比較價(jià)格,微軟(和亞馬遜)似乎是贏家。但他們能否在成功率、速度和整合度上占優(yōu)么?讓我們看一看!
動(dòng)手吧!讓我們?cè)囋嚥煌?API
有夠多的理論和數(shù)字了,讓我們直接深入研究編碼!你可以在我的 GitHub 存儲(chǔ)庫(kù)中找到這里使用的所有代碼。
設(shè)置我們的圖像數(shù)據(jù)集
首先要做的事,在我們掃描人臉圖像之前,讓我們?cè)O(shè)置圖像數(shù)據(jù)集。
在這篇博客文章中,我已經(jīng)從 pexels.com 下載了 33 張圖片,非常感謝圖片的貢獻(xiàn)者/攝影師以及感謝 Pexels!
這些圖像已經(jīng)提交到了 GitHub 存儲(chǔ)庫(kù),所以如果你只想開(kāi)始使用 API,則不需要搜索任何圖像。
編寫(xiě)基本測(cè)試框架
框架可能是錯(cuò)誤的,因?yàn)槲业淖远x代碼只包含兩個(gè)類。然而,這兩個(gè)類幫助我輕松地分析圖像(元數(shù)據(jù))數(shù)據(jù),并在不同的實(shí)現(xiàn)中有盡可能少的代碼。
一個(gè)非常簡(jiǎn)短的描述:FaceDetectionClient 類保存有關(guān)圖像存儲(chǔ)位置、供應(yīng)商詳細(xì)信息和所有處理過(guò)的圖像(作為 FaceDetectionImage 對(duì)象)的一般信息。
比較供應(yīng)商的 SDK
因?yàn)槲易钍煜?PHP,所以我決定在這次測(cè)試中堅(jiān)持使用 PHP。我想指出每個(gè)供應(yīng)商提供了什么樣的 SDK(截至今天):
注意:微軟實(shí)際上并沒(méi)有提供任何 SDK,但他們?yōu)樯厦媪谐龅募夹g(shù)提供了代碼示例。
如果你仔細(xì)閱讀了這些列表,你可能會(huì)注意到 IBM 不僅提供了最少數(shù)量的 SDK,而且還沒(méi)有提供針對(duì) PHP 的 SDK。然而,這對(duì)于我來(lái)說(shuō)并不是一個(gè)大問(wèn)題,因?yàn)樗麄兲峁┝?cURL 示例,這些示例幫助我輕松地為一個(gè)(非?;镜模㊣BM 視覺(jué)識(shí)別客戶端類編寫(xiě)了 37 行代碼。
集成供應(yīng)商的 API
獲取 SDK 非常容易。使用 Composer 更容易。然而,我確實(shí)注意到一些可以改進(jìn)的東西,以便開(kāi)發(fā)者的生活變得更輕松。
亞馬遜
我從亞馬遜的識(shí)別 API 開(kāi)始。瀏覽他們的文檔后,我真的開(kāi)始覺(jué)得有點(diǎn)失落。我不僅沒(méi)找到一些基本的例子(或者無(wú)法找到它們?),但我也有一種感覺(jué),我必須點(diǎn)擊幾次,才能找到我想要的東西。有一次,我甚至放棄了,只是通過(guò)直接檢查他們的 SDK 源代碼來(lái)獲得信息。
另一方面,這可能只發(fā)生在我身上?讓我知道亞馬遜的識(shí)別對(duì)你來(lái)說(shuō)是容易(還是困難)整合的吧!
注意:當(dāng) Google 和 IBM 返回邊界框坐標(biāo)時(shí),Amazon 會(huì)返回坐標(biāo)作為整體圖像寬度/高度的比率。我不知道為什么,但這沒(méi)什么大不了的。你可以編寫(xiě)一個(gè)輔助函數(shù)來(lái)從比率中獲取坐標(biāo),就像我一樣。
谷歌
接下來(lái)是谷歌。與亞馬遜相比,他們確實(shí)提供了一些例子,這對(duì)我?guī)椭艽?!或者也許我已經(jīng)處于投資不同 SDK的心態(tài)了。
不管情況如何,集成 SDK 感覺(jué)要簡(jiǎn)單得多,而且我可以花費(fèi)更少的點(diǎn)擊次數(shù)來(lái)檢索我想要的信息。
IBM
如前所述,IBM(還沒(méi)有?)為 PHP 提供一個(gè) SDK。然而,通過(guò)提供的 cURL 示例,我很快就建立了一個(gè)自定義客戶端。如果已經(jīng)能提供一個(gè) cURL 例子,那么你使用它也錯(cuò)不了什么了。
微軟
看著微軟的 PHP 代碼示例(使用 Pear 的 HTTP _ request2 包),我最終為微軟的 Face API 編寫(xiě)了自己的客戶端。
我想我只是一個(gè) cRUL 人。
評(píng)估者的可靠性
在我們比較不同的人臉檢測(cè) API 之前,讓我們先自己掃描圖像吧!一個(gè)普通的人能檢測(cè)到多少?gòu)埬槪?/p>
如果你已經(jīng)看過(guò)我的數(shù)據(jù)集,你可能已經(jīng)看到了一些包含棘手面孔的圖像。棘手是什么意思?好吧,指的是只看到一張臉的一小部分或這張臉處于一個(gè)不尋常的角度時(shí)。
是時(shí)候做一個(gè)小實(shí)驗(yàn)了
我瀏覽了所有的圖片,記下了我認(rèn)為已經(jīng)檢測(cè)到的面孔數(shù)量。我會(huì)用這個(gè)數(shù)字來(lái)計(jì)算每個(gè)供應(yīng)商對(duì)圖片的成功率,看看它是否能檢測(cè)到像我一樣多的面孔。
然而,設(shè)置僅由我單獨(dú)檢測(cè)到的預(yù)期面部數(shù)量對(duì)我來(lái)說(shuō)似乎有點(diǎn)太偏頗了。我需要更多的意見(jiàn)。這時(shí),我懇請(qǐng)我的三位同事瀏覽我的照片,并告訴我他們會(huì)發(fā)現(xiàn)多少?gòu)埬?。我給他們的唯一任務(wù)是告訴我你能探測(cè)到多少?gòu)埬?,而不是頭。我沒(méi)有定義任何規(guī)則,我想給他們?nèi)魏慰梢韵胂蟮淖杂蓙?lái)完成這項(xiàng)任務(wù)。
什么是臉?
當(dāng)我瀏覽圖像檢測(cè)面部時(shí),我只計(jì)算了至少四分之一左右可見(jiàn)的每張臉。有趣的是,我的同事提出了一個(gè)略微不同的面部定義。
同事 1:我也計(jì)算過(guò)我大多無(wú)法看到的面孔。但我確實(shí)看到了身體,所以我的腦海里告訴我有一張臉。
同事 2:如果我能夠看到眼睛,鼻子和嘴巴,我會(huì)把它算作一張臉。
同事 3:我只計(jì)算了能夠在另一張圖像中再次識(shí)別的臉部。
樣例圖片 #267855
在這張照片中,我和我的同事分別檢測(cè)到了 10、13、16 和 16 張面孔。我決定取平均值,因此得到了 14。我對(duì)每個(gè)人是如何想到不同的人臉檢測(cè)技術(shù)這一點(diǎn)非常的感興趣。
話雖如此,我還是使用了我和同事的平均人臉計(jì)數(shù)來(lái)設(shè)定一幅圖像中檢測(cè)到的預(yù)期人臉數(shù)量。
結(jié)果比較
現(xiàn)在我們已經(jīng)設(shè)置了數(shù)據(jù)集和代碼,讓我們處理所有競(jìng)爭(zhēng)對(duì)手的所有圖像并比較結(jié)果。
我的 FaceDetectionClient 類還附帶一個(gè)方便的 CSV 導(dǎo)出格式,它提供了一些分析數(shù)據(jù)。
這是我得到的結(jié)果:
成功率很低?
亞馬遜能夠檢測(cè)到 52.66 % 的人臉,谷歌 40.43 %,IBM 39.36 %,微軟甚至只有 17.55 %。
為什么成功率低?首先,我的數(shù)據(jù)集中確實(shí)有很多棘手的圖像。其次,我們不應(yīng)該忘記,作為人類,我們有著兩百萬(wàn)年的進(jìn)化背景來(lái)幫助理解什么是什么。
雖然許多人認(rèn)為我們已經(jīng)掌握了科技領(lǐng)域的人臉檢測(cè),但仍有改進(jìn)的余地!
對(duì)速度的需求
雖然亞馬遜能夠檢測(cè)到最多的人臉,但谷歌和微軟的處理速度明顯快于其他公司。然而平均來(lái)說(shuō),他們?nèi)匀恍枰^(guò)一秒鐘的時(shí)間來(lái)處理我們數(shù)據(jù)集上的單個(gè)圖像。
將圖像數(shù)據(jù)從我們的計(jì)算機(jī)/服務(wù)器發(fā)送到另一臺(tái)服務(wù)器肯定也會(huì)影響性能。
注意:我們將在本系列的下一部分中了解(本地)開(kāi)源庫(kù)是否可以更快地完成同樣的工作。
(相對(duì))小臉的人群
在分析了這些圖像后,亞馬遜似乎非常擅長(zhǎng)檢測(cè)人群中的人臉,以及相對(duì)較小的臉部。
小摘錄
亞馬遜的示例圖像 # 889545
亞馬遜能夠在這張圖片中檢測(cè)到 10 張面孔,而谷歌只發(fā)現(xiàn)了 4 張,IBM 檢測(cè)到 0 張以及微軟檢測(cè)到 0 張。
不同的角度,不完整的臉
那么,這是否意味著 IBM 根本不如他競(jìng)爭(zhēng)對(duì)手好呢?一點(diǎn)也不。雖然亞馬遜可能擅長(zhǎng)于在集體照片中檢測(cè)小臉,但 IBM 還有另一個(gè)優(yōu)勢(shì):困難的圖像。這是什么意思呢?好吧,指的是頭部處于不尋常角度或者可能沒(méi)有完全顯示的臉部圖像。
以下是我們數(shù)據(jù)集的三個(gè)例子,IBM 是唯一一家檢測(cè)到其中人臉的供應(yīng)商。
IBM 的示例圖像 # 356147
僅由 IBM 檢測(cè)到面部的圖像。
......
想要繼續(xù)閱讀,請(qǐng)移步至我們的AI研習(xí)社社區(qū):http://www.gair.link/page/TextTranslation/884
更多精彩內(nèi)容盡在 AI 研習(xí)社。
不同領(lǐng)域包括計(jì)算機(jī)視覺(jué),語(yǔ)音語(yǔ)義,區(qū)塊鏈,自動(dòng)駕駛,數(shù)據(jù)挖掘,智能控制,編程語(yǔ)言等每日更新。
雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng))(公眾號(hào):雷鋒網(wǎng))
等你來(lái)讀:
基于 OpenCV(C++/Python) 使用深度學(xué)習(xí) 進(jìn)行人類姿態(tài)檢測(cè)
如何在 Azure 上使用 Horovod 框架進(jìn)行物體檢測(cè)的分布式深度學(xué)習(xí)
基于 OpenCV 使用 YOLOv3 進(jìn)行深度學(xué)習(xí)中的物體檢測(cè)
亞馬遜、谷歌、微軟等各家公司人臉識(shí)別對(duì)比
斯坦福CS231n李飛飛計(jì)算機(jī)視覺(jué)經(jīng)典課程(中英雙語(yǔ)字幕+作業(yè)講解+實(shí)戰(zhàn)分享)
等你來(lái)譯:
你能在 10 分鐘之內(nèi)解決人物檢測(cè)的問(wèn)題嗎?
如何使用 OpenCV 編寫(xiě)基于 Node.js 命令行界面 和 神經(jīng)網(wǎng)絡(luò)模型的圖像分類
深度學(xué)習(xí)來(lái)自監(jiān)督的方法
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。