引入
論文地址:https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tnnls16miFV.pdf
論文應用:處理大規模數據。
論文場景:標準多示例。
論文方法:
- miVLAD (MIL based on the VLAD representation)
- miFV (MIL based on the Fisher Vector representation)
1 算法描述
本文的符號系統如下:
符號 |
含義 |
{(X1,y1),…,(Xi,yi),…,(XNB,yNB)} |
數據集 |
NB |
數據集大小 |
Xi={xi1,…,xij,…,xi,ni} |
包 |
ni |
包大小 |
yi∈Y={−1,+1} |
包標籤 |
xij=[xij1,…,xijl,…,xijd]T∈X |
實例 |
d |
實例維度 |
xijl |
實例屬性 |
Ni=∑i=1NB |
實例總數 |
1.1 miVLAD
這個算法的僞代碼和miFV太像了,這裏就說明一下他如何進行codebook (第4步)和映射 (第6步)。
1.1.1 codebook學習
步驟如下:
1)使用kMeans找到訓練集中所有實例的K個重心:C={c1,…,ck,…,cK},C被稱爲codebook;
2)將每一個實例xij分配到最近的重心:ck=NN(xij)。
這不就是kmeans嗎。。。
1.1.2 映射
映射過程如下:
1)for i=1:K
1.1)對於每一個包Xi,計算包中的實例xi與ck的差異vik。vik屬性值的計算如下:
vikl=xij∈Ω∑xijl−ckl,(1)其中Ω={xij∣NN(xij)=ck},即實例xij是與同一簇的ck進行計算。
2)K個差異組合成一個新的向量。
舉個例子:
1)找到了3個重心,如下表:
重心 |
ck1 |
ck2 |
ck3 |
c1 |
1 |
0 |
0.1 |
c2 |
0 |
1 |
0 |
c3 |
0 |
0 |
1 |
2)給定包Xi:
實例 |
xij1 |
xij2 |
xij3 |
xi1 |
1.2 |
0 |
0 |
xi2 |
0.9 |
0 |
0.1 |
xi3 |
0 |
1.1 |
0 |
xi4 |
0 |
0 |
0.8 |
3)由於xi1和xi2和重心c1爲一類,因此vi10=(1.2−1)+(0.9−1)=0.1,最終vi1=[0.1,0,−0.1]。
4)最終一個包可以由以下三個向量表示:
vi |
vik1 |
vik2 |
vik3 |
vi1 |
0.1 |
0 |
-0.1 |
vi2 |
0 |
0.1 |
0 |
vi3 |
0 |
0 |
-0.2 |
5)vi延展成一個K∗d的向量:
vi=[0.1,0,−0.1,0,0.1,0,0,0,−0.2].(1*) 6)使用以下公式對vi的每一個值進行處理:
vi⋅l=sign(vi⋅l)∣vi⋅l∣.(2*)這時將得到:
vi=[0.32,0,−0.32,0,0.32,0,0,0,−0.45].(3*) 7)對vi進行二範式處理:
vi=∥vi∥2vi(4*) 8)最終使用以下向量對包Xi進行描述:
vi=[0.45,0,−0.45,0,0.45,0,0,0,−0.63].(3*)
1.2 miFV
該算法與Scalable Multi-Instance Learning基本一致,不做贅述。
2 實驗
論文使用到的數據集信息如下: