阿里妹導讀:數字化的時代,無論是商場里的大小專櫃,還是小區門口的便利店,大多仍處於「數據荒漠」中。店家不知道店內多少商品被人瀏覽,多少衣服被試穿了,作為顧客的我們也不知道哪些商品是最受同齡人喜愛的暢銷好物。

在新零售場景中,線下的行為數據是潛藏的寶礦。如何進行數字化升級,更好輔佐商家和消費者,成為擺在我們眼前的重要課題。

下面,搜索事業部的演算法專家京五將為大家詳細介紹阿里在線下場景的客流數字化探索與應用。

在互聯網時代,數據是所有應用的基礎,淘寶的商家可以基於商品歷史的點擊成交量來判斷店內各個商品的情況,並做出相應的運營行為,淘寶的買家會根據商品歷史的成交數據,評論數據等,來輔助自己判斷是否進行購買,同時我們平台也會基於用戶和商品的歷史數據,來訓練模型,預測各個商品的點擊率,預測各個用戶的偏好,使展示的結果更符合用戶的需求。可以看出,數據對於各個不同的角色都有很重要的作用。

在互聯網中,獲取數據相對容易,反觀線下零售場景,大部分數據都是缺失的,商家並不知道店內多少商品被瀏覽了,多少商品被試穿了,買家也不知道各件商品的歷史數據。

因此,我們的客流數字化相關的探索,就是要將線下的用戶和商品的行為數據收集起來,讓線下的行為也能有跡可循,為商業決策和市場運營提供準確有效的數據支撐,將傳統零售中的導購經驗逐漸數字化成可量化和統計的數字指標,能夠輔助商家運營,同時幫助用戶進行決策。基於這些數據,也能夠讓演算法在線下發揮更大的作用。

整體方案

整體方案如下圖所示,方案涉及場外的選品策略指導,線下引流,進店的人群畫像,顧客軌跡跟蹤,人貨交互數據沉澱,試衣鏡互動/推薦,以及離店後的線上二次觸達。從場外到場內再到線上,構成了整體全流程的產品方案。

客流數字化探索

在門店客流數字化的探索中,硬體部署上,我們使用了門店已有的監控攝像頭和RFID標籤,並結合視覺及射頻相關技術,通過在門店部署GPU終端進行計算。技術方案上,我們基於人臉識別技術,識別進店用戶的性別,年齡,新老客等基礎屬性,並通過行人檢測跟蹤與跨攝像頭的行人重識別技術跟蹤用戶在門店內的動線變化,同時得到整體門店各個區域的熱力圖分布,此外,還通過攝像頭與RFID 多感測器融合的技術識別用戶在門店內的行為,包括翻動,試穿等,精確定位門店內各個商品的瀏覽與試穿頻次以及用戶在線下的偏好。下面會主要介紹其中的行人檢測,行人重識別和動作識別這3個技術方向相關的優化。

行人檢測

在新零售的客流數字化場景中,我們需要通過監控攝像頭對門店客流的進店頻次、性別、動作、行為軌跡、停留時間等全面的記錄和分析。要達到我們的目標,首先需要能夠檢測並識別出攝像頭中的行人。

雖然目前YOLO等目標檢測演算法可以做到近乎實時的計算性能,但其評估環境都是Titan X、M40等高性能GPU,且只能支持單路輸入。無論從硬體成本或是計算能力方面考慮,這些演算法都無法直接應用到真實場景中。當然YOLO官方也提供了像YOLOv3-Tiny這種輕量級的模型方案,但模型性能衰減過大,在COCO上mAP下降超過40%。同時現有目標檢測方案的泛化能力還比較弱,不同場景的差異對模型性能會造成較大的影響。門店場景下的視角、光線、遮擋、相似物體干擾等情況與開源數據集差異較大,直接使用基於VOC、COCO數據集訓練的模型對該場景進行檢查,效果非常不理想。我們分別針對模型的性能和在實際數據集的效果兩方面做了相應的優化。

網路結構精簡與優化

我們在YOLO框架的基礎上對模型進行改進,實現了一種輕量級實時目標檢測演算法,在服飾門店的真實場景下,和YOLOv3相比,模型性能下降不超過2%,模型大小縮小至原來的1/10,在Tesla P4上對比FPS提升268%,可直接部署到手機、晶元等邊緣設備上,真實業務場景中一台GTX1070可以同時支持16路攝像機同時檢測,有效節約了門店改造的經濟成本。

