in models/vision/detection/awsdet/models/bbox_heads/bbox_head.py [0:0]
def __init__(self,
num_classes,
pool_size=(7, 7), # ROI feature size
target_means=(0., 0., 0., 0.),
target_stds=(0.1, 0.1, 0.2, 0.2),
min_confidence=0.7,
nms_threshold=0.3,
max_instances=100,
num_rcnn_deltas=512,
weight_decay=1e-4,
use_conv=False,
use_bn=False,
use_smooth_l1=True,
label_smoothing=0.0,
soft_nms_sigma=0.0,
reg_class_agnostic=False,
**kwags):
super(BBoxHead, self).__init__(**kwags)
self.num_classes = num_classes
self.pool_size = tuple(pool_size)
self.target_means = target_means
self.target_stds = target_stds
self.min_confidence = min_confidence
self.nms_threshold = nms_threshold
self.max_instances = max_instances
self.num_rcnn_deltas=num_rcnn_deltas
self.rcnn_class_loss = losses.rcnn_class_loss
self.rcnn_bbox_loss = functools.partial(losses.rcnn_bbox_loss, use_smooth_l1=use_smooth_l1)
self.use_conv = use_conv
self.use_bn = (use_bn and not use_conv)
self.label_smoothing = label_smoothing
self.soft_nms_sigma = soft_nms_sigma
self.reg_class_agnostic = reg_class_agnostic
self.num_reg_outputs = num_classes * 4 if not reg_class_agnostic else 4
roi_feature_size=(7, 7, 256)
if not use_conv:
self._flatten_layer = layers.Flatten()
self._flatten_bn = layers.BatchNormalization(scale=True, epsilon=1e-5, name='flatten_bn')
self._fc1 = layers.Dense(1024, name='fc1', activation=None, use_bias=False,
kernel_initializer='glorot_uniform',
kernel_regularizer=tf.keras.regularizers.l2(weight_decay),
input_shape=[roi_feature_size]
)
self._fc1_bn = layers.BatchNormalization(name='fc1_bn')
self._fc2 = layers.Dense(1024, name='fc2', activation=None, use_bias=False,
kernel_initializer='glorot_uniform',
kernel_regularizer=tf.keras.regularizers.l2(weight_decay),
)
self._fc2_bn = layers.BatchNormalization(name='fc2_bn')
self.rcnn_class_logits = layers.Dense(num_classes,
kernel_initializer='glorot_uniform',
kernel_regularizer=tf.keras.regularizers.l2(weight_decay),
name='rcnn_class_logits')
self.rcnn_delta_fc = layers.Dense(self.num_reg_outputs,
kernel_initializer='glorot_uniform',
kernel_regularizer=tf.keras.regularizers.l2(weight_decay),
name='rcnn_bbox_fc')
else:
self._conv1 = layers.Conv2D(1024, (3, 3), padding='same',
kernel_initializer=tf.keras.initializers.TruncatedNormal(mean=0.0, stddev=0.01),
kernel_regularizer=tf.keras.regularizers.l2(weight_decay),
activation='relu',
name='rcnn_conv_1')
self._conv2 = layers.Conv2D(1024, self.pool_size, padding='valid',
kernel_initializer=tf.keras.initializers.TruncatedNormal(mean=0.0, stddev=0.01),
kernel_regularizer=tf.keras.regularizers.l2(weight_decay),
activation='relu',
name='rcnn_conv_2')
self.rcnn_class_logits = layers.Conv2D(num_classes, (1, 1),
kernel_initializer=tf.keras.initializers.TruncatedNormal(mean=0.0, stddev=0.01),
kernel_regularizer=tf.keras.regularizers.l2(weight_decay),
activation='linear',
name='rcnn_class_logit')
self.rcnn_delta_cv = layers.Conv2D(self.num_reg_outputs, (1, 1),
kernel_initializer=tf.keras.initializers.TruncatedNormal(mean=0.0, stddev=0.01),
kernel_regularizer=tf.keras.regularizers.l2(weight_decay),
activation='linear',
name='rcnn_delta_cv')