行人重識別——《A Systematic Evaluation and Benchmark for Person Re-Identification Features, Metrics, and D》
Benchmark演算法總結
論文:《A Systematic Evaluation and Benchmark for Person Re-Identification Features, Metrics, and Datasets》
論文提出了一套迄今為止最全面的行人重識別系統,系統內包含11種特徵計算、22種度量學習和ranking技術、支援16種現有的行人重識別資料庫,並提出了一個全新的行人重識別資料集——airport
論文中實現的11種特徵計算演算法有:
每個特徵提取演算法的特點與原理都逐一簡要說明,見2.1 Feature extraction
論文中實現的22種度量學習和ranking技術有:
每個度量學習的特點都逐一簡要說明概括,見2.2 Metric learning
仔細數一數發現只有18中,還有4種是multi-shot ranking技術:
AHISD、RNP、SRID和ISR 見2.3 Multi-shot ranking
論文中支援的16個行人重識別資料集有:
加上全新資料集airport,一共17個~
2.4 Techniques not (yet) considered
2.4節討論了尚未入手研究但日後會考慮的方法,並提出,目前大多數方法都是兩段式的識別步驟:先feature learning再 metrics learning,但是也會考慮feature和metics一起學習的演算法,如[73]《An improved deep learning architecture for person re-identification》中的做法。
3 DATASETS
資料集,在此論文之前的行人重識別資料集都存在諸多問題,總結成一點就是不夠貼近現實場景的狀態。分成好幾點來說就是:
1行人數量太少
2資料集的標註是由人力手工製作完成,或者過時的檢測演算法(DPM)自動標註
3攝像頭數量太少、視角不夠多
4時間太短
5每個行人在不同攝像頭下的圖片數量太少
6拍攝到的圖片的解析度太低
7背景雜亂
8光照變化
9檢測演算法錯誤標籤
Airport:A new, real-world, large-scale dataset
Number of people: |
9651 |
Number of images: |
39902 |
Number of cameras: |
6 |
Average number of images per person: |
3.13 |
Resolution of each image: |
128 x 64 |
Airport的詳細資料,一共有9651個行人、39902張圖片、拍攝於6個攝像頭、平均每個行人有3.13張圖片,圖片的解析度平均為128乘64。Airport還加入了時間資料,airport的資料集擷取自一段從8AM至8PM的12小時的視訊。行人自動檢測和追蹤採用的框架是ACF framework與FAST corner features和the KLT tracker結合的演算法框架。
由於bbox是演算法自動標註的,所以我們的資料集是對真實應用場景的模擬。
有關airport資料集的劃分:
也講了其他資料集的劃分~
Evaluation
大多數資料集都是採用的single-shot的評價方法,少數採用multi-shot的評價方法。
Single-shot的情況,需要考慮的是兩方面:feature演算法和metrics演算法;而multi-shot的情況則需考慮feature演算法、metrics演算法和ranking演算法。
Result and discussion
行人重識別的評價標準是mAP和CMC,在這裡也不例外,故本文以CMC作為評價指標
下表列出了在所有資料集上取得的最好的結果:
可以注意到,最好的特徵提取方法是IDE-ResNet方法和GOG方法;而在multi-shot的情況下,KISSME作為度量學習和SRID作為ranking演算法的結合能達到最好的效果。
總的來說,multi-shot比single-shot的表現要好。
從資料集構建的角度來看,構建一個數據集最主要要考慮兩個因素:第一是要足夠大,第二是要足夠模擬。作者還提到,既然reid的一個重要應用是嫌疑人追蹤,那麼嫌疑人很有可能在逃逸過程中換衣服,這種情況也要考慮進去~~總之,一切要從現實的角度出發,不要想當然。
5 INSIGHTS AND RECOMMENDATIONS FOR RESEARCHERS
有關行人重識別的一些見解和建議
1我們可以用比較複雜的方法來實現資料擴充,比如cycleGAN和LSRO
2我們除了用衣服頭髮等屬性來識別一個人之外,還會利用一個人的走路姿勢和步伐來識別一個人,這也是一個特徵。
3有一個在reid中比較難實現的路線:相機標定資訊的使用(行人行進方向,路線軌跡,如果標定得好,還可以確定行人的身高屬性)
4另一個需要引起注意的是,上下文資訊,比如該行人正在與誰結伴而走,何時?何地?何因?因為有些行人會形成團體,在被攝時也經常會成群出現。
5當所有人都出於很暗的環境裡時,或者所有人都穿著一樣的制服的時候,就需要藉助景深、RGB-D資訊結合行走姿態識別來進行reid
6將來,我們需要更大的資料集,時間闊度更大的資料集,隔天甚至隔月,因為我們不知道嫌疑人什麼時候會重新出現~
實驗:
環境:matlab2018a+vlfeat
從run_experiment_benchmark.m檔案程式碼中可以看到,確實有很多演算法可以選:
但是跟論文中描述的還是有差距~~有一些沒有出現在待選項裡。
先跑一個簡單的viper,很快就跑完了,結果顯示:
Accuracy: Rank1 Rank5 Rank10 Rank20
Average: 26.33 53.13 66.27 79.57
Viper共有兩個攝像頭,632個行人分別出現在各個攝像頭中一次。
由於在曠視演算法執行ALERT資料集未能取得成效,故轉而研究在論文聲稱支援ALERT資料集的演算法-benchmark
觀察發現原始碼中只有兩個資料集預處理檔案,一個是處理market的一個是處理viper的,通過檢視vpier的資料預處理檔案和viper資料集發現其檔案結構跟alert一樣,故有望修改處一個alert的資料預處理檔案來。
今天讀程式碼發現其實沒有用到computeFeaturesCNN.m,所以調裡面的batch_size也沒有用,主函式裡用的是computeFeatures.m這個檔案,而這個檔案裡沒有batch_size可以調。。。
所以因為記憶體不足而調節batch_size的想法行不通,於是轉而尋找其他可能可行的方案,於是遍便注意到params裡面有不同的feature可以選~之前執行whos這個特徵計算而卡死,於是今天嘗試計算其他特徵,其他特徵有:[gog, gbicov, ldfv, color_texture, hist_lbp, lomo]等,假設複雜度遞減,那就從lomo特徵開始嘗試計算。但是執行lomo特徵計算依然卡死。
將特徵改成LDFV之後,沒有卡死,可以在遠端桌面之間切換。
但是使用vl_gmm函式的時候出錯:
Begin to extract LDFV feature...Begin to extract channel feature...
..........Done!
時間已過 816.939022 秒。
Begin to build GMM model...
MEX 檔案
'D:\jinhao\reid-benchmark\3rdParty\vlfeat-0.9.20\toolbox\mex\mexw64\vl_gmm.mexw64'
無效: 缺少依賴共享庫:
'D:\jinhao\reid-benchmark\3rdParty\vlfeat-0.9.20\toolbox\mex\mexw64\vl_gmm.mexw64'
需要 'vl.dll'。
原因是原始碼裡自帶的vlfeat有問題,所以執行vl_version也報一樣的錯誤,在網上重新下載vl_feat之後,執行vl_setup.m之後再執行vl_version就可以打印出版本號了。
接著跑實驗:
得到結果:
Accuracy: Rank1 Rank5 Rank10 Rank20
Average: 21.39 44.22 59.39 70.85
作者在論文中宣告的在airport資料集上取得最好的CMC是:
Rank-1 Rank-5 Rank-10
42.7 67.5 76.0
論文中宣告的最佳結果是用IDE-ResNet-NFSTexp的設定獲取的,但是在選擇引數的程式碼裡面並沒有發現IDE-ResNet為特徵演算法的可選項,NFST和exp倒是可以選,而在對應的特徵計算執行檔案裡卻有case為IDE-ResNet的程式碼段,但是在引數設定處手動填上IDE-ResNet卻不會跳到這裡執行程式碼,很是奇怪。
將特徵演算法改為成績僅次於IDE-ResNet的gog,繼續實驗:
Accuracy: Rank1 Rank5 Rank10 Rank20
Average: 31.83 53.43 66.31 78.92
跟最好的結果還是有差距~~