RPN的实现之神经网络部分的实现
RPN的框架:
-
图解
- 上支路是所有anchor的修正量(4*9)
- 下支路是前景背景9个anchor的分类得分(前景 背景)
-
rpn_match
- label为1的anchor: 当一个anchor与真实bounding box的最大IOU超过阈值Vt1(0.7)
- label为-1的anchor : 当一个anchor与真实bounding box的最大IOU低于阈值Vt2(0.3)
- label为0的anchor : 当一个anchor与真实bounding box的最大IOU介于Vt2与Vt1之间
- Negative anchor 与 Positive anchor 的数量之和是一个人为设置的常数
-
rpn_bbox
- Input_rpn_bbox 是anchor和真实bbox之间的偏移量,RPN网络计算的也是偏移量!
- 只有positive anchor才有对应的Input_rpn_bbox
ResNet
- block
- 保证跳远连接层和最后一层输入层的长宽以及通道数一样,可以实现相加操作
- 保证跳远连接层和最后一层输入层的长宽以及通道数一样,可以实现相加操作
- 架构
import keras.layers as KL
from keras.models import Model
import keras.backend as K
import tensorflow as tf
构建block
def building_block(filters,block):
if block !=0 :
stride=1
else:
stride=2
def f(x):
# 主通路
y=KL.Conv2D(filters,(1,1),strides=stride)(x)
y=KL.BatchNormalization(axis=3)(y)
y=KL.Activation("relu")(y)
y=KL.Conv2D(filters,(3,3),padding<