細(xì)粒度圖像分類實(shí)戰(zhàn)代碼
來(lái)源:投稿 作者:lsc
編輯:學(xué)姐
NO.1?理論部分
01?細(xì)粒度圖片分類問(wèn)題
1.1細(xì)粒度圖片分類特點(diǎn): 可判別區(qū)域往往只是在圖像中很小的一塊區(qū)域內(nèi)。

1.2細(xì)粒度圖像分類數(shù)據(jù)集

1.3細(xì)粒度圖像分類競(jìng)賽

1.4細(xì)粒度圖像分類模型分類:
(1)強(qiáng)監(jiān)督模型: 需要類別以外的標(biāo)簽進(jìn)行監(jiān)督
(2)弱監(jiān)督模型: 不需要類別以外的標(biāo)簽
02?強(qiáng)監(jiān)督模型
Part-based R-CNN標(biāo)簽,引入bounding box和key point等額外的標(biāo)注信息

Part-based R-CNN的基本流程:

(1)基于R-CNN算法和空間的分布約束條件對(duì)局部區(qū)域進(jìn)行檢測(cè),得到整體、頭部和軀干部件。
(2)對(duì)不同區(qū)域使用對(duì)應(yīng)的分類器提取卷積特征。
(3)將3個(gè)分類網(wǎng)絡(luò)的全連接層特征進(jìn)行連接,得到最后的特征表示。
(4)通過(guò)SVM分類器進(jìn)行分類訓(xùn)練,該算法在CUB-200數(shù)據(jù)集上取得了73.9%的精度。
Part-based RCNN的缺陷:
(1)需要多個(gè)檢測(cè)模型和多個(gè)分類網(wǎng)絡(luò),就算量大
(2)對(duì)不同數(shù)據(jù)集需要不同的部件劃分,甚至難以劃分(如植物),很難通用
03?弱監(jiān)督模型
3.1MA-CNN模型,不需要額外的標(biāo)簽

不顯式地定義各個(gè)部件,不需要引入目標(biāo)檢測(cè)模型,而是對(duì)通道進(jìn)行聚類(相加),得到不同部件的注意力圖,將其看作 ’虛擬的部件’。

第2步: 聚類初始化,使用K-means等聚類方法對(duì)特征進(jìn)行聚類,得到N個(gè)部件。
第3步: 得到初始的N個(gè)部件,為每一個(gè)部件引入全連接層,預(yù)測(cè)c維向量,對(duì)應(yīng)每一個(gè)通道有多大的概率屬于該部件,初始化標(biāo)簽為第1步聚類結(jié)果。
第4步: 得到N個(gè)c維向量,對(duì)特征圖進(jìn)行加權(quán)求和,得到N個(gè)部件的注意力。
MA-CNN模型特點(diǎn):
(1)不需要多個(gè)網(wǎng)絡(luò),通過(guò)通道實(shí)現(xiàn)了注意力機(jī)制
(2)模型學(xué)習(xí)流程比較復(fù)雜
3.2雙線性模型
3.2.1雙線性卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(Bilinear CNN)


B-CNN根據(jù)大腦工作時(shí)同認(rèn)知類別和關(guān)注顯著特征的方式,構(gòu)建了兩個(gè)線性網(wǎng)絡(luò),協(xié)調(diào)完成局部特征提取和分類的任務(wù),該算法在CUB-200數(shù)據(jù)集上取得了84.1%的精度,不過(guò)該方法在合并階段會(huì)產(chǎn)生較高的維度,使得整個(gè)計(jì)算開(kāi)銷非常大。
3.2.2雙線性卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(Bilinear CNN)特征外積計(jì)算

3.2.3雙線性卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(Bilinear CNN)

3.2.4 3鐘雙線性模型

(a)無(wú)共享??

(b)部分共享

(c)完全共享(參數(shù)量最少,且沒(méi)有明顯的精度損失)
3.2.5雙線性模型的輸出維度太大

3.2.6 緊湊的雙線性模型,通過(guò)使用低維的kernel近似來(lái)實(shí)現(xiàn)緊湊的雙線性方法
近似方法: Random Maclaurin(RM), Tensor Sketch(TS)

compact bilinear feature,維度可以指定,如將512 * 512 = 262144降維到2048
3.2.7投影降維

sketch表示單個(gè)空間位置的內(nèi)積。
RM與TS投影方法與完整雙線性模型對(duì)比

隨著投影維度增加,逐步逼近完整雙線性模型的性能
CUB鳥(niǎo)類識(shí)別數(shù)據(jù)集,VGG基準(zhǔn)模型: 2000到800維度比較合適
3.2.8雙線性模型的特點(diǎn):
(1)模型結(jié)構(gòu)比較簡(jiǎn)單,不需要特殊設(shè)計(jì)
(2)學(xué)習(xí)特征之間的注意力,有一定訓(xùn)練難度
NO.2?代碼部分
1.細(xì)粒度分類實(shí)戰(zhàn)簡(jiǎn)介

數(shù)據(jù)集: CUB-200,共200種不同種類的鳥(niǎo)
使用網(wǎng)絡(luò): bilinear cnn
2.數(shù)據(jù)集讀取
使用torch.utils.data里的data函數(shù)實(shí)現(xiàn)編寫過(guò)程,分為_(kāi)_init__、__len__、__getitem__三個(gè)模塊,
__init__: 完成某些參數(shù)的初始定義
__len__: 獲取數(shù)據(jù)集的總數(shù)
__getitem__: 讀取每幅圖像和標(biāo)簽
3.模型搭建
(1)理解網(wǎng)絡(luò)的設(shè)計(jì)思想
(2)利用torch.nn指令完成模型的基本搭建
(3)主要包括nn.Conv2d、nn.BatchNorm2d、nn.AvgPool2d等
