在人的感知系統所獲得的信息中,視覺信息大約佔到80%~85%。行人重識別(person re-identification)是近幾年智能視頻分析領域興起的一項新技術,屬於在複雜視頻環境下的圖像處理和分析範疇,是許多監控和安防應用中的主要任務,並且在計算機視覺領域獲得了越來越多的關注。下面我們就仔細來聊聊行人重識別(ReID)。
1.什麼是行人重識別
2.行人重識別研究的背景、意義及現狀
3.行人重識別的應用和目前存在的問題
4.行人重識別目前所採用的方法
5.行人重識別數據集
6.行人重識別的評價指標
7.行人重識別測試
1.什麼是行人重識別
行人重識別(Person Re-identification也稱行人再識別,簡稱爲ReID,是利用計算機視覺技術判斷圖像或者視頻序列中是否存在特定行人的技術;或者說,行人重識別是指在已有的可能來源與非重疊攝像機視域的視頻序列中識別出目標行人。廣泛被認爲是一個圖像檢索的子問題。給定一個監控行人圖像,檢索跨設備下的該行人圖像。在監控視頻中,由於相機分辨率和拍攝角度的緣故,通常無法得到質量非常高的人臉圖片。當人臉識別失效的情況下,ReID就成爲了一個非常重要的替代品技術。ReID有一個非常重要的特性就是跨攝像頭,所以學術論文裏評價性能的時候,是要檢索出不同攝像頭下的相同行人圖片。ReID已經在學術界研究多年,但直到最近幾年隨着深度學習的發展,才取得了非常巨大的突破。2.行人重識別研究的背景、意義及現狀
我們先以一個小故事來說明一下:荷馬史詩 (Odyssey iv:412),Mennelaus 被告知,如果想要衆神息怒並平安回家,就要在特洛伊戰爭的回家路上抓到 Proteus,讓他告訴自己躲避的方法。雖然Proteus變成了獅子,巨蛇,豹,甚至水和大樹,Mennelaus最終還是在海邊的海豹羣中抓住了他,並知曉了自己平安回家的方法。這大概是最早的重識別的成功案例。相對於行人檢測來說,行人重識別的研究還不算成熟,但早在1996年,就有學者關注行人重識別問題,在2006年,行人重識別的概念第一次在CVPR上提出後,相關的研究不斷湧現。2007年Gray提出一個對於行人重識別的研究具有重大意義的數據庫VIPeR。此後越來越多的學者開始關注行人重識別的研究。圖1是ReID從1997年到2016年間幾個里程碑的發展事件。
3.行人重識別的應用和目前存在的問題
3.1 圖3是ReID在顯示場景中的幾個例子。3.2 由於存在這上述的問題那麼我們是否可以考慮從其他方向來ReID
1. 能不能用人臉識別做重識別? 理論上是可以的。但是有兩個原因導致人臉識別較難應用:首先,廣泛存在後腦勺和側臉的情況,做正臉的人臉識別難。其次,攝像頭拍攝的像素可能不高,尤其是遠景攝像頭裏麪人臉截出來很可能都沒有32x32的像素。所以人臉識別在實際的重識別應用中很可能有限。
2. 有些人靠衣服的顏色就可以判斷出來了,還需要行人重識別麼? 衣服顏色確實是行人重識別 做出判斷一個重要因素,但光靠顏色是不足的。首先,攝像頭之間是有色差,並且會有光照的影響。其次,有撞衫(顏色相似)的人怎麼辦,要找細節,但比如顏色直方圖這種統計的特徵就把細節給忽略了。在多個數據集上的測試表明,光用顏色特徵是難以達到50%的top1正確率的。
3. 使用圖像檢索的指標來衡量行人重識別的結果是否合適? 在早期,行人重識別數據集是由兩個攝像頭採集的比如viper,每個query只有一個正確的retrieval目標。所以往往使用top1比較。但在近期,隨着大數據集的提出,數據集中往往包含多個攝像頭的多個正確目標。光使用top1的話,不能反應模型的真實能力。所以類似圖像檢索,重識別加入了mAP作爲衡量標準,將top2,top3...topn都考慮進去。
4.行人重識別目前所採用的方法
行人重識別算法我們將從以下五各方面來敘述:①基於表徵學習的ReID方法: 基於表徵學習(Representation learning)的方法是一類非常常用的行人重識別方法。這主要得益於深度學習,尤其是卷積神經網絡(Convolutional neural network, CNN)的快速發展。由於CNN可以自動從原始的圖像數據中根據任務需求自動提取出表徵特徵(Representation),所以有些研究者把行人重識別問題看做分類(Classification/Identification)問題或者驗證(Verification)問題:
(1)分類問題是指利用行人的ID或者屬性等作爲訓練標籤來訓練模型;(2)驗證問題是指輸入一對(兩張)行人圖片,讓網絡來學習這兩張圖片是否屬於同一個行人。
利用Classification/Identification loss和verification loss來訓練網絡,其網絡示意圖如下圖5所示。網絡輸入爲若干對行人圖片,包括分類子網絡(Classification Subnet)和驗證子網絡(Verification Subnet)。分類子網絡對圖片進行ID預測,根據預測的ID來計算分類誤差損失。驗證子網絡融合兩張圖片的特徵,判斷這兩張圖片是否屬於同一個行人,該子網絡實質上等於一個二分類網絡。經過足夠數據的訓練,再次輸入一張測試圖片,網絡將自動提取出一個特徵,這個特徵用於行人重識別任務。
基於特徵表示的方法重點在於設計魯棒可靠的行人圖像特徵表示模型,即能夠區分不同行人,同時能夠不受光照和視角變化的影響,將其主要分爲以下幾類進行介紹, 典型特徵總結見表1。
2)中層語義屬性:可以通過語義信息來判斷兩張圖像中是否屬於同一行人,比如顏色、衣服以及攜帶的包等信息。相同的行人在不同視頻拍攝下,語義屬性很少變化。有的採用15種語義來描述行人,包括鞋子、頭髮顏色長短、是否攜帶物品等,分類器用SVM定義每幅行人圖像的以上語義屬性。結合語義屬性重要性加權以及與底層特徵融合,最終描述行人圖像。對圖像超像素劃分,最近分割算法對圖像塊定義多種特徵屬性,顏色、位置和SIFT特徵,效果有提高。
3)高級視覺特徵:特徵的選擇技術對行人再識別的識別率的性能進行提升,如Fisher向量[編碼;提取顏色或紋理直方圖,預先定義塊或條紋形狀的圖像區域;或者編碼區域特徵描述符來建立高級視覺特徵。用某種描述符對密集軌跡、紋理、直方圖進行編碼,突出重要信息。受到多視角行爲識別研究和Fisher向量編碼的影響,一種捕獲軟矩陣的方法,即DynFV(dynamic fisher vector)特徵和捕獲步態和移動軌跡的Fisher向量編碼的密集短軌跡時間金字塔特徵被提出。Fisher向量編碼方法是首先用來解決大尺度圖像分類的方法,也能改善行爲識別的性能。有的對行人的每個圖像分成6個水平條帶,在每個條帶上計算紋理和顏色直方圖。在YCbCr、HSV、白化的RGB顏色空間計算直方圖建立顏色描述符,並用local fisher disrciminant analysis(LFDA)降維。學習出的矩陣把特徵轉換到新的空間,LFDA能在嵌入過程中使特徵的局部結構適用於圖像遮擋,背景變化和光照變化的情況,最後把計算變換空間中的特徵向量的均值作爲這個行人最終的特徵向量表示。T. Matsukawa提出GOG(Gaussian Of Gaussian),把一幅圖像分成水平條帶和局部塊,每個條帶用一個高斯分佈建模。每個條帶看作一系列這樣的高斯分佈,然後用一個單一的高斯分佈總體表示。GOG特徵提取的方法好表現在用像素級特徵的一個局部高斯分佈來描述全局顏色和紋理分佈,並且GOG是局部顏色和紋理結構的分層模型,可以從一個人的衣服的某些部分得到。此外,深度學習也被應用於行人重識別的特徵提取中,在AlexNet-Finetune中,開始在ImageNet數據集上預訓練的基於AlexNet結構的CNN,並用這個數據集對數據進行微調。在微調過程中,不修改卷積層的權重,訓練後兩個全連接層。McLaughlin等採用了類似的方法,對圖像提取顏色和光流特徵,採用卷積神經網絡(CNN)處理得到高層表徵,然後用循環神經網絡(RNN)捕捉時間信息,然後池化得到序列特徵。T對來自各個領域的數據訓練出同一個卷積神經網絡(CNN),有些神經元學習各個領域共享的表徵,而其他的神經元對特定的某個區域有效,得到魯棒的CNN特徵表示。 ②基於度量學習的ReID方法:度量學習(Metric learning)是廣泛用於圖像檢索領域的一種方法。不同於特徵學習,度量學習旨在通過網絡學習出兩張圖片的相似度。在行人重識別問題上,具體爲同一行人的不同圖片相似度大於不同行人的不同圖片。最後網絡的損失函數使得相同行人圖片(正樣本對)的距離儘可能小,不同行人圖片(負樣本對)的距離儘可能大。常用的度量學習損失方法有對比損失(Contrastive loss)、三元組損失(Triplet loss)、 四元組損失(Quadruplet loss)、難樣本採樣三元組損失(Triplet hard loss with batch hard mining, TriHard loss)。
首先,假如有兩張輸入圖片和,通過網絡我們可以得到他們的特徵和。我們定義這兩張圖片特徵向量的歐式距離爲:
1)對比損失(Contrastive loss)
對比損失用於訓練孿生網絡(Siamese network),其結構圖如上圖6所示。孿生網絡的輸入爲一對(兩張)圖片和,這兩張圖片可以爲同一行人,也可以爲不同行人。每一對訓練圖片都有一個標籤 ,其中,表示兩張圖片屬於同一個行人(正樣本對),反之表示它們屬於不同行人(負樣本對)。之後,對比損失函數寫作:,其中
其中表示, 是根據實際需求設計的閾值參數。爲了最小化損失函數,當網絡輸入一對正樣本對,會逐漸變小,即相同ID的行人圖片會逐漸在特徵空間形成聚類。反之,當網絡輸入一對負樣本對時, 會逐漸變大直到超過設定的,通過最小化,最後可以使得正樣本對之間的距離逐漸變小,負樣本對之間的距離逐漸變大,從而滿足行人重識別任務的需要。
(2)三元組損失(Triplet loss):三元組損失是一種被廣泛應用的度量學習損失,之後的大量度量學習方法也是基於三元組損失演變而來。顧名思義,三元組損失需要三張輸入圖片。和對比損失不同,一個輸入的三元組(Triplet)包括一對正樣本對和一對負樣本對。三張圖片分別命名爲固定圖片(Anchor) ,正樣本圖片(Positive)和負樣本圖片(Negative)。圖片 和圖片 爲一對正樣本對,圖片 和圖片 爲一對負樣本對。則三元組損失表示爲:如下圖7所示,三元組可以拉近正樣本對之間的距離,推開負樣本對之間的距離,最後使得相同ID的行人圖片在特徵空間裏形成聚類,達到行人重識別的目的。
公式添加$項,保證網絡不僅能夠在特徵空間把正負樣本推開,也能保證正樣本對之間的距離很近。
(3) 四元組損失(Quadruplet loss):四元組損失是三元組損失的另一個改進版本。顧名思義,四元組(Quadruplet)需要四張輸入圖片,和三元組不同的是多了一張負樣本圖片。即四張圖片爲固定圖片(Anchor) ,正樣本圖片(Positive) ,負樣本圖片1(Negative1) 和負樣本圖片2(Negative2) 。其中 和 是兩張不同行人ID的圖片,其結構則四元組損失表示爲:其中 和 是手動設置的正常數,通常設置 小於$ \alpha$ ,前一項稱爲強推動,後一項稱爲弱推動。相比於三元組損失只考慮正負樣本間的相對距離,四元組添加的第二項不共享ID,所以考慮的是正負樣本間的絕對距離。因此,四元組損失通常能讓模型學習到更好的表徵。
(4)難樣本採樣三元組損失(Triplet loss with batch hard mining, TriHard loss):難樣採樣三元組損失(本文之後用TriHard損失表示)是三元組損失的改進版。傳統的三元組隨機從訓練數據中抽樣三張圖片,這樣的做法雖然比較簡單,但是抽樣出來的大部分都是簡單易區分的樣本對。如果大量訓練的樣本對都是簡單的樣本對,那麼這是不利於網絡學習到更好的表徵。大量論文發現用更難的樣本去訓練網絡能夠提高網絡的泛化能力,而採樣難樣本對的方法很多。之前提出了一種基於訓練批量(Batch)的在線難樣本採樣方法——TriHard Loss。TriHard損失的核心思想是:對於每一個訓練batch,隨機挑選 個ID的行人,每個行人隨機挑選 張不同的圖片,即一個batch含有 張圖片。之後對於batch中的每一張圖片 ,我們可以挑選一個最難的正樣本和一個最難的負樣本和 組成一個三元組。首先我們定義和 爲相同ID的圖片集爲 ,剩下不同ID的圖片圖片集爲 ,則TriHard損失表示爲:其中 是人爲設定的閾值參數。TriHard損失會計算 和batch中的每一張圖片在特徵空間的歐式距離,然後選出與 距離最遠(最不像)的正樣本 和距離最近(最像)的負樣本 來計算三元組損失。通常TriHard損失效果比傳統的三元組損失要好。
emsp; ③基於局部特徵的ReID方法:早期的ReID研究大家還主要關注點在全局的global feature上,就是用整圖得到一個特徵向量進行圖像檢索。但是後來大家逐漸發現全局特徵遇到了瓶頸,於是開始漸漸研究起局部的local feature。常用的提取局部特徵的思路主要有圖像切塊、利用骨架關鍵點定位以及姿態矯正等等。(1)圖片8切塊是一種很常見的提取局部特徵方式。如下圖所示,圖片被垂直等分爲若干份,因爲垂直切割更符合我們對人體識別的直觀感受,所以行人重識別領域很少用到水平切割。
emsp; ④基於視頻序列的ReID方法:目前單幀的ReID研究還是主流,因爲相對來說數據集比較小,哪怕一個單GPU的PC做一次實驗也不會花太長時間。但是通常單幀圖像的信息是有限的,因此有很多工作集中在利用視頻序列來進行行人重識別方法的研究。基於視頻序列的方法最主要的不同點就是這類方法不僅考慮了圖像的內容信息,還考慮了幀與幀之間的運動信息等。
基於單幀圖像的方法主要思想是利用CNN來提取圖像的空間特徵,而基於視頻序列的方法主要思想是利用CNN 來提取空間特徵的同時利用遞歸循環網絡(Recurrent neural networks, RNN)來提取時序特徵。13圖是非常典型的思路,網絡輸入爲圖像序列。每張圖像都經過一個共享的CNN提取出圖像空間內容特徵,之後這些特徵向量被輸入到一個RNN網絡去提取最終的特徵。最終的特徵融合了單幀圖像的內容特徵和幀與幀之間的運動特徵。而這個特徵用於代替前面單幀方法的圖像特徵來訓練網絡。
AMOC的核心思想在於網絡除了要提取序列圖像的特徵,還要提取運動光流的運動特徵。AMOC擁有空間信息網絡(Spatial network, Spat Nets)和運動信息網絡兩個子網絡。圖像序列的每一幀圖像都被輸入到Spat Nets來提取圖像的全局內容特徵。而相鄰的兩幀將會送到Moti Nets來提取光流圖特徵。之後空間特徵和光流特徵融合後輸入到一個RNN來提取時序特徵。通過AMOC網絡,每個圖像序列都能被提取出一個融合了內容信息、運動信息的特徵。網絡採用了分類損失和對比損失來訓練模型。融合了運動信息的序列圖像特徵能夠提高行人重識別的準確度。
論文從另外一個角度展示了多幀序列彌補單幀信息不足的作用,目前大部分video based ReID方法還是不管三七二十一的把序列信息輸給網絡,讓網絡去自己學有用的信息,並沒有直觀的去解釋爲什麼多幀信息有用。則很明確地指出當單幀圖像遇到遮擋等情況的時候,可以用多幀的其他信息來彌補,直接誘導網絡去對圖片進行一個質量判斷,降低質量差的幀的重要度。如圖15,文章認爲在遮擋較嚴重的情況下,如果用一般的pooling會造成attention map變差,遮擋區域的特徵會丟失很多。而利用論文的方法每幀進行一個質量判斷,就可以着重考慮那些比較完整的幾幀,使得attention map比較完整。而關鍵的實現就是利用一個pose estimation的網絡,論文叫做landmark detector。當landmark不完整的時候就證明存在遮擋,則圖片質量就會變差。之後pose feature map和global feature map都同時輸入到網絡,讓網絡對每幀進行一個權重判斷,給高質量幀打上高權重,然後對feature map進行一個線性疊加。思路比較簡單但是還是比較讓人信服的。
論文是第一篇用GAN做ReID的文章,發表在ICCV17會議,雖然論文比較簡單,但是作爲挖坑鼻祖引出一系列很好的工作。如下圖16,這篇論文生成的圖像質量還不是很高,甚至可以用很慘來形容。另外一個問題就是由於圖像是隨機生成的,也就是說是沒有可以標註label可以用。爲了解決這個問題,論文提出一個標籤平滑的方法。實際操作也很簡單,就是把label vector每一個元素的值都取一樣,滿足加起來爲1。反正也看不出屬於哪個人,那就一碗水端平。生成的圖像作爲訓練數據加入到訓練之中,由於當時的baseline還不像現在這麼高,所以效果還挺明顯的,至少數據量多了過擬合能避免很多。
ReID的其中一個難點就是姿態的不同,爲了克服這個問題論文使用GAN造出了一系列標準的姿態圖片。論文總共提取了8個pose,這個8個pose基本涵蓋了各個角度。每一張圖片都生成這樣標準的8個pose,那麼pose不同的問題就解決。最終用這些圖片的feature進行一個average pooling得到最終的feature,這個feature融合了各個pose的信息,很好地解決的pose bias問題。無論從生成圖還是從實驗的結果來看,這個工作都是很不錯的。這個工作把single query做成了multi query,但是你沒法反駁,因爲所有的圖都是GAN生成的。除了生成這些圖需要額外的時間開銷以外,並沒有利用額外的數據信息。當然這個工作也需要一個預訓練的pose estimation網絡來進行pose提取。
5.行人重識別數據集
在行人重識別中所使用到的數據集可以參考Person re-indentification datasets6.行人重識別的評價指標
Reid論文中常用的評測指標有mAP、CMC、ROC等,下面一一分析。1.ROC
ROC曲線是檢測、分類、識別任務中很常用的一項評價指標。曲線上每個點反映着對同一信號刺激的感受性。具體到識別任務中就是,ROC曲線上的每一點反映的是不同的閾值對應的FP(false positive)和TP(true positive)之間的關係,如圖17所示。
2.CMC
CMC曲線是算一種top-k的擊中概率,主要用來評估閉集中rank的正確率。舉個很簡單的例子,假如在人臉識別中,底庫中有100個人,現在來了1個待識別的人臉(假如label爲m1),與底庫中的人臉比對後將底庫中的人臉按照得分從高到低進行排序,我們發現:
2.1.如果識別結果是m1、m2、m3、m4、m5……,則此時rank-1的正確率爲100%;rank-2的正確率也爲100%;rank-5的正確率也爲100%;
2.2.如果識別結果是m2、m1、m3、m4、m5……,則此時rank-1的正確率爲0%;rank-2的正確率爲100%;rank-5的正確率也爲100%;
2.3.如果識別結果是m2、m3、m4、m5、m1……,則此時rank-1的正確率爲0%;rank-2的正確率爲0%;rank-5的正確率爲100%;
同理,當待識別的人臉集合有很多時,則採取取平均值的做法。例如待識別人臉有3個(假如label爲m1,m2,m3),同樣對每一個人臉都有一個從高到低的得分,
2-1.比如人臉1結果爲m1、m2、m3、m4、m5……,人臉2結果爲m2、m1、m3、m4、m5……,人臉3結果m3、m1、m2、m4、m5……,則此時rank-1的正確率爲(1+1+1)/3=100%;rank-2的正確率也爲(1+1+1)/3=100%;rank-5的正確率也爲(1+1+1)/3=100%;
2-2.比如人臉1結果爲m4、m2、m3、m5、m6……,人臉2結果爲m1、m2、m3、m4、m5……,人臉3結果m3、m1、m2、m4、m5……,則此時rank-1的正確率爲(0+0+1)/3=33.33%;rank-2的正確率爲(0+1+1)/3=66.66%;rank-5的正確率也爲(0+1+1)/3=66.66%;
3.Precision & Recall & mAP
一般來說,Precision就是檢索出來的條目(比如:文檔、網頁等)有多少是準確的,Recall就是所有準確的條目有多少被檢索出來了。
召回率 = 提取出的正確信息條數 / 樣本中的信息條數
3.1.第一次檢索到m1,提取出的正確信息條數=1,提取出的信息條數=1,樣本中的信息條數=3,正確率=1/1=100%,召回率=1/3=33.33%;
3.2.第二次檢索到m1,提取出的正確信息條數=2,提取出的信息條數=3,樣本中的信息條數=3,正確率=2/3=66.66%,召回率=2/3=66.66%;
3.3.第三次檢索到m1,提取出的正確信息條數=3,提取出的信息條數=6,樣本中的信息條數=3,正確率=3/6=50%,召回率=3/3=100%;
平均正確率AP=(100%+66.66%+50%)/3=72.22%
而當需要檢索的不止一個人時,此時正確率則取所有人的平均mAP。
4.F-Score
從上面準確率和召回率之間的關係可以看出,一般情況下,高,就低,高,就低。所以在實際中常常需要根據具體情況做出取捨,例如一般的搜索情況,在保證召回率的條件下,儘量提升精確率。很多時候我們需要綜合權衡這2個指標,這就引出了一個新的指標e。這是綜合考慮和的調和值。
當時,稱爲,這時,精確率和召回率都很重要,權重相同。當有些情況下,我們認爲精確率更重要些,那就調整β的值小於1,如果我們認爲召回率更重要些,那就調整β的值大於1。
比如在上面的例子中,在第三次檢索到m1時的爭取率爲50%,召回率爲100%,則F1-score=(20.51)/(0.5+1)=66.66%,而F0.5-score=(1.250.51)/(0.25*0.5+1)=55.56%
7.行人重識別測試
主要有兩種方案:a.測試的輸入是一對行人,輸出爲這對行人的相似度,然後再按相似度排序;
b.輸入單個人,提取特徵,再計算與其他人的歐式距離,然後再按距離排序。
第一種方案的優點是,判斷兩個人是不是一個人,簡單的二分類(是/否)。但缺點是如果我們搜索庫中有m張圖片,那麼與目標圖片組成m對圖片對。每一對都要進一次模型,估算相似度,這極大的增加了測試的時間。如果我們有n個query,那麼我們要計算nm次相似度(而m往往很大)。另一種方案是,預先提取行人的特徵,我們只要預先提好n+m次特徵。之後只要比較就好了,比較特徵可以簡單的用矩陣乘法實現。 目前兩種方案都有在用,但是後一種更接近實際中圖像搜索的要求,用特徵來快速檢索。
參考自:
http://html.rhhz.net/tis/html/201706084.htm
https://blog.csdn.net/weixin_41427758/article/details/81188164
https://blog.csdn.net/Gavinmiaoc/article/details/80774199>
https://blog.csdn.net/baidu_18891025/article/details/79202249
https://zhuanlan.zhihu.com/p/26168232