# Person Attribute Recognition - GRL
> [name=謝朋諺(Adam Hsieh)]
> [time=Thu, Dec 19, 2019 10:39 AM]
###### tags: `paper`,`IVA`,`PA`
---
## Github
[code for IJCAI 18 paper: Grouping Attribute Recognition for Pedestrian with Joint Recurrent Learning](https://github.com/slf12/GRLModel)
---
# Grouping Attribute Recognition for Pedestrian with Joint Recurrent Learning
[論文連結](https://www.ijcai.org/proceedings/2018/0441.pdf)
{%pdf https://www.ijcai.org/proceedings/2018/0441.pdf %}
## Outline
> [TOC]
## 摘要重點
* 本文提出一種端對端的 Grouping RNN Learning (GRL) 模型,該模型利用==組內互斥合組間相關==來改進 PAR 的性能。
* GRL 方法通過 ==Body Region Proposal== 來檢測精確的身體區域,然後從檢測到的區域中提取特徵,這些特徵與語意群組一起送進 RNN 中進行分組屬性識別訓練,在其中可以學習組內相關性。
* 貢獻:
1. 第一個利用屬性中==語意和空間相關性==的方法來預測屬性的作法。
2. 採用易於訓練的==單模型==、==端對端==體系架構。
3. 提出一種利用 RNN 學習方法來挖掘==組間屬性的相關性==。
## Grouping Joint Recurrent Learning for Pedestrian Attribute Recognition
### Problem Definition
Grouping 行人屬性可以用以下公式來定義:
* 我們有 $n$ 個影像 $\{I_1,...,I_n\}$,而且每張 $I_m$ 影像有著 $k_m$ 個可視化的屬性 tag。
* 每個可視化的屬性 $\mathcal{T}=T_1,...,T_{K_{T}}$,$K_T$ 是 $\mathcal{T}$ 的 size。
* $\mathcal{G}=\{G_1,...,G_{K_{G}}\}$ 是 $\mathcal{T}$ 內的集合區隔,其中 $G_i\bigcap G_j =\phi(i\neq j)$,而 $G_i$ 的所有組合就是集合 $\mathcal{T}$。
* 同一群中的標籤彼此具有語意或空間的限制。
* 對於每張影像,都有一組標籤向量 $y_{m}\in\{0,1\}^{K_T}$,如果 $I_m$ 具有 Tag $T_j$ 則 $y_{mj}=1$,否則 $y_{mj}=0$。
* 我們旨在訓練出屬性辨識模型 $R^I:I\to \{0,1\}^{K_T}$,以辨識影像 $I_m$ 的屬性。
### Network Architecture

:::info
:bulb: **GRL** 的架構包含了身體區域建議跟 RNN 的屬性 Group 預測
:::
* 使用完全卷積網路來檢測身體的關節。
* 使用 **body region proposal network** 來生成此人的**頭部**、**上半身**、**下半身**區域。
| 原圖 | 全身關節 | 分成頭部、上半身、下半身 |
| :---: | :---: | :---: |
| <img src='https://i.imgur.com/15HpwtF.png' height='300px'> | <img src='https://i.imgur.com/HqRgTp4.png' height='300px'> | <img src='https://i.imgur.com/FJPzCq2.jpg' height='300px'> |
* $I_m$ 輸入到 Inception 的 CNN model 中,並將 **body region proposal** 結果放至 **ROI Average Pooling**,**ROI Average Pooling** 可以從 inception module 輸出的特徵圖中提取特定區域的特徵,例如:髮型、眼鏡、帽子皆在頭部區域,他們屬於同一個 group 因此就會被同時預測。
* 這些具有語意關聯的全身屬性,可以利用語義相關性幫他們分組。
* 同一組中的所有屬性共享相同的 Fully connected 特徵,並且所有 groups 的特徵都進 LSTM 單元中進行 grouping 屬性預測。
* LSTM 每個輸出都完全連接到**輸出向量**中,該向量的維度與 groups 中的屬性數相同。
* 之後再把**輸出向量**後面接上 Batch Normalization。
### Loss Function and Optimization
* 本文使用的是 **sigmoid cross entropy loss** 當作多分類問題處理:

* $\hat{p}_{ij}$ 是第 $I_i$ 張照片的第 $j$ 個屬性的輸出機率。
* $y_{ij}$ 是正確答案代表第 $I_i$ 張照片是否有第 $j$ 個屬性。
* $x_{ij}$ 是第 $I_i$ 張照片輸入到網路後的輸出。

* 但屬性並不總是均勻分布,因此本文使用加權過的 **sigmoid cross entropy loss**。
* 其中 $p_j$ 是訓練集中第 $j$ 個屬性的正比。
* $w_j$ 則代表正樣本的學習權重來處理不平衡標籤。
* 使用 SGD 算法訓練 **attribute recognition model**。
## Experiment
### Dataset
* PETA:
* 19,000 person images
* 每張照片標記了 65 個屬性 (61 Binary + 4 Multi-valued),但只選擇了其中的 35 個屬性
* Training Data: 9,500
* Validation Data: 1,900
* Testing Data: 7,600
| Group | Attribute |
|:-----------:|:----------------------------------------:|
| Gender | male or female |
| Age | age 16-30, age 31-45, age 46-60, age 60+ |
| Head | hair length, muffler, hat, glasses |
| Upper Body | clothes style, logo, casual or formal |
| Lower Body | clothes style, casual or formal |
| Footware | footware style |
| Accessories | backpack, messenger bag, plastic bag etc |
* RAP
* 從 26 個鏡頭中提取的 41,585 張影像
* 每張影像有 72 種屬性 (69 Binary + 3 Multi-valued) 以及==視角==、==遮擋==跟==身體部位==的資訊,但只用了其中的 51 個二進位的屬性。
* Training Data: 33,268
* Testing Data: 8,317
| Group | Attribute |
|:-----------:|:--------------------------------------------:|
| Gender | male or female |
| Age | age 16-30, age 31-45, age 45+ |
| Body Shape | slightly fat, standard, slightly thin |
| Role | customer, uniform |
| Head | hair style, hair color, hat, glasses |
| Upper Body | clothes style, clothes color |
| Lower Body | clothes style, clothes color |
| Footware | backpack, single shoulder bag, handbag etc |
| Accessories | backpack, messenger bag, plastic bag etc |
| Action | telephoning, gathering, talking, pushing etc |
* 對於 Multi-valued 的屬性也全部轉為 Binary。
### Evalution
* **Metrics**:共使用四個指標來評估屬性預估的好壞。
1. **Class-centric**: 分別計算正樣本和負樣本的 Accuracy,將他們取平均值以得到 ==mA==。
2. **Instance-centric**: 對於每個 Instance,我們預測 ==Precision==、==Recall==、==F1 Score==。
* **Implementation Details**:
* 使用 Tensorflow 訓練
* 使用預訓練在 ImageNet 的 Inception-v3 model
* **body region proposal network** 則是使用在 **MPII** human pose dataset 訓練出的。
* 模型的優化算法是 SGD,訓練的初始學習率是 0.1,最後降低到 0.001,降低了 0.1 倍。
* **Result**:

:::info
:bulb: 對於 PETA 和 RAP 本文有幾乎最佳的結果,次佳的結果則會標註底線。
* 上面表格第一大組是類似 Alexnet 的模型。
* 第二大組是基於較大的 CNN 模型 (Inception-v3 或 ResNet 50)
* 第三大組則是 CNN-RNN 聯合的學習方法。
* 以上都是單模型方法,而 JRL 則使用多模型 ensemble 的方法。
:::
### Further Analysis and Discussions
**Effect of Body Region Proposal and Grouping Recurrent Recognition**

- GRL 方法是新增了空間上和語意上的相關性。
- 若是不使用 **Body Region Proposal**,直接使用**全身特徵**輸入進 LSTM,且也不會有 ROI Average Pooling,就如上表的 GRL(no ROI)
- 上表的 Baseline 是指基於 Inception 的 DeepMar 模型,該方法就只有使用 Grouping RNN。
**Effect of Prediction Order of LSTM**

- **預測的順序**是影響正確率的重要因素之一。
- 因為一開始要識別的屬性無法觀察到其他 cell 的結果,因此,我們應該將易於識別的 Global 屬性放在第一位,因為它並不會過度依賴其他屬性,例如,即使許多其他屬性不清楚,也可以輕鬆識別性別和年齡,但性別識別卻對於預測其他屬性很有幫助(例如衣服和鞋子)
- 上表做出了隨機順序以及從 Global 預測到 Local 的比較。
- PETA 和 RAP 中的預測順序則如之前提到資料集屬性的表格從上到下優先順序一致。

:::info
:bulb: 預測屬性順序的定性分析
- 紅色代表錯誤
- 綠色代表正確
- 藍色代表沒預測到
:::
- 上圖可以看得出來非序列預測模型 DeepMar 一直都遺漏了 **hair long**,並且對左邊那個人的年齡做出了錯誤的預測,而且在右邊那張圖也遺漏了 **hair long**、**cotton clithes**。
- 相較於本文若預測順序正確的話便可以得到完美的預測,例如:當一個模型辨識他是一個女生的話,那他長髮機會就高很多。
- 上圖也顯示了若順序不對會辨識錯體型、年齡跟遺漏了 **hair long**。
- 某些 Global 屬性(例如年齡和身體形狀)的預測與其他 Local 屬性的預測結果關係不大,因此應盡可能地由整體視覺特徵確定它們,以避免誤導錯誤的 Local 屬性標籤。