標準YOLOv3的網路結構有106層,模型大小有237M,為了設計一個輕量級的目標檢測系統,我們使用Tiny DarkNet來作為骨幹網路,Tiny DarkNet是一個極簡的網路結構,最大通道數為512,模型大小僅4M,該模型結構比YOLO官方的YOLOv3-Tiny的骨幹網路還要精簡,但精簡網路會造成特徵抽取能力的衰減,模型性能下降劇烈,在我們人工標註的2萬多張服飾門店場景數據集上,替換後的Tiny DarkNet + FPN結構較原生結構的AP-50(IOU=0.5)下降30%。我們在特徵抽取網路之後進行Spatial Pyramid Pooling[10],與原特徵一起聚合,之後通過下採樣與反卷積操作將不同層級特徵合併,希望將底層的像素特徵和高層的語義特徵進行更充分的融合來彌補特徵抽取能力的下降,整體網路結構如下圖所示,精簡後的檢測模型大小約為原來的1/10。

知識蒸餾進一步優化

知識蒸餾[2]通過Teacher Network輸出的Soft Target來監督Student Network學習網路中Dark Knowledge,以實現Knowledge Transfer的目的,與量化、剪枝、矩陣近似等方法常被用來實現對模型的壓縮。但蒸餾與量化等方法之間又是可以互相結合的,而且蒸餾本身對模型的修改更加透明,無需特殊的依賴及執行框架。

上圖是我們網路蒸餾的模型結構設計,蒸餾時我們採用原生YOLOv3作為Teacher Network,雖然YOLOv3擁有較好的檢測性能,且結構上與我們的模型比較相似,但直接在二者輸出層之間建立L2約束,無法克服Teacher Network中的雜訊及回歸預測的波動,結果反而抑制了Student Network的學習。實驗中發現Hint Layer的損失設計和回歸預測的不確定性是蒸餾效果的核心問題,強行在對應Channel之間建立損失約束的方式過於嚴苛。對於普通卷積而言,我們無需要求Teacher / Student Network的Input Channel順序保持一致,僅需要整個輸入的分布是一致的。每個Channel相當於一次採樣結果,相同的分布,采出的樣本順序可能多種多樣,但整體結果符合相同分布,同時經過激活函數的Channel分布不再穩定,需要進行歸一處理。為了避免Teacher Network回歸預測本身的不穩定,回歸損失設計時仍以Ground Truth為目標,將Teacher Network的Output作為Bound,僅對誤差大於Teacher Network的部分進行約束,本質上是在借Teacher Network來進行Online Hard Example Mining。

行人重識別

行人重識別(Person Re-identification)問題是指在跨攝像頭場景下,給定待查找的行人圖片,查找在其他攝像頭是否出現該人。一般用來解決跨攝像頭追蹤。在線下門店場景中,每個門店都會在各個不同的區域安裝攝像頭,當顧客在店內逛時,我們需要了解用戶是如何在各個區域之間活動,了解各個區域客流的去向與來源,因此需要將各個不同攝像頭中同一個行人進行關聯。

行人特徵提取

行人重識別的難點在於,多個攝像頭下拍攝行人的角度不同,圖像中的行人可能72變,同時還有可能會有不同程度的遮擋,導致直接使用整體的行人特徵來做重識別非常具有挑戰性,那能不能用人臉識別做行人重識別?理論上是可以的,但是在實際場景中非常難應用,首先,廣泛存在後腦勺和側臉的情況,做正臉的人臉識別難,其次,攝像頭拍攝的像素可能不高,尤其是遠景攝像頭裡面人臉截出來很可能都沒有32x32的像素。所以人臉識別在實際的重識別應用中存在很大的限制。

行人重識別問題中,如何學得一個魯棒的行人特徵表示成為了一個很關鍵的問題。學得行人特徵表示最直觀的方式是直接以整張行人圖片作為輸入,提取一個全局特徵,全局特徵的目標是學到能夠區分不同行人之間最突出的信息,比如衣服顏色等,來區分這個行人。然而監控場景的複雜性,使得這樣的方法的準確性受到了很大的限制,比如,各個攝像頭之間存在色差,並且門店的不同區域的光照條件會有差異,此外,還有很多穿相似服裝的行人。同時由於目前行人重識別數據集在體量及豐富性上有比較大的欠缺,一些不突出,不頻繁出現的細節特徵在全局特徵的訓練中很容易被忽略。

要解決上面提到的問題,使用局部特徵替換全局特徵是一個比較好的解決方案,基於局部特徵的行人重識別方法將原始輸入表示成多個特徵塊,每一個特徵塊代表一個局部的特徵,基於局部特徵的方法能夠更關注行人的局部細節方面的特徵。

