阿里妹導讀:數字化的時代,不管是商場裏的大小專櫃,仍是小區門口的便利店,大多仍處於「數據荒漠」中。店家不知道店內多少商品被人瀏覽,多少衣服被試穿了,做爲顧客的咱們也不知道哪些商品是最受同齡人喜好的暢銷好物。git
在新零售場景中,線下的行爲數據是潛藏的寶礦。如何進行數字化升級,更好輔佐商家和消費者,成爲擺在咱們眼前的重要課題。算法
下面,搜索事業部的算法專家京五將爲你們詳細介紹阿里在線下場景的客流數字化探索與應用。網絡
在互聯網時代,數據是全部應用的基礎,淘寶的商家能夠基於商品歷史的點擊成交量來判斷店內各個商品的狀況,並作出相應的運營行爲,淘寶的買家會根據商品歷史的成交數據,評論數據等,來輔助本身判斷是否進行購買,同時咱們平臺也會基於用戶和商品的歷史數據,來訓練模型,預測各個商品的點擊率,預測各個用戶的偏好,使展現的結果更符合用戶的需求。能夠看出,數據對於各個不一樣的角色都有很重要的做用。數據結構
在互聯網中,獲取數據相對容易,反觀線下零售場景,大部分數據都是缺失的,商家並不知道店內多少商品被瀏覽了,多少商品被試穿了,買家也不知道各件商品的歷史數據。併發
所以,咱們的客流數字化相關的探索,就是要將線下的用戶和商品的行爲數據收集起來,讓線下的行爲也能有跡可循,爲商業決策和市場運營提供準確有效的數據支撐,將傳統零售中的導購經驗逐漸數字化成可量化和統計的數字指標,可以輔助商家運營,同時幫助用戶進行決策。基於這些數據,也可以讓算法在線下發揮更大的做用。框架
總體方案以下圖所示,方案涉及場外的選品策略指導,線下引流,進店的人羣畫像,顧客軌跡跟蹤,人貨交互數據沉澱,試衣鏡互動/推薦,以及離店後的線上二次觸達。從場外到場內再到線上,構成了總體全流程的產品方案。socket
在門店客流數字化的探索中,硬件部署上,咱們使用了門店已有的監控攝像頭和RFID標籤,並結合視覺及射頻相關技術,經過在門店部署GPU終端進行計算。技術方案上,咱們基於人臉識別技術,識別進店用戶的性別,年齡,新老客等基礎屬性,並經過行人檢測跟蹤與跨攝像頭的行人重識別技術跟蹤用戶在門店內的動線變化,同時獲得總體門店各個區域的熱力圖分佈,此外,還經過攝像頭與RFID 多傳感器融合的技術識別用戶在門店內的行爲,包括翻動,試穿等,精肯定位門店內各個商品的瀏覽與試穿頻次以及用戶在線下的偏好。下面會主要介紹其中的行人檢測,行人重識別和動做識別這3個技術方向相關的優化。ide
行人檢測函數
在新零售的客流數字化場景中,咱們須要經過監控攝像頭對門店客流的進店頻次、性別、動做、行爲軌跡、停留時間等全面的記錄和分析。要達到咱們的目標,首先須要可以檢測並識別出攝像頭中的行人。性能
雖然目前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圖上展現區域熱力,讓門店可以更直觀的看到各個區域的熱度,區域動線圖展現了各個區域客流的去向和來源的佔比,基於區域熱力和動線數據,商家可以清晰的瞭解到門店各個區域的密度狀況以及各個區域之間顧客的轉移狀況,目前合做的品牌商也會基於區域的數據對店內的陳列作適當的調整,甚至有門店基於動線的數據從新調整整個門店的區域分佈狀況。
下圖爲門店進店客流的人羣畫像,展現了門店天天進店客流的性別和年齡的分佈,商家會基於進店的人羣畫像數據與當前品牌的目標人羣進行對比,並基於實際進店客流的分佈調整門店陳列商品的品類結構以及不一樣類型商品的佔比。
本文來自雲棲社區合做夥伴「阿里技術」,如需轉載請聯繫原做者。