Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ModelZoo
ResNet50_tensorflow
Commits
3f3135bb
"docs/vscode:/vscode.git/clone" did not exist on "2ee3215949d8f2d3141c2340d8e4d24ec94b2384"
Commit
3f3135bb
authored
Jul 29, 2020
by
syiming
Browse files
add test for multilevel
parent
800a4c00
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
123 additions
and
2 deletions
+123
-2
research/object_detection/meta_architectures/faster_rcnn_meta_arch_test_lib.py
...tion/meta_architectures/faster_rcnn_meta_arch_test_lib.py
+123
-2
No files found.
research/object_detection/meta_architectures/faster_rcnn_meta_arch_test_lib.py
View file @
3f3135bb
...
@@ -112,6 +112,42 @@ class FakeFasterRCNNKerasFeatureExtractor(
...
@@ -112,6 +112,42 @@ class FakeFasterRCNNKerasFeatureExtractor(
3
,
kernel_size
=
1
,
padding
=
'SAME'
,
name
=
name
+
'_layer2'
)])
3
,
kernel_size
=
1
,
padding
=
'SAME'
,
name
=
name
+
'_layer2'
)])
class
FakeFasterRCNNKerasMultilevelFeatureExtractor
(
faster_rcnn_meta_arch
.
FasterRCNNKerasFeatureExtractor
):
"""Fake feature extractor to use in tests."""
def
__init__
(
self
):
super
(
FakeFasterRCNNKerasMultilevelFeatureExtractor
,
self
).
__init__
(
is_training
=
False
,
first_stage_features_stride
=
32
,
weight_decay
=
0.0
)
def
preprocess
(
self
,
resized_inputs
):
return
tf
.
identity
(
resized_inputs
)
def
get_proposal_feature_extractor_model
(
self
,
name
):
class
ProposalFeatureExtractor
(
tf
.
keras
.
Model
):
"""Dummy proposal feature extraction."""
def
__init__
(
self
,
name
):
super
(
ProposalFeatureExtractor
,
self
).
__init__
(
name
=
name
)
self
.
conv
=
None
def
build
(
self
,
input_shape
):
self
.
conv
=
tf
.
keras
.
layers
.
Conv2D
(
3
,
kernel_size
=
3
,
name
=
'layer1'
)
self
.
conv_1
=
tf
.
keras
.
layers
.
Conv2D
(
3
,
kernel_size
=
3
,
name
=
'layer1'
)
def
call
(
self
,
inputs
):
output_1
=
self
.
conv
(
inputs
)
output_2
=
self
.
conv_1
(
output_1
)
return
[
output_1
,
output_2
]
return
ProposalFeatureExtractor
(
name
=
name
)
class
FasterRCNNMetaArchTestBase
(
test_case
.
TestCase
,
parameterized
.
TestCase
):
class
FasterRCNNMetaArchTestBase
(
test_case
.
TestCase
,
parameterized
.
TestCase
):
"""Base class to test Faster R-CNN and R-FCN meta architectures."""
"""Base class to test Faster R-CNN and R-FCN meta architectures."""
...
@@ -234,7 +270,8 @@ class FasterRCNNMetaArchTestBase(test_case.TestCase, parameterized.TestCase):
...
@@ -234,7 +270,8 @@ class FasterRCNNMetaArchTestBase(test_case.TestCase, parameterized.TestCase):
calibration_mapping_value
=
None
,
calibration_mapping_value
=
None
,
share_box_across_classes
=
False
,
share_box_across_classes
=
False
,
return_raw_detections_during_predict
=
False
,
return_raw_detections_during_predict
=
False
,
output_final_box_features
=
False
):
output_final_box_features
=
False
,
multi_level
=
False
):
use_keras
=
tf_version
.
is_tf2
()
use_keras
=
tf_version
.
is_tf2
()
def
image_resizer_fn
(
image
,
masks
=
None
):
def
image_resizer_fn
(
image
,
masks
=
None
):
"""Fake image resizer function."""
"""Fake image resizer function."""
...
@@ -273,7 +310,10 @@ class FasterRCNNMetaArchTestBase(test_case.TestCase, parameterized.TestCase):
...
@@ -273,7 +310,10 @@ class FasterRCNNMetaArchTestBase(test_case.TestCase, parameterized.TestCase):
use_matmul_gather
=
use_matmul_gather_in_matcher
)
use_matmul_gather
=
use_matmul_gather_in_matcher
)
if
use_keras
:
if
use_keras
:
fake_feature_extractor
=
FakeFasterRCNNKerasFeatureExtractor
()
if
multi_level
:
fake_feature_extractor
=
FakeFasterRCNNKerasMultilevelFeatureExtractor
()
else
:
fake_feature_extractor
=
FakeFasterRCNNKerasFeatureExtractor
()
else
:
else
:
fake_feature_extractor
=
FakeFasterRCNNFeatureExtractor
()
fake_feature_extractor
=
FakeFasterRCNNFeatureExtractor
()
...
@@ -529,6 +569,87 @@ class FasterRCNNMetaArchTestBase(test_case.TestCase, parameterized.TestCase):
...
@@ -529,6 +569,87 @@ class FasterRCNNMetaArchTestBase(test_case.TestCase, parameterized.TestCase):
self
.
assertTrue
(
np
.
all
(
np
.
less_equal
(
anchors
[:,
2
],
height
)))
self
.
assertTrue
(
np
.
all
(
np
.
less_equal
(
anchors
[:,
2
],
height
)))
self
.
assertTrue
(
np
.
all
(
np
.
less_equal
(
anchors
[:,
3
],
width
)))
self
.
assertTrue
(
np
.
all
(
np
.
less_equal
(
anchors
[:,
3
],
width
)))
def
test_predict_shape_in_inference_mode_first_stage_only_multi_level
(
self
,
use_static_shapes
=
False
):
batch_size
=
2
height
=
10
width
=
12
input_image_shape
=
(
batch_size
,
height
,
width
,
3
)
with
test_utils
.
GraphContextOrNone
()
as
g
:
model
=
self
.
_build_model
(
is_training
=
False
,
number_of_stages
=
1
,
second_stage_batch_size
=
2
,
clip_anchors_to_image
=
use_static_shapes
,
use_static_shapes
=
use_static_shapes
,
multi_level
=
True
)
def
graph_fn
(
images
):
"""Function to construct tf graph for the test."""
preprocessed_inputs
,
true_image_shapes
=
model
.
preprocess
(
images
)
prediction_dict
=
model
.
predict
(
preprocessed_inputs
,
true_image_shapes
)
return
(
prediction_dict
[
'rpn_box_predictor_features'
][
0
],
prediction_dict
[
'rpn_box_predictor_features'
][
1
],
prediction_dict
[
'rpn_features_to_crop'
][
0
],
prediction_dict
[
'rpn_features_to_crop'
][
1
],
prediction_dict
[
'image_shape'
],
prediction_dict
[
'rpn_box_encodings'
],
prediction_dict
[
'rpn_objectness_predictions_with_background'
],
prediction_dict
[
'anchors'
])
images
=
np
.
zeros
(
input_image_shape
,
dtype
=
np
.
float32
)
# In inference mode, anchors are clipped to the image window, but not
# pruned. Since MockFasterRCNN.extract_proposal_features returns a
# tensor with the same shape as its input, the expected number of anchors
# is height * width * the number of anchors per location (i.e. 3x3).
expected_num_anchors
=
height
*
width
*
3
*
3
expected_output_shapes
=
{
'rpn_box_predictor_features_0'
:
(
batch_size
,
height
-
2
,
width
-
2
,
512
),
'rpn_box_predictor_features_1'
:
(
batch_size
,
height
-
4
,
width
-
4
,
512
),
'rpn_features_to_crop_0'
:
(
batch_size
,
height
-
2
,
width
-
2
,
3
),
'rpn_features_to_crop_1'
:
(
batch_size
,
height
-
4
,
width
-
4
,
3
),
'rpn_box_encodings'
:
(
batch_size
,
expected_num_anchors
,
4
),
'rpn_objectness_predictions_with_background'
:
(
batch_size
,
expected_num_anchors
,
2
),
'anchors'
:
(
expected_num_anchors
,
4
)
}
print
(
expected_output_shapes
)
if
use_static_shapes
:
results
=
self
.
execute
(
graph_fn
,
[
images
],
graph
=
g
)
else
:
results
=
self
.
execute_cpu
(
graph_fn
,
[
images
],
graph
=
g
)
print
(
results
)
self
.
assertAllEqual
(
0
,
1
)
self
.
assertAllEqual
(
results
[
0
].
shape
,
expected_output_shapes
[
'rpn_box_predictor_features_0'
])
self
.
assertAllEqual
(
results
[
1
].
shape
,
expected_output_shapes
[
'rpn_box_predictor_features_1'
])
self
.
assertAllEqual
(
results
[
2
].
shape
,
expected_output_shapes
[
'rpn_features_to_crop_0'
])
self
.
assertAllEqual
(
results
[
3
].
shape
,
expected_output_shapes
[
'rpn_features_to_crop_1'
])
self
.
assertAllEqual
(
results
[
4
],
input_image_shape
)
self
.
assertAllEqual
(
results
[
5
].
shape
,
expected_output_shapes
[
'rpn_box_encodings'
])
self
.
assertAllEqual
(
results
[
6
].
shape
,
expected_output_shapes
[
'rpn_objectness_predictions_with_background'
])
self
.
assertAllEqual
(
results
[
7
].
shape
,
expected_output_shapes
[
'anchors'
])
# Check that anchors are clipped to window.
anchors
=
results
[
5
]
self
.
assertTrue
(
np
.
all
(
np
.
greater_equal
(
anchors
,
0
)))
self
.
assertTrue
(
np
.
all
(
np
.
less_equal
(
anchors
[:,
0
],
height
)))
self
.
assertTrue
(
np
.
all
(
np
.
less_equal
(
anchors
[:,
1
],
width
)))
self
.
assertTrue
(
np
.
all
(
np
.
less_equal
(
anchors
[:,
2
],
height
)))
self
.
assertTrue
(
np
.
all
(
np
.
less_equal
(
anchors
[:,
3
],
width
)))
def
test_regularization_losses
(
self
):
def
test_regularization_losses
(
self
):
with
test_utils
.
GraphContextOrNone
()
as
g
:
with
test_utils
.
GraphContextOrNone
()
as
g
:
model
=
self
.
_build_model
(
model
=
self
.
_build_model
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment