我的博客已全部遷往個人博客站點:oukohou.wang,敬請前往~~
年齡估計,也是一個頗有點意思的task。
今天來介紹一個其中的經典算法:SSRNet。
1. 前情提要
年齡估計,其實遠在深度學習風行之前就已經有了一些工作了,不過多是用傳統方法來做,先提取特徵,再在特徵上進行分類或者回歸。
提取特徵的方法,比如 AAM、 LBP、 Gabor 等等,得到特徵後,加個 SVM/SVR/PLSR 等就做了個年齡估計模型出來~~
而由於深度學習的再次大火,自然又有衆多探索如何用深度學習做年齡這個task的了,DEX 是其一,本文的 SSRNet 也是其一。
2. 廬山真面
先來張圖一睹爲快:
然後故事還要從 DEX 說起。
DEX 將年齡均分爲 個年齡段,即對於[0,V]的年齡跨度,每個年齡段跨度爲 ,該段的代表性年齡取 .
然後對於一個 s 類的分類模型,取其每一類的概率與當前類的代表年齡的加和作爲最終的預測值:
這是 DEX 的做法。
然而,作者說:“To reduce the model size without sacrificing much accuracy, we propose to use a coarse-to-fine strategy with
multi-stage prediction.”
啥意思呢,就是作者要分階段進行 DEX 的這個操作,然後不同階段的值再進行融合:
看起來有點摸不着頭腦?舉個栗子:
令 V=90,也就是年齡跨度爲0到90歲,階段數 K=2,每個階段的年齡段數爲3,即。
那麼階段K=1時,每段年齡分別是(0~ 30),(30~ 60),(60~ 90),對於階段K=2時,每段年齡段又被
分爲3段,即每段年齡分別是(+0~ 10),(+10~ 20),(+20~ 30)。
這麼說是不是好像有點懂了?
不懂也不怕,我們先往下說,最後融會貫通,你就恍然大明白啦~~~
細心的客官應該已經發現了,上面這個式子裏的 怎麼分母不是,變成了?
沒錯,事出反常必有妖,這裏又是作者的一個trick創新點:
作者說,年齡是連續的,而且有一定的不確定性,所以粗暴地把年齡劃分爲平均且不重疊的區域是不怎麼flexible
的,於是乎,
作者決定使用dynamic range
,什麼意思?就是每個年齡區域可以被shifted and scaled
,怎麼樣,是不是覺得這個術語很面熟,當年batchnorm
提出來的時候也見過對不對?
具體怎麼實現這個年齡的dynamic range
呢?
很簡單,看:
式中,是在階段k時的均分不重疊的年齡區域個數,加個波動區域,則每個年齡區域的跨度應該爲:
於是乎,就實現了這個scale
了~~那麼shift
呢?
作者又把每個年齡區域的索引做了個偏移:
這樣一來,每個年齡區域的索引有了微小的改變,自然也就是shift
了~~
最後,就是整合各個階段的輸出來求加權和作爲最終的年齡預測結果了:
不過作者在此基礎上又多走了一個trick一步:用個2-stream模型來儘量提取不同特徵,融會貫通。
好了現在到了各位看官融匯貫通的時候了,現在再回頭看一下開始那張圖:
怎麼樣,是不是有種恍然大明白的感覺?
3. 顧盼生姿
最後貼張結果對比圖,感性地評估一下SSRNet的性能:
好啦, 現在到了各位看官捧個場的時候啦~~
敬請期待下次更新,完結撒花~~
微信公衆號:璇珠雜俎,也可搜索oukohou ,提供本站優質非技術博文~~
regards.