基於局部特徵的方法,也存在一些問題,這一類方法將行人劃分為各個獨立的語義分塊,並沒有考慮各個局部特徵之間的關聯,因此,在我們的方案中,我們使用到了多級局部特徵的融合方案,在考慮各個局部特徵的同時考慮多個局部特徵的關聯關係,具體網路結構如下圖所示,在原始的局部特徵的基礎之上增加了多個不同尺度的局部特徵以及全局特徵,學到的特徵不僅能夠表示各個部位的細節特徵,還能表達不同部位融合在一起的特徵,相較原始版本更加豐富化。

目前基於此版本模型還在持續優化中,在Market數據集上Rank@1能達到96.19%,使用同樣骨幹網路結構的情況下提取全局特徵的版本的Rank@1隻能達到89.9%,而僅使用local特徵的版本Rank@1能夠達到92.5%,融合的方案相比兩個版本均有較明顯的提升。

跨數據集的行人重識別的探索與嘗試

由於線下場景的特殊性,我們的模型需要部署到各家不同的門店,各個門店的光線,環境存在很大的差異,不同門店的攝像頭安裝的角度也會有些許不同,因此我們在一個數據集上訓練的模型可能並不適用於所有門店,然而我們又不可能逐家門店去做數據的標註,因此,我們想通過一種方式,讓我們的模型能夠自適應到新的門店的數據中。

在門店中,由於顧客是在一個封閉空間,因此顧客在各個攝像頭之間的轉移是存在一定的規律的,比如說:顧客肯定是最先出現在門口的攝像頭,顧客只能在相鄰的兩個區域之間進行轉移等,基於門店場景的特性,我們首先嘗試了基於攝像頭時空信息的混合模型,參考[7],模型結構如下圖所示:

混合模型首先基於原始的視覺特徵的分類器來計算各個攝像頭以及不同時間間隔之間轉移的概率分布,再使用時空信息與原始分類器結合得到最終的結果。

人貨動作檢測

除了基礎的客流動線數據以外,顧客在門店中的行為數據也是非常有價值的,我們嘗試使用視覺結合RFID射頻信號的融合方案,試圖解決顧客在門店中與貨物的交互問題,即哪個顧客在什麼地點翻動/拿起了哪一件商品,比較類似線上的點擊數據。

人貨交互的數據在線下是很重要的一個環節,人貨交互的數據可以讓商家知道哪些商品被翻動的多,了解哪些商品比較能夠吸引顧客,哪一類顧客更喜歡哪些風格的商品,同時這一部分數據也完善了整個門店的漏斗轉化,以前商家僅僅能根據成交來判定每個商品的受歡迎程度,而有些潛在暢銷款可能是由於擺放的位置不恰當,導致可能根本沒有顧客仔細看到,導致最終成交額較低,同時有的商品雖然成交筆數不少,但是實際上被顧客拿起的次數也特別多,可能是因為這件商品在一個更顯眼的位置,相比同樣成交筆數的拿起次數較少的商品,實際轉化率更低。補全這個環節的數據對商家的線下運營有很關鍵的作用,同時這一部分行為數據在商家線上線下商品打通之後為線上服務起到最重要的作用。

人貨交互的數據是目前線下數據缺失的比較嚴重的環節,商家一般都能很容易的拿到商品的成交的統計數據,而人貨交互的數據由於發生更頻繁,且不易判斷,因此整體數據的收集難度比較高,此外人貨交互的數據需要精確到具體的SKU,單純的顧客發生了動作並沒有太大的意義,因此在人貨動作檢測的方案上,我們設計了一套結合視覺技術和RFID射頻信號的融合方案,得到最終的人貨交互數據。下圖為整體方案:

門店中裝配有監控攝像機設備與RFID接收器?設備,分別錄製實時視頻與RFID標籤受激反射的 時序信號,首先基於回傳的RFID信號與檢測哪些RFID標籤可能被翻動了,由於店鋪服務員已經將RFID標籤的EPC編號與商品的 SKU編號關聯入庫,基於被翻動的標籤EPC編號可以取到對應商品的SKU,同時,使用回傳的顧客圖片檢測出疑似有在翻動商品的顧客,並根據顧客的圖像坐標進行坐標變換,得到該顧客的真實物理坐標,最後,將檢測出的疑似被翻動的商品與疑似有翻動商品動作的顧客進行關聯,得到商品與行人的最佳匹配。

