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

























































