論文能夠在arxiv下載,老闆一做,本人二做,也是咱們實驗室第一篇CCF A類論文,這個方法咱們稱爲TFusion。html
代碼:https://github.com/ahangchen/TFusiongit
本文爲你解讀CVPR2018 TFusiongithub
轉載請註明做者夢裏茶算法
行人重識別(Person Re-identification)是一個圖像檢索問題,給定一組圖片集(probe),對於probe中的每張圖片,從候選圖片集(gallery)中找到最可能屬於同一個行人的圖片。網絡
行人重識別數據集是由一系列監控攝像頭拍攝獲得,並用檢測算法將行人摳出,作行人的匹配。在這些數據集中,人臉是十分模糊的,沒法做爲匹配特徵,並且因爲多個攝像頭拍攝視角不一樣,同我的可能被拍到正面,側面,背面,具備不一樣的視覺特徵,所以是一個比較難的圖像匹配問題。經常使用數據集有不少,能夠在這個網站查到。架構
行人重識別問題有如下幾種常見的解決方案:dom
這類方法一般提取行人圖像特徵,對特徵進行距離度量,從而判斷是不是同一我的。分佈式
這類方法一般須要提供行人圖片和行人id標籤(person1,person2等),訓練模型,提取圖像特徵,根據兩張圖特徵的距離大小(能夠用餘弦距離,歐氏距離之類的計算),爲probe中的每張圖和gallery中的每張圖計算其類似度,根據類似度將gallery中的圖片排序,排序越高越可能爲同一我的。ide
這方面的論文表明有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內捕捉到了兩張圖片,則這兩張圖片不多是同一我的的,所以咱們能夠利用攝像頭拓撲約束來提高行人重識別的準確率。
然而,這類方法每每有如下缺陷:
遷移學習如今是深度學習領域很經常使用的一個套路了,在源數據集上預訓練,在目標數據集上微調,從而使得源數據集上的模型可以適應目標場景。這方面的論文表明有前面講的UMDL,和Deep transfer learning person re-identification,然而,目前的遷移學習大多須要標籤,而無監督遷移學習效果又不好,仍然有很大提高空間。
更多關於Person Reid的內容能夠看一下我在博客寫的幾篇調研
對應有三個創新點
接下來詳細解析咱們的方法。
所謂時空模型,即一個攝像頭網絡中,行人在給定兩個攝像頭間遷移時間的分佈。
咱們看遍全部Reid數據集,發現有三個數據集有時空信息,Market1501, GRID, DukeMTMC-ReID,其中,DukeMTMC-ReID是2017年後半年纔出來的,時間比較倉促在論文中就沒有包含跟它相關的實驗。Market1501是一個比較大的Person Reid數據集,GRID是一個比較小的Person Reid數據集,而且都有六個攝像頭(GRID中雖然介紹了8個攝像頭,實際上只有6個攝像頭的數據)。
例如,Marke1501中一張圖片的時空信息是寫在圖片名字中的:
0007_c3s3_077419_03.jpg:
我想吐槽的是,其實時空信息是很是容易保存的,只要知道圖片是在何時,哪臺攝像機上拍攝,就可以將時空信息記錄並有效利用起來,但願多模態數據融合獲得更多重視以後,作數據集的人可以更加劇視可保存的信息吧。
咱們首先經過Market1501中的真實行人標籤,計算訓練集中全部圖片對
對應的時空點對
對應的遷移時間,這裏可視化了從攝像頭1出發的行人,到達其餘攝像頭須要的時間的分佈。
能夠看到,到達不一樣目標攝像頭的峯值位置不一樣,其中從攝像頭1到攝像頭1,意味着被單個攝像頭拍到連續多幀,因此峯值集中在0附近,從攝像頭1到攝像頭2,峯值集中在-600附近,意味着大部分人是單向從攝像頭2運動到攝像頭1,等等,而且,說明這個數據集中存在顯著可利用的時空規律。
咱們將遷移時間差命名爲delta,這樣提及來方便(裝逼)一點。
若是咱們可以統計一個數據集中的全部delta,給定一個新的delta(兩個新的圖片對應的兩個時空點算出來的),咱們可以用極大似然估計,用在這個delta先後必定範圍(好比100幀)的delta的出現頻率(=目標範圍delta數量/總的delta數量),做爲新時間差出現的機率,也就是兩個時空點是同一人產生的機率。
可是!問題是咱們在目標場景上每每是沒有行人標記數據的!
因而咱們就思考,
思路有了,實現就很天然了,
圖像分類器上,咱們這裏用的是LiangZheng的Siamese網絡,他們的源碼是用MATLAB實現的,我用Keras復現了一把:
時空模型的極大似然估計能夠看這裏
聰明的讀者應該會注意到,這個圖像分類器是在其餘數據及上預訓練的,因爲特徵空間中數據分佈不一樣,這個圖像分類器太弱了,對於目標數據集來講,前十里會有許多錯的樣本,致使構造出來的時空模型和真實的時空模型有誤差
能夠看到,構造的模型跟真實的模型仍是有些差異的,可是峯值位置仍是差很少,必定程度上應該還能用,但咱們仍是但願構造的模型儘可能接近真實模型的。
因而咱們開始思考
因而咱們可視化了一下隨機的delta分佈
能夠發現,
這種隨機的時間差分佈也呈現出必定的集中趨勢,其實體現的是採樣的時間差分佈,如,在1號攝像頭採的圖片大多在某個時間段,2號攝像頭也大多在這個時間段採,但3號攝像頭的圖片大可能是在其餘時間段採到的。
考慮到時間差的頻率圖有這麼多的抖動,咱們在計算某個區域的時間差時,加上了均值濾波,而且作了必定區域的截斷,包括機率極小值重置爲一個最小几率值,時間差極大值重置爲一個最大時間差。
接下來,應該怎麼把錯誤的模型從估計的模型濾掉呢?又怎麼將時空模型和圖像模型結合呢?
首先看時空模型和圖像模型的融合, 咱們有一個視覺類似度Pv,一個時空機率Pst,一個直觀的想法是,聯合評分能夠是Pv * Pst,若是要再抑制隨機的評分Prandom,能夠作個除法,就是Pv * Pst / Prandom
這樣一看,像不像條件機率公式?因而咱們開始推導(大量公式預警):
先看看咱們手上的資源:如今咱們有一個弱的圖像分類器,能夠爲兩張圖片提取兩個視覺特徵vi, vj, 有兩個時空點,空間特徵爲兩個攝像頭編號ci, cj,時間特徵爲兩張圖片拍攝的時間差∆ij,假定兩張圖對應的person id分別爲Pi, Pj,那麼咱們的目標就是求,在給定這些特徵的條件下,兩張圖屬於同一我的的機率
Pr(Pi=Pj|vi,vj,ci,cj,∆ij)(論文公式6)
由條件機率公式P(A|B) = P(B|A)*P(A)/P(B),可得
Pr(Pi=Pj|vi,vj,ci,cj,∆ij)
= Pr(vi,vj,ci,cj,∆ij|Pi=Pj) *Pr(Pi=Pj)/ Pr(vi,vj,ci,cj,∆ij)
由時空分佈和圖像分佈的獨立性假設(長得像的人運動規律不必定像),咱們能夠拆解第一項,獲得
= Pr(vi,vj|Pi=Pj) * Pr(ci,cj,∆ij|Pi=Pj) * Pr(Pi=Pj)/ Pr(vi,vj,ci,cj,∆ij)
其中Pr(Pi=Pj)是一個很差求的項,咱們試着把它換掉,
先交換順序(乘法交換律)
= Pr(vi,vj|Pi=Pj) * Pr(Pi=Pj) * Pr(ci,cj,∆ij|Pi=Pj) / Pr(vi,vj,ci,cj,∆ij)
由條件機率公式P(A|B)* P(B) = P(B|A) * P(A)可得
= Pr(Pi=Pj|vi,vj) * Pr(vi=vj)*Pr(ci,cj,∆ij|Pi=Pj) / Pr(vi,vj,ci,cj,∆ij)
能夠看到
再次利用時空分佈和圖像分佈的獨立性假設,拆解分母
= Pr(Pi=Pj|vi,vj) * Pr(vi=vj)* Pr(ci,cj,∆ij|Pi=Pj) / Pr(vi,vj) * P(ci,cj,∆ij)
約掉Pr(vi=vj),
= Pr(Pi=Pj|vi,vj) * Pr(ci,cj,∆ij|Pi=Pj) /P(ci,cj,∆ij)
也就是
= 視覺類似度*同一人產生這種移動的機率/任意兩個時空點組成這種移動的機率
這也就是論文公式(7),也就是咱們一開始的猜測:Pv * Pst / Prandom
看着好像很接近咱們手頭掌握的資源了,可是,
因而咱們想用Pr(ci,cj,∆ij|Si=Sj) ,P(ci,cj,∆ij)去近似,獲得
= Pr(Si=Sj|vi,vj) * Pr(ci,cj,∆ij|Si=Sj) /P(ci,cj,∆ij)
看到這裏其實就大體理解咱們的融合原理了,實際上咱們大部分實驗也是用的這個近似公式算的。
實現上,先模擬兩個時空模型,計算圖像類似度,而後代入公式求融合評分,具體能夠實現看我GitHub
但這個近似能不能作呢?咱們來作一下偏差分析(大量推導,不感興趣能夠跳到接下來出現的第二張圖,不影響後面的理解,只是分析一波會更加嚴謹)。
實際上,偏差是由圖像分類器引入的,假設圖像分類器斷定兩張圖是同一我的的錯判率爲Ep,圖像分類器斷定兩張圖不是同一人的錯判率爲En,
則有,
Ep = Pr(Pi≠Pj|Si=Sj)(論文公式1)
En = Pr(Pi=Pj|Si≠Sj)(論文公式2)
則Pr(Pi=Pj|vi,vj) 與 Pr(Si=Sj|vi,vj) 的關係能夠表示爲:
Pr(Pi=Pj|vi,vj)
= Pr(Pi=Pj|Si=Sj) * Pr(Si=Sj|vi,vj) + Pr(Pi=Pj|Si≠Sj) * Pr(Si≠Sj|vi,vj)
= (1-Ep) * Pr(Si=Sj|vi,vj) + En * (1-Pr(Si=Sj|vi,vj) )
= (1-Ep-En) * Pr(Si=Sj|vi,vj) + En (論文公式8)
推導,Pr(ci,cj,∆ij|Pi=Pj) 和Pr(ci,cj,∆ij|Si=Sj) 的關係(這個無法像視覺類似度那樣直接推導,由於因果關係不一樣)
Pr(ci,cj,∆ij|Si=Sj)
= Pr(ci,cj,∆ij|Pi=Pj) * (Pr(Pi=Pj)|Si=Sj) + Pr(ci,cj,∆ij|Pi≠Pj) * (Pr(Pi=Pj)|Si≠Sj)
= Pr(ci,cj,∆ij|Pi=Pj) * (1- Ep) + Pr(ci,cj,∆ij|Pi≠Pj) * Ep
一樣能夠獲得
Pr(ci,cj,∆ij|Si≠Sj)
= Pr(ci,cj,∆ij|Pi=Pj) * En + Pr(ci,cj,∆ij|Pi≠Pj) * (1 - Ep)
聯立上面兩個式子解方程,消掉Pr(ci,cj,∆ij|Si≠Sj) 能夠獲得
Pr(ci,cj,∆ij|Pi=Pj)
= (1 - Ep - En)-1(1-En) * Pr(ci,cj,∆ij|Si=Sj) - Ep * Pr(ci,cj,∆ij|Si≠Sj) (論文公式5)
其中有個新概念Pr(ci,cj,∆ij|Si≠Sj) ,意味着圖像分類器認爲不是同一我的的時候,這種時空點出現的機率,實現上也不難,統計視覺類似度top10之後的點對應的時間差,做爲反時空機率模型便可。
咱們把兩個近似(公式5和公式8)代進公式7,
能夠獲得
Pr(Pi=Pj | vi, vj, ∆ij, ci, cj)
= (M1 + En/(1 - En - Ep))((1-En)M2 - EpM3)/Pr(∆ij, ci, cj))(論文公式9)
其中,
M1 = Pr(Si=Sj|vi,vj),視覺類似度
M2 = Pr(∆ij,ci,cj|Si=Sj),正時空機率模型
M3 = Pr(∆ij,ci,cj|Si≠Sj),反時空機率模型
分母Pr(∆ij, ci, cj))爲隨機機率模型
以上四項都是能夠從無標籤目標數據集中結合圖像分類器求解到的,而且,當En=Ep=0時(意味着圖像分類器徹底準確),這個公式能夠退化爲近似解:
Pr(Si=Sj|vi,vj) * Pr(ci,cj,∆ij|Si=Sj) /P(ci,cj,∆ij)
到這裏,你是否是覺得咱們就能夠用公式9算融合評分了?非也,公式9中,還有個問題:Ep,En是未知的!
若是想要正兒八經地算Ep,En,要求目標數據集有標籤,而後咱們用圖像分類器先算一遍,數數哪些算錯了,才能把Ep,En算出來。所以咱們用兩個常數α和β分別替代Ep,En,整個模型的近似就都集中在了這兩個常數上。
在論文Table1,2,3,4,Fig6相關的實驗中,α=β=0,而且,在Fig5中,咱們設置了其餘常數來檢查模型對於這種近似的敏感性
能夠看到,雖然α和β較大時,準確率會有所降低,可是仍然能保持必定的水準,當你看到純圖像分類器的準確率以後,還會發現融合模型的準確率一直高於純圖像分類器。
你可能注意到了,圖中α+β都是小於1的,這是由於,只有當Ep+En<1且α+β<1時,融合模型的Ep+En纔會小於圖像模型的Ep+En,說人話就是,只有圖像模型不是特別糟糕,且近似的參數也比較正常的時候,融合模型纔會比單個的圖像模型要準,融合纔有意義。這個定理的具體的證實放到論文附錄裏了,有興趣的能夠郵件私信我拿附錄去看,這裏擺出來就太多了。
因而咱們獲得了一個由條件機率推斷支撐的多模態數據融合方法,稱爲貝葉斯融合
看一眼融合獲得的時空分佈圖:
再從數據上看一眼融合的模型有多強:
源數據集 | 目標數據集 | 純 | 圖像 | 結果 | 融合 | 時空 | 結果 | |
---|---|---|---|---|---|---|---|---|
rank-1 | rank-5 | rank-10 | rank-1 | rank-5 | rank-10 | |||
CUHK01 | GRID | 10.70 | 20.20 | 23.80 | 30.90 | 63.70 | 79.10 | |
VIPeR | GRID | 9.70 | 17.40 | 21.50 | 28.40 | 65.60 | 80.40 | |
Market1501 | GRID | 17.80 | 31.20 | 36.80 | 49.60 | 81.40 | 88.70 | |
GRID | Market1501 | 20.72 | 35.39 | 42.99 | 51.16 | 65.08 | 70.04 | |
VIPeR | Market1501 | 24.70 | 40.91 | 49.52 | 56.18 | 71.50 | 76.48 | |
CUHK01 | Market1501 | 29.39 | 45.46 | 52.55 | 56.53 | 70.22 | 74.64 |
能夠看到,
說明這種融合方式是確實行之有效的。
前面講到圖像分類器太弱了,雖然融合後效果挺好的(這個時候咱們其實想着要不就這樣投個NIPS算了),可是若是能提高圖像分類器,融合的效果理論上會更好。而如今咱們有了一個強大的融合分類器,咱們能不能用這個融合分類器爲目標數據集的圖片打標籤,反過來訓練圖像分類器呢?
一個經常使用的無監督學習套路就是,根據融合評分的高低,將圖片對分爲正樣本對和負樣本對(打僞標籤),而後餵給圖像分類器學習。
咱們也嘗試了這種作法,可是發現,數據集中負樣本遠遠多於正樣本,融合分類器分對的負樣本是挺多的,可是分對的正樣本超級少,分錯的正樣本不少,錯樣本太多,訓練出來效果極差,用上一些hard ming的技巧也不行。
因而咱們思考,
因而天然而然地想到了Learning to Rank
綜合得分每每須要許多複雜的條件來計算,不必定適用於咱們的場景,因此排除List-wise,Point-wise和Pair-wise均可以採用,得分能夠直接用融合評分表示,Pair-wise能夠用一組正序樣本,一組逆序樣本,計算兩個得分,算相對得分來學習,有點Triplet loss的意味,因而在實驗中採用了Pair-wise方法。
RankNet是Pair-wise Learning to Rank的一種方法,用一個神經網絡去學習輸入的兩個樣本(還有一個query樣本)與其排序機率(上面定義的)的映射關係。
具體到咱們這個問題裏
具體的神經網絡用Keras實現並可視化出來長這樣:
- 輸入是三張圖片,分別用Resnet52提取特徵並flatten
- flatten以後寫一個Lambda層+全鏈接層算特徵向量帶權重的幾何距離,獲得score1和score2
- 用score1和score2和真實分數算交叉熵Loss(下面講)
Pbc= eobc/(1+ eobc) = eSab- Sac / (1 + eSab- Sac)
C(obc) = -P'bcln Pbc - (1-P'bc)ln (1 - Pbc)
網絡實現超級簡單,主要麻煩在樣本三元組構造
整個Learning to rank過程如圖
咱們用融合分類器爲目標數據集中的圖片對評分,構造三元組輸入RankNet,其中Si是查詢圖,Sj是在與Si融合類似度top1 - top25中抽取的圖片,Sk是在與Si融合類似度top25 - top50中抽取的圖片,餵給RankNet學習,使得resnet52部分卷積層能充分學習到目標場景上的視覺特徵。
源數據集 | 目標數據集 | 純 | 圖像 | 結果 | 融合 | 時空 | 結果 | |
---|---|---|---|---|---|---|---|---|
rank-1 | rank-5 | rank-10 | rank-1 | rank-5 | rank-10 | |||
CUHK01 | GRID | 17.40 | 33.90 | 41.10 | 50.90 | 78.60 | 88.30 | |
VIPeR | GRID | 18.50 | 31.40 | 40.50 | 52.70 | 81.70 | 89.20 | |
Market1501 | GRID | 22.30 | 38.10 | 47.20 | 60.40 | 87.30 | 93.40 | |
GRID | Market1501 | 22.38 | 39.25 | 48.07 | 58.22 | 72.33 | 76.84 | |
VIPeR | Market1501 | 25.23 | 41.98 | 50.33 | 59.17 | 73.49 | 78.62 | |
CUHK01 | Market1501 | 30.58 | 47.09 | 54.60 | 60.75 | 74.44 | 79.25 |
對比Learning to Rank前的效果,準確率都提高了,GRID數據集上提高尤其明顯。
一方面,咱們將上面的跨數據集無監督算法應用在GRID和Market1501兩個數據集上,與當前最好的方法進行對比,另外一方面,咱們還測試了有監督版本的效果,有監督即源數據集與目標數據集一致,如GRID預訓練->GRID融合時空,效果以下:
Method | Rank 1 |
---|---|
JLML | 37.5 |
TFusion無監督 | 60.4 |
TFusion有監督 | 64.1 |
因爲在這個數據集上時空規律十分明顯(正確時間差都集中在一個很小的範圍內),能夠過濾掉大量錯誤分類結果,因此準確率甚至碾壓了所有有監督方法。
Method | Rank 1 |
---|---|
S-CNN | 65.88 |
DLCE | 79.5 |
SVDNet | 82.3 |
JLML | 88.8 |
TFusion無監督 | 60.75 |
TFusion有監督 | 73.13 |
在Market1501這個數據集上,無監督的方法逼近2016年的有監督方法(咱們的圖像分類器只是一個ResNet52),有監督的方法超越2016年的有監督方法,雖然比不上2017年的有監督方法,可是若是結合其餘更好的圖像分類器,應該能有更好的效果。
咱們向UMDL的做者要到了代碼,並復現了以下幾組跨數據集遷移實驗
Method | Source | Target | Rank1 |
---|---|---|---|
UMDL | Market1501 | GRID | 3.77 |
UMDL | CUHK01 | GRID | 3.58 |
UMDL | VIPeR | GRID | 3.97 |
UMDL | GRID | Market1501 | 30.46 |
UMDL | CUHK01 | Market1501 | 29.69 |
UMDL | VIPeR | Market1501 | 30.34 |
TFusion | Market1501 | GRID | 60.4 |
TFusion | CUHK01 | GRID | 50.9 |
TFusion | VIPeR | GRID | 52.7 |
TFusion | GRID | Market1501 | 58.22 |
TFusion | CUHK01 | Market1501 | 59.17 |
TFusion | VIPeR | Market1501 | 60.75 |
其中,UMDL遷移到Market1501的結果與悉尼科技大學hehefan與LiangZheng復現出來的效果差很少,因此咱們的復現是靠譜的。
能夠看到,無監督的TFusion全面碾壓UMDL。
更多詳細實驗結果能夠到論文中細看。
回顧一下整個架構,咱們用圖像分類器估算時空模型,獲得融合模型,用融合模型反過來提高圖像分類器模型,圖像分類器又能繼續加強融合模型,造成一個閉環
,理論上這個閉環循環屢次,能讓圖像分類器無限逼近融合分類器,從而獲得一個目標場景中也很強大的圖像分類器,所以咱們作了屢次迭代的嘗試:
在從目前的實驗效果看,第一次遷移學習提高比較大,後面提高就比較小了,這個現象往好了說能夠是收斂快,但往壞了說,雖然圖像分類器獲得了提高,可是沒有出現圖像分類器提高大於融合分類器的現象,因此這裏邊應該還有東西可挖。
調研,可視化,找思路,找數據集,作實驗,Debug,調參,寫論文,九個月寫一篇CVPR,這也是咱們實驗室第一篇CCF A類論文,算是來之不易的開山之做了。如今咱們在Person Reid領域繼續探索,正在搭建一個基於樹莓派的攝像頭網絡,構造本身的數據集,並在這個基礎上開展行人檢測,多模態數據融合,輕量級深度模型,分佈式協同終端,視頻哈希,圖像索引等一系列研究,歡迎follow個人Github,也歡迎持續關注咱們實驗室的博客
看了這麼久,還不給我Github點star!