百度飛槳EasyDL零售版貨架拼接服務(wù)架構(gòu)和算法詳解
在快消行業(yè)的商品識別需求場景中,快消品牌商的業(yè)務(wù)代表在終端門店拜訪銷售時(shí),需對商品陳列規(guī)范進(jìn)行審查。傳統(tǒng)做法需要人工統(tǒng)計(jì),耗費(fèi)時(shí)間長,人力成本高,且數(shù)據(jù)真實(shí)性無法保障。快消品牌商為了對訪銷過程進(jìn)行精細(xì)化管理,開始使用SFA、DMS等工具進(jìn)行數(shù)字化轉(zhuǎn)型,并探索利用AI技術(shù)對現(xiàn)有的數(shù)字化訪銷實(shí)現(xiàn)“降本、增效、動(dòng)銷”,推動(dòng)其規(guī)模化落地,最終拉動(dòng)業(yè)績增長。
EasyDL是基于百度飛槳框架PaddlePaddle推出的面向企業(yè)打造的一站式AI開發(fā)平臺,包括經(jīng)典版、專業(yè)版、零售版三款產(chǎn)品,面向不同人群、不同場景需求,提供高效進(jìn)行AI模型開發(fā)部署的平臺產(chǎn)品。其中百度EasyDL零售版圍繞零售快消品行業(yè)的數(shù)字化訪銷場景,提供了核心的商品檢測識別模型及配套服務(wù)能力,包括定制商品檢測服務(wù)、標(biāo)準(zhǔn)商品檢測服務(wù)和貨架拼接服務(wù)。標(biāo)準(zhǔn)商品檢測服務(wù)提供無需訓(xùn)練即可直接使用的商品檢測API,支持識別數(shù)千種常見飲品和日化用品;定制商品檢測服務(wù),提供易操作的定制模型頁面,用戶僅需要五步便可以定制新的商品識別模型。標(biāo)準(zhǔn)和定制商品檢測服務(wù)都支持返回商品的名稱、品牌、規(guī)格和商品在圖中的位置,可用于輔助統(tǒng)計(jì)完整貨架上的商品排面、貨架占比、商品分銷等陳列指標(biāo)。由于一些門店內(nèi)的貨架較長,需要對多張貨架局部圖片進(jìn)行拼接,才能統(tǒng)計(jì)完整貨架上的商品陳列指標(biāo),因此自動(dòng)實(shí)現(xiàn)貨架拼接并智能識別商品,成為快消品行業(yè)陳列審核效率提升的重要環(huán)節(jié)。為了滿足這一需求,百度EasyDL零售版推出了貨架拼接服務(wù)。
百度飛槳EasyDL零售版貨架拼接服務(wù)支持將多個(gè)貨架的局部圖片或視頻,組合為完整貨架圖片;同時(shí)支持使用定制的或標(biāo)準(zhǔn)的商品檢測服務(wù)對局部貨架圖片進(jìn)行商品檢測,并在拼接好的完整貨架圖中輸出商品檢測結(jié)果,其中包含SKU的名稱和數(shù)量,適用于需要在長貨架進(jìn)行商品檢測的業(yè)務(wù)場景,并且支持云服務(wù)調(diào)用、離線SDK部署或生成APP。下面,我們來看看貨架拼接服務(wù)的使用方式和具體實(shí)現(xiàn)細(xì)節(jié)。
1、百度飛槳EasyDL貨架拼接服務(wù)結(jié)構(gòu)總覽
上圖是貨架拼接服務(wù)的整體結(jié)構(gòu)總覽圖,用戶可以通過三種方式使用與體驗(yàn):1)直接調(diào)用云服務(wù)API;2)使用離線部署SDK;3)生成體驗(yàn)APP。
在云服務(wù)API方式中,為了方便用戶對需拼接的貨架圖片進(jìn)行上傳、查詢等動(dòng)作,我們提供了6個(gè)API接口,分別為:創(chuàng)建任務(wù)、上傳圖片、開始任務(wù)、查詢結(jié)果、終止任務(wù)和任務(wù)列表。其中,在查詢結(jié)果這個(gè)API中,根據(jù)任務(wù)狀態(tài)的進(jìn)度不同,共有六種可能的任務(wù)狀態(tài),包括:Created(已創(chuàng)建)、Queued(排隊(duì)中)、Running(正在拼接)、Success(拼接成功)、Failure(拼接失敗)、Terminated(已終止)。下圖為任務(wù)狀態(tài)的轉(zhuǎn)換圖:
離線SDK是將API進(jìn)行封裝后,支持用戶快速部署到多種硬件環(huán)境中離線使用,滿足各類無網(wǎng)絡(luò)環(huán)境或需要高并發(fā)返回預(yù)測結(jié)果的場景使用。
當(dāng)用戶完成模型發(fā)布后,在貨架拼接服務(wù)的頁面上可以選擇生成體驗(yàn)APP,下載到手機(jī)進(jìn)行使用。體驗(yàn)APP支持用戶拍攝貨架視頻,APP會自動(dòng)對視頻進(jìn)行抽幀獲取局部貨架圖片。如果用戶尚未發(fā)布一個(gè)模型但想要體驗(yàn)APP的使用,也可以通過https://ai.baidu.com/easydl/app/1001/vas/img-stitch申請邀測權(quán)限,步驟如下:
整個(gè)貨架拼接流程中使用的關(guān)鍵模塊和功能包括:
1)Task Manager: 任務(wù)信息管理服務(wù),提供了6個(gè)通用的API,管理貨架拼接任務(wù)的meta數(shù)據(jù)、完成用戶對任務(wù)的各種操作,對用戶數(shù)據(jù)鑒權(quán)等;
2)Daemon Scheduler:后臺守護(hù)進(jìn)程,負(fù)責(zé)掃描和調(diào)度可執(zhí)行的貨架拼接離線任務(wù);對任務(wù)進(jìn)行流控管理;任務(wù)執(zhí)行異常檢查等;
3)DagTask Scheduler:基于有向無環(huán)圖(DAG)調(diào)度和執(zhí)行任務(wù)。由于貨架拼接離線任務(wù)流程較為復(fù)雜,可以分為若干個(gè)子任務(wù),部分子任務(wù)可并行執(zhí)行,通過DAG的方式來組織和運(yùn)行整體離線任務(wù),可以提升任務(wù)的運(yùn)行效率,后面會詳細(xì)介紹離線任務(wù)的完整結(jié)構(gòu)。
2、百度飛槳EasyDL貨架拼接離線任務(wù)實(shí)現(xiàn)詳解
接下來,一起了解下離線任務(wù)是如何實(shí)現(xiàn)的。貨架拼接服務(wù)支持用戶上傳從上到下、橫向拍攝的多個(gè)視頻或者多組局部貨架圖片,貨架拼接任務(wù)會先后進(jìn)行橫向和縱向的貨架圖片拼接,獲取完整的貨架大圖;另外由于用戶在百度EasyDL平臺訓(xùn)練商品檢測模型使用的往往是貨架的局部圖片,因此需要使用局部圖片調(diào)用API進(jìn)行商品檢測,并根據(jù)拼接參數(shù)將檢測框的位置校準(zhǔn)的拼接大圖上。整個(gè)流程可拆分為以下5個(gè)子任務(wù):
1) 調(diào)用用戶指定的定制或者標(biāo)準(zhǔn)的商品檢測模型服務(wù)對局部貨架圖片進(jìn)行商品檢測,獲取商品名稱和在局部圖片上的檢測框位置信息。
2) 對每一組從左到右拍攝的局部貨架圖片,獲得一張拼接的完整貨架圖片。
3) 經(jīng)過步驟2,獲取N組貨架圖片橫向拼接后生成的大圖,對N張大圖進(jìn)行縱向的圖片拼接,獲得最終完整的貨架完整大圖。
4) 對于每一組從左到右拍攝的圖片,通過步驟2會得到的一組拼接參數(shù),使用這組參數(shù)計(jì)算,對這組圖片的商品檢測框的位置進(jìn)行相應(yīng)的平移、旋轉(zhuǎn)、拉伸等,將檢測框橫向校準(zhǔn)到拼接大圖上的相應(yīng)位置,并對重疊較多的檢測框進(jìn)行去重。
5) 類似與步驟4,通過步驟3產(chǎn)生的拼接參數(shù),對步驟4橫向校準(zhǔn)后的商品檢測框,再次做縱向的位置校準(zhǔn),得到商品在最終大圖上的位置。
整個(gè)流程總體可以組織如下所示的DAG:
從上圖可以發(fā)現(xiàn),在任務(wù)開始階段,子任務(wù)1和2沒有依賴的關(guān)系,可并行運(yùn)行;在子任務(wù)2成功后,任務(wù)3即可運(yùn)行,無需等待子任務(wù)1的結(jié)果;通過DAG方式可以使得子任務(wù)局部并行運(yùn)行,加快整體拼接任務(wù)的處理速度。另外,貨架圖片拼接子任務(wù)通過容器化的方式運(yùn)行,避免對部署環(huán)境的依賴,提升可擴(kuò)展性;通過調(diào)度資源工具,避免GPU、CPU等資源的搶占沖突,提升拼接任務(wù)的可靠性。
3、百度飛槳EasyDL貨架拼接算法詳解
縱觀整個(gè)貨架拼接離線任務(wù),其中較為核心的還是貨架拼接算法,算法的設(shè)計(jì)決定了拼接任務(wù)的速度、可靠性以及結(jié)果的準(zhǔn)確性等。下面,將對貨架拼接算法進(jìn)行詳細(xì)介紹。
3.1、貨架拼接算法
貨架拼接算法本質(zhì)上是屬于圖像拼接算法的范疇,在圖像拼接算法中,目前主要有三種不同的方法:1)全局對齊方法,以一個(gè)單應(yīng)性矩陣來對齊圖像,通過求解相機(jī)參數(shù)對圖像進(jìn)行變換和融合,輸出拼接圖像;2)空域變化繪制方法,將圖像劃分為密集的網(wǎng)格,每個(gè)網(wǎng)格都用一個(gè)單應(yīng)性矩陣對齊,然后對每個(gè)網(wǎng)格進(jìn)行優(yōu)化變形,采用全局對齊類似的方法對網(wǎng)格圖像進(jìn)行拼接;3)縫合線主導(dǎo)方法,以匹配圖像之間的縫合線為主導(dǎo),不用嚴(yán)格去對齊整個(gè)重疊區(qū)域,而是只對齊縫合線附近的區(qū)域,通過縫合線實(shí)現(xiàn)圖像的拼接。
而對于貨架拼接的場景來說,拍攝圖片的方式一般都是手機(jī)端平移拍攝,存在拍攝的角度比較隨意、拍攝距離近、需要拼接的圖片數(shù)量比較多的問題。而在上述的圖像拼接算法中,全局對齊方法要求各次拍攝時(shí)相機(jī)的光心近乎重合,即拍攝時(shí)相機(jī)只能做純旋轉(zhuǎn)運(yùn)動(dòng),對拍攝方式的要求很高??沼蜃兓L制方法和縫合線主導(dǎo)方法對匹配的特征內(nèi)點(diǎn)的數(shù)量和質(zhì)量要求較高,而且需要調(diào)整更多的超參數(shù),計(jì)算量較大,拼接速度慢,無法用于大量圖片的拼接任務(wù)。因此,上述幾種圖像拼接的方法都無法很好地解決貨架拼接場景存在的問題,不能直接用于貨架拼接。
針對上述貨架拼接場景存在的問題,我們在全局對齊方法的基礎(chǔ)上對拼接算法進(jìn)行了優(yōu)化。首先,針對平移拍攝角度比較隨意的問題,在進(jìn)行貨架圖像拼接之前,我們對輸入的貨架圖像進(jìn)行水平矯正,將所有圖像都矯正到相同的拍攝視角下,這樣可以有效減小拍攝角度對拼接效果的影響,拼接效果有了很大提升。其次,當(dāng)輸入的貨架圖片數(shù)量較多時(shí),為了減小拼接難度,提高拼接的效率,我們自動(dòng)對輸入的貨架圖片進(jìn)行分組,將大量圖片的單次拼接分解成少量圖片的多次并行拼接,可以有效降低拼接時(shí)間。
在分組拼接的過程中,我們采用與全局對齊類似的方法對單個(gè)分組的貨架圖片進(jìn)行拼接,通過貨架圖像之間的匹配、變換和融合,得到每個(gè)分組的拼接圖片。之后對多個(gè)分組的拼接圖片進(jìn)行合并,輸出整個(gè)貨架的拼接圖片和拼接參數(shù)。貨架拼接算法的整體流程如下:
3.2、SKU檢測框合并去重
SKU檢測框合并去重整體流程圖:
對于在相鄰圖片重疊部分的SKU,其在兩張圖片上都會被檢測出來,因此我們需要對這部分SKU進(jìn)行合并和去重,去除相同的SKU。具體步驟如下:
1)將每張圖片上檢測到的SKU檢測框坐標(biāo)根據(jù)貨架拼接的參數(shù)進(jìn)行變換,將單張圖片上的SKU檢測框坐標(biāo)轉(zhuǎn)換成拼接圖片上的SKU檢測框坐標(biāo)。
2)對于當(dāng)前圖片上的每個(gè)SKU檢測框,當(dāng)與其他某個(gè)SKU檢測框之間有重疊部分,且重疊部分的交并比(IOU)大于某一個(gè)閾值時(shí),判定這兩個(gè)SKU檢測框?qū)儆谕粋€(gè)檢測框。
3)根據(jù)這兩個(gè)SKU檢測框的坐標(biāo)以及置信度進(jìn)行合并去重,得到最終的SKU檢測框坐標(biāo)。
4)當(dāng)對所有圖片上的SKU檢測框都進(jìn)行合并去重后,統(tǒng)計(jì)拼接圖片上的每一個(gè)種類的SKU檢測框的數(shù)量,可以得到整個(gè)貨架上SKU的種類以及數(shù)量,輸出整個(gè)貨架上SKU的統(tǒng)計(jì)信息。
以上為百度飛槳EasyDL零售版貨架拼接服務(wù)架構(gòu)和算法詳解的全部內(nèi)容,為了全面助力快消品牌商對訪銷過程進(jìn)行精細(xì)化管理,圍繞快速消費(fèi)品企業(yè)在線下渠道中的銷量邏輯,百度大腦推出了基于AI技術(shù)的數(shù)字化訪銷解決方案,在EasyDL零售版的基礎(chǔ)上,還提供翻拍識別、門臉識別和門店拜訪行程規(guī)劃等AI能力,幫助品牌商有效提升一線業(yè)務(wù)人員人效,最終實(shí)現(xiàn)銷量的增長。
目前已有多家零售快消品牌商和服務(wù)商在實(shí)際業(yè)務(wù)中使用百度EasyDL零售版,提升終端門店管理與執(zhí)行的效率和效果,準(zhǔn)確地洞察商品在貨架上的真實(shí)信息,讓數(shù)據(jù)分析更高效精準(zhǔn),有效縮短決策時(shí)長,從而實(shí)現(xiàn)市場運(yùn)營與決策的智能化。
如有興趣,欲了解詳情,請?jiān)L問官網(wǎng)。https://ai.baidu.com/easydl/retail