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