Пример #1
0
    def _residual_stack(self, inputs, config, name):
        self._default_dict['activation'] = self._get_activation(
            config.activation)
        self._default_dict['name'] = f"{name}_residual_down"
        if self._dilate:
            self._default_dict['dilation_rate'] = config.dilation_rate
            if config.repetitions < 8:
                config.repetitions += 2
        else:
            self._default_dict['dilation_rate'] = 1

        x = nn_blocks.DarkResidual(filters=config.filters,
                                   downsample=True,
                                   **self._default_dict)(inputs)

        dilated_reps = config.repetitions - self._default_dict[
            'dilation_rate'] // 2 - 1
        for i in range(dilated_reps):
            self._default_dict['name'] = f"{name}_{i}"
            x = nn_blocks.DarkResidual(filters=config.filters,
                                       **self._default_dict)(x)

        for i in range(dilated_reps, config.repetitions - 1):
            self._default_dict[
                'dilation_rate'] = self._default_dict['dilation_rate'] // 2
            self._default_dict[
                'name'] = f"{name}_{i}_degrided_{self._default_dict['dilation_rate']}"
            x = nn_blocks.DarkResidual(filters=config.filters,
                                       **self._default_dict)(x)

        self._default_dict['activation'] = self._activation
        self._default_dict['name'] = None
        self._default_dict['dilation_rate'] = 1
        return x
Пример #2
0
 def _residual_stack(self, inputs, config, name):
   self._default_dict['activation'] = self._get_activation(config.activation)
   self._default_dict['name'] = f"{name}_residual_down"
   x = nn_blocks.DarkResidual(
       filters=config.filters, downsample=True, **self._default_dict)(
           inputs)
   for i in range(config.repetitions - 1):
     self._default_dict['name'] = f"{name}_{i}"
     x = nn_blocks.DarkResidual(
         filters=config.filters, **self._default_dict)(
             x)
   self._default_dict['activation'] = self._activation
   self._default_dict['name'] = None
   return x
Пример #3
0
    def _csp_stack(self, inputs, config, name):
        if config.bottleneck:
            csp_filter_scale = 1
            residual_filter_scale = 2
            scale_filters = 1
        else:
            csp_filter_scale = 2
            residual_filter_scale = 1
            scale_filters = 2
        self._default_dict['activation'] = self._get_activation(
            config.activation)
        self._default_dict['name'] = f"{name}_csp_down"
        if self._dilate:
            self._default_dict['dilation_rate'] = config.dilation_rate
            #config.repetitions += 1
        else:
            self._default_dict['dilation_rate'] = 1
            #config.repetitions += 1

        # swap/add dialation
        x, x_route = nn_blocks.CSPRoute(filters=config.filters,
                                        filter_scale=csp_filter_scale,
                                        downsample=True,
                                        **self._default_dict)(inputs)

        #print(config.repetitions - self._default_dict["dilation_rate"]//2)
        dilated_reps = config.repetitions - self._default_dict[
            'dilation_rate'] // 2
        for i in range(dilated_reps):
            self._default_dict['name'] = f"{name}_{i}"
            x = nn_blocks.DarkResidual(filters=config.filters // scale_filters,
                                       filter_scale=residual_filter_scale,
                                       **self._default_dict)(x)

        for i in range(dilated_reps, config.repetitions):
            self._default_dict[
                'dilation_rate'] = self._default_dict['dilation_rate'] // 2
            self._default_dict[
                'name'] = f"{name}_{i}_degrided_{self._default_dict['dilation_rate']}"
            x = nn_blocks.DarkResidual(filters=config.filters // scale_filters,
                                       filter_scale=residual_filter_scale,
                                       **self._default_dict)(x)

        self._default_dict['name'] = f"{name}_csp_connect"
        output = nn_blocks.CSPConnect(filters=config.filters,
                                      filter_scale=csp_filter_scale,
                                      **self._default_dict)([x, x_route])
        self._default_dict['activation'] = self._activation
        self._default_dict['name'] = None
        return output
Пример #4
0
  def test_gradient_pass_though(self, filters, width, height, downsample):
    loss = ks.losses.MeanSquaredError()
    optimizer = ks.optimizers.SGD()
    test_layer = nn_blocks.DarkResidual(filters, downsample=downsample)

    if downsample:
      mod = 2
    else:
      mod = 1

    init = tf.random_normal_initializer()
    x = tf.Variable(
        initial_value=init(shape=(1, width, height, filters), dtype=tf.float32))
    y = tf.Variable(
        initial_value=init(
            shape=(1, int(np.ceil(width / mod)), int(np.ceil(height / mod)),
                   filters),
            dtype=tf.float32))

    with tf.GradientTape() as tape:
      x_hat = test_layer(x)
      grad_loss = loss(x_hat, y)
    grad = tape.gradient(grad_loss, test_layer.trainable_variables)
    optimizer.apply_gradients(zip(grad, test_layer.trainable_variables))

    self.assertNotIn(None, grad)
Пример #5
0
  def _csp_stack(self, inputs, config, name):
    if config.bottleneck:
      csp_filter_scale = 1
      residual_filter_scale = 2
      scale_filters = 1
    else:
      csp_filter_scale = 2
      residual_filter_scale = 1
      scale_filters = 2
    self._default_dict['activation'] = self._get_activation(config.activation)
    self._default_dict['name'] = f"{name}_csp_down"
    x, x_route = nn_blocks.CSPRoute(
        filters=config.filters,
        filter_scale=csp_filter_scale,
        downsample=True,
        **self._default_dict)(
            inputs)
    for i in range(config.repetitions):
      self._default_dict['name'] = f"{name}_{i}"
      x = nn_blocks.DarkResidual(
          filters=config.filters // scale_filters,
          filter_scale=residual_filter_scale,
          **self._default_dict)(
              x)

    self._default_dict['name'] = f"{name}_csp_connect"
    output = nn_blocks.CSPConnect(
        filters=config.filters,
        filter_scale=csp_filter_scale,
        **self._default_dict)([x, x_route])
    self._default_dict['activation'] = self._activation
    self._default_dict['name'] = None
    return output
Пример #6
0
 def test_pass_through(self, width, height, filters, downsample):
   mod = 1
   if downsample:
     mod = 2
   x = ks.Input(shape=(width, height, filters))
   test_layer = nn_blocks.DarkResidual(filters=filters, downsample=downsample)
   outx = test_layer(x)
   print(outx)
   print(outx.shape.as_list())
   self.assertAllEqual(
       outx.shape.as_list(),
       [None, np.ceil(width / mod),
        np.ceil(height / mod), filters])
Пример #7
0
  def build_layer(self, layer_type, filters, filter_scale, count, stack_type,
                  downsample):
    if stack_type is not None:
      layers = []
      if layer_type == "residual":
        for _ in range(count):
          layers.append(
              nn_blocks.DarkResidual(
                  filters=filters // filter_scale, filter_scale=filter_scale))
      else:
        for _ in range(count):
          layers.append(nn_blocks.ConvBN(filters=filters))

      if stack_type == "model":
        layers = tf.keras.Sequential(layers=layers)
    else:
      layers = None

    stack = nn_blocks.CSPStack(
        filters=filters,
        filter_scale=filter_scale,
        downsample=downsample,
        model_to_wrap=layers)
    return stack