Loss3+Loss4 :用于训练 prediction_layer的网络参数
Loss1+Loss2 :用于训练 RPN的网络参数
1.prediction_layer解析
参数训练:通过Loss3+Loss4训练全连接层的参数
rol pooling:根据rois对net进行特征图裁剪为14*14的特征图,池化为7*7大小的特征图
特征扁平化:将[batch,height,weight,channel]特征图reshape为[batch,height*weight*channel]
其他:为全连接层
2.RPN网络解析
2.1 生成瞄点
2.2 卷积操作
将特征图通过卷积核(3*3@512)进行卷积,分别通过卷积核1(1*1@2*n n=9为每个图像特征点生成的瞄点数)生成特征图rpn_cls_score(形状[batch,height,weight,2*n]),前n为特征表示每个图像特征点对应的n个瞄点分类为背景类的得分,后n为特征表示每个图像特征点对应的n个瞄点分类为前景类的得分;卷积核2(1*1@4*n n=9为每个图像特征点生成的瞄点数)生成特征图rpn_bbox_pred(形状[batch,height,weight,4*n]),4*n个特征对应与net特征图像上每个点的n个瞄点的(△cent_x,△cent_y,△h,△w)
2.3 reshape层
将特征图rpn_cls_score(形状[batch,height,weight,2*n])reshape为rpn_cls_score_reshape(形状[batch,height*n,weight,2]),
二维特征分别为:瞄点分类为背景得分,瞄点分类为前景得分
2.4 soft max层
将rpn_cls_score_reshape通过soft max将得分转变为概率,(形状[batch,height*n,weight,2])
二维特征分别为:瞄点分类为背景概率,瞄点分类为前景概率
2.5 reshape层
将前一层的输出reshape为同rpn_cls_score相同的形状([batch,height,weight,2*n])
2*n维特征分别为:前n为特征表示每个图像特征点对应的n个瞄点分类为背景类的概率,后n为特征表示每个图像特征点对应的n个瞄点分类为前景类的概率
3.proposal_layer
说明:将瞄点anchors根据RPN网络预测进行调整,对越界瞄点进行修改,限定到特征图的大小,选取pre_nms_topN个前景得分最高的瞄点,进行NMS操作,后再选取前post_nms_topN个瞄点,并添加类标贴记为 blob
3.1将瞄点anchors根据rpn网络的rpn_bbox_pred进行调整,调整后的瞄点记为proposals
3.2将越界的proposals大小限定在特征图内
3.3取rpn_cls_prob后n维特征作(前景概率)记为scores
3.4获取概率最高的前pre_nms_topN个proposals,进行NMS(非极大值抑制)操作,去除部分瞄点
3.5取NMS后的前post_nms_topN个瞄点proposals,以及对应scores
3.6在proposals左侧添加一列值为0的特征,记为blob
blob.shape=(None,5)5个特征分别为:(0,x1,y1,x2,y2)
4.RPN网络与prediction_layer层的目标值的生成
4.1 RPN网络目标值的生成——anchor_target_layer
说明:首先构建未越界瞄点的labels,bbox_targets,bbox_inside_weights,bbox_outside_weights
再构建越界瞄点的labels,bbox_targets,bbox_inside_weights,bbox_outside_weights
最终生成所有瞄点的labels,bbox_targets,bbox_inside_weights,bbox_outside_weights
4.1.1去除越界的瞄点,构建瞄点对应的标签labels,默认-1
4.1.2计算瞄点与目标边框的IOU值,
将瞄点与多个目标边框的IOU最大值小于0.3的label置为0(背景点)
将每个目标边框与其相交的瞄点IOU值最大的多个瞄点的label置为1(前景点)
将与目标边框IOU大于0.7的瞄点的label置为1(前景点)
4.1.3前景点数如果大于128个,则随机将对应的m1(前景点数-128)个labels置-1
背景点数如果大于(256-前景点数)个,则随机将对应的m2(背景点数-(256-前景点数))个labels置-1
4.1.4计算瞄点与目标边框的偏差bbox_targets shape=[None,4](targets_dx, targets_dy, targets_dw, targets_dh)
4.1.5生成bbox_inside_weights shape=[None,4]将label=1的前景点对应值置为(1,1,1,1),其他均为(0,0,0,0)
生成bbox_outside_weights shape=[None,4] 将label=1的前景点对应值置为(a,a,a,a)a=1/(前景点+背景点个数和),
其他 均为(0,0,0,0)
4.1.6构建所有瞄点对应的标签(包括越界的瞄点),越界瞄点的label置为-1,
构建所有瞄点的目标边框(包括越界的瞄点),越界瞄点的bbox_targets值为0,
构建所有瞄点的目标边框输入权重(包括越界的瞄点),越界瞄点的bbox_inside_weights值为0,
构建所有瞄点的目标边框输出权重(包括越界的瞄点),越界瞄点的bbox_outside_weights值为0,
4.1.7修改形状
labels((1, 1, A * height, width))
bbox_targets((1, height, width, A * 4))
bbox_inside_weights((1, height, width, A * 4))
bbox_outside_weights((1, height, width, A * 4))
4.2 prediction_layer 目标值的生成——proposal_target_layer
说明:将与瞄点IOU值最大的目标边框作为瞄点的目标边框,随机选择N1个IOU大于0.5的作为前景瞄点,0.1<IOU<0.5的作为背景瞄点,将背景瞄点的label置为0,生成训练需要的目标值
4.2.1 计算经proposal_layer调整的 瞄点all_rois(对应图上的rois)与目标边框的IOU值,overlaps[i,j]为第i个all_rois与g第j个gt_boxes的IOU值
4.2.2 将每个瞄点与多个目标边框的IOU值最大的作为该瞄点的目标边框
4.2.3 将每个瞄点与对应的目标边框IOU大于0.5的作为前景瞄点,0.1<IOU<0.5的作为背景瞄点
4.2.4 随机选取N1个前景瞄点,N2个背景瞄点,并获取对应目标边框的所属类,将N2个背景瞄点对应的所属类置为0
得到经过随机选择的N1+N2 瞄点,记为rois,并从rois_score中取对应的瞄点得分值,记为roi_scores,以及对应的所属类,记为labels
4.2.5 计算瞄点需要的偏移量,并将对应瞄点的所属类进行堆叠,生成bbox_target_data.shape=[None,5],(label,dx,dy,dw,dh)
4.2.6 生成形状为(瞄点数, 4 * num_classes)的两个变量bbox_targets(最终需要的边框目标值),bbox_inside_weights
将bbox_target_data中所属类labels>0的瞄点的(dx,dy,dw,dh),写入bbox_targets中,并将bbox_inside_weights中对应位置置为1
最终得到经过筛选的 labels, rois, roi_scores, bbox_targets, bbox_inside_weights