[正在進行中...] KG & object detection

The More You Know: Using Knowledge Graphs for Image Classification

paper:https://arxiv.org/pdf/1612.04844.pdf

人類和learning-based CV 算法最大的不同是:人類能夠依靠背景知識在可視化世界中做推理。人可以只通過少量的樣本瞭解到這個物品的特徵、這個物品和其他物品的關係。如下圖在預測Elephant Shrew(“象鼩(qú)”)的時候,假設我們之前沒有見到過,但是我們看書看過或者是別人告訴過我們“象鼩(qú)是一種長得像是老鼠,然後鼻子又像是大象的動物,經常在灌木叢中活動… ”,然後當我們某一天看到這個的時候,我們就有通過這些特徵,這些背景知識就可能判斷出這個是象鼩(qú)。(這個想法跟很多基於屬性的Zero shot learning image classification的做法很像。好吧,文中提到了他們和這個ZSL的任務相關)。

在這裏插入圖片描述

首選,文章將上述的“大象鼻子、老鼠身子”等這些信息叫做evidence,之後的識別過程就像是利用證據進行推理的過程,需要證據一步步傳遞,直到推出來。那麼有什麼模型能滿足這個想法呢?答案GNN系列網絡。本文便是以KG作爲背景知識,基於GGNN(Gated Graph Neural Network),提出Graph Search Neural Network(GSNN)進行多標籤圖片分類。比較GGNN,GSNN不更新整個graph上的點,1)只更新subset,因此計算效率更高, 2)利用importance network爲每個結點計算重要程度來挑選subset的,因此有更強的可解釋性。

模型

模型由三部分組成:propagation networkimportance networkoutput network
GGNN
GGNN的思想類似於LSTM,可以從下面propagation network的公式直接看。

  • propagation networkNN個結點的圖,hv(t)h_v^{(t)}:表示結點vv在時間tt的隱層狀態,AvTA_v^T是鄰接矩陣。
    在這裏插入圖片描述

GSNN

  • importance network會爲已有的active node計算下一步需要擴展的top P個重要的active nodes。(初始active node基於Faster R-CNN得到80類的基礎分類結果,設置概率的閾值來判斷)
    爲了訓練importance network,我們需要對給定的圖像爲每個node安排重要度。安排的原則是:如果node是ground truth concept,則重要度爲1,若是一跳的,重要度爲λ\lambda,若是兩跳,重要度爲λ2\lambda^2,即:靠近最終輸出在擴展的時候是最重要的。
    h
  • output network 通過BCE(Binary Cross Entropy)訓練。相比GGNN的g(hv(T),xv)g(h_v^{(T)},x_v),GSNN多了bias term nvn_v
    L=g(hv(T),xv,nv)L=g(h_v^{(T)}, x_v, n_v)

原因見論文

數據集

目標檢測:

  • COCO

  • Visual Genome dataset:100,000張圖片,每個被標記爲object,attributes and object之間/object和attribute之間的relations.每張圖片平均21 labels。

  • VGML:論文構建的數據集,基於Visual Genome dataset中200個最常見的object,100個最常見的attributes,還有coco中多的16個,共316個visual concepts。

KG:通過Visual Genome dataset + WordNet進行構建。因爲Visual Genome dataset 包含了scene-level relationships between objects,但是沒有包含semantic relation,因此加入wordnet進行擴充。

實驗結果:
1、 VG:Visual Genome graph ,WN:WordNet graph.
在這裏插入圖片描述
2、訓練樣本數量對結果的影響
在這裏插入圖片描述
3、在coco上的效果:
在這裏插入圖片描述

case

在這裏插入圖片描述

Object Detection Meets Knowledge Graphs

鏈接:https://www.ijcai.org/proceedings/2017/0230.pdf
在原始目標檢測的優化過程中添加“semantic consistency”的約束進行優化,“semantic consistency”來自於背景知識。最終的實驗結果是在不降低precision值的情況下recall相比之前提升6.3。

