def __init__(self, efficient_det): super(EfficientDet, self).__init__() self.heads = Config.heads self.head_conv = Config.head_conv[efficient_det] self.efficient_net = get_efficient_net( width_coefficient=Config.get_width_coefficient(efficient_det), depth_coefficient=Config.get_depth_coefficient(efficient_det), dropout_rate=Config.get_dropout_rate(efficient_det)) self.bifpn = BiFPN(output_channels=Config.get_w_bifpn(efficient_det), layers=Config.get_d_bifpn(efficient_det)) self.transpose = TransposeLayer( out_channels=Config.get_w_bifpn(efficient_det)) for head in self.heads: classes = self.heads[head] if self.head_conv > 0: fc = tf.keras.Sequential([ tf.keras.layers.Conv2D(filters=self.head_conv, kernel_size=(3, 3), strides=1, padding="same", use_bias=True), tf.keras.layers.ReLU(), tf.keras.layers.Conv2D(filters=classes, kernel_size=(1, 1), strides=1, padding="same", use_bias=True) ]) else: fc = tf.keras.layers.Conv2D(filters=classes, kernel_size=(1, 1), strides=1, padding="same", use_bias=True) self.__setattr__(head, fc)
def __init__(self): super(EfficientDet, self).__init__() self.backbone = get_efficient_net( width_coefficient=Config.get_width_coefficient(), depth_coefficient=Config.get_depth_coefficient(), dropout_rate=Config.get_dropout_rate()) self.bifpn = BiFPN(output_channels=Config.get_w_bifpn(), layers=Config.get_d_bifpn()) self.prediction_net = BoxClassPredict( filters=Config.get_w_bifpn(), depth=Config.get_d_class(), num_classes=Config.num_classes, num_anchors=Config.num_anchor_per_pixel)