其中基於RFID射頻技術的商品動作識別是一個比較新的嘗試。當顧客翻動衣服時,衣服上的RFID標籤會隨之發生微小抖動,RFID接收機設備記錄標籤反射的信號RSSI,Phase等特徵值的變化,回傳到後台,演算法通過對每個天線回傳的信號值進行分析判斷商品是否發生翻動。基於RFID信號判斷商品翻動存在諸多問題,包括信號自身雜訊、環境多徑效應、偶然電磁雜訊、貨櫃對信號遮擋的影響等。同時RFID反射信號的大小與接收器離標籤距離遠近存在非線性關係,

其中,d代表RFID標籤與接收器之間距離, ,受Multipath和當前環境的影響,表示各種靜態設備誤差帶來的偏移。從公式中可以看出,接收器安裝的位置,商店環境等都會給RFID信號帶來很大影響,尋找統一的可以適用於不同商店、不同位置接收器的翻動判斷演算法存在很大挑戰。最初的版本我們使用RSSI和Phase的原始值作為特徵值來訓練模型,這樣的模型存在一個問題,在我們的樣本不充足的情況下,受環境的影響較大,在真實環境中往往不能達到離線測試的結果,因此,我們試圖基於原始的信號值產生於空間位置不那麼強相關的特徵值來輔助動作的判斷。

雖然頻率信息中的幅度信息與空間位置存在關係,但是當我們只關注於頻率分布(不同頻率成份的佔比)時,可以將頻率信息也當成與空間位置信息無關的特徵。頻率信息的獲取需要對RSSI信號與Phase信號進行離散傅利葉變換, 然後統計頻率信號與相位信號的分布圖。對得到的分布圖,計算當前分布與前一個時刻分布的JS散度(相對於KL散度,JS散度具有加法的對稱性,因此可以用來衡量多個分布之間的相對距離)。

基於相鄰時刻前後兩個樣本的JS散差異的版本在我們的測試數據上能夠達到94%的識別精度,相比最初版本基於原始的RSSI值和phase值作為特徵的版本的91.9%的精度,有一定的提升。

基於圖像的顧客動作檢測是經典的分類問題,為了減小對計算能力的需求,我們使用了:MobileNet[12]對行人檢測的圖像進一步分類,並根據模型Logits輸出進行了最優化參數尋優,在保持分類精度時,提高正例召回率,確保正例儘可能被召回,如下圖所示。

我們通過時間關聯程度與動作可疑程度兩個維度同時進行匹配,使得最終的匹配行人與翻動商品的準確率達到85.8%。

客流數字化應用

客流數字化產出的客流相關數據不僅僅用於商家的線下運營,同時我們也基於這部分數據在線下場的流量分發上有一些初步應用,淘寶是線上的一個很大的流量分發的入口,淘寶的搜索和推薦決定了消費者當前能看到哪些商品,也同時影響了各個商家和商品的整體流量情況,搜索和推薦就是將商家、商品和用戶做匹配,將適當的商品展示給合適的用戶,滿足消費者的購物體驗的同時,也平衡各個商家商品的流量分配,避免流量的浪費,實現流量的最大化的價值。

在線下商場,也有一樣的流量分發的需求。但是線下場相比線上,有兩個比較大的挑戰:1) 線下目前沒有統一的入口,類似線上的搜索和推薦應用,無法觸達到用戶;2) 線下沒有類似線上豐富的日誌和行為數據,沒有數據支撐比較難做到精準的個性化,無法優化效果。

在線下場的流量分發的探索中,我們使用商場已有的互動屏幕、門店的互動屏幕作為流量分發的出口,同時,利用前文提到的客流數字化沉澱的數據來支撐線下場的個性化流量分發。

場外引流屏

場外引流屏的作用,是進行第一級的流量分發,首先需要通過不同的互動玩法,營銷活動吸引用戶,再通過屏幕對用戶進行個性化的優惠券投放,引導用戶進入不同的門店。

在傳統商場中,用戶剛進來商場,可能會隨機地在這個樓層進行活動,當看到感興趣的品牌完成進店的活動,或者用戶會基於導覽屏,大概了解商場樓層的品牌分布情況,再進行有一定針對性的瀏覽。而我們的引流屏的作用是將合適的優惠推薦給對應的人,從而引導用戶進店,相當於在商場中島進行整體的流量分發,將集中在中島的用戶往各個不同的方向進行引導。整體方案如下圖所示:

整體方案依賴三部分的數據,分別是基於用戶的圖像特徵產出的人群屬性數據,以及各個店鋪的進店人群分布數據和店鋪的其他統計量的特徵,基於用戶當前的屬性特徵與店鋪的人群分布進行匹配,可以得到初步的個性化的店鋪推薦結果,此外,使用店鋪本身的統計量特徵作為輔助信息,在同等匹配條件下額外考慮各個店鋪本身的熱度,效率等維度特徵,以及當前所提供的優惠券的力度信息,得到最終的優惠券的排序,並展示給用戶。

