1. 程式人生 > >行人重識別——《A Systematic Evaluation and Benchmark for Person Re-Identification Features, Metrics, and D》

行人重識別——《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檢測演算法錯誤標籤

AirportA 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

跟最好的結果還是有差距~~