Two-level attention model for fine-grained Image classification
The Application of Two-level Attention Models in Deep Convolutional Neural Network for Fine-grained Image Classification(細粒度影象識別)
原文連結:paper 我先來總結一下這篇文章主要的思路:
主要就是利用region proposal,尋找對於最後分類結果有積極影響的proposal,去掉那些無用的噪聲。論文提到了兩個filter proposal的方法。第一個 利用image-level訓練好的model,和設定的閾值,直接對selective search產生的proposal,進行第一次去燥,主要目的得到高查全率,準確率可以不高。第二次filter,就是利用第一次filter之後的資料重新訓練網路,提取網路第四層卷積的特徵,對其聚類,根據這個從第一次filter之後的proposal裡面選擇3個對於分類最有影響力的part-level proposal,最後利用SVM分類。
感覺整個過程就是想方設法,找到對結果最有影響力proposal,然後訓練分類器,結果就不錯。文章想法很不錯,進行聚類。最值得表揚的是,不僅思路新,而且文章有理有據,把整個過程說的很明白,這點很欣賞。希望自己以後也能寫出正常人都能看懂的paper。
摘要
fine-grained分類由於類別之間只有通過細微區域性的差異才能夠被區分出來,因此很有挑戰性。位置,大小或者旋轉都會使問題變得更加困難。很多這類問題的解決思路是where(object)和what(feature)式的。 這篇文章將視覺attention應用到fine-grained分類問題中使用DNN。我們整合了3中attention模型:bottom-up(提供候選者patch),object-level top-down(certain object相關patch),和part-level top-down (定位具有分辨能力的parts)。我們把這幾個attentions結合起來訓練domain-specific深度網路。不適用bounding box標註。利用了弱監督學習的知識來實現。
引言
fine-gained分類是在基礎類別下的次分類問題,比如分類不同型別的鳥,狗,花的類別。正是一個具有廣泛應用價值的重要問題。類間差異要比類內差異小很多,所以fine-gained分類是一個技術上的挑戰問題。 特別的,fine-gained分類的困難來源於discriminal特徵不僅僅是前景中的物體了,更加應該具有判別力的資訊應該是物體的部分資訊,比如說鳥的頭部。因此很多fine-gained分類任務的方法一般都是:找到具有判別力的區域(物體本身或者物體的一部分)。 因此一個從底向上(bottom-up)的過程是不可避免的,我們需要提出很多影象區域作為物體候選者,或者這些區域包含那些具有判別力的部分。(這個相當於proposal regions,類似SIFT,selective search產生的候選者),這篇文章也利用selective research作為region提取器。 這個自底向上的霍城需要很高的召回率,準確率可以不用很高。(事實上,準確率相當低,因此好需要後續處理,只要召回率高,就說明物體在其中,在進行更為詳細的方法,把它找到,從而提高準確率)。如果object很小,那麼大多數的patches都是背景,對於分類物體一點用都沒有,這就引出了top-down的方法來過濾掉這些噪聲patches,選擇出相關性比較高的patches。在fine-grained分類領域,找到前景物體和物體的部分被認為是兩個過程,一個是object-level,一個是part-lecel。 許多已經存在的方法依賴強監督學習來解決attention問題。這就對人類標註產生了很大的依賴,比如使用bounding box或者landmarks。我們沒有使用任何其中的核外標註。 由於標註很昂貴,並且不可伸縮,這個研究需要使用最弱監督來實現。 本片問孩子那個提出兩個思路來解決這個問題,一個是object-level,一個是part-level。 這裡是一個方法抽象總結:
- 把一個在ILSVRC2012上面預訓練過的CNN轉變成一個filterNet。FilterNet可以選擇跟基準類別很相近的patches,因此可以處理object-level attention。這個選擇到的patches用來訓練另外一個CNN,訓練成一個domain分類器,稱DomainNet。
- 我們觀察到了在DomainNet中隱藏的聚類模式,神經網路節點存在很高的敏感性對於具備判別力的部分。因此我們選擇濾波器作為part-detector來實施part-level的實驗。
在以上實驗過程中,僅使用image-level 標註。 下一個部分就是提取具備判別力的特徵,從整兩個attention model裡面選中的regions/patches中提取這些有判別力的特徵。最近,很多論文傳達出一種資訊,就是從CNN中提取到的特徵,比手工提取特徵實驗結果要好很多。 在object-level,DomainNet直接輸出了多視角(multi-view)的預測根據一張圖片中幾個相關的patches。在part-level,CNN隱層中的啟用函式是由檢測到的區域產生另外的一個預測結果通過一個基於part-based的分類器 驅動的。最後的結果合併了這兩種方法,結合了他們的優勢。
我們初步實驗結果證明了設計的有效性。使用最弱監督,我們提高了狗和鳥的分類效果的錯誤率從40.1%和21.1%降到了28.1%和11%。在CUB2002011資料集上,準確率達到了69.7%,如果使用VGGNet正確率能接近78%。
方法
我們的設計來自於一個非常簡單的直覺:實現細粒度影象分類需要先看到物體,然後看到它最具有判別力的部分。從一張圖片中找到吉娃娃(狗型別之一),需要先看到一隻狗,然後根據具體的特徵來判斷是哪種型別的狗。 通過bottom-up生成候選patches,使用了selctive research方法。這個步驟會提供多尺度,多視角的原始影象。Top-dowm過程需要來實現,為了提取有效的有用的分類patches(FilterNet,過濾掉無用背景資訊)。(由於bottom-up的高召回率和低正確率)
2.1 物體層面的 attention model
- patch selection using object-level attention 直接利用在目標資料集上預訓練好的CNN模型作為filter。我們利用具體類別的父類別來作為判斷依據,比如吉娃娃,是狗所以留下。根據是不是狗來判斷要不要留下patches。這裡會生成一個score表,我們設定一個閾值來決定是否要選擇patches。通過這方法,多視角,多維度的特徵得以保留,並且有效去除噪聲。
- Training a DomainNet 用FilterNet選擇出來的patches被用來訓練新的CNN。 我們從一張影象中提取出很多的patch,相當於做的data augmentation,類似隨機裁剪,但是我們的patch具有更高的confidence。有兩個好處:1.DomainNet是一個號的細粒度的影象分類器;2. 它生成的內部特徵允許我們構建部分檢測器。
- Classification using object-level attention 在test階段,也可以用上面的方法來提取confidence比較高的patches。為了預測test資料的label,我們把剛才生成的selected patches輸入DomainNet進行前向計算,然後計算softmax輸出分類分佈的所有patches的均值。最後我們根據這個均值得到最後的預測結果。 這個方法包含一個超引數:confidence的閾值。這個會影響selected patches的質量和數量。在實驗中,設定此值維0.9,因為這個數值能夠提供最好的val準確率還有test時的表現。
2.2 部分層面上的attention model
-
Building the part detector DPD和Part-RCNN研究表明特定的有判別力的區域性特徵對於細粒度的圖片分類很有用。由於DomainNet的隱層包含了很多的特徵資訊,比如所有的神經網路節點能夠反映鳥的頭部特徵,其他的反映身體特徵。這些特徵確實能夠代表或者說為他們的類別站臺。 看上圖,這張圖應該是論文的精髓了。我們對相似度矩陣S聚類成k類,[Math Processing Error]S(i,j)代表對於中間層濾波器[Math Processing Error]Fi和[Math Processing Error]Fj(DomainNet中)的餘弦值。在我們實驗中,網路跟AlexNet是一樣的,選擇第四個卷整合聚類成3類,每個聚類看作是一個部分檢測器。 當使用聚類濾波器來檢測region proposal 中的parts時,步驟為:1. resize輸入圖片大小;2. 前向傳遞一次,生成每個filter的啟用分數;3. 把同一類別的filter的啟用分數相加;4. 對於每一聚類,選擇生成score最高的patch,把這個patch當做part patch。每張圖應該是有聚類個數3個part patch。(就相當於另外一次對原始selective search產生的region proposal進行刪選,這次一張圖片只保留3個最有影響力的patch,用來訓練SVM分類器)
-
Building the part-based classifier 經過part detector選擇的patches,再次進入DomainNet來生成啟用分數,我們把不同parts的啟用分數連線起來,還有原始image,來訓練SVM part-based分類器。 本方法包含幾個超引數,比如檢測濾波器層:第四層卷積;聚類別數:3.這些都是根據實驗結果來斷定的。這些東西可以根據不同的資料集做不同的修改。
2.3 完整過程
object-level和part-level方法各有千秋。他們的功能和優勢是不同的,主要是因為他們的接受的patch不同。1.使用selective serch產生的patches,這些patch驅動了DomainNet。另一方面,part-level分類器專門對那些包含有判別力的區域性特徵進行處理。儘管有的patch被兩個分類器同時使用,他們代表不同的特徵,因此能夠潛在的互補。最後我們利用下面的公式將兩個模型的結果結合在一起。 [Math Processing Error]finalscore=objectscore+α∗partscore(1)
object_score是一張圖片多個patch的均值,part_score是是SVM產生的決策值。[Math Processing Error]α使用驗證的方法來確定,在實驗中,我們設定其維0.5 上圖是整個實驗流程框架。