Training的过程:
- 对训练集中所有的图片,用selective search提取出各图片对应的2000个proposal,并保存。(图片路径+bounding box信息)
- 对每张图片,根据图片中bounding box的ground truth信息,给该图片的2000个proposal赋类标签,并保存。(这2000个proposal,如果跟ground truth中的proposal的IoU值超过了阈值,则把ground truth中的proposal对应的类标签赋给原始产生的这个proposal,其余的proposal都标为background)
- 根据2中得到的文件,每次随机取batch,32 positive windows and 96 background windows,来训练一个在ImageNet上训好的模型,每一个proposal输入CNN,对应的类标签,来训练这201类的classification网络,训练好后,对所有的proposal,forward一遍来得到fc7 feature,保存最终的fc7特征及对应的proposal信息到文件中
- 训练SVM分类器。对某一个特定的类,把跟属于这个类的ground truth的bounding box的IoU大于阈值的原始提取的proposal标为正样本,其余标为负样本,得到新的一个文件(加上之前得到的fc7特征信息)。用这个文件去训练这一个类的SVM。同样的方法,循环训好其他类别的分类器。
- 用CNN得到的pool5的特征和bounding box的ground truth来训练bounding box regression,只对那些跟ground truth的IoU超过某个阈值的proposal进行训练,其余的不参与。
- Test的过程:
- 对给定的一张图片,通过Selective Search得到2000个Proposals
- 每一个Proposal都经过已经训练好的CNN网络, 得到fc7层的features,4096-dimension,即2000*4096
- 用SVM分类器(4096K)得到相应的score,即2000K
- 用CNN中pool5的特征,利用已经训练好的权值,得到bounding box的修正值,原先的proposal经过修正得到新的proposal的位置
- 对每一类别的scores,进行non-maximum suppression。具体来讲,对于2000*K中的每一列,进行nms。对于特定的这一列(这一类),选取值最大的对应的proposal,计算其他proposal跟此proposal的IOU,剔除那些重合很多的proposal。再从剩下的proposal里选取值最大的,然后再进行剔除,如此反复进行,直到没有剩下的proposal。K列(K类)都进行这样的操作,即可得到最终的bounding box和每一个bounding box对应的类别及其score值。