圖像識別沒你想的那么難!看完這篇你也能成專家
原創(chuàng)【51CTO.com原創(chuàng)稿件】本地生活場景中包含大量極富挑戰(zhàn)的計(jì)算機(jī)視覺任務(wù),如菜單識別,招牌識別,菜品識別,商品識別,行人檢測與室內(nèi)視覺導(dǎo)航等。
這些計(jì)算機(jī)視覺任務(wù)對應(yīng)的核心技術(shù)可以歸納為三類:物體識別,文本識別與三維重建。
2018 年 11 月 30 日-12 月 1 日,由 51CTO 主辦的 WOT 全球人工智能技術(shù)峰會在北京粵財(cái) JW 萬豪酒店隆重舉行。
本次峰會以人工智能為主題,阿里巴巴本地生活研究院人工智能部門的負(fù)責(zé)人李佩和大家分享他們在圖像識別的過程中所遇到各種問題,以及尋求的各種解法。
什么是本地生活場景
我們所理解的本地生活場景是:從傳統(tǒng)的 O2O 發(fā)展成為 OMO(Online-Merge-Offline)。
對于那些打車應(yīng)用和餓了么外賣之類的 O2O 而言,它們的線上與線下的邊界正在變得越來越模糊。
傳統(tǒng)的線上的訂單已不再是只能流轉(zhuǎn)到線下,它們之間正在發(fā)生著互動和融合。
在 2018 年,我們看到滴滴通過大量投入,組建并管理著自己的車隊(duì)。他們在車?yán)镅b了很多監(jiān)控設(shè)備,試圖改造線下的車與人。
同樣,對于餓了么而言,我們不但對線下物流的配送進(jìn)行了改造,而且嘗試著使用機(jī)器人,來進(jìn)行無人配送、以及引入了智能外賣箱等創(chuàng)新。
可見在本地生活場景中,我們的核心任務(wù)就是將智能物聯(lián)(即 AI+IoT)應(yīng)用到 OMO 場景中。
上圖是阿里巴巴本地生活餓了么業(yè)務(wù)的人工智能應(yīng)用的邏輯架構(gòu)。和其他所有人工智能應(yīng)用計(jì)算平臺類似,我們在底層用到了一些通用的組件,包括:數(shù)據(jù)平臺、GPU 平臺、特征工程平臺、以及 AB 測試平臺。
在此之上,我們有:智能配送、分單調(diào)度和智能營銷等模塊。同時(shí),算法人員也進(jìn)行了各種數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)和認(rèn)準(zhǔn)優(yōu)化。
目前對于阿里巴巴的本地生活而言,我們的圖像視覺團(tuán)隊(duì)承擔(dān)著整個(gè)本地生活集團(tuán)內(nèi)部,與圖像及視覺相關(guān)的所有識別和檢測任務(wù)。而所有的圖像處理都是基于深度學(xué)習(xí)來實(shí)現(xiàn)的。
我將從如下三個(gè)方面介紹我們的實(shí)踐:
- 物體的識別。
- 文本的識別。此處特指對于菜單、店鋪招牌、商品包裝圖片文字的識別,而非傳統(tǒng)意義上對于報(bào)紙、雜志內(nèi)容的識別。
- 三維重建。
物體識別
在我們的生活場景中,有著大量對于物體識別的需求,例如:
- 餓了么平臺需要檢測騎手的著裝是否規(guī)范。由于騎手眾多,光靠人工管控,顯然是不可能的。
因此在騎手的 App 中,我們增加了著裝檢測的功能。騎手每天只需發(fā)送一張包含其帽子、衣服、餐箱的自拍照到平臺上,我們的圖像算法便可在后臺自動進(jìn)行檢測與識別。
通過人臉的檢測,我們能夠認(rèn)清是否騎手本人,進(jìn)而檢查他的餐箱和頭盔。
- 場景目標(biāo)識別。通過檢測行人、辦公區(qū)的桌椅、以及電梯的按鈕,保障機(jī)器人在無人配送的生活場景中認(rèn)識各種物體。
- 合規(guī)檢測。由于餓了么平臺上有著大量的商品、餐品和招牌圖片,營業(yè)執(zhí)照,衛(wèi)生許可證,以及健康證等。
因此我們需要配合政府部門通過水印和二維碼,來檢查各家餐館的營業(yè)執(zhí)照和衛(wèi)生許可證是否被篡改過。
另外,我們也要求餐館的菜品圖片中不能出現(xiàn)餐館的招牌字樣。這些都會涉及到大量的計(jì)算機(jī)視覺處理。
- 場景文本識別。在物體識別的基礎(chǔ)上,通過目標(biāo)檢測的應(yīng)用,對物體上的文字進(jìn)行識別,如:菜單里的菜品和菜價(jià)。
對于圖片目標(biāo)的檢測評價(jià),目前業(yè)界有兩個(gè)指標(biāo):
- 平均檢測精度。即物體框分類的準(zhǔn)確性。先計(jì)算每個(gè)類別的準(zhǔn)確性,再求出所有類別的準(zhǔn)確性。
- IOU(交并比)。即預(yù)測物體框與實(shí)際標(biāo)準(zhǔn)物體框之間覆蓋度的比例,也就是交集和并集的比例。
上圖列出了目標(biāo)檢測的常用基礎(chǔ)算法,它們分為兩類:
- 兩步法
- 一步法
兩步法歷史稍久一些,它源于傳統(tǒng)的滑窗法。2014 年,出現(xiàn)了采用深度學(xué)習(xí)進(jìn)行目標(biāo)檢測的 R-CNN。
之后又有了金字塔池化的 SPP 方法,以及在此之上研發(fā)出來的 Fast R-CNN 和 Faster R-CNN 兩個(gè)版本。
當(dāng)然,F(xiàn)aster R-CNN 算法在被運(yùn)用到機(jī)器人身上進(jìn)行實(shí)時(shí)檢測時(shí),為了達(dá)到毫秒級檢測結(jié)果的反饋,它往往會給系統(tǒng)的性能帶來巨大的壓力。
因此,有人提出了一步法,其中最常用的是在 2016 年被提出的 SSD 算法。
雖然 2017 年、2018 年也出現(xiàn)了一些新的算法,但是尚未得到廣泛的認(rèn)可,還需進(jìn)一步的“沉淀”。
下面,我們來討論那些針對不同場景目標(biāo)的解決算法。在此,我不會涉及任何的公式,也不會涉及任何的推導(dǎo),僅用簡單淺顯的語言來描述各個(gè)目標(biāo)檢測算法背后的核心思想。
R-CNN 的簡單思路是:
- Region Proposal。首先,將目標(biāo)圖像劃分成許多個(gè)網(wǎng)格單元,這些網(wǎng)格被稱為超像素;然后,將同樣顏色或紋理的相似相鄰超像素進(jìn)行聚類,并找出外切的矩形框。該矩形框便稱為 Region Proposal。
- Classification。首先用 CNN 提取特征;再得到卷積的線性圖,然后再用 SoftMax 或者其他的分類方法進(jìn)行普通分類。
各種上述 R-CNN 流程的問題在于:產(chǎn)生的候選框數(shù)量過多。由于矩形框的形狀,包括長度、寬度、中心坐標(biāo)等各不相同,因此如果一張圖中包含的物體過多,則找出來的矩形框可達(dá)成千上萬個(gè)。
鑒于每個(gè)候選框都需要單獨(dú)做一次 CNN 分類,其整體算法的效率并不高。當(dāng)然,作為后期改進(jìn)算法的基礎(chǔ),R-CNN 提供了一種全新的解決思路。
SPP(空間金字塔池化)的特點(diǎn)是:
- 所有的候選框共享一次卷積網(wǎng)絡(luò)的前向計(jì)算。即:先將整張圖進(jìn)行一次性 CNN 計(jì)算,并提取特征后,然后在特征響應(yīng)圖上進(jìn)行后續(xù)的操作。由于僅作卷積計(jì)算,其性能提升了不少。
- 通過金字塔結(jié)構(gòu)獲得在不同尺度空間下的 ROI 區(qū)域。即:通過將圖片分成許多不同的分辨率,在不同的尺度上去檢測物體。
例如:某張圖片上既有大象,又有狗,由于大象與狗的體積差異較大,因此傳統(tǒng) R-CNN 檢測,只能專注大象所占的圖像面積。
而 SPP 會將圖像縮小,以定位較小的圖片。它可以先檢測出大象,再通過圖像放大,檢測出狗。可見它能夠獲取圖像在不同尺度下的特征。
- FastR-CNN 在簡化 SPP 的同時(shí),通過增加各種加速的策略,來提升性能。不過,它在算法策略上并無太大的變動。
- FasterR-CNN 創(chuàng)造性地提出了使用神經(jīng)網(wǎng)絡(luò) RPN(Region Proposal Networks),來代替?zhèn)鹘y(tǒng)的 R-CNN 和 SPP,并得到了廣泛的應(yīng)用。
它通過神經(jīng)網(wǎng)絡(luò)來獲取物體框,然后再使用后續(xù)的 CNN 來對物體框進(jìn)行檢測,進(jìn)而實(shí)現(xiàn)了端到端的訓(xùn)練。
上圖是我整理的 Faster R-CNN 執(zhí)行邏輯框架圖,其流程為:
- 使用 CNN 計(jì)算出圖像的卷積響應(yīng)圖。
- 執(zhí)行 3×3 的卷積。
- 使用兩個(gè)全連接層,預(yù)測每個(gè)像素所對應(yīng)的位置是否有物體框的出現(xiàn),進(jìn)而產(chǎn)生兩個(gè)輸出(“是”的概率和“否”的概率)。
如果有物體框的輸出,則預(yù)測物體框中心坐標(biāo)與大小。此處有四個(gè)輸出(中心坐標(biāo)的 X 和 Y,以及長和寬)。因此,對于每個(gè)物體框來說,共有六個(gè)輸出。
- 使用通用的 NMS 進(jìn)行后處理,旨在對一些重疊度高的物體框進(jìn)行篩選。例如:圖中有一群小狗,那么檢測出來的物體框就可能會重疊在一起。
通過采用 NMS,我們就能對這些重合度高的框進(jìn)行合并或忽略等整理操作,并最終輸出物體的候選框。
- 采用 CNN 進(jìn)行分類。
可見,上述提到的各種兩步方法雖然精度高,但是速度較慢。而在許多真實(shí)場景中,我們需要對目標(biāo)進(jìn)行實(shí)時(shí)檢測。
例如:在無人駕駛時(shí),我們需要實(shí)時(shí)地檢測周圍的車輛、行人和路標(biāo)等。因此,一步方法正好派上用場。YOLO 和 SSD 都屬于此類。
YOLO 方法的核心思想是:對于整張圖片只需要掃描一次,其流程為:
- 使用 CNN 獲取卷積響應(yīng)圖。
- 將該響應(yīng)圖劃分成 S*S 個(gè)格子。
- 使用兩個(gè)全連接層來預(yù)測物體框的中心坐標(biāo)與大小,以及格子在物體類別上的概率。
- 將圖片中所有關(guān)于物體檢測的信息存入一個(gè) Tensor(張量)。
- 使用后處理,輸出物體的類別與框。
由于此方法較為古老,因此在實(shí)際應(yīng)用中,一般不被推薦。
SSD 采用了一種類似于金字塔結(jié)構(gòu)的處理方法。它通過循環(huán)來對給定圖片不斷進(jìn)行降采樣,進(jìn)而得到分辨率更低的另外一張圖片。
同時(shí),在降采樣之后的低分辨率圖片上,該方法還會反復(fù)進(jìn)行物體檢測,以發(fā)覺物體的信息。
因此,SSD 的核心思想是:將同一張圖片分成了多個(gè)級別,從每個(gè)級別到其下一個(gè)級別采用降采樣的方式,從而檢測出每個(gè)級別圖片里的物體框,并予以呈現(xiàn)。
可見,對于 YOLO 而言,SSD 能夠發(fā)現(xiàn)不同分辨率的目標(biāo)、發(fā)掘更多倍數(shù)的候選物體框,在后續(xù)進(jìn)行重排序的過程中,我們會得到更多條線的預(yù)定。
當(dāng)然 SSD 也是一種非常復(fù)雜的算法,里面含有大量有待調(diào)整的細(xì)節(jié)參數(shù),因此大家可能會覺得不太好控制。
另外,SSD 畢竟還是一種矩形框的檢測算法,如果目標(biāo)物體本身形狀并不規(guī)則,或呈現(xiàn)為長條形的話,我們就需要使用語音分割來實(shí)現(xiàn)。
文本識別
除了通過傳統(tǒng)的 OCR 方法,來對健康證、營業(yè)執(zhí)照進(jìn)行識別之外,我們還需要對如下場景進(jìn)行 OCR 識別:
- 通過識別店鋪的招牌,以保證該店鋪上傳的照片與其自身描述相符。
- 通過對小票和標(biāo)簽之類票據(jù)的識別,把靠人流轉(zhuǎn)的傳統(tǒng)物流過程,變成更加自動化的過程。
- 對各式各樣的菜單進(jìn)行識別。
傳統(tǒng)的 OCR 流程一般分為三步:
- 簡單的圖像處理。例如:根據(jù)拍攝的角度,進(jìn)行幾何校正。
- 提取數(shù)字圖像的特征,進(jìn)行逐個(gè)字符的切割。
- 對于單個(gè)字符采用 AdaBoost 或 SVM 之類的統(tǒng)計(jì)式機(jī)器學(xué)習(xí),進(jìn)而實(shí)現(xiàn)光學(xué)文字識別。
但是鑒于如下原因,該流程并不適合被應(yīng)用到店鋪的菜單識別上:
- 由于過多地依賴于攝像角度和幾何校正之類的規(guī)則,因此在處理手機(jī)拍攝時(shí),會涉及到大量半人工的校正操作。
- 由于目標(biāo)文字大多是戶外的廣告牌,會受到光照與陰影的影響,同時(shí)手機(jī)的抖動也可能引發(fā)模糊,所以傳統(tǒng)識別模型不夠健壯,且抗干擾能力弱。
- 由于上述三步走的模型串聯(lián)過多,因此每一步所造成的誤差都可能傳遞和累積到下一步。
- 傳統(tǒng)方法并非端到端模式,且文字行識別必須進(jìn)行單字符切分,因此無法實(shí)現(xiàn)對整行進(jìn)行識別。
因此,我們分兩步采取了基于深度學(xué)習(xí)的識別方案:文字行檢測+文字行識別。
即先定位圖片中的文字區(qū)域,再采用端到端的算法,實(shí)現(xiàn)文字行的識別。
如上圖所示,文字行的檢測源于物體識別的算法,其中包括:
- 由 Faster R-CNN 引發(fā)產(chǎn)生了 CTPN 方法,專門進(jìn)行文字行的檢測。
- 由 SSD 引出的 Textboxes 和 Textboxes++。
- 由全卷積網(wǎng)絡(luò)或稱為 U-Net 引出的 EAST 等。
說到全卷積網(wǎng)絡(luò)(FCN),它經(jīng)常被用來進(jìn)行語義分割,而且其 OCR 的效果也不錯(cuò)的。
從原理上說,它采用卷積網(wǎng)絡(luò),通過提取特征,不斷地進(jìn)行卷積與池化操作,使得圖像越來越小。
接著再進(jìn)行反卷積與反池化操作,使圖像不斷變大,進(jìn)而找到圖像物體的邊緣。因此,整個(gè)結(jié)構(gòu)呈U字型,故與 U-Net 關(guān)聯(lián)性較強(qiáng)。
如上圖所示:我們通過將一張清晰的圖片不斷縮小,以得到只有幾個(gè)像素的藍(lán)、白色點(diǎn),然后再將其逐漸放大,以出現(xiàn)多個(gè)藍(lán)、白色區(qū)域。
接著,我們基于該區(qū)域,使用 SoftMax 進(jìn)行分類。最終我們就能找到該圖像物體的邊緣。
經(jīng)過實(shí)踐,我們覺得基于全卷積網(wǎng)絡(luò)的 EAST效果不錯(cuò)。如上圖所示,其特點(diǎn)是能夠檢測任意形狀的四邊形,而不局限于矩形。
EAST 的核心原理為:我們對上圖左側(cè)的區(qū)域不斷地進(jìn)行卷積操作,讓圖像縮小。在中間綠色區(qū)域,我們將不同尺度的特征合并起來。
而在右側(cè)藍(lán)色區(qū)域中,我們基于取出的特征,進(jìn)行兩種檢測:
- RBOX(旋轉(zhuǎn)的矩形框),假設(shè)某個(gè)文字塊仍為矩形,通過旋轉(zhuǎn)以顯示出上面的文字。
- QUAD(任意四邊形),給定四個(gè)點(diǎn),連成一個(gè)四邊形,對其中的文字進(jìn)行檢測。
對于文字行的識別,目前業(yè)界常用的方法是 CTC+Bi-LSTM+CNN。如上圖所示,我們應(yīng)該從下往上看:首先我們用 CNN 提取給定圖像的卷積特征響應(yīng)圖。
接著將文字行的卷積特征轉(zhuǎn)化為序列特征,并使用雙向 LSTM 將序列特征提取出來;然后采用 CTC 方法,去計(jì)算該圖像的序列特征與文本序列特征之間所對應(yīng)的概率。
值得一提的是,CTC 方法的基本原理為:首先通過加入空白字符,采用 SoftMax 進(jìn)行步長特征與對應(yīng)字符之間的分類。
籍此,對于每個(gè)圖像序列,它都能得到字符序列出現(xiàn)的概率。然后通過后處理,將空白字符和重復(fù)符號刪除掉,并最終輸出效果。
三維重建
在無人駕駛的場景中,我們有時(shí)候可能需要通過移動攝像頭,將采集到的數(shù)據(jù)構(gòu)建出建筑物的三維結(jié)構(gòu)。
如上圖所示,其核心框架為:首先對各種給定的圖片進(jìn)行不只是 CNN 的特征提取,我們還可以用 SIFT 方法(見下文)提取其中的一些角點(diǎn)特征。
然后,我們對這些角點(diǎn)進(jìn)行三角定位,通過匹配找到攝像頭所在的空間位置。
我們使用光束平差,來不斷地構(gòu)建空間位置與攝像頭本身的關(guān)系,進(jìn)而實(shí)現(xiàn)三維構(gòu)建。
上面提到了 SIFT 特征提取,它的特點(diǎn)是本身的速度比較慢。因此為了滿足攝像頭在移動過程中進(jìn)行近實(shí)時(shí)地三維構(gòu)建,我們需要對該算法進(jìn)行大量的調(diào)優(yōu)工作。
同時(shí),在三維重建中,我們需要注意重投影誤差的概念。其產(chǎn)生的原因是:通常,現(xiàn)實(shí)中的三維點(diǎn)落到攝像機(jī)上之后,會被轉(zhuǎn)化成平面上的點(diǎn)。
如果我們想基于平面的圖像,構(gòu)建出一個(gè)三維模型的話,就需要將平面上的點(diǎn)重新投放到三維空間中。
然而,如果我們對攝像機(jī)本身參數(shù)的估算不太準(zhǔn)確,因此會造成重新投放的點(diǎn)與它在三維世界的真正位置之間出現(xiàn)誤差。
如前所述,我們還可以使用光束平差來求解矩形的線性方程組。通常它會用到稀疏 BFGS(擬牛頓法)去進(jìn)行求解,進(jìn)而將各個(gè)三維的點(diǎn)在空間上予以還原。
關(guān)于離群點(diǎn)的過濾。由于我們在做三維重建的過程中,會碰到大量的噪點(diǎn),那么為了過濾它們,我們會使用 RANSAC 方法來進(jìn)行離群點(diǎn)的過濾。
從原理上說,它會不斷隨機(jī)地抽取部分點(diǎn),并構(gòu)建自由模型,進(jìn)而評比出較好的模型。
如上圖所示,由于上方兩張圖里有著大量的邊緣位置特征,我們可以通過 RANSAC 離群點(diǎn)過濾,將它們的特征點(diǎn)對應(yīng)起來,并最終合成一張圖。而且通過算法,我們還能自動地發(fā)覺第二張圖在角度上存在著傾斜。
總的說來,我們在物體識別、文本識別、以及三維重建領(lǐng)域,都嘗試了大量的算法。希望通過上述分析,大家能夠?qū)Ω鞣N算法的效果有所認(rèn)識與了解。
作者:李佩
簡介:阿里巴巴本地生活研究院人工智能部門負(fù)責(zé)人
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請注明原文作者和出處為51CTO.com】