Background
1) “Patch-level image representation”的優勢
- “Patch-level image representation is very important for object classification and detection, since it is robust to spatial transformation, scale variation, and cluttered background”
- “Conventional CNNs without patch-level image features are unsuitable to recognize complex images and unable to obtain state of the art performance on challenging datasets, e.g., PASCAL VOC datasets”
2) “Patch-level image representation”現存的問題(這裡特指與CNN結合方法的問題)
- 對一幅影像的每一個patch分別用CNN提取特徵:計算冗餘,沒有考慮到卷積計算在在patch之間是可以共享的
- 太依賴patch-level annotations:相比於image-level annotation而言,patch-level annotations量小且獲取代價較高(耗時、費精力)
- patch-level representation, image-level representation, and object classification and discovery目前是單獨處理的,沒有實現端到端的訓練:中間儲存需求較大、全域性最優可能性較小、難以針對specific task進行優化。
3)object classification and discovery概念
Given an input image and its category labels (e.g., image- level annotations), object classication is to learn object classiers for classifying which object classes (e.g., person) appear in testing images.1 Similar to object detection, object discovery is to learn object detectors for detecting the location of objects in input images, as shown in the bottom of Fig. 1. 如下圖所示
4)Multiple Instance Learning (MIL)概念
In MIL, a set of bags and bag labels are given, and each bag consists of a collection of instances, where instances labels are unknown for training. MIL has two constraints: (1) if a bag is positive, at least one instance in the bag should be positive; (2) if a bag is negative, all instances in the bag should be negative. 如果我們將影像理解為bag,patch理解為instance,這樣就可以在patch or image -level基礎上採用MIL的框架了。
5)本文追求的目標
在只給定image-level annotations的前提下,在MIL框架下實現端到端的網路設計,該網路能夠同時完成object classification and discovery(也就是多工學習)。
Main Points
我們首先看看這篇paper的框架
下面我們簡單分析一下這個網路結構的要點:
1)採用VGG或者Alexnet生成feature maps,採用Selective Search方法生成Bounding boxes。
2)由於Bounding boxes的大小不一樣,因此為了使得大小不同的patch能夠輸出相同大小的feature maps,作者在網路中引入了SPP layer(該層的作用是生成大小相同的feature maps,此處的大小指的是feature maps的size)。
3)通過全連線層提取每一個patch的feature vector。到此為止,採用的都是基本的CNN building blocks。
4)獲取每個patch的feature vector 之後,在效果上,可以通過1x1的卷積核對該feature vector進行降維,也就是上述Patch encoding的過程。
5)在classification block中,因為我們進行object classification,並且我們只有image-level annotations,因此我們的目標是使得image-level annotations能夠給我們的網路提供監督訊號。很自然的,我們要將這些patch-level的representations轉化為image-level的representation。在本文中作者採用的是SPM進行轉化,其原理圖示如下
其實質就是將原始影像劃分為grid,並對grid內的patch representations進行pooling,這樣就可以得到固定的輸出維度了。
6)之後就是CNN中常用的分類器和loss函式的選擇問題了。
7)我們再來看看網路的另一隻Discovery Blcok,其實也很簡單,就是直接多每一個patch直接進行分類,然後將分類的結果通過max-pooling的形式整合為image-level的輸出,這時就可以和image-level 的 Groundtruth進行對比了。
Summary
1)如何產生Bounding boxes?我們有現成的演算法!
2)如果Bounding boxes大小不一致怎麼辦?我們有SPPlayer!
3)不同的影像可能生成的patch數目不一致,怎麼保證這幅影像的image-level representation vector維度固定呢?我們有SPM!
4)對patch score進行max pooling的含義是什麼?patch score代表這個patch屬於每一類的值(值越大其屬於某一類的可能性越大),max pooling就是做了一個選擇“認定特定類最大score值對應的patch就是該類”。
5)有一個好想法,採用現有的框架儘快實現,哈哈!