# GroupFace: Learning Latent Groups and Constructing Group-based Representations for Face Recognition [toc] + ![](https://i.imgur.com/VVt9bwe.png) ## Introduction + 作者提出GroupFace這個想法的動機是因為近年來face recognition領域比較多專注在loss function的進步, 像是center loss, CosFace, ArcFace等等 + 但它們的backbone都是採用VGG, ResNet等network來獲得embedding feature + 但並沒有一個對face專門設計的network + GroupFace的作法是採用傳統的embedding feature方式加上分組的概念 + 分組可以縮小identity的候選人範圍, 同時加上傳統embedding feature的概念 + 在recognition過程中就可以有更豐富的representation + 像這張小勞勃道尼的照片, 會先用以前CosFace, ArcFace等常用的face recognition方法產生embedding feature + ![](https://i.imgur.com/v2T8iZI.png) + 那embedding feature或feature vector在這篇paper裡面會稱為instance-based representation + 接著再加上group-aware representation, 也就是在描述小勞勃道尼這個identity在各個group的機率有多大, + 一個group所描述的視覺上的特徵不只一個, 而且特徵不一定是視覺上能分辨的照片的背景, 明亮程度都有可能被考慮進去 + 但簡單來說小勞勃道尼可能會被分在咖啡色頭髮有鬍子的男人的這個group, + 藉由group所賦予的額外資訊, 能讓recognition可以用的feature資訊就更多了 + 所以這篇paper的作法就是把傳統的embedding feature跟group-aware representation的資訊aggregate起來, 就能夠有更豐富的representation ## Related work + related work的部分, 剛剛提到近年來大都專注在提升loss function ### Center Loss + ![](https://i.imgur.com/lMlg9FW.png) + center loss是在2016被提出的loss function + 主要是用softmax loss來分開不同的class, 再加上center loss來壓縮同一個class之間feature的距離 + 也就是recognition強調的maximize the inter-class distances and minimize the intra-class variations + center loss的作法很像K-means幫每個class找出一個中心 + 也就是公式中的Cyi, yi表示xi的label class, 將feature xi與其所對應的class中心去算loss, 藉此來降低同個class的variation ### SphereFace + sphereface的作法是將剛剛softmax loss中的weight w跟feature x的內積寫成兩個vector的長度乘上cos夾角 + ![](https://i.imgur.com/PjhZ48m.png) + 接著再將weight跟bias做normalization變成最下面的式子, 經由這樣的轉換把問題簡化成去比較角度大小的問題 + ![](https://i.imgur.com/rCNbvjk.png) + sphereface在cos角度中再乘上一個margin m, 簡單來說是強制讓夾角必須要更小才能滿足式子 + ![](https://i.imgur.com/nOlXCiH.png) + 加上這個m可以讓同組的夾角更小, 不同組之間的夾角更大 + 但theta的range只能在0到pi除以m之間 + 為了避免這個限制, 並且讓式子能夠在CNN structure底下被optimize + 這篇的作者將cos generalize到一個monotonically decreasing的angle function phi + ![](https://i.imgur.com/E7LESTj.png) ### CosFace + cosface提出新的loss function large margin cosine loss LMCL + cosface一開始一樣從最原本的softmax loss進行改良, 一樣做normalization + 與sphereface不同的是, 由於在計算角度時, x並不會影響計算, 所以將x normalize成s, s會是下圖中的半徑長 + 而cosface不是在cos函數裡面加上margin m, 而是對算完cos的值再扣掉m + ![](https://i.imgur.com/DDINmpc.png) + 假設只有兩個class, 那一般的softmax的decision boundary就會是左下圖的cos theta 1要等於cos theta 2 + 如果cos theta 1大於cos theta 2, feature就會歸類在class 1 + 而LMCL的decision boundary則是右下圖的cos theta 1減m要等於cos theta 2 + 如果cos theta 1減m大於cos theta 2, feature就會歸類在class 1 + 可以看到左下圖, NSL代表的是normal version of softmax loss + 依照公式, decision boundary就是角平分線, 兩個class之間根本沒有距離 + 但用LMCL就能像右圖將兩個class隔出一個距離 + ![](https://i.imgur.com/21Dj4pP.png) ### ArcFace + arcface的loss function也是針對角度做處理 + 與cosface一樣將x normalize成s, s一樣是下圖中的半徑長 + 由於sphereface在cos函數裡面乘上m, 所以剛剛提到theta角度被限制, 要額外轉換成單調函數 + 但arcface的margin是對原本角度theta再加上m, 就不需要做轉換 + 而如同sphereface, m可以讓條件更難滿足, 就像圖中W跟x已經算蠻靠近了, 但又被硬生生加上一個m + ![](https://i.imgur.com/N89u0Jm.png) + 所以要滿足條件的話, W跟x就要更靠近, 藉此同時增加intra-class組內的compactness以及inter-class組別間的discrepancy + ![](https://i.imgur.com/mHnquLj.png) ### Comparison + 這邊將三個Face系列的loss function做比較 + 他們分別對角度做不同的處理 + 下圖的比較顯示只有ArcFace能linearly分開兩個class + ![](https://i.imgur.com/10NI858.png) ## method + GroupFace的大概念就是利用原本的embedding feature再加上 + 作者提出的group-aware representation, 形成final representation ### instance-based representation + ![](https://i.imgur.com/JH5crel.png) + instance-based representation在這篇論文中指的就是傳統face recognition中的feature vector + 在這篇論文中就是將identity輸入經過backbone ResNet-100 生成4096維的shared feature再經過一層fully connected layer得到的512維的embedding feature ### group-aware representation + ![](https://i.imgur.com/754zqt4.png) + group-aware representation生成的方式與instance-based representation類似 + 一樣從shared feature通過K個fully connected layer, K就是group的個數 + 得到K個512維的vector, 就是group-aware representation ------------ + ![](https://i.imgur.com/wgcOoGV.png) + 接著group-aware representation會再和group probability做weighted sum + 得到的結果再和instance-based representation aggregate起來就是整個GroupFace的final representation + 中間的group decision network以及group probability如何生成我會在等一下說明 --------------- #### S-GroupFace & H-GroupFace + 剛剛提到group-aware representation跟group probability做weighted sum + 這邊group-aware representation的處理方式有兩種 + 第一種就是剛剛說的跟group probability 做weighted sum + 這種方式是soft manner稱為S-GroupFace + ![](https://i.imgur.com/kSf4ZLq.png) + ![](https://i.imgur.com/rehvXCL.png) + 第二種是去找group probability當中機率最高的feature vector + 直接當作處理過後的group-aware representation拿去跟instance-based representation做aggregate + 右下圖假設第零個group的機率最高, 那就會直接拿黃色的feature vector + 當作處理過後的group-aware representation + ![](https://i.imgur.com/Hv3hM20.png) + ![](https://i.imgur.com/CJY0GVL.png) + 從處理方式能看出兩者的優缺點 + S-GroupFace各個group的特徵多少都有使用到 + 而H-GroupFace就只有用到一個機率最大的group-aware representation + 但H-GroupFace所要花的計算量就更少, 對於實際的應用上更合適 ### GDN(group decision network) + ![](https://i.imgur.com/wv0jlrE.png) + 剛剛提到group probability, 在講group probability之前要先介紹GroupFace architechture中的group decision network也就是GDN + GDN由instance-based representation輸入, 經過MLP + 這裡的MLP由兩層batch-normalization加上fully connected layer組成 + 會輸出vx hat稱為intermediate feature, vx hat再經過一層FC加上softmax就會得到group probabiliy + 整個GDN稱為function f ### group probability + ![](https://i.imgur.com/UgXHYqh.png) + 講完GDN, 就能介紹group probability的計算方式 + 作者先提出一個naive labeling的方式 + 將instance-based representation經過GDN也就是左圖中第一個公式的f function,再經由softmax會得到group probability, 也就是sample x屬於各個group的機率 + naive labeling的分組方式就是取group probability當中最大的機率, 把sample x歸類到那個group當中 + 但作者顧慮到group distribution的問題 + 他認為當sample數量很大的時候, 各個group被分配到的人數應該要差不多 + 就像擲很多次骰子, 6個面出現的次數應該會是uniform distributed #### self-distributed labeling + 所以作者接著提出self-distributed labeling的作法 + 他提出以下公式p tilde, 對這個公式取期望值後, 大括弧內的值相減為0 + ![](https://i.imgur.com/AInFRqf.png) + ![](https://i.imgur.com/fucZUt7.png) + 期望值就是K分之1, K是group的個數 + 這樣的期望值就會形成uniform distribution + 那分組的方式跟剛剛一樣去看p tilde當中機率最大的group, 將sample x分到那個組別 ------------- + ![](https://i.imgur.com/o43k0ZO.png) + ![](https://i.imgur.com/JRMsUa3.png) + 這邊paper中有個範例的圖 + 但我代剛剛的公式怎麼代都沒辦法把圖1的數值變成圖2的數值 + 後來我自己找到一個方式能夠說明兩邊的數值 + 我先把圖1圖2左右兩邊每個group的總機率相加, 因為要去看各個group的分配情形 + 圖2的會是理想中的情況 + 在這個例子中有5個sample, 4個group, 那uniform distributed的情況下 + G0 G1 G2 G3各個group的總機率應該都要是1.25 + 這邊舉個例子假設我要調整G0的機率分布 + 就把圖4的G0總機率1.25扣掉圖3的G0總機率0.8 + 因為圖4是理想值, 圖3是naive labeling算出來的值 + 所以要相減之後再把這中間的差平均分給每個sample + 圖3的x0到x4都加上0.09後, 就能變成圖四的x0到x4, 也就會和圖2的G0有一樣的機率分布 + 可以看到圖1原本x 123都分配在G3, 而且沒有sample分在G0, 但經過轉換後每個group都有分配到sample + 也就達到作者希望的uniform distributed ### loss function + loss function由兩項loss組成 + 第一個loss是softmax-based loss作者採用ArcFace的loss function + ![](https://i.imgur.com/P1GAPBY.png) + 第二個loss是self-grouping loss, 去計算prediction跟self-generated label的CrossEntropy + ![](https://i.imgur.com/SekNoIO.png) + 也就是naive labeling跟self-distributed labeling之間的loss + 再將兩者相加, L2的lambda通常設為0.1 + ![](https://i.imgur.com/uSoMnQJ.png) ### group-aware similarity + 這篇paper提出group-aware similarity, 去計算兩張img的similarity + 分別計算final representation的cosine similarity以及在GDN當中intermediate feature的distance + group probability是經由intermediate feature所得到的 + 所以公式中D的部分比較兩張img的intermediate feature也就是用來描述group的similarity + S的部分則用來描述final representation的similarity + ![](https://i.imgur.com/HYPT9RW.png) ### sum up + ![](https://i.imgur.com/DRmNMCU.png) + 最後我想在proposed method這邊小總結一下 + GroupFace的架構就是用傳統的instance-based representation加上作者提出的group概念 + 由group-aware representation乘上作者設計的GDN產生uniform distributed的group probability + 將兩者做aggregation, 最後得到final representation ## Experiments ### dataset + 在dataset部分, training是用refine的MSCeleb-1M + testing是用LFW, YTF, MegaFace等9種常見的dataset ### metric + metrics的部分, 分成三種 + 有verification-accuracy for identitypairs, rank-1 identification and accuracy for identification task和true accept rate ### experiment setting + input用normalized過的照片 大小為112*112, 並在臉上標記5個facial point分別是眼睛嘴巴各兩點, 鼻子一點 + backbone和ArcFace一樣是使用ResNet-100 + softmax-based loss function的hyperparameter也是照著ArcFace所設定的 ### learning + learning的設置為8個GPU, 每個GPU上跑mini-batch 128張圖片 + learning rate跟weight decay分別是0.005, 0.0005 + 然後使用SGD with momentum 0.9 ### evaluation + ![](https://i.imgur.com/P8I3LJh.png) + evaluation在verification-accuracy的部分 + 分別在4個dataset上進行比較 + GroupFace在所有dataset上都獲得最好的performance -------- + ![](https://i.imgur.com/pUxOn5l.png) + 在MegaFace上進行兩種evaluation + 一種是正常的MegaFace, 一種是下方Large R的refined MegaFace + ident代表的是rank-1 identification accuracy + verif代表的是True accept rate在FAR等於10的負6次方 + 如圖所示, GroupFace在各種情況下都outperforms其他model ----- + ![](https://i.imgur.com/8exsnLf.png) + 最後在IJB-B跟IJB-C上與其它method來比較 + 特別針對近期的angular-margin-softmax based的方法, 也就是cosFace, ArcFace來比較 + 圖中倒數第三個GroupFace減號代表的是train在CosFace上 + 而一般的GroupFace是train在ArcFace上 + GroupFace在各種情況下仍然是outperform + 在IJB-B最困難的criterion FAR等於10的負6次方時, GroupFace with group-aware similarity更是贏過單純的GroupFace 5.3 percent ### ablation studies + ![](https://i.imgur.com/oQiztFF.png) + ablation studies首先討論number of groups + 很明顯可以看到group數量越多, true accept rate就越高 + 而且group等於4的時候, 就已經比baseline好很多了, 代表group的資訊確實是有用的 ---- + ![](https://i.imgur.com/kpKWJkQ.png) + 再來是GDN的learning method比較 + 作者用單純使用group-aware representation架構, 沒有加入group loss計算的without loss, 以及加入naive labeling和加入self-distributed labeling三種來比較 + 單純使用group-aware架構就能明顯提升performance + 而加入self-distributed labeling又將performance往上提升 ----- + ![](https://i.imgur.com/iJLosq1.png) + 前面提到group-aware representation的處理方式有兩種, S-GroupFace跟H-GroupFace + S-GroupFace理所當然有比較高的performance, 因為它用了所有group-aware representation的資訊 + 而H-GroupFace就只採用一個機率最高的group-aware representation + 但相較之下H-GroupFace在實際應用上就比S-GroupFace省去一些運算 --- + ![](https://i.imgur.com/yIpnd73.png) + instance-based跟group-aware representation最終會形成final representation + 這邊的ablation study在比較要將兩者用aggregation的方式還是用concatenation的方式合起來 + 在FAR為10的負6次方 concatenation贏了0.67 percent + 但在FAR為10的負5次方 aggregation贏了1.16 percent + 所以最終作者選用aggregation的方式來形成final representation --- + ![](https://i.imgur.com/oV7FZRi.png) + 這篇paper中並沒有提到如何去運用他們所提出的group-aware similarity + 我的想法是 由於group-aware similarity的input是兩張image + 那應該是拿predict過後機率相近的幾個identity去跟input做比對 + 看哪一個pair的group-aware similarity最大, 就可以更肯定input的id是誰 + 圖表中顯示, 光是group-based的information就已經可以贏過傳統的identity-based information + 而加上group-aware similarity後, performance又更好了一點 --- + ![](https://i.imgur.com/JyabS8Z.png) + 這邊作者在比較改成更lightweight的backbone performance會如何 + 上面兩個ResNet都是運用在ArcFace上做測試 + 最下面有個加號的是GroupFace with group-aware similarity + 剛剛提到GroupFace的backbone是採用ResNet-100 + 這邊作者將backbone改成比較lightweight的ResNet-34, 只需要24.2GFLOPS, 比ResNet-100要少8.9個GFLOPS + 而ResNet-34的GroupFace就已經和ResNet-100的ArcFace有差不多的performance了 + 在false accept rate等於10的負6次方更是遠勝於ResNet-100的ArcFace ### visualization + ![](https://i.imgur.com/XFmiLv6.png) + 最後為了能更直接看出GroupFace的效果, 作者將一些結果視覺化 + 第一個是將extract出來的feature用t-SNE project到angular space + 在dataset MSCeleb-1M上取前8個identity來比較 + baseline是ArcFace的結果 + 中間vx是GroupFace只包含instance-based representation的結果, 也就是沒有group的資訊 + vx bar就是GroupFace的結果 + 可以看到前兩個都還有一些組別會重疊, 但GroupFace可以將8個identity全部分開 --- + ![](https://i.imgur.com/pehLhCt.png) + 作者期望每個group的identity個數應該要差不多 + 也就是probability distribution是uniform的 + 這張圖的測試中總共有32個groups, 最左邊R的部分有20組, 他們的probability都很低 + 那實際上這張圖顯示group的probability有高有低 + 作者認為是因為產生group probability的GDN除了要負責將sample平均分配到各個group, 還會有softmax-based的loss會propagate到GDN, 這邊的loss是為了做identification + 所以GDN沒辦法很完美將group的sample數量分的很平均 + 但可以看到probability比較高的那些group, probability都很接近, 沒有一個group會dominant --- + ![](https://i.imgur.com/tCo1OYk.png) + 最後這個部分顯示一個group的identity到底會長怎樣 + 由於每個group都是由GDN的non-linear function來分類, 所以各組的特徵不一定會是視覺上可以分辨的 + 但像group five跟group twenty就很明顯是男人跟光頭的男人 + 其他組雖然不能用一個視覺上的特徵來概括所有identity + 但像group one就可以用三個視覺特徵來描述 + 第一行是微笑的女人, 第二行是右側臉的人, 第三行是嚇到的人 + group的特徵有可能是視覺上能輕易分辨, 但也有可能是像是noise, background, 明亮程度這種沒辦法輕易分辨的特徵 + 所以才會有可能兩張很不像的圖片被分類到同一個group的情況 ## Conclusion + 這篇paper提出專門為face recognition設計的network architechture, 以及self-distributed grouping的方式來有效的處理group-aware representation + 並藉由aggregate instance-based representation以及group-aware representation來獲得更豐富的feature資訊 + 經過大量的ablation studies以及experiments, 可以證實GroupFace確實有助於提升效能而且也可以實際應用在現有的recognition系統上