Skip to content

Instantly share code, notes, and snippets.

@joyhuang9473
Last active February 14, 2019 07:22
Show Gist options
  • Save joyhuang9473/90d879cd5b80276d054c1ebd406b5901 to your computer and use it in GitHub Desktop.
Save joyhuang9473/90d879cd5b80276d054c1ebd406b5901 to your computer and use it in GitHub Desktop.
- [export_inference_graph.py](https://github.com/tensorflow/models/blob/master/research/object_detection/export_inference_graph.py#L143)
- exporter.export_inference_graph
- [exporter.py](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L414)
- export_inference_graph()
- detection_model = model_builder.build [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L438)
- [builders/model_builder.py](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L101)
- build(model_config, is_training, add_summaries=True)
- _build_ssd_model(model_config.ssd, is_training, add_summaries) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L119)
- feature_extractor = _build_ssd_feature_extractor( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L233)
- conv_hyperparams = hyperparams_builder.build( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L159)
- feature_extractor_class = SSD_FEATURE_EXTRACTOR_CLASS_MAP[feature_type] [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L172)
- 'ssd_mobilenet_v2': SSDMobileNetV2FeatureExtractor, [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L64)
- [models/ssd_mobilenet_v2_feature_extractor.py](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py#L31)
- kwargs.update({ [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L197)
- return feature_extractor_class(**kwargs) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L212)
- image_resizer_fn = image_resizer_builder.build(ssd_config.image_resizer) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L261)
- [builders/image_resizer_builder.py](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/image_resizer_builder.py#L52)
- build(image_resizer_config)
- keep_aspect_ratio_config = image_resizer_config.keep_aspect_ratio_resizer [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/image_resizer_builder.py#L77)
- method = _tf_resize_method(keep_aspect_ratio_config.resize_method) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/image_resizer_builder.py#L81)
-
```
image_resizer_fn = functools.partial(
preprocessor.resize_to_range,
min_dimension=keep_aspect_ratio_config.min_dimension,
max_dimension=keep_aspect_ratio_config.max_dimension,
method=method,
pad_to_max_dimension=keep_aspect_ratio_config.pad_to_max_dimension,
per_channel_pad_value=per_channel_pad_value)
```
[link] https://github.com/tensorflow/models/blob/master/research/object_detection/builders/image_resizer_builder.py#L86
- [core/preprocessor.py](https://github.com/tensorflow/models/blob/master/research/object_detection/core/preprocessor.py#L2178)
- resize_to_range()
- new_size = _compute_new_dynamic_size(image, min_dimension, max_dimension) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/core/preprocessor.py#L2235)
- _compute_new_dynamic_size(image, min_dimension, max_dimension) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/core/preprocessor.py#L2140)
-
```
new_size = tf.cond(
tf.to_float(tf.reduce_max(large_size)) > max_dimension,
lambda: small_size, lambda: large_size)
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/core/preprocessor.py#L2170)
- new_image = tf.image.resize_images [link](https://github.com/tensorflow/models/blob/master/research/object_detection/core/preprocessor.py#L2236)
- result = [new_image] [link](https://github.com/tensorflow/models/blob/master/research/object_detection/core/preprocessor.py#L2255)
- result.append(new_size) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/core/preprocessor.py#L2269)
- return result
- ssd_meta_arch_fn = ssd_meta_arch.SSDMetaArch [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L280)
- return ssd_meta_arch_fn( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L283)
- _export_inference_graph [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L445)
- outputs, placeholder_tensor = _build_detection_graph( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L354)
- placeholder_tensor, input_tensors = input_placeholder_fn_map[input_type]( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L322)
- 'image_tensor': _image_tensor_input_placeholder, [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L165)
- input_tensor = tf.placeholder( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L113)
- outputs = _get_outputs_from_inputs( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L324)
- preprocessed_inputs, true_image_shapes = detection_model.preprocess(inputs) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L302)
- [meta_architectures/ssd_meta_arch.py](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L259)
- def preprocess(self, inputs): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L447)
- outputs = shape_utils.static_or_dynamic_map_fn( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L474)
- [utils/shape_utils.py](https://github.com/tensorflow/models/blob/master/research/object_detection/utils/shape_utils.py#L177)
- resized_inputs = outputs[0] [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L478)
- true_image_shapes = outputs[1] link(https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L479)
-
```
return (self._feature_extractor.preprocess(resized_inputs),
true_image_shapes)
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L481)
- [models/ssd_mobilenet_v2_feature_extractor.py](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py#L31)
- def preprocess(self, resized_inputs): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py#L78)
- return (2.0 / 255.0) * resized_inputs - 1.0 [link](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py#L91)
- output_tensors = detection_model.predict( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L303)
- [meta_architectures/ssd_meta_arch.py](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L259)
- def predict(self, preprocessed_inputs, true_image_shapes): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L523)
- feature_maps = self._feature_extractor.extract_features( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L566)
- feature_map_spatial_dims = self._get_feature_map_spatial_dims( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L569)
- def _get_feature_map_spatial_dims(self, feature_maps): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L602)
- return [(shape[1], shape[2]) for shape in feature_map_shapes] [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L616)
-
```
self._anchors = box_list_ops.concatenate(
self._anchor_generator.generate(
feature_map_spatial_dims,
im_height=image_shape[1],
im_width=image_shape[2]))
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L573)
- [builders/model_builder.py](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L283)
- anchor_generator = anchor_generator_builder.build( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/model_builder.py#L244)
- [builders/anchor_generator_builder.py](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/anchor_generator_builder.py#L24)
- ssd_anchor_generator_config = anchor_generator_config.ssd_anchor_generator [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/anchor_generator_builder.py#L57)
-
```
return multiple_grid_anchor_generator.create_ssd_anchors(
num_layers=ssd_anchor_generator_config.num_layers,
min_scale=ssd_anchor_generator_config.min_scale,
max_scale=ssd_anchor_generator_config.max_scale,
scales=[float(scale) for scale in ssd_anchor_generator_config.scales],
aspect_ratios=ssd_anchor_generator_config.aspect_ratios,
interpolated_scale_aspect_ratio=(
ssd_anchor_generator_config.interpolated_scale_aspect_ratio),
base_anchor_size=[
ssd_anchor_generator_config.base_anchor_height,
ssd_anchor_generator_config.base_anchor_width
],
anchor_strides=anchor_strides,
anchor_offsets=anchor_offsets,
reduce_boxes_in_lowest_layer=(
ssd_anchor_generator_config.reduce_boxes_in_lowest_layer))
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/anchor_generator_builder.py#L66)
- [anchor_generators/multiple_grid_anchor_generator.py](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L244)
- return MultipleGridAnchorGenerator(box_specs_list, base_anchor_size, [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L333)
- class MultipleGridAnchorGenerator(anchor_generator.AnchorGenerator): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L38)
- def _generate(self, feature_map_shape_list, im_height=1, im_width=1): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L140)
- anchor_grid_list = [] [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L210)
-
```
tiled_anchors = grid_anchor_generator.tile_anchors(
grid_height=grid_size[0],
grid_width=grid_size[1],
scales=scales,
aspect_ratios=aspect_ratios,
base_anchor_size=base_anchor_size,
anchor_stride=stride,
anchor_offset=offset)
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L223)
- [anchor_generators/grid_anchor_generator.py](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/grid_anchor_generator.py#L132)
- def tile_anchors(grid_height, [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/grid_anchor_generator.py#L132)
- bbox_corners = _center_size_bbox_to_corners_bbox(bbox_centers, bbox_sizes) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/grid_anchor_generator.py#L190)
-
```
return tf.concat([centers - .5 * sizes, centers + .5 * sizes], 1)
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/grid_anchor_generator.py#L205)
- return box_list.BoxList(bbox_corners) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/grid_anchor_generator.py#L190)
- [core/box_list.py](https://github.com/tensorflow/models/blob/master/research/object_detection/core/box_list.py#L40)
-
```
num_anchors_in_layer = tiled_anchors.num_boxes_static()
if num_anchors_in_layer is None:
num_anchors_in_layer = tiled_anchors.num_boxes()
```
- [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L234)
- [core/box_list.py](https://github.com/tensorflow/models/blob/master/research/object_detection/core/box_list.py#L40)
- return self.data['boxes'].get_shape()[0].value [link](https://github.com/tensorflow/models/blob/master/research/object_detection/core/box_list.py#L76)
- anchor_grid_list.append(tiled_anchors) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L239)
- return anchor_grid_list [link](https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiple_grid_anchor_generator.py#L239)
- [models/ssd_mobilenet_v2_feature_extractor.py](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py#L31)
- def extract_features(self, preprocessed_inputs): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py#L93)
-
```
_, image_features = mobilenet_v2.mobilenet_base(
ops.pad_to_multiple(preprocessed_inputs, self._pad_to_multiple),
final_endpoint='layer_19',
depth_multiplier=self._depth_multiplier,
use_explicit_padding=self._use_explicit_padding,
scope=scope)
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py#L122)
- [utils/ops.py](https://github.com/tensorflow/models/blob/master/research/object_detection/utils/ops.py#L147)
- return feature_maps.values() [link](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py#L136)
- postprocessed_tensors = detection_model.postprocess( [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L305)
- [meta_architectures/ssd_meta_arch.py](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L259)
- def postprocess(self, prediction_dict, true_image_shapes): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L618)
- detection_boxes, detection_keypoints = self._batch_decode(box_encodings) [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L671)
- def _batch_decode(self, box_encodings): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L1071)
-
```
tiled_anchor_boxes = tf.tile(
tf.expand_dims(self.anchors.get(), 0), [batch_size, 1, 1])
tiled_anchors_boxlist = box_list.BoxList(
tf.reshape(tiled_anchor_boxes, [-1, 4]))
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L1088)
-
```
decoded_boxes = self._box_coder.decode(
tf.reshape(box_encodings, [-1, self._box_coder.code_size]),
tiled_anchors_boxlist)
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L1092)
- [builders/box_coder_builder.py](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/box_coder_builder.py#L24)
- return faster_rcnn_box_coder.FasterRcnnBoxCoder(scale_factors=[ [link](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/box_coder_builder.py#L41)
- [box_coders/faster_rcnn_box_coder.py](https://github.com/tensorflow/models/blob/master/research/object_detection/box_coders/faster_rcnn_box_coder.py#L39)
- def _decode(self, rel_codes, anchors): [link](https://github.com/tensorflow/models/blob/master/research/object_detection/box_coders/faster_rcnn_box_coder.py#L92)
-
```
ycenter_a, xcenter_a, ha, wa = anchors.get_center_coordinates_and_sizes()
ty, tx, th, tw = tf.unstack(tf.transpose(rel_codes))
if self._scale_factors:
ty /= self._scale_factors[0]
tx /= self._scale_factors[1]
th /= self._scale_factors[2]
tw /= self._scale_factors[3]
w = tf.exp(tw) * wa
h = tf.exp(th) * ha
ycenter = ty * ha + ycenter_a
xcenter = tx * wa + xcenter_a
ymin = ycenter - h / 2.
xmin = xcenter - w / 2.
ymax = ycenter + h / 2.
xmax = xcenter + w / 2.
return box_list.BoxList(tf.transpose(tf.stack([ymin, xmin, ymax, xmax])))
```
[link](https://github.com/tensorflow/models/blob/master/research/object_detection/box_coders/faster_rcnn_box_coder.py#L102)
- return detection_dict [link](https://github.com/tensorflow/models/blob/master/research/object_detection/meta_architectures/ssd_meta_arch.py#L716)
- return add_output_tensor_nodes(postprocessed_tensors, [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L307)
- outputs = {} [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L215)
- return outputs [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L233)
- return outputs, placeholder_tensor [link](https://github.com/tensorflow/models/blob/master/research/object_detection/exporter.py#L334)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment