---
title: 【Survey】Pedestrian Attribute Recognition(PAR)
date: 2020-12-30 22:25
is_modified: false
disqus: cynthiahackmd
categories:
- "智慧計算 › 人工智慧"
tags:
- "AI/ML"
- "行人屬性辨識 PAR"
- "電腦視覺 CV"
---
{%hackmd @CynthiaChuang/Github-Page-Theme %}
<br>
囫圇吞棗 Survey 結果。
如果覺得架構很眼熟,別懷疑。基本上就是 [Pedestrian Attribute Recognition: A Survey](https://arxiv.org/abs/1901.07474) 這篇論文的架構。
隨手附上[讀書筆記](/@CynthiaChuang/Paper-Pedestrian-Attribute-Recognition-A-Survey)傳送門。
<!--more-->
## Introduction
最近在看 Pedestrian Attribute Recognition (行人屬性辨識)的介紹,想要快速的大致了解下這個領域,包含問題定義、面臨的挑戰、現存的benchmark 與一些研究現況。
先澆大家冷水,對屬性辨識的效果,尤其是真的從監視器中擷取圖像出來辨識的那種,準確度其實不甚理想,目前所看到的論文在最新資料集(PA-100K)的表現上 ==mA==,即多數論文的第一評估指標,也只達到 80% 左右的準確率。
### Problem Formulation
在一開始我們先來看看何為行人屬性辨識,以及為什麼選擇屬性作為描述行人的特徵。
**Pedestrian Attribute Recognition**
行人屬性辨識的目的在於,從目標人物圖像中挖掘出所能被觀察到的高階語義描述,也就是所謂的屬性,例如:性別、年齡、服飾、配件...等。如下圖所示:
<p class="illustration">
<img src="https://i.imgur.com/RAzm5mx.png" alt="PAR Define">
論文架構圖(圖片來源: <a href="https://arxiv.org/abs/1901.07474">論文</a>)
</p>
若用更正式的數學式來定義,可以說成給定一張人物圖像 $I$,行人屬性辨識目的是從從預先定義的屬性列表 $A= \{a_1, a_2, ..., a_L\}$ 中,預測一組屬性 $a_i$ 來描述此人的特徵。
<br>
**Attribute**
至於為什麼選擇屬性作為描述行人的特徵?
這是因為它與常用的 HOG、LBP 或是深度學習的抽象低階特徵不同,它是種==可搜索的高階語義描述==,簡單來說就是你可以用口語來描述這個特徵,且可以藉由這樣的特徵描述來搜尋目標人物。
而且,當用來描述行人的特徵由低階的線條變成高階富有語意的物件時,這樣的描述會更適應視角與外在條件的變化,不太容易因為這些條件的變動而變化。當然,或許這些變動會造成辨識上的困難,但不至於完全變成另一個特徵。
<br>
不過,對於什麼是屬性或屬性有哪些,其實並沒有明確定義。但一般我們用來描述一個陌生人時,可能使用的形容詞會有下面幾類:
1. **體態**:身高、體重...。
2. **穿著**:上衣樣式與顏色、下著類型及顏色、是否有背背包、有無手持物品...。
3. **面容**:年齡、性別、頭髮類型顏色、是否戴眼鏡、表情描述、有無痣或傷疤...。
4. **動作**:追、趕、跑、跳、碰、走、站...。
舉例來說:
1. 一名穿黑色上衣的男子手持西瓜刀,怒氣沖沖朝店內走來。
2. 剛剛站在那裡的紅衣紅鞋長髮女子。
<p class="illustration">
<img src="https://i.imgur.com/DP7YXJT.png?1" alt="可愛萬聖節鬼魂">
P.S. 我原本想放張紅衣長髮女子的圖,陰氣森森的那種 XDDD 但覺得之後嚇到應該會是我自己,只好作罷。(圖片來源: 左: <a href="https://pixabay.com/zh/illustrations/skeleton-cute-bone-halloween-happy-1456627/">pixabay</a>)
</p>
雖說屬性五花八門,但在行人屬性辨識資料集中,會標注的以顆粒度較大的 soft-biometrics 為主,目前看到最細的標注也就是眼鏡跟皮帶。其他更小的顆粒度,會因解析度、學習困難度、標注困難以及一些實用性上的考量,而不進行標注。
當這些屬性辨識完畢後,最直接的應用場景就是應用於安防,另外也可延伸到行人重新識別...等領域,以實現更好的性能。
### Challenge
這邊來探討在行人屬性訓練過程中會遇到的問題:
1. **Multi-views**
2. **Occlusion**
3. **Unbalanced Data Distribution**
4. **Low Resolution**
5. **Illumination**
6. **Blur**
不過這些問題,其實不專屬於行人屬性辨識,更像是辨識領域中共同的問題。很多問題如光源、模糊、障礙物遮擋...等問題,之前在做車牌辨識的時候就曾遇過類似的問題的。
但有部份問題在該領域確實會被放大,例如:Multi-views 與 Occlusion,不同視角的選擇這領域中,很可能導致部份屬性的消失或遮擋。
另外在遮擋問題,人體可能是被其他障礙物或是行人遮擋,可能導致在訓練時引入障礙物的特徵,更甚至其他人特徵。
此外就是低解析度的問題,主要是因為行人屬性辨識的圖像來源會是監視器,容易產生低解析度品質的圖像(因為好的監視器太貴了,沒辦法大量布置 XDDD)。但部份屬性因為顆粒度小,低解析度的成像會對辨識造成困難。
<br>
除了上述共有的問題外,根據幾篇論文跟文章,列出了些專屬於這領域的問題:
1. **類別間差異(intra-class variations)大**
部份屬性由於外觀多樣性(appearance diversity),例如:包包種類繁多,和外觀歧義性(appearance ambiguity),例如:placket 跟 solid ,導致單一類別間差異頗大。
<p class="illustration">
<img src="https://i.imgur.com/JC1ESan.png?1" alt=" placket 跟 solid">
左: placket 右:solid(圖片來源: 左: <a href="https://www.beautifulhalo.com/mens-simple-long-sleeves-half-button-placket-loose-fit-solid-color-linen-shirt-p-407928.html">Beautifulhalo</a>、右:<a href="https://www.google.com/url?sa=i&url=https%3A%2F%2Fshopee.tw%2F%25E5%259B%259E%25E8%25B3%25BC%25E7%258E%2587%25E8%25B6%2585%25E9%25AB%2598%25EF%25BC%258C%25E8%25B6%2585%25E4%25BA%25BA%25E6%25B0%25A3%25E6%258E%25A8%25E8%2596%25A6-%25E7%2599%25BD%25E8%25A5%25AF%25E8%25A1%25AB-%25E7%2594%25B7-(%25E5%258F%25B0%25E7%2581%25A3%25E7%258F%25BE%25E8%25B2%25A8-%25E6%259C%2589%25E5%258F%25A3%25E8%25A2%258B)%25E4%25B8%258A%25E7%258F%25AD%25E6%2597%258F%25E7%2599%25BD%25E8%25A5%25AF%25E8%25A1%25AB-%25E9%2595%25B7%25E8%25A2%2596-mcps20-i.6368458.662654313&psig=AOvVaw3v5kCwmoCUStkFuUqkBW-1&ust=1597301305337000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCLjDl5qJlesCFQAAAAAdAAAAABAD">蝦皮購物</a>)
</p>
2. **變形**
服裝由於==材料==的緣故,衣服因行人的動作或外物而變形,導致特徵縮,例如:穿著下擺比寬鬆的短褲進行劇烈運動時,會容易誤認為短裙。
另外,由於視角以及圖像==長寬比的不同==,容易導致衣物特徵變形,而看起來不同。不過,這樣的變形的影響程度,取決於標注顆粒度大小,例如:在另一個相似的領域 ==Fashion Classification==,它主要是判斷衣物特徵與風格,如果衣物上的樣式變形,例如細條紋變成粗條紋,對它影響會比較大;反之在行人屬性辨識中,衣物相關的顆粒度相較之下較大,影響沒那劇烈。
3. **不同級別的標籤**
此外,每種屬性的推斷所需要的特徵不盡相同。有些屬性僅和人體的部分區域相關,例如:長短髮、有無帽子、有無眼鏡、服裝顏色...等,屬於低級屬性,只需要局部特徵,但這些局部特徵的位置可能在不同的樣本中又不相同,例如:背包的位子可能是前背、後背、側背,甚至拿手上;而有的屬性它無法對應到特定區域,或者說要看完全圖才能推定的屬性,例如:性別、年齡...等,因此需要全域特徵,屬於高級屬性。
這些都導致在學習時,特徵抽取的阻礙。另外,不同屬性間所需關注的特徵有可能相同,若多個屬性同時同個特徵來學習,能出現特徵競爭的現象。
4. **細緻屬性的提取**
某些屬性在整張圖像中佔比實在太少,如墨鏡、首飾及正面鏡頭的後背包,這會導致使辨識的困難。
5. **分類問題**
因為一個人身上的屬性繁多,在加上標注方式的不同,會同時出現二分類或是多分類的屬性,例如:有些屬性是二分類,像是:有無背包;有的則是多分類,例如:上衣顏色、年齡區段...等。這讓一開始的問題定義與模型選擇就會是個難題。
### Fashion Classification
岔個題外話,我一開始收到的指令要是辯識人身上的物件衣服樣式,因此直覺想到 Fashion MNIST:
<p class="illustration">
<img src="https://i.imgur.com/EOyh0RD.png?1" alt=" Fashion MNIST 資料集">
Fashion MNIST 資料集(圖片來源: <a href="https://github.com/zalandoresearch/fashion-mnist">zalandoresearch/ fashion-mnist | github </a>)
</p>
Fashion Classification,個人覺得它跟行人屬性辨識的定義相似,也是給定一張圖片並從預先定義的屬性列表,選出一連串符合描述的屬性,只是它的屬性可能更細緻與抽象,例如服裝樣式、風格、布料,而且更加偏重服裝本身的屬性標注。
另外一個讓我比較印象深刻的是,兩個資料集的照片的比大概就是網美照與狗仔偷拍照的對比。
<p class="illustration">
<img src="https://i.imgur.com/Dac1C0k.png?1" alt="Market150 Sample">
Market1501 Sample (圖片來源: 左: <a href="https://github.com/vana77/Market-1501_Attribute">Market1501 Github</a>、 右: <a href="https://sites.google.com/site/fashionparsing/dataset">CF dataset</a>)
</p>
在兩個領域中會遇到的挑戰也不盡相同,在 Fashion 方面受細緻屬性提取、外觀歧義性、變形的影響較深;而行人屬性辨識則是受到低解析度、動作影響、攝影機視角與遮擋的影響較大。
兩個領域延伸出去的應用也不太一樣,Fashion 可以應用在電商上,相似風格、相似設計師推薦,或是所謂的明星同款推薦;而在行人屬性辨識行人檢測/跟踪/檢索與行人重新識別...等方面。
嗯...行人屬性辨識的延伸應用怎麼列出來的感覺比較厲害,但...Fashion 的看起來是有錢途 XDDD
## Benchmarks
這裡介紹了分兩部份:一是資料集、二是評估指標。
### Dataset
前面提過,行人屬性辨識的標注含蓋了兩種不同級別的標籤:**低級屬性**與**高級屬性**,不過看完資料集,覺得這些屬性可以再分成兩類:
1. **動作描述**
例如:追、趕、跑、跳、碰、走、站......等。這些屬性與外觀描述無關,但卻會極大地影響外觀的呈現。
2. **外觀描述**
可以理解成描述此人所會用到的形容詞。
這邊跟 [Survey 論文的 Dataset](/@CynthiaChuang/Paper-Pedestrian-Attribute-Recognition-A-Survey#21-Dataset) 重疊性高,所以貼了一張圖代表,就不再贅述了。
<p class="illustration">
<img src="https://i.imgur.com/cyJXVyc.png" alt="Dataset Overview">
Dataset Overview(圖片來源: <a href="https://sites.google.com/view/ahu-pedestrianattributes/">論文 Blog</a>)
</p>
雖然列了將近 10 個資料集,不過其中最著名的莫過於 RAP、 PETA、 與 PA-100K 三個資料集。除了這三個外,就屬於 Market1501 和 DukeMTMC 這兩個孿生資料集。
綜觀這些資料集,可以發現到資料集存在著一些狀況:
1. **屬性標注界限不明、錯誤**
就如同前面所說的公開資料集中類別間差異大,標注界限不明、甚至是錯誤的情況。而基於這些資料所設計出來的演算法,效能也難以突破,這或許是因為這領域相對於其 CV 領域不熱門的原因?
2. **對同一屬性的標注方式不一**
此外各個資料集間對同一屬性的標注方式不同,甚至頗大,難以做遷移訓練,接續前人的研究成果。或許有些可以藉由後處理來映射,不過多數的屬性標注感覺沒辦法進行映射。
3. **行人框的精準度**
這個應該不算資料集的問題,算是實做或說是系統面的問題。在資料集中所有的行人框是由人工標注出來了,行人會位於圖像的正中央,是整個圖像的主體;但一般在設計系統時,並不會由人工去框,而是會借助檢測器去檢測行人,但在檢測結果中行人的位置不定,也可能不會是圖像中佔比最大的,這有可能對辨識效果產生影響。
4. **場景的變化**
這個也不算是資料集問題,但如果真要落地可能需要在蒐集額外的資料。這些資料集基本是處於相同的場景與氣候條件,是處於一個較佳的狀況,但若真要實做,可能還必須蒐集不同場景、天氣、光源...等資料,以增加系統的健壯性。當然這是要做室外的場景的應用,如果是室內的話,這些條件會相對應穩定。
此外,可能還必須針對不同的場景,挑選合適的屬性,才能達到較好的訓練效果。
另外的小苦惱的是,我接到的要求上衣要分長短袖、顏色要分 12 種,但這些資料集看下來,長短袖不一定有、顏色最多只有 11 個...,看來如果要用這些資料集,也要做些後處理。不過這幾個資料集好像也不能商用就是了,看來標資料的惡夢可能又得重溫一次了(嘆。
### Evaluation Criteria
在論文中常使用的有兩種:
1. **mean acccuracy (mA)**
這是論文中常見的第一指標,分別計算每個**屬性**正負樣本分對的比例,再將兩者平均作為這一個屬性的精準度,最後再將所有屬性取平均做為最後的值。這種以**屬性**下去算的方式,被稱作 ==label-based== 的評估方式。
$$
mA = \cfrac{1}{2N} \sum^L_{i=1}(\cfrac{TP_i}{P_i} + \cfrac{TNi}{N_i} )
$$
其中,$L$ 是屬性的數量,$P_i$ 和 $TP_i$ 分別為正樣本數與分對的正樣本數;同理,$N_i$ 和 $TN_i$ 則為負樣本與分對的負樣本。
2. **Example-based evaluation**
但 label-based 的評估方式並沒有考慮到屬性之間的關聯性,因此提出了以每個樣本為基礎的評估方式:
$$
\begin{aligned}
Acc_{exam} &= \cfrac{1}{N} \sum^N_{i=1}(\cfrac{\vert Y_i \bigcap f(x_i)\vert}{\vert Y_i \bigcup f(x_i)\vert}) \\
Prex_{exam} &= \cfrac{1}{N} \sum^N_{i=1}(\cfrac{\vert Y_i \bigcap f(x_i)\vert}{\vert f(x_i) \vert}) \\
Rec_{exam} &= \cfrac{1}{N} \sum^N_{i=1}(\cfrac{\vert Y_i \bigcap f(x_i)\vert}{\vert Y_i \vert}) \\
F1 &= \cfrac{2 * Prex_{exam} * Rec_{exam} }{Prex_{exam} + Rec_{exam}}
\end{aligned}
$$
其中 $N$ 是所有樣本數, $Y_i$ 是第 $i$ 個樣本中 ground truth 為 positive 的 label,$f(x)$ 則是第 $i$ 個樣本中預測結果為 true 的 label。
看公式基本上就是 recall 跟 precision 的變形,變化比較大的是 accuracy 的部份,按公式來看,可以表示成:
$$
Acc_{exam} = \cfrac{1}{N} \sum^N_{i=1}(\cfrac{TP}{TP+FP+FN}) \\
$$
原先公式中的 TN 全被剔除了,這應該是為了因應 Multilabel 中為 0 資料較多,所特地處理了,因此算出來的分數會比原公式的還低。
3. **其他指標**
除了這兩種外,在部份論文中有會引入 Multilabel 中常見==Receiver Operating Characteristic (ROC)==與==Area Under the average ROC Curve (AUC)== 作為一般指標。
## Regular Pipeline
因為行人屬性標注的多樣性,它可採的網路架構相對較多樣,目前最主流的方法是用 ==Multitask== Learning,它將每個屬性估計視為一項任務,用一個模型全搞定。
但無論是採用 Multiclass、 Multilabel 或是 Multitask 的方法,都必須做些修改。修改方向可能是**修改資料適應演算法**或是**演算法適應資料**,詳細說明之前在[筆記中](/@CynthiaChuang/Paper-Pedestrian-Attribute-Recognition-A-Survey#3-Regular-Pipeline-for-PAR)有提過,網誌就不再重複說明了。
目前主流的方法是 Multitask Learning 中的 Hard parameter sharing ,在這方面會遇到的挑戰有:
1. 何時從骨幹網路分叉進行各自屬性的訓練?
2. 訓練時各屬性收斂速度不一樣,如何設置訓練中止的條件且不影響識別其他屬性的效果?
3. 另外,各屬性 loss 的權重該如何調整,才能較好擬合?
是說,平常寫報告這樣跳來跳去的一定會被罵 XDDD ,不過基於程式碼不重複原則(雖然現在不是寫程式碼)不是很想複製這麼一大段的重複的內文,~~不過我也懶的用不同的句子去重寫一次 XDDD~~
## Review of PAR Algorithms
快速瀏覽下研究方法的發展。
最初的行人屬性識別是通過方向梯度直方圖(Histogram of Oriented Gradient, HOG)、局部二值模式(Local Binary Pattern)、LBP...等方式,進行人工提取特徵,並針對每個不同的屬性分別訓練分類器。
隨著 CNN 的方法開始發展後,開始將嘗試圖片放進網路訓練,而分類方法也從為每個屬性訓練分類器,逐步往 Mulstitask 的方向來演進。而在輸入的資訊也從最一開始將整張圖片放進 CNN 進行訓練,到之後為了克服不同粒度屬性的問題,會縮放圖片特徵,以類似特徵金字塔來進行,或是引入額外的身體特徵資訊,如:身體部位、姿態評估、骨架...等資訊,也有引入 attention 及透過不同層次的網路來提取...等方法,來提高整體識別性能。
所謂的不同層次的網路來提取,指的是 multi-branch 方法,會先將屬性分群分別提取,最後再將不同分支提取的特徵進行拼接。另外說到引入額外的資訊,有些在辨識過程中考慮不同視角,但這個資料在上述的資料集中只有 RAP 有提供。
與其他電腦視覺任務的發展史雷同,在 CNN 之後出現了 RNN-based 與 CNN-RNN-based 的方法。在 RNN-based 中,會藉由上下文的訊息建立 LSTM 網路,使得上下文的資訊可以傳到後續的特徵提取過程。不同屬性間的關聯,也可以用 LSTM 保存上一個屬性以供後面使用,或是透過聯合訓練的方式來進行。
此外針對標籤不平衡,有部份研究會對於 loss 權重做調整,以得到較好的擬合效果。
<br>
根據上面的發展,這邊我就我看過得論文挑選了幾篇來介紹。
<p class="illustration">
<img src="https://i.imgur.com/khzjUrN.png" alt="read paper!">
</p>
### 1. **A Richly Annotated Dataset for Pedestrian Attribute Recognition**
這篇的論文其實可以分成三部曲,個人覺得成就最大的是第二篇,也就是我標題放著的名稱,不過上 Transactions on 的是第三篇:
1. [Multi-attribute learning for pedestrian attribute recognition in surveillance scenarios](https://ieeexplore.ieee.org/document/7486476)
2. [A Richly Annotated Dataset for Pedestrian Attribute Recognition](https://arxiv.org/abs/1603.07054)
3. [A Richly Annotated Pedestrian Dataset for Person Retrieval in Real Surveillance Scenarios](https://ieeexplore.ieee.org/document/8510891)
在這系列的論文中的第一篇 [《Multi-attribute learning for pedestrian attribute recognition in surveillance scenarios》](https://ieeexplore.ieee.org/document/7486476) 中,作者提出了 DeepSAR 與 DeepMAR Model 兩個模型,模型相當簡單,都是標準的 CNN 網路。但據我查到的資料,這篇好像是第一篇使用 CNN 實做的架構(有點不太確定,2015 年 CNN-based 的方法有點像是百花齊放,忽然多了很多,就先姑且算是吧),順便附上找到的 [Pytorch 程式碼](https://github.com/dangweili/pedestrian-attribute-recognition-pytorch) 。
<p class="illustration">
<img src="https://i.imgur.com/RxCJS52.png" alt="DeepSAR/DeepMAR Model">
DeepSAR/DeepMAR Model(圖片來源: <a href="https://ieeexplore.ieee.org/document/7486476">DeepSAR/DeepMAR Model 論文 </a>)
</p>
而在 [《A Richly Annotated Dataset for Pedestrian Attribute Recognition》](https://arxiv.org/abs/1603.07054) 一文中,提出了 [RAP 1.0](http://www.rapdataset.com/rapv1.html) 的資料集,並就不同視角、遮擋、身體部位與屬性識別的影響進行了分析。([Caffe 程式碼](https://github.com/dangweili/RAP))
在資料集中,先將資料依照有無遮擋分成了兩類:
<p class="illustration">
<img src="https://i.imgur.com/7AA4Sg2.png" alt="有無遮擋資料集">
有無遮擋資料集(圖片來源: <a href="https://arxiv.org/abs/1603.07054">RAP 1.0 論文</a>)
</p>
並提供了不同視角的影像標注:
<p class="illustration">
<img src="https://i.imgur.com/xPna7Rb.png" alt="不同視角的影像標注">
不同視角的影像標注(圖片來源: <a href="https://arxiv.org/abs/1603.07054">RAP 1.0 論文</a>)
</p>
**視角**
為避免遮擋影響性能,這實驗僅取無遮擋的圖片出來進行分析。分別就不區分、正面、背面、左邊、右邊 5 種狀況進行訓練,並觀察視角對各屬性識別性能的影響。
<p class="illustration">
<img src="https://i.imgur.com/U87rwhP.png" alt="不同視角性能分析">
不同視角性能分析(圖片來源: <a href="https://arxiv.org/abs/1603.07054">RAP 1.0 論文</a>)
</p>
其中比較對象的 FC6-cc,表示使用第六層 Fully Connected Layer 的特徵向量,而最後兩碼分別表示訓練與測試所是用資料集,會有 `o`、 `c` 、 `m` 三種,分別表示遮擋、未遮擋與混合的資料集三種。
結果表明,不同的視角確實會影響到部份屬性的識別,例如:背包使用背面視角判斷的準確度最高、長短袖的判斷則是側面的準確度較高。
<br>
**遮擋**
實驗結果表明,有遮擋的性能相較無遮擋的性能,局部屬性性能下降,表明遮擋會對局部屬性的識別造成影響。
<p class="illustration">
<img src="https://i.imgur.com/5jpDiOC.png" alt="遮擋性能分析">
遮擋性能分析(圖片來源: <a href="https://arxiv.org/abs/1603.07054">RAP 1.0 論文</a>)
</p>
**身體部位**
最後的實驗是採用身體部位,資料集中將人體分成了三個大部位:頭部、上半身、下半身。
<p class="illustration">
<img src="https://i.imgur.com/ngSYh2Q.png?1" alt="資料集中將人體分成了三個大部位">
資料集中將人體分成了三個大部位(圖片來源: <a href="https://arxiv.org/abs/1603.07054">RAP 1.0 論文</a>)
</p>
並從中擷取出個別部位進行辨識,實驗結果表明,屬於該部位的屬性的辨識效果會比使用其他部位來的好。引此若能引入身體部位的資訊,或許能提高辨識結果。
<p class="illustration">
<img src="https://i.imgur.com/RvkQsnf.png" alt="身體部位性能分析">
身體部位性能分析(圖片來源: <a href="https://arxiv.org/abs/1603.07054">RAP 1.0 論文</a>)
</p>
三部曲的最後一篇 [《A Richly Annotated Pedestrian Dataset for Person Retrieval in Real Surveillance Scenarios》](https://ieeexplore.ieee.org/document/8510891),則是提出 RAP 2.0,除了加大資料量外,還為每位行人加上了 person ID,使資料集可以用在行人重新識別。
### 2. **HydraPlus-Net: Attentive Deep Features for Pedestrian Analysis**
又名 HydraPlus-Net 或是 HP-Net(傳送門:[論文](https://arxiv.org/abs/1709.09930)、[Caffe Code](https://github.com/xh-liu/HydraPlus-Net))。這篇是香港中文大學與商湯提出來的一篇論文,同時處理了屬性辨識與行人重新識別的問題,並且提出了目前最大的資料集:PA-100k(不曉得為啥我一直打成 PK-100A XDDD)。
為了克服不同層級屬性的問題,本篇使用了多層 attention 來映射不同的特徵層,從而完成從局部到全局的特徵提取,最後再將所提取特徵融合,以進行屬性辨識。
<p class="illustration">
<img src="https://i.imgur.com/kKaUKMc.png?1" alt="HP-Net 網路架構">
HP-Net 網路架構(圖片來源: <a href="https://arxiv.org/abs/1709.09930">HP-Net 論文</a>)
</p>
網路可以分成 Main Net (M-net)與 Attentive Feature Net (AF-net) 兩個部份。
1. **Main Net**
這是個單純的 CNN 架構,實做方式是採用 inception_v2,包含了 3 個 inception block。
2. **Attentive Feature Net**
而 AF-Net 包含了 3 個 multidirectional attention(MDA)
<p class="illustration">
<img src="https://i.imgur.com/9YfCyfH.png?1" alt="MDA module">
MDA module(圖片來源: <a href="https://arxiv.org/abs/1709.09930">HP-Net 論文</a>)
</p>
不同 block 經由 attention 所學到特徵差異頗大,高層的特徵通常更聚焦語意區域或是特定物體上,如下圖上 $a^3$ ;而低的特徵則善於捕捉局部特徵或是邊緣、紋理...等細節,如下圖上 $a^1$ 。 而下圖下,所顯示的則是在不同 channel 中所捕捉到的不同特徵模式。
<p class="illustration">
<img src="https://i.imgur.com/Xe4abux.png" alt="MDA Maps">
MDA Maps(圖片來源: <a href="https://arxiv.org/abs/1709.09930">HP-Net 論文</a>)
</p>
3. **Global Average Pooling,GAP**
網路的最後先使用 Global Average Pooling 取代 Fully Connected Layer 來融合不同的的特徵,一般認為,相比 FC ,使用 GAP 會較好的預測效能。
總覺得這個網路訓練起會很麻煩,在訓練方式上它是採用分階段訓練。先訓練 M-net 提取基本特徵,再將 M-net 複製三次得到三個 AF-net 分支,接下來分別訓練三個分支。最後固定 M-net 與 AF-net 訓練最後的 GAP 與 FC 。
<p class="illustration">
<img src="https://i.imgur.com/pyhD9XB.png" alt="HP-Net 實驗結果">
HP-Net 實驗結果(圖片來源: <a href="https://arxiv.org/abs/1709.09930">HP-Net 論文</a>)
</p>
### 3. **Attribute Recognition by Joint Recurrent Learning of Context and Correlation**
選這篇[論文](https://arxiv.org/pdf/1709.08553.pdf)是因為我認為它算是使用 RNN 的代表,又名 JRL。
網路的核心概念有二,一是提取不同屬性間的關聯性,例如裙子與女性兩個詞同時出現在圖像中的機會較大;二是行人間的屬性關聯,即同一個場景的人很有可能會有類似的屬性,想到例子大概就是海邊穿泳衣、戴太陽眼鏡;或是冬天穿毛衣、厚外套之類的。
<p class="illustration">
<img src="https://i.imgur.com/CWzW3pi.png" alt="JRL 網路架構">
JRL 網路架構(圖片來源: <a href="https://arxiv.org/pdf/1709.08553.pdf">JRL 論文</a>)
</p>
就網路本身它是由 Encoder 與 Decoder 兩個 RNN 構成,文中將這兩個 RNN 稱為 Intra-Person Attribute Contex 與 Inter-Attribute Correlation。而行人間上下文的部份就由 Inter-Person Similarity Context 負責。
1. **Intra-Person Attribute Context**
這邊將行人圖像依垂直方向分成 $m$ 等分,在上圖中 $m=6$,將這 6 等分視為不同 time step,依時序依序輸入 LSTM,最終得到 hidden states 與輸出值 $z$。用這樣的提取方式可以獲取體內上下文的關係。
2. **Inter-Person Similarity Context**
這則是在要來找尋人群中關係,除目標圖像 $I$ 外,會從整個畫面中選出最相近的另外 $k$ 張圖像 $I^a_i, i={1,...,k}$。張後每張圖像都經由 Encoder,得到輸出值 $z^a_i$,最終將所有量作為附加訊息整合到 $z^* = max(z,z^a_1,...,z^a_k)$。
至於如何挑選 $k$ 張相近圖像,則是藉由 AlexNet 提取。將 AlexNet 經由 ImageNet 初始化並進行 Fine-tune 後,輸入候選圖像,並將第 5 層 的 Convolutional Layer 的 featuremap 依垂直方向分成 $m$ 等分別進行 pooling, 再將 $m$ 個區域的 pooling 結果接在一起送回第 6 層 Fully Connected Layer,最後取第 7 層的輸出特徵,用 L2 距離計算出 top-k 張相似的圖像。
3. **Inter-Attribute Correlation**
最後對屬性進行解碼。這邊引入了 attention,根據每張圖片對每種屬性辨識的貢獻度不同,依下列計算得到一組 Decoder 的輸入 $Z$。
$$
Z_t = \sum^m_{i=1}{w_{t,i} \times h_i}
$$
其中 $t$ 指的是屬性個數,$h_i$ 則是 Encoder 所產生的 hidden state。將 $Z$ 與上一階段所得的 $z^*$ 分別作為 Decoder 的輸入與初始狀態,最後預測出一連串的結果。
<br>
訓練時為避免雜訊從 RNN 傳播到 CNN,兩種網路會分開訓練。另外考慮到局部特徵的位置在不同的樣本中可能不同,因此 RNN 的 Decoder 的屬性排列順序,並未存在一個最佳排序方式,因此這邊定義了 10 種排序方式,針對每種方式字訓練了一個 JRL 網路(我應該沒理解錯誤),最後在以多數決的方式給出預測。
這個網路的訓練應該會很慢,RNN 的訓練本來就快不了了,還要訓練 10 個...。
<p class="illustration">
<img src="https://i.imgur.com/dg5rUWe.png" alt="JRL 結果">
JRL 結果(圖片來源: <a href="https://arxiv.org/pdf/1709.08553.pdf">JRL 論文</a>)
</p>
### 4. **Grouping Attribute Recognition for Pedestrian with Joint Recurrent Learning**
前面提過,為了克服顆粒度不同的問題,會引入額外的資訊,而這篇 GRL ([論文](https://www.ijcai.org/Proceedings/2018/441)、[程式碼](https://github.com/slf12/GRLModel))就是引入了身體部位的資訊,據說這是第一篇利用空間相關性來分組進行屬性預測的研究。
這篇提到,目前的方法都著重在發覺屬性之間的關聯性,但都忽略組內語意的衝突與空間上的關係,所謂的組內語意指的是預測結果中兩個箱衝突的預測,以年紀來說,不可能有人同時具備 `16-30` 和 `60+` 兩個標籤;而空間指的是標籤與身體空間上的關係,例如,頭髮長短的特徵會先專注頭部。
在這篇實做使用的資料集 PETA 與 RAP,作者先將屬性進行分組:
<p class="illustration">
<img src="https://i.imgur.com/lWC33S8.png" alt="屬性分群">
屬性分群(圖片來源: <a href="https://www.ijcai.org/Proceedings/2018/441">GRL 論文 </a>)
</p>
就網路來看它以分成幾個區域來介紹。當給定一張目標圖像 $I_m$,會先使用 Fully Convolutional Networks 來判斷人體關節,載使用 Body Region Proposal Networks 區分出人體的頭部以及上下半身的區域。
<p class="illustration">
<img src="https://i.imgur.com/d7gSlkt.png" alt="身體區域劃分">
身體區域劃分(圖片來源: <a href="https://www.ijcai.org/Proceedings/2018/441" >GRL 論文 </a>)
</p>
而目標圖像 $I_m$ 會在經由 inception v3 ,從中提取全域的特徵。在藉由 ROI Average Pooling 搭配剛剛劃分出的人體區域,從全域特徵中提區特定區域的特徵。
LSTM 的 time steps 會對應到剛剛對資料集所做的分組,而每一組的屬性會使用相同的 Fully Connection layer,並且被同時預測。
<p class="illustration">
<img src="https://i.imgur.com/OL44nBU.png" alt="GRL 網路架構">
GRL 網路架構(圖片來源: <a href="https://www.ijcai.org/Proceedings/2018/441">GRL 論文 </a>)
</p>
最終的數據結果如下:
<p class="illustration">
<img src="https://i.imgur.com/yLLDmPZ.png" alt="GRL 結果">
GRL 結果(圖片來源: <a href="https://www.ijcai.org/Proceedings/2018/441">GRL 論文 </a>)
</p>
### 5. **Improving Pedestrian Attribute Recognition With Weakly-Supervised Multi-Scale Attribute-Specific Localization**
在 [Introduction](#Introduction) 提過目前我看到在 PA-100K 上 mA 表現最好也只達到 80% 左右的準確率,指的就是這篇 ALM([論文](https://arxiv.org/pdf/1910.04562.pdf)、[程式碼](https://github.com/chufengt/iccv19_attribute))。
這篇也是從區域特徵提高細粒度的方向來下手,但不同的是他提出了 Attribute Localization Module,不同於過往的方法,能夠自發的發現最具判別力的區域,並在多尺度上學習每個屬性的區域特徵。
<p class="illustration">
<img src="https://i.imgur.com/HLwpyuI.png" alt="引入額外身體資訊">
引入額外身體資訊(圖片來源: <a href="https://arxiv.org/pdf/1910.04562.pdf">ALM 論文</a>)
</p>
在過往的學習中,如要關注上圖(b) 中的一頭長髮,會有兩種常見的方式。一是使用 attention 來學習關注特定屬性可能所需的區域:另一種方法是使用 body-parts detection 的方式來提取局部特徵,最後將這些特徵與全域特徵融合學習,這雖能提高辨識結果,但無法表示性與區域間的對應關係,且額外運算先行定位身體區域。
網路中引入了特徵金字塔的概念,來對區域特徵進行縮放,這應該是為了克服顆粒度較小的屬性所包含的像素較少,因此再向下採樣過程中容易丟失,所以利用金字塔的概念來進行尺度變化的增強。
<p class="illustration">
<img src="https://i.imgur.com/zlROgIe.png" alt="特徵金字塔">
特徵金字塔(圖片來源: <a href="https://zhuanlan.zhihu.com/p/92005927">Hans|知乎</a>)
</p>
在目標圖像經由骨幹網路進行特徵提取時,會產生不同層的特徵層,從中選擇 `32×16`、`16×8`、`8×4` 與最後的特徵層,中間特徵層會經由源自於空間變換網路(STN)的屬性定位模組(ALM),以弱監督的方式發現最具判別力的區域。如架構圖所示,從三個 ALM 與全域的分之中會獲得 4 個預測向量,最後透過深度監督的方式,從屬性區域最精確的不尺度中選出最佳結果。
<p class="illustration">
<img src="https://i.imgur.com/o4uf39e.png" alt="ALM 網路架構">
ALM 網路架構(圖片來源: <a href="https://arxiv.org/pdf/1910.04562.pdf">ALM 論文</a>)
</p>
最終的數據結果如下:
<p class="illustration">
<img src="https://i.imgur.com/rLmVEHy.png" alt="ALM 結果">
ALM 結果(圖片來源: <a href="https://arxiv.org/pdf/1910.04562.pdf">ALM 論文</a>)
</p>
### 6. **其他論文**
基本上,前面的論文我是從 Strong_Baseline_of_Pedestrian_Attribute_Recognition 的 [SOTA Performance](https://github.com/valencebond/Strong_Baseline_of_Pedestrian_Attribute_Recognition#sota-performance) 並搭配前面發展的過程,挑了五篇進行介紹,至於其他幾篇,就先附上連結了:
1. **LGNet**:[Localization guided learning for pedestrian attribute recognition](https://arxiv.org/abs/1808.09102)
2. **PGDM**:[Pose guided deep model for pedestrian attribute recognition in surveillance scenarios](https://ieeexplore.ieee.org/document/8486604)
3. **RA**:[Recurrent attention model for pedestrian attribute recognition](https://www.aaai.org/ojs/index.php/AAAI/article/view/4964)
4. **VSGR**:[Visual-semantic graph reasoning for pedestrian attribute recognition](https://www.aaai.org/ojs/index.php/AAAI/article/view/4884/4757)
5. **VRKD**:[Pedestrian Attribute Recognition by Joint Visual-semantic Reasoning and Knowledge Distillation](https://www.ijcai.org/Proceedings/2019/117)
6. **AAP**:[Attribute aware pooling for pedestrian attribute recognition](https://www.ijcai.org/Proceedings/2019/0341.pdf)
7. **MsVAA**:[Deep imbalanced attribute classification using visual attention aggregation](https://arxiv.org/abs/1807.03903)
8. **VAC**:[Visual attention consistency under image transforms for multi-label image classification](https://openaccess.thecvf.com/content_CVPR_2019/papers/Guo_Visual_Attention_Consistency_Under_Image_Transforms_for_Multi-Label_Image_Classification_CVPR_2019_paper.pdf).
<br>
另外附上幾篇有找到程式碼的論文
1. **WPAL-network**:[Weakly-supervised Learning of Mid-level Features for Pedestrian Attribute Recognition and Localization](https://arxiv.org/pdf/1611.05603.pdf)
- code: https://github.com/YangZhou1994/WPAL-network
2. **VeSPA**:[Deep View-Sensitive Pedestrian Attribute Inference in an end-to-end Model](https://arxiv.org/pdf/1707.06089.pdf)
- code: https://github.com/asc-kit/vespa
3. **SRN**:[Learning Spatial Regularization with Image-level Supervisions for Multi-label Image Classification](https://arxiv.org/abs/1702.05891)
- code: https://github.com/zhufengx/SRN_multilabel
## 參考資料
1. 阿杰洛克之地 (2019-07-17)。[Pedestrian Attribute Recognition](https://blog.csdn.net/pancongpcc/article/details/96269608) 。檢自 阿杰洛克之地的博客|CSDN博客 (2020-08-21)。
2. 肤浅-的我 (2019-09-12)。[论文笔记Pedestrian Attribute Recognition(PAR): A Survey](https://blog.csdn.net/weixin_39225983/article/details/100765667) 。檢自 weixin_39225983的博客|CSDN博客 (2020-08-21)。
3. lanmengyiyu (2019-10-23)。[Pedestrian Attribute Recognition](https://blog.csdn.net/lanmengyiyu/article/details/102686182)。檢自 张洁的笔记|CSDN博客 (2020-08-26)。
4. Code_Mart (2019-03-02)。[[笔记] Pedestrian Attribute Recognition Dataset Summary](https://blog.csdn.net/Code_Mart/article/details/87721803#t7) 。檢自 不进则退|CSDN博客 (2020-08-21)。
5. (2019-10-27)。[Pedstrain Attribute Notes](https://www.dazhuanlan.com/2019/10/27/5db4f97812d37/) 。檢自 大专栏 (2020-08-21)。
6. wangxiao5791509 (2017)。[Pedestrian-Attribute-Recognition-Paper-List: Paper list on Pedestrian Attribute Recognition (PAR) and related tasks](https://github.com/wangxiao5791509/Pedestrian-Attribute-Recognition-Paper-List) 。檢自 wangxiao5791509 | github (2020-08-21)。
7. linolzhang (2018-04-20)。[行人属性识别(Pedestrian attribute recognition)研究现状?](https://www.zhihu.com/question/267527907)。檢自 知乎 (2020-08-30)。
8. Anticoder (2019-03-16)。[Multi-task Learning(Review)多任务学习概述](https://zhuanlan.zhihu.com/p/59413549)。檢自 知乎 (2020-08-27)。
9. WhiteXie_zx (2019-01-01)。[【论文阅读】HydraPlus-Net: Attentive Deep Features for Pedestrian Analysis](https://www.cnblogs.com/White-xzx/p/10203964.html) 。檢自 WhiteXie_zx|博客园 (2020-09-16)。
10. cv_family_z (2017-10-19)。[行人属性“Attribute Recognition by Joint Recurrent Learning of Context and Correlation”](https://blog.csdn.net/cv_family_z/article/details/78286462) 。檢自 cv_family_z的博客|CSDN博客 (2020-09-17)。
11. huangyiping_dream (2020-04-08)。[行人属性识别:Grouping Attribute Recognition for Pedestrian with Joint Recurrent Learning](https://blog.csdn.net/huangyiping12345/article/details/105382272) 。檢自 huangyiping12345的博客|CSDN博客 (2020-09-17)。
12. huangyiping_dream (2020-04-09)。[行人属性识别:IImproving Pedestrian Attribute Recognition With Weakly-Supervised Multi-Scale Attribute-Specific Localization](https://blog.csdn.net/huangyiping12345/article/details/105409118) 。檢自 huangyiping12345的博客|CSDN博客 (2020-09-17)。
13. [Pedestrian Attribute Recognition](https://paperswithcode.com/task/pedestrian-attribute-recognition) 。檢自 Papers With Code (2020-09-17)。
14. Hans (2020-01-27)。[【论文笔记】FPN —— 特征金字塔](https://zhuanlan.zhihu.com/p/92005927) 。檢自 知乎 (2020-09-17)。
15. valencebond。[Strong_Baseline_of_Pedestrian_Attribute_Recognition](https://github.com/valencebond/Strong_Baseline_of_Pedestrian_Attribute_Recognition) 。檢自 valencebond|github (2020-09-17)。
## 更新紀錄
:::spoiler 最後更新日期:2020-12-30
- 2020-12-30 發布
- 2020-09-18 完稿
- 2020-08-18 起稿
:::
{%hackmd @CynthiaChuang/Github-Page-Footer %}