# Mitigating Face Recognition Bias via Group Adaptive Classifier [toc] ## introduction + 這篇paper是由美國密西根州立大學所提出, 發表在CVPR 2021 + 這篇paper的目的在於減少model對於某個種族或多個種族所產生的bias, 並對於每個demographic group都成產生良好的representation + 作者提出了adaptive layer, 包含adaptive convolution kernels以及channel-wise attention maps, 並且可以針對每個demographic group都有其對應獨立的kernel跟map + 接著上面提到的adaptation機制會由某個算法讓model可以自動選擇哪一層要加上adaptive layer, 哪一層不用加上額外的資訊並保持傳統的convolution layer就好 + ![](https://i.imgur.com/HKKiIID.png) + 圖中N就是non-adaptive layer, A就是adaptive layer --- ## related work + 第一篇related work是處理facial trait recognition, 但他所使用的kernel是shape-driven kernel + 也就是除了input image之外, 還會去用到一個side information, 這邊作者用的是facial shape data來當作side information + 把這個side information乘上W, W是adaptation matrix, 作者這邊使用一個簡單的linear matrix, 乘出來的結果就會是local adaptive kernel + 傳統的kernel在做inference的時候, 對於同一個人(但可能角度表情不同)卻都是使用相同的kernel, 就沒辦法產生良好的representation + 因此作者才提出這個adaptive kernel + 作者提出一個local CNN networks, 其實只是把一張image切成多個patch, 並用剛剛得到的local adaptive kernel對這些patch做convolution, 再加上bias經過activation function就得到最後的結果 --- + 第二篇paper提出一個adaptive CNN, 他的做法是用一個filter-manifold network, 也就是圖中的FMN, 一樣input是一個輔助的資訊, 經過fully-connected layers之後就會得到output也就是調整過後的filter weights + 所以根據每張input的不同, FMN就會產生對應的filter weights, 每一層的filter都能獨立 + 運算過程如下方公式, z就是輔助的資訊當成input丟進FMN, g就是FMN network, w就是FMN當中tunable的weights; 整個g(z; w)就是FMN的output filter weights, 再拿去對input image x做convolution, 經過activation function得到最後的結果 + ![](https://i.imgur.com/dwVoOg9.png) + 作者有提到有些人可能會有疑慮, 因為原本的CNN本身就有很多parameters, 那每層都加上FMN會不會讓parameters數量太多, 導致model不好train或是overfitting + 作者的回應是, 原本CNN的feature channels數量多是因為能夠知道更多圖片資訊, 但FMN已經有額外的輔助資訊了, 那CNN的feature channels就可以少一點 + 像下圖, conv1跟conv2原本都是64層, ACNN就砍半變成32層就好; 結果ACNN整理的parameters數量反而比原本的CNN還要少 --- ## method + 作者提出的方法叫做group adaptive classifier(GAC), 他提出的adaptive layer包含以下兩個項目 + adaptive kernels可以針對每個demographic group都產生一個對應獨立的kernel; 而image經過kernel做convolution後會得到feature map, 作者認為這個feature map應該要再經過一些處理, 所以提出attention maps做channel-wise的attention, 那為什麼要對channel再做調整後面會再說明 + 最後automation module是讓model根據一個算法可以自動決定哪一層需要加上adaptive layer的額外資訊, 哪一層用原本的conv layer就好 + ![](https://i.imgur.com/jrQrPhv.png) ### adaptive layer + ![](https://i.imgur.com/ilCIb4p.png) + 傳統的convolution大概會長得像上圖所示, input image X的維度跟kernel K的維度大概會長這樣 + ![](https://i.imgur.com/hvpObb0.png) + 作者提出的adaptive layer主要是針對kernel去做改變, 他提出一個trainable matrix kernel mask $K^M \in R^{n*c*h^{k}*w^{k}}$, 這邊的n就是model要辨識幾種種族, 在這篇論文中作者辨識Caucasian, African American, Asian, Indian四個種族, 所以接下來看到的n都是4 + 在training過程中, forward pass會將以下兩個東西一起往前傳 + 一個是demographic label $y_{Demo}$, 在image進到model training之前, 作者先用一個pretrained的classifier對每張image去prediect是哪個種族, 也就是demographic label + 第二個就是剛剛介紹的kernel mask $K^M$ + 接著我們來看這個公式, 先focus在$K_i$, 它指的是原本的kernel $K \in R^{k*c*h^{K}*w^{K}}$總共有$K$層, 從當中取出一層, 假設是第$i$層, 那它的維度就會是$R^{c*h^{K}*w^{K}}$ + 再來是$K^{M}_{y_{Demo}}$, 由於我們已經知道每張input image的demographic label $y_{Demo}$, 剛剛也有提到會有kernel mask的維度最前面的n, 也就是有幾種ethnicity + 所以我們就去拿demographic label $y_{Demo}$對應的那張kernel mask, 那維度就會如上圖右方所示,可以發現跟$K_i$的維度是一樣的 + 作者就把這兩個做element-wise multiplication, 得到這個$K^{y_{Demio}}_i$ + ![](https://i.imgur.com/8MNxbdV.png) + 拿到$K^{y_{Demio}}_i$之後, 對input image X做convolution, 再經過activation function就得到output feature map $Z_i$ + 這樣的做法就能夠讓每個demographic group都有自己獨立對應的kernel $K^{y_{Demo}}$ --- ### attention maps + ![](https://i.imgur.com/vyUMxra.png) + 作者認為剛剛的element-wise multiplication有個缺點, 就是kernel $K$每一次拿一層$K_{i}$出來, 乘上的$K^{M}_{y_{Demo}}$其實都是一樣的, 因為input image的demographic label $y_{Demo}$都是一樣的, 作者認為這樣隱含kernel每一層的重要性都一樣, 但事實上每一層的重要性都不同, 所以作者認為要對於每一層作再去做調整 + 所以作者提出了trainable matrix channel attention maps, 維度是$n*k$, n一樣是4種ethnicities, k是kernel $K$的k層, 這個attention maps會在每一層adaptive layer都會initialize + 新的算法就是拿$M_{y_{Demo}i}$做sigmoid, 再乘上剛剛得到的feature map $Z_i$, 就能得到新的feature map $Z^{y_{Demo}}_i$ + 剛剛的$M_{y_{Demo}i}$所代表的意義是, 在attention map上的第$y_{Demo}$個row跟第i個column + 因為一定知道每張input的demographic label, 也知道現在是在處理哪一層(第i層)的kernel, 所以就能找到在attention map上對應的element + 所以現在就算同個input image的demographic label相同, 但每一層的i都不同, 就能夠對於output feature map的每一層再去做調整 --- ### automation module + 在每一層layer都加上adaptive layer其實是很不實際的, 因為有些層可能確實需要adaptive layer的輔助資訊; 但有些層可能用原本的convolution layer就足夠了, 這樣就不用花費過多的parameters再加重model的負擔 + 所以作者使用一個similarity fusion process來讓model自動選擇哪些層要加上adaptive layer的輔助資訊 + 剛剛介紹的adaptive layer跟attention maps都會由automation module來選擇每一層需不需要, 而選擇的機制一樣所以這邊主要介紹adaptive layer的選擇過程 + 原本kernel mask $K^M \in n*c*h^{k}*w^{k}$, n一樣是ethnicity的數量, 現在把$K^M$ reshape成一個1D vector, 可以看到裡面有n個小vector, 所以每個小vector的維度就是$c*h^{k}*w^{k}$ + 接下來繞每個小vector兩兩兩兩算cosine similarity, 並且去取平均 + 這個cosine similarity代表什麼意義呢 + cosine similarity越大, 代表這四個種族的vector之間的角度越小, 也就代表它們之間是很靠近的, 不容易區分出這些點是屬於哪個種族, 那這樣就代表demographic property不明顯, 也就不容易產生bias + 而cosine similarity越小, 代表這四個種族的vector之間的角度越大, 代表它們之間是分很開的, 很容易可以看出這些點是屬於哪一個種族, 所以demographic property就很明顯, 就容易產生bias + 所以作者用dissimilarity也就是在原本的值前面加一個負號, 看這個dissimilarity有沒有大於一個threshold $\tau$, 有超過的話這層就要加上adpative layer額外的資訊; 沒有超過的話就用原本的convolution layer就好 + 那我們來看一下這樣的不等式跟剛剛的邏輯是否符合 + 如果$\bar \theta$(cosine similarity)很大, 代表vector之間很靠近, 分不出是哪個種族, 這樣就不容易產生bias; $\bar \theta$加上負號後, 就會是一個負很大的值, 就不容易大於threshold $tau$, 就不用額外加上adaptive layer來減少bias, 所以跟剛剛的邏輯是match的 + 如果$\bar \theta$(cosine similarity)很小(-0.8, -0.9), 代表vector之間隔很開, 很容易知道哪些點屬於哪個種族, 就容易產生bias; $\bar \theta$加上負號後就會變成一個很正的值, 就很容易大於threshold $tau$, 就需要加上adaptive layer來減少bias, 也和剛剛的邏輯符合 --- ### de-biasing objective function + ![](https://i.imgur.com/4EpXRoM.png) + 最後作者提出一個loss function, 這個loss funtion的目的是想減少各組的intra-class distance, 如果白種人的intra-class distance是0.5, 黑種人的是0.4, 黃種人的是0.6, 印度人的是0.3; 那作者就希望能讓所有種族的intra-class distance都平均一點, 可能都變成0.5 + 作者沒有說這樣做的目的, 我自己認為是為了避免有哪一個或多個種族的intra-class distance跟別人比較不一樣, model就容易對那個或那多個種族產生bias + 我們先看到第四點的$r_{ijg}$, 代表的是$I_{ijg}$的feature representation; + 而$I_{ijg}$就是第$g$個group的第$j$個subject的第$i$張圖片 + w就是GAC的parameters + $\mu_{jg}$就是對剛剛$r_{ijg}$的單個subject $j$的每張圖片做相加平均, 就能得到這個subject $j$的center point + $Dist_{jg}$就是把subject $j$的每張圖片去扣掉他自己的center point, 就能得到每個subject的average intra-class distance + $Dist_{g}$就是去算group $g$當中的每個subject的intra-class distance相加平均, 也就是這個group的intra-class distance + 最後$L_{bias}$算式中的前兩個$\sum$是去針對每個group當中的每個subject, 去計算每個subject跟4個group的average intra-class distance的距離, 可以看到有加絕對值, 代表作者希望所有subject跟平均距離的差距越近越好(無論是正的越近還是負的越近); 而$\lambda$是這個function的coefficient ## experiment + ![](https://i.imgur.com/KaHwkq3.png) + 一開始先介紹datatset, training data是使用BUPT-Balancedface, testing data是使用RFW + 種族就是跟前面提到的一樣分成四種: White, Black, Asian, Indian + 但其實RFW是分成: 白種人(Caucasian), 黑種人(African American), 黃種人(Asian), 印度人(Indian) + 所有image都會resize然後crop成112 * 112 + ![](https://i.imgur.com/xANsXlX.png) + architecture是使用50層的ArcFace, 會分別train一個baseline的network, 還有一個加上GAC的network + loss function是使用CosFace的loss function + 其他設置如圖所示 + demographic classifier就是剛剛提到的每張input image會先經過pretrained classifier來得到predicted label, 這邊使用的是18層的ResNet + 這邊實驗是使用標準差來當做bias的判斷依據 + ![](https://i.imgur.com/yIMBPf0.png) + 第一個實驗是實驗在RFW dataset上, 並且去跟其他SOTA method做比較 + ACNN就是related work提到的第二篇paper, 由於它在每層都會加上FMN network, 所以會產生比較多的parameters, 就會容易產生overfitting + DebFace是想把demographic attributes從identity representation當中disentangle出來 + 但可以看到GAC的accuracy跟STD都是最好的 + ![](https://i.imgur.com/A77Soxy.png) + 再來是針對adaptive strategies做ablation study + 先對於這些名詞做解釋 + channel是只使用前面提到的attention maps + kernel是只使用adaptive layer的kernel mask + spatial作者是說對於spatial做attention, 但比較可惜的是作者沒有提到他們是用什麼方法來做, 但作者有提到由於training到越後面, feature map的長跟寬會越來越小(隨著pooling), 所以一些重要的feature沒辦法被掌握到, 導致GAC-spatial的STD並沒有下降很多 + CS就是使用channel跟spatial + CSK就是三個都使用 + 最下面三個就是用完整的GAC然後看怎麼樣的threshold能產生最好的performance + 可以看到用完整的GAC以及適當的threshold能產生最好的accuracy以及STD + ![](https://i.imgur.com/IdmnMDE.png) + 再來是針對network的layer數量以及demographic labels的來源做ablation study + 先看network layer的數量, 這邊用了ArcFace 34層, 50層, 100層, 作者說層數越多, STD下降的幅度就越少(分別下降了0.55, 0.53, 0.19) + 再來是demographic labels的來源 + ground-truth就是直接使用RFW的labels + estimated是使用剛剛提到的pretrained classifier所predict的labels + random就是對每張臉的label都是隨便給 + 可以看到random的STD下降最少, 作者這邊沒有給出解釋, 我認為是因為GAC最主要的功能就是減少bias, 而GAC的input就是demographic label, 既然input是亂給的, 那GAC就沒辦法很好地發揮功能來減少bias + ![](https://i.imgur.com/8zIcaEP.png) + 這邊是針對de-biasing function的coeeficient $\lambda$來進行ablation study + 可以看到$\lambda$越大, STD下降的就越多, 但代價就是accuracy也會下降 + ![](https://i.imgur.com/ai3FhOC.png) + 這個experiment在實驗不同的threshold $\tau$會有什麼影響, 圖中的顏色是similarity的大小 + x軸是第1層到第48層的變化 + y軸是第1步到第15000步的變化 + 如同剛剛所說, 越小的$tau$會產生越多的adaptive layer + $\tau = -0.2$會產生12層 + $\tau = -0.1$會產生8層 + $\tau = 0.0$會產生2層 + 也可以看到在x軸跟y軸的similarity都會不斷的變化, 並不是固定不動的 + ![](https://i.imgur.com/ttAlVZZ.png) + 這個實驗將GAC實驗在standard benchmark, 而這些benchmark的demographic distribution都很不平均 + 作者將GAC train在MS-Celeb-1M上 + pretrained classifier是pretrained在BUPT跟RFW + 可以看到GAC在各個項目都是贏過baseline的, 就算跟SOTA method比較也不會落差太多 + ![](https://i.imgur.com/aDTfXqg.png) + 最後visualization作者用了8個分類, 就是4個種族跟2個性別 + 作者也畫出baseline跟GAC的heatmap + 可以看到baseline的heatmap大都focus在眼睛跟鼻子中間還有眉毛上面, pattern比較一致 + 但GAC的分佈在8個column都蠻不一樣的, 這就是因為adaptive layer對於每個種族都有獨立對應的kernel, 所以focus的區域就很不相同 + ![](https://i.imgur.com/17b4OBi.png) + 最後是畫出一個correlation的histogram, 這個實驗只做在白種人跟黑種人上面 + 先focus在藍線跟紅線, 也就是baseline的線 + 再看到綠線跟菊線, 就是使用GAC後產生的線, 可以看到它們更靠近, distribution更像, 說明GAC真的能有效減少bias ## conclusion + 這篇作者提出了GAC讓每個demographic group都能產生良好的representation + 當中提出了adaptive layer讓每個demographic group都有自己獨立對應的kernel + 而經過adaptive layer kernel做完convolution的feature map, 由於每層都是經過相同的kernel mask處理, 所以作者提出attention maps再對於每一層做調整 + 最後是automation module, 使用cosine similarity讓model能夠自動去選擇哪一層要使用adaptive layer的輔助資訊, 哪ㄧ層用原本的convolution layer就好, 以避免使用過多parameters