def _get_mobilenet_conv_no_last_stride_defs(conv_depth_ratio_in_percentage):
  if conv_depth_ratio_in_percentage not in [25, 50, 75, 100]:
    raise ValueError(
        'Only the following ratio percentages are supported: 25, 50, 75, 100')
  conv_depth_ratio_in_percentage = float(conv_depth_ratio_in_percentage) / 100.0
  channels = np.array([
      32, 64, 128, 128, 256, 256, 512, 512, 512, 512, 512, 512, 1024, 1024
  ], dtype=np.float32)
  channels = (channels * conv_depth_ratio_in_percentage).astype(np.int32)
  return [
      mobilenet_v1.Conv(kernel=[3, 3], stride=2, depth=channels[0]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[1]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=2, depth=channels[2]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[3]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=2, depth=channels[4]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[5]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=2, depth=channels[6]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[7]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[8]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[9]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[10]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[11]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[12]),
      mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=channels[13])
  ]
Exemplo n.º 2
0
    def testBuildCustomNetworkUsingConvDefs(self):
        batch_size = 5
        height, width = 224, 224
        conv_defs = [
            mobilenet_v1.Conv(kernel=[3, 3], stride=2, depth=32),
            mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=64),
            mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=2, depth=128),
            mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=512)
        ]

        inputs = tf.random_uniform((batch_size, height, width, 3))
        net, end_points = mobilenet_v1.mobilenet_v1_base(
            inputs, final_endpoint='Conv2d_3_pointwise', conv_defs=conv_defs)
        self.assertTrue(net.op.name.startswith('MobilenetV1/Conv2d_3'))
        self.assertListEqual(net.get_shape().as_list(),
                             [batch_size, 56, 56, 512])
        expected_endpoints = ['Conv2d_0',
                              'Conv2d_1_depthwise', 'Conv2d_1_pointwise',
                              'Conv2d_2_depthwise', 'Conv2d_2_pointwise',
                              'Conv2d_3_depthwise', 'Conv2d_3_pointwise']
        self.assertItemsEqual(end_points.keys(), expected_endpoints)
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================

"""Mobilenet v1 Faster R-CNN implementation."""
import tensorflow as tf

from object_detection.meta_architectures import faster_rcnn_meta_arch
from object_detection.utils import shape_utils
from nets import mobilenet_v1

slim = tf.contrib.slim


_MOBILENET_V1_100_CONV_NO_LAST_STRIDE_DEFS = [
    mobilenet_v1.Conv(kernel=[3, 3], stride=2, depth=32),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=64),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=2, depth=128),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=128),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=2, depth=256),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=256),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=2, depth=512),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=512),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=512),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=512),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=512),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=512),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=1024),
    mobilenet_v1.DepthSepConv(kernel=[3, 3], stride=1, depth=1024)
]