CVPR2018: 基於時空模型無監督遷移學習的行人重識別
Unsupervised Cross-dataset Person Re-identification by Transfer Learning of Spatial-Temporal Patterns
論文可以在arxiv下載,老闆一作,本人二作,也是我們實驗室第一篇CCF A類論文,這個方法我們稱為TFusion。
代碼:
ahangchen/TFusion- 解決的目標是跨數據集的Person Reid
- 屬於無監督學習
- 方法是多模態數據融合 + 遷移學習
- 實驗效果上,超越了所有無監督Person reid方法,逼近有監督方法,在部分數據集上甚至超越有監督方法
本文為你解讀CVPR2018 TFusion
轉載請註明作者夢裡茶
Task
行人重識別(Person Re-identification)是一個圖像檢索問題,給定一組圖片集(probe),對於probe中的每張圖片,從候選圖片集(gallery)中找到最可能屬於同一個行人的圖片。
行人重識別數據集是由一系列監控攝像頭拍攝得到,並用檢測演算法將行人摳出,做行人的匹配。在這些數據集中,人臉是十分模糊的,無法作為匹配特徵,而且由於多個攝像頭拍攝視角不同,同個人可能被拍到正面,側面,背面,具有不同的視覺特徵,因此是一個比較難的圖像匹配問題。常用數據集有很多,可以在這個網站查到。
Related Work
行人重識別問題有以下幾種常見的解決方案:
基於視覺的行人重識別
這類方法通常提取行人圖像特徵,對特徵進行距離度量,從而判斷是否是同一個人。
有監督學習
這類方法通常需要提供行人圖片和行人id標籤(person1,person2等),訓練模型,提取圖像特徵,根據兩張圖特徵的距離大小(可以用餘弦距離,歐氏距離之類的計算),為probe中的每張圖和gallery中的每張圖計算其相似度,根據相似度將gallery中的圖片排序,排序越高越可能為同一個人。
這方面的論文代表有TOMM2017: A Discriminatively Learned CNN Embedding for Person Re-identification,我們採用的基礎圖像分類器就是基於這篇論文用Keras實現的,後面細講。
無監督學習
在CVPR2018之前,Person Reid領域正式發表的無監督工作只有CVPR2016的UMDL:Unsupervised Cross-Dataset Transfer Learning for Person Re-identification,基於字典學習方法,在多個源數據集上學習跨數據集不變性字典,遷移到目標數據集上。然而準確率依然很低。
結合攝像頭拓撲的行人重識別
行人圖片是攝像頭拍到的,攝像頭之間有一定的距離,行人的移動有一定的速度限制,因此行人在攝像頭間的移動時間就會呈現出一定規律,比如,AB攝像頭間有10米,人行走速度2m/s,如果AB攝像頭在1s內捕捉到了兩張圖片,則這兩張圖片不可能是同一個人的,因此我們可以利用攝像頭拓撲約束來提升行人重識別的準確率。
然而,這類方法往往有以下缺陷:
- 有些方法需要預先知道攝像頭拓撲(AB攝像頭之間的距離)
- 有些方法可以根據拍攝到的圖像數據推斷出攝像頭拓撲,但是需要圖像有標註(是否是同一個人)
- 即使推斷出攝像頭拓撲,與圖像的融合結果依然很差
遷移學習
遷移學習現在是深度學習領域很常用的一個套路了,在源數據集上預訓練,在目標數據集上微調,從而使得源數據集上的模型能夠適應目標場景。這方面的論文代表有前面講的UMDL,和Deep transfer learning person re-identification,然而,目前的遷移學習大多需要標籤,而無監督遷移學習效果又很差,仍然有很大提升空間。
更多關於Person Reid的內容可以看一下我在博客寫的幾篇調研
Motivation
- 現有的行人重識別數據集中是否包含時空信息?包含的話是否存在時空規律?
- 缺乏兩個時空點是否屬於同一行人這種標籤時,如何挖掘時空信息,構建時空模型?
- 如何融合兩個弱分類器?有監督的融合有boosting演算法可以用,無監督呢?
- 在缺乏標籤的條件下,如何進行有效的遷移學習?
對應有三個創新點
- 無監督的時空模型構建
- 基於貝葉斯推斷的時空圖像模型融合
- 基於Learning to Rank的遷移學習
接下來詳細解析我們的方法。
時空模型
數據集中的時空規律
所謂時空模型,即一個攝像頭網路中,行人在給定兩個攝像頭間遷移時間的分布。
我們看遍所有Reid數據集,發現有三個數據集有時空信息,Market1501, GRID, DukeMTMC4ReID,其中,DukeMTMC-ReID是2017年後半年才出來的,時間比較倉促在論文中就沒有包含跟它相關的實驗。Market1501是一個比較大的Person Reid數據集,GRID是一個比較小的Person Reid數據集,並且都有六個攝像頭(GRID中雖然介紹了8個攝像頭,實際上只有6個攝像頭的數據)。
例如,Marke1501中一張圖片的時空信息是寫在圖片名字中的:
0007_c3s3_077419_03.jpg:
- 0007代表person id,
- c3代表是在3號攝像頭拍到的,也就是空間信息,
- s3代表屬於第3個時間序列(GRID和DukeMTMC中沒有這個序列的信息,在Market1501中,不同序列的屬於不同起始時間的視頻,同一系列不同攝像頭的視頻起始時間相近),
- 077419為幀號,也就是時間信息。
我想吐槽的是,其實時空信息是非常容易保存的,只要知道圖片是在什麼時候,哪台攝像機上拍攝,就能夠將時空信息記錄並有效利用起來,希望多模態數據融合得到更多重視之後,做數據集的人能夠更加重視可保存的信息吧。
我們首先通過Market1501中的真實行人標籤,計算訓練集中所有圖片對對應的時空點對對應的遷移時間,這裡可視化了從攝像頭1出發的行人,到達其他攝像頭需要的時間的分布。
可以看到,到達不同目標攝像頭的峰值位置不同,其中從攝像頭1到攝像頭1,意味著被單個攝像頭拍到連續多幀,所以峰值集中在0附近,從攝像頭1到攝像頭2,峰值集中在-600附近,意味著大部分人是單向從攝像頭2運動到攝像頭1,等等,並且,說明這個數據集中存在顯著可利用的時空規律。
無監督的時空模型構造
我們將遷移時間差命名為delta,這樣說起來方便一點。
如果我們能夠統計一個數據集中的所有delta,給定一個新的delta(兩個新的圖片對應的兩個時空點算出來的),我們能夠用極大似然估計,用在這個delta前後一定範圍(比如100幀)的delta的出現頻率(=目標範圍delta數量/總的delta數量),作為新時間差出現的概率,也就是兩個時空點是同一人產生的概率。
但是!問題是我們在目標場景上往往是沒有行人標記數據的!
於是我們就思考,
- 我們能不能根據兩個時空點對應的兩張圖是否屬於同一個人,來決定兩個時空點是否屬於同一個人?
- 而兩張圖是否屬於同一個人,其實是一個圖像匹配的二分類問題,我們可以用一些視覺模型來做,
- 但是這種視覺模型往往是需要有標籤訓練的,無標籤的視覺模型往往比較弱
- 視覺模型弱沒關係!我們相信跟時空模型結合就能變成一個強大的分類器!要有信仰!
- 只要我們能無監督地把時空模型構造出來,結合弱的圖像分類器,因為加了時空信息,一定能吊打其他無監督模型!
思路有了,實現就很自然了,
- 我們先在其他數據集上(於是我們就可以說這是一個跨數據集的任務了)預訓練一個卷積神經網路,
- 然後用這個卷積神經網路去目標數據集上提特徵,
- 用餘弦距離算特徵相似度
- 將相似度排在前十的當做同一個人
- 用這種「同一個人」的信息+極大似然估計構造時空模型
圖像分類器上,我們這裡用的是LiangZheng的Siamese網路,他們的源碼是用MATLAB實現的,我用Keras復現了一把:
時空模型的極大似然估計可以看這裡
聰明的讀者應該會注意到,這個圖像分類器是在其他數據及上預訓練的,由於特徵空間中數據分布不同,這個圖像分類器太弱了,對於目標數據集來說,前十里會有許多錯的樣本,導致構造出來的時空模型和真實的時空模型有偏差
可以看到,構造的模型跟真實的模型還是有些差別的,但是峰值位置還是差不多,一定程度上應該還能用,但我們還是希望構造的模型盡量接近真實模型的。
於是我們開始思考
- 導致模型出現偏差的因素是什麼?是錯誤的樣本對
- 如何去掉錯誤樣本對的影響?我們能不能把錯誤的樣本對分離出來?沒有標籤咋辦?
- (靈光一閃)錯誤的樣本不就跟我瞎選的差不多?那我是不是可以隨機地選樣本對,算一個隨機的delta分布出來
- 將估算的delta分布去掉隨機的delta分布,剩下的多出來的部分,就是由於正確的行人遷移產生的,不就得到真實的delta分布了?
於是我們可視化了一下隨機的delta分布
可以發現,
- 確實與估計模型和真實模型不同
- 存在較多抖動
這種隨機的時間差分布也呈現出一定的集中趨勢,其實體現的是採樣的時間差分布,如,在1號攝像頭採的圖片大多在某個時間段,2號攝像頭也大多在這個時間段采,但3號攝像頭的圖片大多是在其他時間段採到的。
考慮到時間差的頻率圖有這麼多的抖動,我們在計算某個區域的時間差時,加上了均值濾波,並且做了一定區域的截斷,包括概率極小值重置為一個最小概率值,時間差極大值重置為一個最大時間差。
接下來,應該怎麼把錯誤的模型從估計的模型濾掉呢?又怎麼將時空模型和圖像模型結合呢?
基於貝葉斯推斷的模型融合
首先看時空模型和圖像模型的融合, 我們有一個視覺相似度 ,一個時空概率 ,一個直觀的想法是,聯合評分可以是 ,如果要再抑制隨機的評分Prandom,可以做個除法,就是
這樣一看,像不像條件概率公式?於是我們開始推導(大量公式預警):
先看看我們手上的資源:現在我們有一個弱的圖像分類器,可以為兩張圖片提取兩個視覺特徵vi, vj, 有兩個時空點,空間特徵為兩個攝像頭編號ci, cj,時間特徵為兩張圖片拍攝的時間差?ij,假定兩張圖對應的person id分別為Pi, Pj,那麼我們的目標就是求,在給定這些特徵的條件下,兩張圖屬於同一個人的概率
(論文公式6)
由條件概率公式 ,可得
由時空分布和圖像分布的獨立性假設(長得像的人運動規律不一定像),我們可以拆解第一項,得到
=
其中 是一個不好求的項,我們試著把它換掉,
先交換順序(乘法交換律)
由條件概率公式 可得
可以看到
- 可理解為兩張圖從視覺特徵相似度上判定為同一人的概率
- 就是兩個時空點是同一個人移動產生的概率
再次利用時空分布和圖像分布的獨立性假設,拆解分母
約掉 ,
也就是
= 視覺相似度*同一人產生這種移動的概率/任意兩個時空點組成這種移動的概率
這也就是論文公式(7),也就是我們一開始的猜想:
看著好像很接近我們手頭掌握的資源了,但是,
- 我們並不知道理想的兩張圖的視覺相似度 ,只有我們的圖像分類器判定的兩張圖的視覺相似度 ,
- 我們並不能計算同一人產生這種移動的真實概率 ,我們只有依據視覺分類器估算的時空概率 ,
- 我們倒是確實有數據集中任意兩個時空點產生這種移動的概率P(ci,cj,?ij)
於是我們想用 , 去近似,得到
看到這裡其實就大致理解我們的融合原理了,實際上我們大部分實驗也是用的這個近似公式算的。
實現上,先模擬兩個時空模型,計算圖像相似度,然後代入公式求融合評分,具體可以實現看我GitHub
但這個近似能不能做呢?我們來做一下誤差分析(大量推導,不感興趣可以跳到接下來出現的第二張圖,不影響後面的理解,只是分析一波會更加嚴謹)。
實際上,誤差是由圖像分類器引入的,假設圖像分類器判定兩張圖是同一個人的錯判率為Ep,圖像分類器判定兩張圖不是同一人的錯判率為En,
則有,
(論文公式1)
(論文公式2)
則 與 的關係可以表示為:
(論文公式8)
推導,Pr(ci,cj,?ij|Pi=Pj) 和Pr(ci,cj,?ij|Si=Sj) 的關係(這個沒法像視覺相似度那樣直接推導,因為因果關係不同)
同樣可以得到
聯立上面兩個式子解方程,消掉 可以得到
(論文公式5)
其中有個新概念Pr(ci,cj,?ij|Si≠Sj) ,意味著圖像分類器認為不是同一個人的時候,這種時空點出現的概率,實現上也不難,統計視覺相似度top10以後的點對應的時間差,作為反時空概率模型即可。
我們把兩個近似(公式5和公式8)代進公式7,
可以得到
論文公式9
其中,
,視覺相似度
,正時空概率模型
,反時空概率模型
分母 為隨機概率模型
以上四項都是可以從無標籤目標數據集中結合圖像分類器求解到的,並且,當 時(意味著圖像分類器完全準確),這個公式可以退化為近似解:
到這裡,你是不是以為我們就可以用公式9算融合評分了?非也,公式9中,還有個問題: , 是未知的!
如果想要正兒八經地算 , ,要求目標數據集有標籤,然後我們用圖像分類器先算一遍,數數哪些算錯了,才能把 , 算出來。因此我們用兩個常數α和β分別替代 , ,整個模型的近似就都集中在了這兩個常數上。
在論文Table1,2,3,4,Fig6相關的實驗中,α=β=0,並且,在Fig5中,我們設置了其他常數來檢查模型對於這種近似的敏感性
可以看到,雖然α和β較大時,準確率會有所下降,但是仍然能保持一定的水準,當你看到純圖像分類器的準確率之後,還會發現融合模型的準確率一直高於純圖像分類器。
你可能注意到了,圖中α+β都是小於1的,這是因為,只有當Ep+En<1且α+β<1時,融合模型的Ep+En才會小於圖像模型的Ep+En,說人話就是,只有圖像模型不是特別糟糕,且近似的參數也比較正常的時候,融合模型才會比單個的圖像模型要准,融合才有意義。這個定理的具體的證明放到論文附錄里了,有興趣的可以郵件私信我拿附錄去看,這裡擺出來就太多了。
於是我們得到了一個由條件概率推斷支撐的多模態數據融合方法,稱為貝葉斯融合
看一眼融合得到的時空分布圖:
再從數據上看一眼融合的模型有多強:
可以看到,
- 跨數據集直接遷移效果確實很差
- 融合之後的準確率Rank1準確率變成2-4倍
說明這種融合方式是確實行之有效的。
基於Learning to Rank的遷移學習
前面講到圖像分類器太弱了,雖然融合後效果挺好的(這個時候我們其實想著要不就這樣投個NIPS算了),但是如果能提升圖像分類器,融合的效果理論上會更好。而現在我們有了一個強大的融合分類器,我們能不能用這個融合分類器為目標數據集的圖片打標籤,反過來訓練圖像分類器呢?
一個常用的無監督學習套路就是,根據融合評分的高低,將圖片對分為正樣本對和負樣本對(打偽標籤),然後餵給圖像分類器學習。
我們也嘗試了這種做法,但是發現,數據集中負樣本遠遠多於正樣本,融合分類器分對的負樣本是挺多的,但是分對的正樣本超級少,分錯的正樣本很多,錯樣本太多,訓練出來效果極差,用上一些hard ming的技巧也不行。
於是我們思考,
- 我們無法提供正確的01標籤,分類器就只能學到許多錯的01標籤
- 我們是否可以提供一些軟標籤,讓分類器去學習回歸兩個樣本之間的評分,而不是直接學習二分類的標籤?
- 這是一個圖像檢索問題,我們能不能用信息檢索中的一些學習方法來完成這個任務?
於是自然而然地想到了Learning to Rank
Ranking
- 問題定義:給定一個對象,尋找與其最相關的結果,按相關程度排序
- 常用方法:
- Point-wise:每一個結果算一個絕對得分,然後按得分排序
- Pair-wise:每兩個結果算一下誰的得分高,然後按這個相對得分排序
- List-wise:枚舉所有排列情況,計算綜合得分最高的一種作為排序結果
綜合得分往往需要許多複雜的條件來計算,不一定適用於我們的場景,所以排除List-wise,Point-wise和Pair-wise都可以採用,得分可以直接用融合評分表示,Pair-wise可以用一組正序樣本,一組逆序樣本,計算兩個得分,算相對得分來學習,有點Triplet loss的意味,於是在實驗中採用了Pair-wise方法。
Pair-wise Ranking
- 給定樣本 ,其排序得分為 ,
- 給定樣本 ,其排序得分為 ,
- 定義 ,如果 說明 的排名高於 ,
- 將這個排名概率化,定義 ,為xi排名高於xj的概率。
- 對於任何一個長度為n的排列,只要知道n-1個相鄰item的概率 ,就可以推斷出來任何兩個item的排序概率
- 例如,已知 和 , ,其中
RankNet: Pair-wise Learning to Rank
RankNet是Pair-wise Learning to Rank的一種方法,用一個神經網路去學習輸入的兩個樣本(還有一個query樣本)與其排序概率(上面定義的)的映射關係。
具體到我們這個問題里
- 給定查詢圖片A,給定待匹配圖片B和C
- 用神經網路預測AB之間的相似度Sab為B的絕對排序得分,計算AC之間的相似度Sac為C的絕對排序得分
具體的神經網路用Keras實現並可視化出來長這樣:
- 輸入是三張圖片,分別用Resnet52提取特徵並flatten
- flatten之後寫一個Lambda層+全連接層算特徵向量帶權重的幾何距離,得到score1和score2
- 用score1和score2和真實分數算交叉熵Loss(下面講)
- 則B排序高於C的概率為:
- 用預測概率Pbc去擬合真實的排序概率,回歸損失用預測概率和真實概率的交叉熵表達
網路實現超級簡單,主要麻煩在樣本三元組構造
Transfer Learning to rank
整個Learning to rank過程如圖
我們用融合分類器為目標數據集中的圖片對評分,構造三元組輸入RankNet,其中Si是查詢圖,Sj是在與Si融合相似度top1 - top25中抽取的圖片,Sk是在與Si融合相似度top25 - top50中抽取的圖片,餵給RankNet學習,使得resnet52部分卷積層能充分學習到目標場景上的視覺特徵。
Learning to Rank效果
對比Learning to Rank前的效果,準確率都提升了,GRID數據集上提升尤為明顯。
對比SOA有監督方法
一方面,我們將上面的跨數據集無監督演算法應用在GRID和Market1501兩個數據集上,與當前最好的方法進行對比,另一方面,我們還測試了有監督版本的效果,有監督即源數據集與目標數據集一致,如GRID預訓練->GRID融合時空,效果如下:
- GRID
由於在這個數據集上時空規律十分明顯(正確時間差都集中在一個很小的範圍內),可以過濾掉大量錯誤分類結果,所以準確率甚至碾壓了全部有監督方法。
- Market1501
在Market1501這個數據集上,無監督的方法逼近2016年的有監督方法(我們的圖像分類器只是一個ResNet52),有監督的方法超越2016年的有監督方法,雖然比不上2017年的有監督方法,但是如果結合其他更好的圖像分類器,應該能有更好的效果。
對比SOA無監督方法
我們向UMDL的作者要到了代碼,並復現了如下幾組跨數據集遷移實驗
其中,UMDL遷移到Market1501的結果與悉尼科技大學hehefan與LiangZheng復現出來的效果差不多,所以我們的復現是靠譜的。
可以看到,無監督的TFusion全面碾壓UMDL。
更多詳細實驗結果可以到論文中細看。
多次迭代遷移學習
回顧一下整個架構,我們用圖像分類器估算時空模型,得到融合模型,用融合模型反過來提升圖像分類器模型,圖像分類器又能繼續增強融合模型,形成一個閉環,理論上這個閉環循環多次,能讓圖像分類器無限逼近融合分類器,從而得到一個目標場景中也很強大的圖像分類器,因此我們做了多次迭代的嘗試:
在從目前的實驗效果看,第一次遷移學習提升比較大,後面提升就比較小了,這個現象往好了說可以是收斂快,但往壞了說,雖然圖像分類器得到了提升,但是沒有出現圖像分類器提升大於融合分類器的現象,所以這裡邊應該還有東西可挖。
後記
調研,可視化,找思路,找數據集,做實驗,Debug,調參,寫論文,九個月寫一篇CVPR,這也是我們實驗室第一篇CCF A類論文,算是來之不易的開山之作了。現在我們在Person Reid領域繼續探索,正在搭建一個基於樹莓派的攝像頭網路,構造自己的數據集,並在這個基礎上開展行人檢測,多模態數據融合,輕量級深度模型,分散式協同終端,視頻哈希,圖像索引等一系列研究,歡迎follow我的Github,也歡迎持續關注我們實驗室的博客
看了這麼久,還不給我Github點star!
推薦閱讀: