finding tiny face心得筆記

2021-08-18 06:21:36 字數 2840 閱讀 2776

花了幾天時間專門對這篇**做了研究,感覺很有收穫。這篇文章也真的是乾貨滿滿呀。

作者探索了尋找小臉的三個方面:1. 尺度不變性的問題;2. 影象解析度的問題;3. 基於周圍內容的推斷問題。

基於此,作者做了三個方面的嘗試:1.對於不同的scale,訓練不同的detector。 detector使用了multi-task fashion,即使用同乙個網路的不同層的特徵。2. 作者用實驗說明了小臉周圍的內容對檢測小臉是非常重要的。3. 通過上取樣、下取樣影象並作為輸入,來使用與訓練的神經網路做小臉識別。

實驗部分:作者使用了不同的策略來構建滑動視窗探測器來探測固定大小的人臉。將固定大小的物體檢測作為乙個二值熱力圖**問題,所**熱力圖在(x,y)的值為乙個二值的數(0或者1)來標明這個框裡是否有個人臉。這裡借用了fully convolutional neural network的網路結構,即使用中間得到的特徵圖反卷積出乙個和原圖一樣的熱力圖。這裡有個問題,熱力圖是怎麼得到的?是和rpn一樣設定正例和負例的還是說直接將ground truth的框中心作為1,其他的地方都是0?文中似乎沒有交代。作者使用了不同res block的最後一層來重構這個heat map。也使用了不同的res block的feature map做完上取樣以後再加起來,做**的實驗。吐槽一下**的寫作風格,省略的東西比較多,一些地方真的是含糊不清啊。。。比如圖中的給出的數字沒有說明是什麼數值,是**的heatmap的數值?還是探測準確度?以下暫時以檢測精度來稱呼這個模糊的指標吧。

第乙個實驗的最終結果顯示使用更多的內容(就是將不同層的feature map做上取樣然後加起來)會有效提高小臉的檢測精度,儘管疊加過多的feature map會最終使得檢測精度下降。這一結論個人感覺比較trivial和reasonable,已經有很多的work證明這個問題。比較有意思的結論是對於tiny face來說,使用multi scale feature map的疊加帶來的準確度提公升遠遠大於 large face.這也是證明作者觀點的乙個有力支撐。作者的這個實驗表明可以構建乙個multi task templates的探測器,這些探測器使用了不同大小的feature map, 但是有著相同的感受野。這個multi task template可以簡單的由乙個multi-channel heatmap prediction來完成。(即特定的channel和特徵畫素位置有不同的binary loss)。作者將這個由不同層的feature map結合起來的東西叫 foveal descriptor(中心凹描述符)。

第二個實驗為探索多大的檢測視窗為最優視窗?理論上,可以使用中等尺度的template(比如50x40)來檢測經過上取樣後的小臉(25x20經過上取樣後就為50x40)。實驗上,作者也是非常吃驚的發現,這個猜想是正確的。那麼對應大臉而言,將乙個中等尺度的模板(125x100)應用在找經過下取樣的大臉上(250x200下取樣後成為125x100)效果會怎麼樣呢?再次的,作者非常驚奇的發現,準確率從89%到94%。作者尋找後發現答案可能在於資料集不同size的人臉的不均衡性。小臉的比例大大超出大臉的比例。這個解釋可以說明大臉下取樣後被準確率更高,但是卻無法解釋小臉上取樣後檢測率更高。作者又從pre-trained model身上找到了可能的線索。在imagenet資料集中,80%的training example都是中等大小的,高度在40到140畫素之間。由於我們使用了這個預訓練的模型做微調,而這個模型又對這個畫素的物體有比較強烈的bias,因此最終的結果就變成了這個樣子。(真的是這樣嗎?感覺聽起來很有道理的樣子。如果真的是這樣的話,使用pre train model 是不是不再是乙個最好的選擇?)

由上述兩個實驗,作者引出了他的模型。作者想使用multi task learning 來暴力訓練幾個不同的resolution的templates,然後貪婪的選擇乙個最好的。作者使用了t(a,b,c)來表示乙個模板。這個模板被用來在解析度為c的影象上探測大小為(a/c,b/c)的物體。比如,可以使用(250,200,1)和(125,100,0.5)兩個模板來尋找250x200的臉。給定訓練資料集後和標記好的bounding box後,我們可以定義一系列的標準bounding box 的形狀來大概的覆蓋bounding box的形狀空間。**中使用了jaccard 距離來定義(也就是1減去交並比)。

現在,對於乙個每乙個目標物體的尺寸來說,我們想問:什麼樣的c會最大化t(a,b,c)的模板的表現?為了回答這個問題,對於每乙個固定的尺寸,作者簡單的訓練了幾個不同的 multi-task 檢測器,然後從中取最好的那個檢測器。有了這些最優的檢測器,作者就可以使用不同解析度的影象來重新訓練乙個multi task model。有趣的是最終的統計結果顯示,使用1解析度的檢測器對應的物體尺寸正好是imagenet對應的40到140的尺寸。

在得到最終的模型後,作者又問了乙個問題,我們最終得到了一系列不同的檢測器,這些檢測器有冗餘嗎?比如,我有了乙個(64,50,1)的檢測器,還需要另外乙個(62,50,2)的檢測器嗎?答案是肯定的,我們可以通過剪枝來去除這些冗餘的檢測器。因為每個影象都會進入網路三次,即上取樣一次,下取樣一次,原圖一次,本質上,我們可以將這些檢測器削減到乙個小的集合裡(比如40-140個畫素的高度)。文中貼出的資料顯示,經過剪枝處理後,模型的表現甚至有了略微的提公升。

最後作者詳細說明了他的網路結構。首先訓練了binary multi channel heatmap predictors來檢測一系列的人臉(高度從40-140px)。然後使用coarse影象金字塔來找更大和更小的人臉(包括兩倍上取樣和兩倍下取樣)。作者測試了resnet101,resnet50和vgg16來當做基準檢測器。

下邊是一些訓練細節。給定了標註好的影象和template之後,我們定義正例為iou大於0.7的,負例為iou小於0.3的。其他的位置全部被0填充。這種設定會導致對於每個大的物體來說,正例的數量會遠遠多於負例的數量。為了解決這個問題,作者使用了平衡取樣和難例挖掘的技巧來減輕這種影響。做完這些後,作者又用線性回歸器對bounding box做了個微調,用標準非極大值抑制(閾值0.3)來消減框的數量。

3 21 筆記 心得

課堂筆記 1函式內,區域性作用域 函式外,全域性作用域 2.this,指向誰,具體看誰呼叫這個函式 3.localstorage.setitem key,value 用於將key value鍵值對的方式插入localstorage中。4.localstorage.getitem key 讀取key的...

shell指令碼心得 r2筆記58天)

零零星星的接觸到寫一些shell也有一些日子了,發現自己已經犯了不少的錯誤,自我總結下。選擇合適的shell shell本身有很多種,大體有如下的幾種。bin sh 已經被 bin bash 所取代 可以根據工作的需要和自己的實際情況來選擇,目前我使用比較多的就是bash,ksh 不同路徑執行,不會...

C Primer Chapter One學習筆記

筆記 1.流 從io裝置上讀入或寫出的字串行,用來說明字元隨時間順序生成或消耗。2.輸入輸出符可連用原因 operator 或operator 返回stream物件。3.要測試程式那個語句出錯,使用cout 4.新建乙個內建型別,如int i 0 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...