Test的過程:
1. 對給定的一張圖片,通過Selective Search得到2000個Proposals
2. 每一個Proposal都經(jīng)過已經(jīng)訓練好的CNN網(wǎng)絡, 得到fc7層的features,4096-dimension,即2000*4096
3. 用SVM分類器(4096*K)得到相應的score,即2000*K
4. 用CNN中pool5的特征,利用已經(jīng)訓練好的權值,得到bounding box的修正值,原先的proposal經(jīng)過修正得到新的proposal的位置
5. 對每一類別的scores,進行non-maximum suppression。具體來講,對于2000*K中的每一列,進行nms。對于特定的這一列(這一類),選取值最大的對應的proposal,計算其他proposal跟此proposal的IOU,剔除那些重合很多的proposal。再從剩下的proposal里選取值最大的,然后再進行剔除,如此反復進行,直到?jīng)]有剩下的proposal。K列(K類)都進行這樣的操作,即可得到最終的bounding box和每一個bounding box對應的類別及其score值。
Training的過程:
1. 對訓練集中所有的圖片,用selective search提取出各圖片對應的2000個proposal,并保存。(圖片路徑+bounding box信息)
2. 對每張圖片,根據(jù)圖片中bounding box的ground truth信息,給該圖片的2000個proposal賦類標簽,并保存。(這2000個proposal,如果跟ground truth中的proposal的IoU值超過了閾值,則把ground truth中的proposal對應的類標簽賦給原始產(chǎn)生的這個proposal,其余的proposal都標為background)
3. 根據(jù)2中得到的文件,每次隨機取batch,32 positive windows and 96 background windows,來訓練一個在ImageNet上訓好的模型,每一個proposal輸入CNN,對應的類標簽,來訓練這201類的classification網(wǎng)絡,訓練好后,對所有的proposal,forward一遍來得到fc7 feature,保存最終的fc7特征及對應的proposal信息到文件中
4. 訓練SVM分類器。對某一個特定的類,把跟屬于這個類的ground truth的bounding box的IoU大于閾值的原始提取的proposal標為正樣本,其余標為負樣本,得到新的一個文件(加上之前得到的fc7特征信息)。用這個文件去訓練這一個類的SVM。同樣的方法,循環(huán)訓好其他類別的分類器。
5. 用CNN得到的pool5的特征和bounding box的ground truth來訓練bounding box regression,只對那些跟ground truth的IoU超過某個閾值的proposal進行訓練,其余的不參與。
補充:
1. 在把proposal丟進CNN之前,需要把proposal處理成固定的一個大小,paper里提到“Prior to warping, dilate the tight bounding box, make p pixels around the original”,這個是什么意思?
比例=proposal的w/227-2p,把原圖按此比例進行變換,以proposal的中心為中心,截取227大小的圖作為輸入,進入CNN
2. Detection中,mAP是怎么計算的?
對于每一個類,設置一個閾值,score大于此值的為正,否則為負,與ground truth相比,得到屬于次此類別且score大于閾值的proposal,屬于此類別但score不大于閾值的proposal,得到不屬于此類別但score大于閾值的proposal,不屬于此類別但score不大于閾值的proposal。由此計算,precision, recall。通過改變閾值,得到不同組對應的recall和precision。畫曲線即可得到AP。
得到每一個類別對應的AP后,取平均值得到mAP。
recall = 屬于次此類別且score大于閾值的proposal/(屬于此類別且score大于閾值的proposal+屬于此類別但score不大于閾值的proposal
precision = 屬于次此類別且score大于閾值的proposal/(屬于此類別且score大于閾值的proposal+不屬于此類別但score大于閾值的proposal