鄭宗超,陳雷放,劉一鳴,時(shí) 斌,魏 偉
(1.中國石油大學(xué)(華東)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山東青島 266520;2.青島農(nóng)業(yè)大學(xué)理學(xué)與信息科學(xué)學(xué)院,山東 青島 266109;3.華北電力大學(xué)(保定)電氣與電子工程學(xué)院,河北 保定 071003;4.青島海爾空調(diào)電子有限公司,山東青島 266100;5.青島海爾智能技術(shù)研發(fā)有限公司,山東青島 266100)
人工智能正在改變著人類的生活,作為人工智能的一個(gè)應(yīng)用方向,機(jī)器視覺[1]也發(fā)揮著重要的作用。機(jī)器視覺系統(tǒng)往往需要大量標(biāo)注好的圖像作為訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練來達(dá)到對圖像的識別效果。傳統(tǒng)的圖像標(biāo)注工具如LabelMe、精靈標(biāo)注助手等不支持自動(dòng)或半自動(dòng)標(biāo)注以及分工式標(biāo)注,標(biāo)注效率有待提升。因此文中提出通過圖像分割[2]算法進(jìn)行半自動(dòng)圖像標(biāo)注,針對圖像標(biāo)注過程的耗時(shí)操作對標(biāo)注過程進(jìn)行相應(yīng)優(yōu)化,并設(shè)計(jì)出基于微服務(wù)[3]的眾包式圖像標(biāo)注系統(tǒng),以達(dá)到高效率標(biāo)注圖像數(shù)據(jù)的目的。綜合考慮圖像分割效率和適用性,系統(tǒng)選擇基于圖論的經(jīng)典圖像分割算法GrabCut[4]作為交互式圖像標(biāo)注算法的基礎(chǔ),結(jié)合系統(tǒng)圖像標(biāo)注任務(wù)劃分以及標(biāo)注過程操作簡化設(shè)計(jì),以提高圖像的標(biāo)注速度和精度?;谖⒎?wù)架構(gòu)設(shè)計(jì)標(biāo)注系統(tǒng),以方便系統(tǒng)各模塊的充分解耦,提高系統(tǒng)的魯棒性及可維護(hù)性。
傳統(tǒng)圖像自動(dòng)或半自動(dòng)標(biāo)注方法一般包含兩個(gè)關(guān)鍵步驟,首先根據(jù)圖像特征對應(yīng)的文本關(guān)鍵詞訓(xùn)練分類器,對待標(biāo)注圖像進(jìn)行標(biāo)注時(shí),通過相應(yīng)的圖像分割算法分割目標(biāo)實(shí)例,經(jīng)過特定處理后轉(zhuǎn)化為向量輸入到分類器打標(biāo)簽,這樣就完成了待標(biāo)注圖像與相對文本關(guān)鍵詞的對應(yīng),標(biāo)注流程如圖1 所示。該方法的缺點(diǎn)是對于待標(biāo)注圖像集,需根據(jù)已知文本關(guān)鍵詞建立分類器,對于未知類別的圖像目標(biāo)實(shí)例不能進(jìn)行自動(dòng)標(biāo)注。而大數(shù)據(jù)環(huán)境下,圖像中目標(biāo)實(shí)例包含大量的關(guān)鍵詞,并且通常情況下圖像中存在多個(gè)不同子區(qū)域,而不同子區(qū)域?qū)?yīng)不同的文本關(guān)鍵詞,這就使得依賴于分類器的圖像標(biāo)注系統(tǒng)在多數(shù)情況下并不適用。
圖1 標(biāo)注流程
考慮到傳統(tǒng)半自動(dòng)標(biāo)注系統(tǒng)[5-6]標(biāo)注模式的不足,文中設(shè)計(jì)了一種通用標(biāo)注模式,不需要事先訓(xùn)練相應(yīng)的分類器,并且避免了受限于幾種確定的關(guān)鍵詞。如圖2 所示,基于一個(gè)標(biāo)簽集(由圖像集中每張圖像對應(yīng)的全部類別標(biāo)簽組成),系統(tǒng)根據(jù)用戶輸入的全部關(guān)鍵詞建立標(biāo)定組,每個(gè)標(biāo)定組只標(biāo)定一類目標(biāo),所有標(biāo)定組的標(biāo)簽合并成標(biāo)簽集,標(biāo)簽集包含了圖像集中全部實(shí)例及關(guān)鍵詞的對應(yīng)關(guān)系。這樣設(shè)計(jì)使系統(tǒng)具有較好的伸縮性,各類標(biāo)簽經(jīng)用戶一次輸入,在系統(tǒng)自動(dòng)打標(biāo)簽功能支持下標(biāo)注過程無需人工指定標(biāo)簽,可以滿足各種關(guān)鍵詞的標(biāo)注,而不需要訓(xùn)練分類器,也避免了受限于分類器的能力。由此圖像自動(dòng)標(biāo)注過程可以轉(zhuǎn)化為圖像分割過程。基于該設(shè)計(jì)模式,圖像標(biāo)注的關(guān)鍵在于圖像分割算法的選擇,算法效果決定了標(biāo)注結(jié)果的優(yōu)劣。
圖2 分組標(biāo)注模式
基于提出的標(biāo)注模式,可以將圖像標(biāo)注的問題看作交互式圖像分割的問題進(jìn)行處理。在計(jì)算機(jī)視覺領(lǐng)域,圖像分割一直是其中一個(gè)重要的課題。所謂圖像分割就是把圖像通過某些特征劃分成不同的子區(qū)域,其中每個(gè)子區(qū)域的像素表現(xiàn)出較高的相關(guān)性,如圖像中目標(biāo)與背景的分割。二十世紀(jì)后期以來,大量的研究人員在該領(lǐng)域做了大量的工作,也建立了一系列理論和方法,其中經(jīng)典的GrabCut 算法是一種基于圖論的圖像分割方法,能夠以用戶選擇的區(qū)域?yàn)榍疤徇M(jìn)行目標(biāo)的像素級分割。該算法基于圖像像素點(diǎn)、給定的前景終端節(jié)點(diǎn)S 及背景終端節(jié)點(diǎn)T建立帶有權(quán)值的無向圖,轉(zhuǎn)換過程如圖3 所示。
圖3 圖像轉(zhuǎn)帶權(quán)無向圖
無向圖G=<V,E>包含兩種邊,一種是普通像素之間的邊n-links,另一種是每個(gè)像素與人為假設(shè)的兩個(gè)終端節(jié)點(diǎn)之間的邊t-links,以像素為節(jié)點(diǎn)和以上兩種邊建立圖像的帶權(quán)無向圖后,根據(jù)Boy-kov和Kolmogorov 提出的max-flow/min-cut 算法[7]就可以獲得s-t 圖的最小割,算法通過求解圖的最小割將像素點(diǎn)劃分成屬于前景和背景的兩個(gè)不相交區(qū)域,圖的最小割通過最小化能量函數(shù)求解。
GrabCut 算法通過使用一個(gè)包含K個(gè)高斯分量的GMM 混合高斯模型[8]對圖像目標(biāo)和背景進(jìn)行建模,圖像采用RGB 顏色空間。對于圖像中的一個(gè)像素,其必然來自目標(biāo)GMM 或者背景GMM 的高斯分量。于是有向量:
式(1)中,kn代表第n個(gè)像素對應(yīng)的高斯分量。圖像的Gibbs 能量表示為:
U代表區(qū)域項(xiàng),V表示邊界項(xiàng)。區(qū)域項(xiàng)表示像素被歸為目標(biāo)或者背景的懲罰,由像素屬于目標(biāo)或背景的概率負(fù)對數(shù)累加得到,而圖像屬于目標(biāo)或者背景的概率由混合高斯密度模型給出,由此得到區(qū)域項(xiàng)的表達(dá)式:
其中,描述GMM 的3 個(gè)參數(shù):高斯分量的權(quán)重、每個(gè)高斯分量的均值以及協(xié)方差矩陣都需要通過學(xué)習(xí)得到。學(xué)習(xí)得到以上3 個(gè)參數(shù)后,就可以通過將像素向量代入目標(biāo)和背景GMM 得出像素輸入目標(biāo)或者背景的概率值,由此能夠確定區(qū)域項(xiàng)U。邊界項(xiàng)V的定義如式(4)所示:
邊界項(xiàng)V表示相鄰像素間不連續(xù)的懲罰。如果相鄰兩個(gè)像素的差別較大,那么它們分別屬于目標(biāo)和背景的概率就比較大;如果差別較小,那么它們同屬于目標(biāo)或者背景的概率則較大。建立起圖像的Gibbs 能量函數(shù)后,接下來通過選定一個(gè)包含目標(biāo)的區(qū)域作為初始的目標(biāo)區(qū)域,區(qū)域內(nèi)像素標(biāo)簽為1,即為可能的目標(biāo)像素;框外的像素為初始的背景區(qū)域,區(qū)域內(nèi)像素標(biāo)簽為0,即為背景像素。經(jīng)過人為劃分目標(biāo)及背景后,通過K-means[9]算法將屬于目標(biāo)和背景的像素劃分為K類,即GMM 中的K個(gè)高斯模型,通過這K個(gè)像素集合初始化每個(gè)高斯模型的未知參數(shù),從而估計(jì)出目標(biāo)和背景的GMM;得到目標(biāo)和背景的預(yù)估GMM 后,通過迭代最小化Gibbs 能量函數(shù)不斷優(yōu)化GMM 的參數(shù),直到找到圖的能量最小割,而最小割將圖像中目標(biāo)與背景劃分成不同的區(qū)域就完成了目標(biāo)的分割。
手動(dòng)添加目標(biāo)邊界框是一個(gè)非常耗時(shí)的操作,目前流行的標(biāo)注工具如LabelMe、精靈標(biāo)注助手等在框選目標(biāo)時(shí)都采用矩形框的方式,用戶操作時(shí)要進(jìn)行包括點(diǎn)擊想象中的目標(biāo)邊界、拖拽形成矩形區(qū)域、調(diào)整區(qū)域幾個(gè)操作,這種方式造成了不必要的時(shí)間和人力消耗。通過手動(dòng)拖拽形成的矩形區(qū)域往往不能緊密貼合目標(biāo),從而影響訓(xùn)練效果。于是采用通過4 個(gè)關(guān)鍵點(diǎn)自動(dòng)生成矩形框的方式取代拖拽生成,極大地簡化了用戶操作,并且能夠使標(biāo)注的區(qū)域更緊密地貼合目標(biāo)。
如圖4 所示,首先需要用戶指定目標(biāo)上的最左、最右、最上及最下4 個(gè)點(diǎn),然后通過計(jì)算得到矩形框的位置(即左上角坐標(biāo))以及寬度和高度,再將選中的圖像區(qū)域輸入作為GrabCut 的目標(biāo)區(qū)域,獲得對目標(biāo)的像素級分割。
圖4 基于關(guān)鍵點(diǎn)的目標(biāo)提取
由于目標(biāo)的4 個(gè)頂點(diǎn)很容易識別,相比拖拽形成矩形框不需要用戶對目標(biāo)位置進(jìn)行判斷,也無需多次調(diào)整,所以該方式有效地縮短了手工標(biāo)注時(shí)間。除目標(biāo)位置外,關(guān)鍵點(diǎn)還提供目標(biāo)上的4 個(gè)點(diǎn),因此計(jì)算得到的矩形區(qū)域能緊密貼合目標(biāo),從而為后續(xù)GrabCut 的圖像分割提供了更好的初始條件。
選取Pascal VOC 2012 數(shù)據(jù)集中的500 張圖片,對其中500 個(gè)人物目標(biāo)進(jìn)行標(biāo)注,獲得表1 所示的實(shí)驗(yàn)數(shù)據(jù)。
表1 關(guān)鍵點(diǎn)目標(biāo)獲取耗時(shí)測試
實(shí)驗(yàn)數(shù)據(jù)表明,基于關(guān)鍵點(diǎn)獲取目標(biāo)邊框的方法相比直接拖拽形成邊框在準(zhǔn)確度以及標(biāo)注耗時(shí)兩個(gè)方面都取得了更好的效果。
基于文中圖像標(biāo)注模式設(shè)計(jì),結(jié)合半自動(dòng)圖像標(biāo)注操作,具體標(biāo)注流程如圖5 所示。
圖5 圖像標(biāo)注流程
文中提出的圖像數(shù)據(jù)集管理標(biāo)注一體化平臺提供圖像集托管、眾包式分工標(biāo)注以及標(biāo)簽集的下載支持,另外提供用戶管理、國際化等支撐功能。根據(jù)功能的不同,將系統(tǒng)劃分為圖像集管理模塊、標(biāo)簽集管理模塊、圖像存儲模塊、數(shù)據(jù)導(dǎo)入導(dǎo)出代理、半自動(dòng)標(biāo)定代理、標(biāo)注算法模塊、用戶及授權(quán)服務(wù)模塊。系統(tǒng)架構(gòu)如圖6 所示。
圖6 標(biāo)注系統(tǒng)架構(gòu)
系統(tǒng)采用微服務(wù)架構(gòu),將主要功能模塊劃分成單個(gè)微服務(wù),前后端分離,運(yùn)用服務(wù)注冊與發(fā)現(xiàn)[10-11]機(jī)制實(shí)現(xiàn)服務(wù)間調(diào)用,并通過服務(wù)網(wǎng)關(guān)[12]提供服務(wù)的唯一入口,保障了系統(tǒng)安全。
2.2.1 服務(wù)注冊與發(fā)現(xiàn)
系統(tǒng)選擇Spring Cloud[13]作為微服務(wù)框架,采用Eureka 作為服務(wù)發(fā)現(xiàn)組件。微服務(wù)系統(tǒng)的服務(wù)注冊與發(fā)現(xiàn)機(jī)制主要包含3 個(gè)組成部分:服務(wù)注冊中心、服務(wù)提供者和服務(wù)消費(fèi)者。具體實(shí)現(xiàn)方式如下。
服務(wù)注冊中心微服務(wù)需引入Eureka 相關(guān)依賴,基于注解使該服務(wù)作為注冊中心生效,通過配置服務(wù)端口號和注冊中心地址,使各微服務(wù)注冊到該注冊中心上。當(dāng)某個(gè)服務(wù)調(diào)用其他微服務(wù)時(shí)便可以通過注冊中心發(fā)現(xiàn)并調(diào)用其他微服務(wù)。項(xiàng)目引入依賴spring-cloud-starter-netflix-eureka-server,并在啟動(dòng)類上添加@EnableEurekaServer 注解,然后配置注冊中心,在appliaction.yml 中添加如下配置:
服務(wù)提供者微服務(wù)的實(shí)現(xiàn)需引入的依賴是spring-cloud-starter-netflix-eureka-client,然后進(jìn)行相關(guān)配置,將服務(wù)本身暴露給其他服務(wù),從而實(shí)現(xiàn)接口調(diào)用。appliaction.yml 配置如下:
服務(wù)消費(fèi)者配置方式與服務(wù)提供者相同。
2.2.2 API網(wǎng)關(guān)
微服務(wù)架構(gòu)的應(yīng)用被拆分成一定粒度的微服務(wù),單體應(yīng)用客戶端的請求被負(fù)載均衡器分發(fā)到多個(gè)相同后端實(shí)例中的一個(gè),如果將后端服務(wù)全部暴露,勢必引發(fā)多種問題。服務(wù)網(wǎng)關(guān)為微服務(wù)應(yīng)用提供一個(gè)唯一的入口,請求通過服務(wù)網(wǎng)關(guān)微服務(wù)分發(fā)到后端具體的微服務(wù)上,保障了后端服務(wù)的安全性。系統(tǒng)采用Spring Cloud Gateway 實(shí)現(xiàn)服務(wù)統(tǒng)一入口,基本實(shí)現(xiàn)原理如圖7 所示。
圖7 API網(wǎng)關(guān)基本實(shí)現(xiàn)原理
每個(gè)微服務(wù)注冊到服務(wù)發(fā)現(xiàn)Eureka Server 上,API 網(wǎng)關(guān)通過配置完成前端請求的路由轉(zhuǎn)發(fā),將請求轉(zhuǎn)發(fā)至后端對應(yīng)的服務(wù)上。以用戶管理微服務(wù)為例,單個(gè)服務(wù)提供者的API 網(wǎng)關(guān)路由配置如下代碼示例所示,可根據(jù)此配置方式配置多個(gè)微服務(wù)路由。
2.2.3 系統(tǒng)后端接口測試
項(xiàng)目采用了前后端分離設(shè)計(jì),前端采用Vue.js[14]框架結(jié)合樁服務(wù)器Mock-Server 與后端并行開發(fā)。開發(fā)中使用Postman 進(jìn)行接口的測試,Postman 內(nèi)嵌了OAuth2[15-16]的認(rèn)證模型,通過配置可實(shí)現(xiàn)一系列共用認(rèn)證服務(wù)的API 同時(shí)獲得登錄認(rèn)證的功能。
以圖像訓(xùn)練數(shù)據(jù)集制作流程為例,首先需要將圖像導(dǎo)入,上傳完圖像集壓縮包后后端轉(zhuǎn)入異步解壓處理流程。上傳成功后可以根據(jù)導(dǎo)入的圖像集創(chuàng)建標(biāo)簽集,標(biāo)簽集可以包含多個(gè)類別,每一類劃分為一個(gè)標(biāo)定組。標(biāo)定組可劃分成多個(gè)標(biāo)定任務(wù)分配給指定用戶。每個(gè)被分配任務(wù)的用戶將得到一個(gè)由一組圖像和指定類別組成的標(biāo)定任務(wù)。任務(wù)分配時(shí)可指定任務(wù)所有者以及必須完成的期限。
在用戶的標(biāo)定任務(wù)頁面可以看到相應(yīng)的標(biāo)定任務(wù)列表。標(biāo)定任務(wù)管理頁面如圖8 所示。
圖8 標(biāo)定任務(wù)管理頁面
由標(biāo)注任務(wù)列表可進(jìn)入相應(yīng)任務(wù)的標(biāo)注操作頁面,如圖9所示。用戶只需根據(jù)提示標(biāo)注指定目標(biāo),而無需手動(dòng)添加標(biāo)簽??紤]到在復(fù)雜場景下圖像前景與背景的模糊界限會導(dǎo)致分割結(jié)果精度的下降,圖像標(biāo)注頁面提供了手動(dòng)圖像標(biāo)注的完整操作流程,用戶可通過拖拽進(jìn)行多邊形標(biāo)簽的形狀調(diào)整以及通過雙擊進(jìn)行標(biāo)簽刪除,另外可通過滾輪縮放和移動(dòng)圖像。
圖9 圖像標(biāo)注界面
系統(tǒng)半自動(dòng)標(biāo)注效果如圖10所示,用戶通過指定目標(biāo)的4 個(gè)關(guān)鍵點(diǎn),然后系統(tǒng)自動(dòng)計(jì)算出目標(biāo)所在最小矩形框,矩形框作為圖像分割算法的輸入,經(jīng)圖像分割獲取指定類別的目標(biāo)輪廓,并自動(dòng)添加類別標(biāo)簽。
圖10 圖像半自動(dòng)標(biāo)注效果
標(biāo)注過程中發(fā)起任務(wù)的用戶能夠查看各用戶的標(biāo)注進(jìn)度與當(dāng)前已標(biāo)注圖像的標(biāo)簽統(tǒng)計(jì)信息。待每個(gè)標(biāo)定組所劃分的各標(biāo)定任務(wù)標(biāo)注完成后由系統(tǒng)合并多類標(biāo)簽得到完整標(biāo)簽集。任務(wù)發(fā)起者可以在標(biāo)簽集詳情頁保存相應(yīng)的標(biāo)簽集壓縮包至本地。以VOC XML格式為例,最終導(dǎo)出的標(biāo)簽集如圖11所示。
圖11 標(biāo)簽集
為測試系統(tǒng)標(biāo)注效果,找5 名測試人員基于Pascal VOC 2012 數(shù)據(jù)集隨機(jī)選取的2 000 張圖像進(jìn)行測試。每張圖像標(biāo)注一個(gè)實(shí)例。首先讓測試人員使用常見傳統(tǒng)標(biāo)注工具進(jìn)行標(biāo)注,然后讓測試人員用系統(tǒng)進(jìn)行半自動(dòng)標(biāo)注,實(shí)驗(yàn)結(jié)果如表2 所示。
表2 系統(tǒng)標(biāo)注效果測試
實(shí)驗(yàn)產(chǎn)生了幾種不同標(biāo)注方式的實(shí)驗(yàn)數(shù)據(jù),包括IoU 均值、IoU >0.7%、總耗時(shí)及單張耗時(shí)。結(jié)果表明,在使用提出的半自動(dòng)標(biāo)注系統(tǒng)進(jìn)行標(biāo)注時(shí),在標(biāo)注速度上有了大幅度提升。從IoU 指標(biāo)來看,生成的標(biāo)簽相對手動(dòng)標(biāo)注不會造成精度的降低。經(jīng)系統(tǒng)實(shí)際測試表明,在實(shí)際使用中,可以以算法標(biāo)注為主,手動(dòng)調(diào)整為輔,可以使標(biāo)注更加精確,并且節(jié)省大量的時(shí)間和人為操作??傮w來說,系統(tǒng)的半自動(dòng)標(biāo)注大幅度提升了圖像數(shù)據(jù)集的標(biāo)注效率和質(zhì)量。
在機(jī)器視覺系統(tǒng)訓(xùn)練中,以人工標(biāo)注的方式進(jìn)行圖像訓(xùn)練數(shù)據(jù)集的標(biāo)注是非常耗時(shí)耗力的一項(xiàng)工作。在某些要求標(biāo)注精度較高的情況下,一張圖片可能耗費(fèi)一個(gè)人幾十分鐘的時(shí)間,如此一來,數(shù)據(jù)集標(biāo)注的成本可想而知。因此,文中調(diào)研了圖像標(biāo)注的實(shí)際需求,結(jié)合圖像分割算法,設(shè)計(jì)了一種半自動(dòng)圖像標(biāo)注系統(tǒng),經(jīng)實(shí)際測試,設(shè)計(jì)的系統(tǒng)大幅度降低了圖像標(biāo)注的人力成本和時(shí)間成本,在計(jì)算機(jī)視覺領(lǐng)域具有較高的應(yīng)用價(jià)值。