“semantic consistency”的理解:基於“家貓可能會坐在盤子上,而熊不會”這樣的背景知識,1)即使訓練的時候沒有樣本是關於 “貓、桌子”的,測試也可能會預測出來;2)當目標檢測檢測出來“熊”和“桌子”時候,這和背景知識是衝突的,因此會調整這兩個的得分,如將某一張圖片原始目標檢測得到的(bear,0.8) & (table,0.9)調整爲(bear,0.01) & (table,0.9)。
在這裏插入圖片描述
方法的兩個技術難點是:
1)如何量化背景知識
因爲KG一般是通過symbolic表示,而目標檢測算法是基於subsymbolic或numerical表示,因此需要量化。文中提出量化的方式是爲每對concepts計算numerical表示的語義一致度。如在KG中有“cat sits on table”(如上圖,基於概念知識圖譜),說明cat and table是語義一致度比較高,而熊不是。

這裏提到“cat licks plate” and “plate placed on table”.需要看下是什麼因素保證了這樣的傳輸?

2)如何將語義一致性應用到我們的任務中
基於假設:“語義一致性高的更傾向於在同一張圖片中出現”。如果用(o,p)(o,p)表示oopp的概率出現在圖像中,那麼(cat,0.8) & (table,0.9) 看起來會比(bear,0.8) & (table,0.9)更合理,模型可能會將後者糾正爲(bear,0.01) & (table,0.9)。論文將這種約束映射爲一個優化問題。

方法

原始的目標檢測:P=BLRP = B * L \in \mathbb{R} ,其中Pb,l=p(lb)P_{b,l}=p(l|b)表示圖像的bounding box bb被打標爲label ll的概率爲Pb,lP_{b,l}
KG-aware目標檢測:P^\hat{P}是經過“semantic consistency”糾正後的PP,即文章中提到的“P^\hat{P} is a knowledge-aware enhancement of PP
目標檢測輸出:l^=argmaxlP^b,l\hat{l}=argmax_l\hat{P}_{b,l}

1)這裏看到目標檢測是需要box的,且box固定的?
2)預測的結果看來是單分類的?不是,是每個box一個label