場內試衣屏

場內試衣屏的作用是做第二層的流量分發,即用戶進店後,需要推薦哪些商品展示給用戶。在傳統的門店中,用戶進店後會在店內進行隨機的瀏覽,對於感興趣的衣服會找導購員提供試穿,試穿後導購員也會對顧客進行推薦。整個過程中存在一些問題,首先,用戶對於商品的瀏覽和商品擺放的位置關係很大,櫥窗的商品會更容易吸引用戶注意,而部分較密集的衣架區,用戶可能沒有辦法注意到部分貨品;其次,試穿之後導購進行的推薦也會因人而異,和導購本身的素質關係也較大,有些經驗豐富的導購員可以根據你個人的長相氣質推薦更適合你的商品,而更多的導購員只能簡單的基於當前的熱銷款來進行推薦,無法做到因人而異。

試衣屏推薦要解決的就是上述的兩個問題,整體展現形式如下圖:

在用戶進行試穿時,會在鏡子側方顯示商品的詳情信息,包括目前商品是否有折扣等,同時會基於用戶的試穿行為,推薦相關商品與搭配商品,給部分商品一次額外的展示機會,同時也能夠基於用戶的試穿以及用戶當前的圖像特徵給出個性化的推薦結果,方便用戶的選購,即使用戶暫時沒有這個消費習慣,鏡子屏幕上的推薦結果也能對導購員進行一些輔助決策,能夠幫助導購員給用戶推薦更加個性化更加豐富的商品。

整體演算法方案如下圖所示:

考慮到隱私問題,在我們的應用中,我們不去嘗試通過人臉關聯到對應的id,僅在場內通過用戶的行為和其他用戶行為的相似性進行推薦。

工程實現

AI inference是GPU終端計算重要的一環,最開始探索的時候,AI inference採用串列模式:

通過觀察測試數據,我們驚訝地發現,雖然程序已經處於視頻流圖片處理飽和的狀態,但是6核心CPU的使用率才到150%,GPU的使用率才到30%,也就是說,超過一半的硬體資源處於閑置狀態。 為了使得原本間歇性閑置的資源得到重新的利用,我們改造成了流水線模式,結構圖如下所示:

在多進程實現的流水線方案中,由於每個進程的數據都是相互獨立的,一個進程產生或修改的數據對另一個進程而言它是無感知。如何提高進程間的數據傳遞是能否高效實現並發的關鍵點。 我們採用了基於mmap ctypes實現的共享內存,對比管道、socket多進程通訊機制,共享內存在多進程數據通訊方案中是非常高效和靈活,參考multiprocessing Value的解決方案,使用ctypes內置的基本數據結構來實現我們的數據模型,非常方便的進行內存切分並轉換成可用的數據結構。

結合業務情況,我們的流水線工作模式會將各個階段分割為子任務,我們還設計了圖片共享隊列,整個過程只需要寫入一次圖片數據,各個階段只需要從這個共享隊列讀取圖片即可,等所有流程都操作完之後再從圖片隊列刪除這個圖片數據,這樣就能保證圖片操作的正確性和高效性。通過測試發現,我們實現的共享內存隊列在讀取數據上比pipe方式快了300多倍。

業務效果

目前我們客流數字化的數據已經沉澱到相應的產品,以下是基礎客流的示意圖,品牌商可以看到門店每日的基礎客流量以及分時段的客流情況,了解各個門店當前的經營狀況。

下圖為區域熱力圖和區域動線圖,區域熱力圖展示了門店在一天內各個小時各個區域的人流量密度情況,我們將各個不同攝像頭的數據進行整合,最終映射到門店的平面CAD圖上展示區域熱力,讓門店能夠更直觀的看到各個區域的熱度,區域動線圖展示了各個區域客流的去向和來源的佔比,基於區域熱力和動線數據,商家能夠清晰的了解到門店各個區域的密度情況以及各個區域之間顧客的轉移情況,目前合作的品牌商也會基於區域的數據對店內的陳列做適當的調整,甚至有門店基於動線的數據重新調整整個門店的區域分布情況。

下圖為門店進店客流的人群畫像,展示了門店每天進店客流的性別和年齡的分布,商家會基於進店的人群畫像數據與當前品牌的目標人群進行對比,並基於實際進店客流的分布調整門店陳列商品的品類結構以及不同類型商品的佔比。

本文作者:京五

原文鏈接

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎

本文來自雲棲社區合作夥伴「阿里技術」,如需轉載請聯繫原作者。


推薦閱讀:
相关文章