def _decode_block_string(self, block_string): """Gets a block through a string notation of arguments.""" assert isinstance(block_string, str) ops = block_string.split('_') options = {} for op in ops: splits = re.split(r'(\d.*)', op) if len(splits) >= 2: key, value = splits[:2] options[key] = value if 's' not in options or len(options['s']) != 2: raise ValueError('Strides options should be a pair of integers.') return efficientnet_model.BlockArgs( kernel_size=int(options['k']), num_repeat=int(options['r']), input_filters=int(options['i']), output_filters=int(options['o']), expand_ratio=int(options['e']), id_skip=('noskip' not in block_string), se_ratio=float(options['se']) if 'se' in options else None, strides=[int(options['s'][0]), int(options['s'][1])], conv_type=int(options['c']) if 'c' in options else 0, fused_conv=int(options['f']) if 'f' in options else 0, super_pixel=int(options['p']) if 'p' in options else 0, condconv=('cc' in block_string))
def test_reduction_endpoint_with_single_block_without_sp(self): """Test reduction point with single block/layer.""" images = tf.zeros((10, 128, 128, 3), dtype=tf.float32) global_params = efficientnet_model.GlobalParams( 1.0, 1.0, 0, 'channels_last', num_classes=10, batch_norm=utils.TpuBatchNormalization) blocks_args = [ efficientnet_model.BlockArgs(kernel_size=3, num_repeat=1, input_filters=3, output_filters=6, expand_ratio=6, id_skip=False, strides=[2, 2], se_ratio=0.8, conv_type=0, fused_conv=0, super_pixel=0) ] model = efficientnet_model.Model(blocks_args, global_params) _ = model(images, training=True) self.assertIn('reduction_1', model.endpoints) # single block should have one and only one reduction endpoint self.assertNotIn('reduction_2', model.endpoints)
def test_bottleneck_block_with_superpixel_layer(self): """Test for creating a model with fused bottleneck block arguments.""" images = tf.zeros((10, 128, 128, 3), dtype=tf.float32) global_params = efficientnet_model.GlobalParams( 1.0, 1.0, 0, 'channels_last', num_classes=10, batch_norm=utils.TpuBatchNormalization) blocks_args = [ efficientnet_model.BlockArgs(kernel_size=3, num_repeat=3, input_filters=3, output_filters=6, expand_ratio=6, id_skip=True, strides=[2, 2], conv_type=0, fused_conv=0, super_pixel=1) ] model = efficientnet_model.Model(blocks_args, global_params) outputs = model(images, training=True) self.assertEqual((10, 10), outputs[0].shape)
def test_variables(self): """Test for variables in blocks to be included in `model.variables`.""" images = tf.zeros((10, 128, 128, 3), dtype=tf.float32) global_params = efficientnet_model.GlobalParams( 1.0, 1.0, 0, 'channels_last', num_classes=10, batch_norm=utils.TpuBatchNormalization) blocks_args = [ efficientnet_model.BlockArgs(kernel_size=3, num_repeat=3, input_filters=3, output_filters=6, expand_ratio=6, id_skip=False, strides=[2, 2], se_ratio=0.8, conv_type=0, fused_conv=0, super_pixel=0) ] model = efficientnet_model.Model(blocks_args, global_params) _ = model(images, training=True) var_names = {var.name for var in model.variables} self.assertIn('model/blocks_0/conv2d/kernel:0', var_names)