針對上述兩個技術難點:
1、如何量化背景知識。Semantic Consistency,SRL,LS \in \mathbb{R}^{L,L},有“Frequency-based knowledge“和“Graph-based knowledge“兩種方式計算。

  • Frequency-based knowledge,NN是KG中總instances數量,n(l,l)n(l,l')llll'共現頻率
    在這裏插入圖片描述
    明顯這種方式不能處理KG中沒有直接相連的實體對,即多跳關係的實體對。

KG中的N是總instance數量是entity數量嗎?

  • Graph-based knowledge。“random walk with restart”的思想,會構造出從v0v_0vtv_t的路徑v0,v1,...vtv_0,v_1,...v_t,讓p(vt=lv0=l;α)p(v_t=l'|v_0=l;\alpha)表示從ll到經過tt步之後到達ll'的概率。經過很長的遊走之後,概率pp會收斂到
    Rl,l=limtp(vt=lv0=l;α)R_{l,l'}=\lim_{t \rightarrow\infty }p(v_t=l'|v_0=l;\alpha)
    這裏Rl,l=R_{l,l'}=不是對稱的,上面方法是。SS的計算如下:
    在這裏插入圖片描述

和deepwalk的思想差不多,可能deepwalk是參考這個的?

2、 如何將語義一致性應用到我們的任務中。回想上述假設:“語義一致性高的更傾向於在同一張圖片中出現”,有下面的優化目標。第一項保證語義一致性高的得分近似,第二項保證經過KG糾正後的結果不應該太偏離原始目標檢測出來的值。
在這裏插入圖片描述

具體的優化過程見論文。

數據集

KG:conceptNet
目標檢測:MSCOCO15,PASCAL07
在這裏插入圖片描述
在MSCOCO15上結果
在這裏插入圖片描述
KF-ALL,KF-500是基於frequency-based knowledge,KG-CNet基於graph-based knowledge

case

下面的圖像中,橘黃色的ground-truth label,紫色是檢測出來的,左邊是FRCNN,右邊是KG-CNet。
在這裏插入圖片描述

– 文中的“concept”對應KG中的“entity”

restriction for my task:

  1. 會設置bouding box數量?
  2. 最大的問題是要求目標在文中出現,即約束條件中設置了兩個出現在圖片中的object的出現概率差不多。訓練的目標更多是讓原始的object detection檢測的更全一點。

Multi-Label Image Recognition with Graph Convolutional Networks

曠視自己寫的:曠視研究院提出ML-GCN:基於圖卷積網絡的多標籤圖像識別模型,這裏只放了自己需要的部分。

核心是建模標籤之間的依賴關係去提升識別的性能。而本文通過GCN去捕獲這個依賴關係。整體來說,會先用label構建一張圖—label graph,圖上每個點(label)用相應的(label’s) embedding進行初始化,通過標記相關矩陣在GCN的過程中指導信息的傳播,具體來說是在節點更新的時候平衡節點和其鄰居的信息傳播量,最終得到一組有依賴關係的目標分類器,相當於GCN建立了從embedding到classifer的映射。和其他GCN不同的點在於構建了一個有效的“label correlation matrix”去指導GCN中節點之間信息的傳播。

方法

GCN recap

GCN的核心是通過節點之間信息的傳播來更新節點的表示。不像平常的CNN在歐式空間進行操作,GCN在非歐式空間進行。對GCN來說最重要的是從圖G上學習函數ffff的輸入包括兩個部分,一個是特徵HlRn×dH^l \in \mathbb{R}^{n \times d}和相關矩陣ARn×nA \in \mathbb{R}^{n \times n},其中nn是結點的數量,通過這兩個輸入來更新Hl+1Rn×dH^{l+1}\in \mathbb{R}^{n \times d'},即
Hl+1=f(Hl,A)H^{l+1} = f(H^l, A)
具體應用了卷積操作的話,上面公式變成:
Hl+1=h(A^HlWl)H^{l+1} = h(\hat{A}H^lW^l)
其中,WlRd×dW^l \in \mathbb{R}^{d \times d'}h()h(·)是非線性激活函數,文中用LeakyReLU。及上述的公式堆疊多次得到有label inner-relationship的分類器。

multi-label GCN

multi-label GCN整體框架如下。可以看到由兩個部分組成,圖像特徵表示的學習和 GCN爲基礎的分類器學習。可以看到feature representation學習到圖片的特徵維度爲RD\mathbb{R}^D,GCN最後一層輸出WRC×DW \in \mathbb{R}^{C \times D},aka,爲每個類學到了一個分類器。自然而然預測爲
y^=Wx\hat{y}=Wx
訓練基於多標籤損失函數:
在這裏插入圖片描述

在這裏插入圖片描述

ML_GCN的相關矩陣

本文基於數據集內的tag的共現來建立相關矩陣AA,矩陣非對稱,如下檢測到滑板情況下,標記爲人的概率0.75,反過來是0.1。
在這裏插入圖片描述

BTW:

  1. gcn的輸出不一定是分類器還可以直接是預測結果

# [正在]
從視覺理解的角度,多標籤分類是個基礎卻具有挑戰性的任務。存在的方法發現區域級別的線索能夠輔助多標籤任務的進行,但是,進行多標籤標註

基礎

建議直接看,以下都是來自於這倆篇

R-CNN

Region Proposal + CNN。預先找出圖中目標可能出現的位置,即候選區域(Region Proposal)。剩下的工作實際就是對候選區域進行圖像分類的工作(特徵提取+分類)。
R-CNN的簡要步驟如下
(1) 輸入測試圖像
(2) 利用選擇性搜索Selective Search算法在圖像中從下到上提取2000個左右的可能包含物體的候選區域Region Proposal
(3) 因爲取出的區域大小各自不同,所以需要將每個Region Proposal縮放(warp)成統一的227x227的大小並輸入到CNN,將CNN的fc7層的輸出作爲特徵

SPP Net的第一個貢獻就是在最後一個卷積層後,接入了金字塔池化層,保證傳到下一層全連接層的輸入固定。
換句話說,在普通的CNN機構中,輸入圖像的尺寸往往是固定的(比如224*224像素),輸出則是一個固定維數的向量。SPP Net在普通的CNN結構中加入了ROI池化層(ROI Pooling),使得網絡的輸入圖像可以是任意尺寸的,輸出則不變,同樣是一個固定維數的向量。

SPP Net

R-CNN雖然不再像傳統方法那樣窮舉,但R-CNN流程的第一步中對原始圖片通過Selective Search提取的候選框region proposal多達2000個左右,而這2000個候選框每個框都需要進行CNN提特徵+SVM分類,計算量很大,導致R-CNN檢測速度很慢,一張圖都需要47s。

有沒有方法提速呢?答案是有的,這2000個region proposal不都是圖像的一部分嗎,那麼我們完全可以對圖像提一次卷積層特徵,然後只需要將region proposal在原圖的位置映射到卷積層特徵圖上,這樣對於一張圖像我們只需要提一次卷積層特徵,然後將每個region proposal的卷積層特徵輸入到全連接層做後續操作。

但現在的問題是每個region proposal的尺度不一樣,而全連接層輸入必須是固定的長度,所以直接這樣輸入全連接層肯定是不行的。SPP Net恰好可以解決這個問題。

SPP-Net是出自2015年發表在IEEE上的論文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》。

CNN一般都含有卷積部分和全連接部分,其中,卷積層不需要固定尺寸的圖像,而全連接層是需要固定大小的輸入。所以當全連接層面對各種尺寸的輸入數據時,就需要對輸入數據進行crop(crop就是從一個大圖扣出網絡輸入大小的patch,比如227×227),或warp(把一個邊界框bounding box的內容resize成227×227)等一系列操作以統一圖片的尺寸大小,比如224224(ImageNet)、3232(LenNet)、96*96等。

但warp/crop這種預處理,導致的問題要麼被拉伸變形、要麼物體不全,限制了識別精確度。沒太明白?說句人話就是,一張16:9比例的圖片你硬是要Resize成1:1的圖片,你說圖片失真不?

SPP Net的作者Kaiming He等人逆向思考,既然由於全連接FC層的存在,普通的CNN需要通過固定輸入圖片的大小來使得全連接層的輸入固定。那借鑑卷積層可以適應任何尺寸,爲何不能在卷積層的最後加入某種結構,使得後面全連接層得到的輸入變成固定的呢?

這個“化腐朽爲神奇”的結構就是spatial pyramid pooling layer。

簡言之,CNN原本只能固定輸入、固定輸出,CNN加上SSP之後,便能任意輸入、固定輸出

Fast R-CNN

R-CNN與Fast R-CNN的區別有哪些呢?
先說R-CNN的缺點:即使使用了Selective Search等預處理步驟來提取潛在的bounding box作爲輸入,但是R-CNN仍會有嚴重的速度瓶頸,原因也很明顯,就是計算機對所有region進行特徵提取時會有重複計算,Fast-RCNN正是爲了解決這個問題誕生的。

R-CNN訓練過程分爲了三個階段,而Fast R-CNN直接使用softmax替代SVM分類,同時利用多任務損失函數邊框迴歸也加入到了網絡中,這樣整個的訓練過程是端到端的(除去Region Proposal提取階段)。

也就是說,之前R-CNN的處理流程是先提proposal,然後CNN提取特徵,之後用SVM分類器,最後再做bbox regression,而在Fast R-CNN中,作者巧妙的把bbox regression放進了神經網絡內部,與region分類和併成爲了一個multi-task模型,實際實驗也證明,這兩個任務能夠共享卷積特徵,並相互促進。

畫一畫重點:
R-CNN有一些相當大的缺點(把這些缺點都改掉了,就成了Fast R-CNN)。
大缺點:由於每一個候選框都要獨自經過CNN,這使得花費的時間非常多。
解決:共享卷積層,現在不是每一個候選框都當做輸入進入CNN了,而是輸入一張完整的圖片,在第五個卷積層再得到每個候選框的特徵

原來的方法:許多候選框(比如兩千個)–>CNN–>得到每個候選框的特徵–>分類+迴歸
現在的方法:一張完整圖片–>CNN–>得到每張候選框的特徵–>分類+迴歸

Faster R-CNN

Fast R-CNN存在的問題:存在瓶頸:選擇性搜索,找出所有的候選框,這個也非常耗時。那我們能不能找出一個更加高效的方法來求出這些候選框呢?

解決:加入一個提取邊緣的神經網絡,也就說找到候選框的工作也交給神經網絡來做了。

所以,rgbd在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同時引入anchor box應對目標形狀的變化問題(anchor就是位置和大小固定的box,可以理解成事先設置好的固定的proposal)。

具體做法:
  • 將RPN放在最後一個卷積層的後面
  • RPN直接訓練得到候選區域

總結一下各大算法的步驟

簡言之,即如本文開頭所列
R-CNN(Selective Search + CNN + SVM)
SPP-net(ROI Pooling)
Fast R-CNN(Selective Search + CNN + ROI)
Faster R-CNN(RPN + CNN + ROI)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章