Last active
February 14, 2019 07:22
-
-
Save joyhuang9473/90d879cd5b80276d054c1ebd406b5901 to your computer and use it in GitHub Desktop.
Trace code in export_inference_graph.py https://github.com/tensorflow/models/tree/master/research/object_detection
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- [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