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
420a7253
Unverified
Commit
420a7253
authored
Jun 17, 2020
by
pkulzc
Committed by
GitHub
Jun 17, 2020
Browse files
Refactor tests for Object Detection API. (#8688)
Internal changes -- PiperOrigin-RevId: 316837667
parent
d0ef3913
Changes
161
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
872 additions
and
543 deletions
+872
-543
research/object_detection/models/ssd_mobilenet_v3_feature_extractor_tf1_test.py
...ion/models/ssd_mobilenet_v3_feature_extractor_tf1_test.py
+4
-5
research/object_detection/models/ssd_pnasnet_feature_extractor.py
.../object_detection/models/ssd_pnasnet_feature_extractor.py
+4
-1
research/object_detection/models/ssd_pnasnet_feature_extractor_tf1_test.py
...etection/models/ssd_pnasnet_feature_extractor_tf1_test.py
+3
-0
research/object_detection/models/ssd_resnet_v1_fpn_feature_extractor_testbase.py
...on/models/ssd_resnet_v1_fpn_feature_extractor_testbase.py
+45
-41
research/object_detection/models/ssd_resnet_v1_fpn_feature_extractor_tf1_test.py
...on/models/ssd_resnet_v1_fpn_feature_extractor_tf1_test.py
+85
-0
research/object_detection/models/ssd_resnet_v1_fpn_feature_extractor_tf2_test.py
...on/models/ssd_resnet_v1_fpn_feature_extractor_tf2_test.py
+103
-0
research/object_detection/models/ssd_resnet_v1_ppn_feature_extractor_tf1_test.py
...on/models/ssd_resnet_v1_ppn_feature_extractor_tf1_test.py
+5
-0
research/object_detection/predictors/convolutional_box_predictor_tf1_test.py
...ection/predictors/convolutional_box_predictor_tf1_test.py
+4
-1
research/object_detection/predictors/convolutional_keras_box_predictor_tf2_test.py
.../predictors/convolutional_keras_box_predictor_tf2_test.py
+361
-317
research/object_detection/predictors/heads/box_head_tf1_test.py
...ch/object_detection/predictors/heads/box_head_tf1_test.py
+5
-0
research/object_detection/predictors/heads/class_head_tf1_test.py
.../object_detection/predictors/heads/class_head_tf1_test.py
+5
-0
research/object_detection/predictors/heads/keras_box_head_tf2_test.py
...ect_detection/predictors/heads/keras_box_head_tf2_test.py
+61
-46
research/object_detection/predictors/heads/keras_class_head_tf2_test.py
...t_detection/predictors/heads/keras_class_head_tf2_test.py
+62
-50
research/object_detection/predictors/heads/keras_mask_head_tf2_test.py
...ct_detection/predictors/heads/keras_mask_head_tf2_test.py
+61
-38
research/object_detection/predictors/heads/keypoint_head_tf1_test.py
...ject_detection/predictors/heads/keypoint_head_tf1_test.py
+3
-0
research/object_detection/predictors/heads/mask_head_tf1_test.py
...h/object_detection/predictors/heads/mask_head_tf1_test.py
+5
-0
research/object_detection/predictors/mask_rcnn_box_predictor_tf1_test.py
..._detection/predictors/mask_rcnn_box_predictor_tf1_test.py
+3
-0
research/object_detection/predictors/mask_rcnn_keras_box_predictor_tf2_test.py
...tion/predictors/mask_rcnn_keras_box_predictor_tf2_test.py
+37
-33
research/object_detection/predictors/rfcn_box_predictor_tf1_test.py
...bject_detection/predictors/rfcn_box_predictor_tf1_test.py
+3
-0
research/object_detection/predictors/rfcn_keras_box_predictor_tf2_test.py
...detection/predictors/rfcn_keras_box_predictor_tf2_test.py
+13
-11
No files found.
research/object_detection/models/ssd_mobilenet_v3_feature_extractor_test.py
→
research/object_detection/models/ssd_mobilenet_v3_feature_extractor_
tf1_
test.py
View file @
420a7253
...
@@ -13,17 +13,15 @@
...
@@ -13,17 +13,15 @@
# limitations under the License.
# limitations under the License.
# ==============================================================================
# ==============================================================================
"""Tests for ssd_mobilenet_v3_feature_extractor."""
"""Tests for ssd_mobilenet_v3_feature_extractor."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
import
tf_slim
as
slim
from
object_detection.models
import
ssd_mobilenet_v3_feature_extractor
from
object_detection.models
import
ssd_mobilenet_v3_feature_extractor
from
object_detection.models
import
ssd_mobilenet_v3_feature_extractor_testbase
from
object_detection.models
import
ssd_mobilenet_v3_feature_extractor_testbase
from
object_detection.utils
import
tf_version
slim
=
slim
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SsdMobilenetV3LargeFeatureExtractorTest
(
class
SsdMobilenetV3LargeFeatureExtractorTest
(
ssd_mobilenet_v3_feature_extractor_testbase
ssd_mobilenet_v3_feature_extractor_testbase
.
_SsdMobilenetV3FeatureExtractorTestBase
):
.
_SsdMobilenetV3FeatureExtractorTestBase
):
...
@@ -63,6 +61,7 @@ class SsdMobilenetV3LargeFeatureExtractorTest(
...
@@ -63,6 +61,7 @@ class SsdMobilenetV3LargeFeatureExtractorTest(
use_explicit_padding
=
use_explicit_padding
))
use_explicit_padding
=
use_explicit_padding
))
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SsdMobilenetV3SmallFeatureExtractorTest
(
class
SsdMobilenetV3SmallFeatureExtractorTest
(
ssd_mobilenet_v3_feature_extractor_testbase
ssd_mobilenet_v3_feature_extractor_testbase
.
_SsdMobilenetV3FeatureExtractorTestBase
):
.
_SsdMobilenetV3FeatureExtractorTestBase
):
...
...
research/object_detection/models/ssd_pnasnet_feature_extractor.py
View file @
420a7253
...
@@ -27,7 +27,10 @@ from object_detection.models import feature_map_generators
...
@@ -27,7 +27,10 @@ from object_detection.models import feature_map_generators
from
object_detection.utils
import
context_manager
from
object_detection.utils
import
context_manager
from
object_detection.utils
import
ops
from
object_detection.utils
import
ops
from
object_detection.utils
import
variables_helper
from
object_detection.utils
import
variables_helper
from
nets.nasnet
import
pnasnet
try
:
from
nets.nasnet
import
pnasnet
# pylint: disable=g-import-not-at-top
except
:
# pylint: disable=bare-except
pass
def
pnasnet_large_arg_scope_for_detection
(
is_batch_norm_training
=
False
):
def
pnasnet_large_arg_scope_for_detection
(
is_batch_norm_training
=
False
):
...
...
research/object_detection/models/ssd_pnasnet_feature_extractor_test.py
→
research/object_detection/models/ssd_pnasnet_feature_extractor_
tf1_
test.py
View file @
420a7253
...
@@ -14,13 +14,16 @@
...
@@ -14,13 +14,16 @@
# ==============================================================================
# ==============================================================================
"""Tests for ssd_pnas_feature_extractor."""
"""Tests for ssd_pnas_feature_extractor."""
import
unittest
import
numpy
as
np
import
numpy
as
np
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
object_detection.models
import
ssd_feature_extractor_test
from
object_detection.models
import
ssd_feature_extractor_test
from
object_detection.models
import
ssd_pnasnet_feature_extractor
from
object_detection.models
import
ssd_pnasnet_feature_extractor
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SsdPnasNetFeatureExtractorTest
(
class
SsdPnasNetFeatureExtractorTest
(
ssd_feature_extractor_test
.
SsdFeatureExtractorTestBase
):
ssd_feature_extractor_test
.
SsdFeatureExtractorTestBase
):
...
...
research/object_detection/models/ssd_resnet_v1_fpn_feature_extractor_testbase.py
View file @
420a7253
...
@@ -19,24 +19,20 @@ from __future__ import division
...
@@ -19,24 +19,20 @@ from __future__ import division
from
__future__
import
print_function
from
__future__
import
print_function
import
abc
import
abc
from
absl.testing
import
parameterized
import
numpy
as
np
import
numpy
as
np
from
six.moves
import
zip
from
six.moves
import
zip
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
object_detection.models
import
ssd_feature_extractor_test
from
object_detection.models
import
ssd_feature_extractor_test
from
object_detection.utils
import
test_utils
@
parameterized
.
parameters
(
{
'use_keras'
:
False
},
{
'use_keras'
:
True
},
)
class
SSDResnetFPNFeatureExtractorTestBase
(
class
SSDResnetFPNFeatureExtractorTestBase
(
ssd_feature_extractor_test
.
SsdFeatureExtractorTestBase
):
ssd_feature_extractor_test
.
SsdFeatureExtractorTestBase
):
"""Helper test class for SSD Resnet v1 FPN feature extractors."""
"""Helper test class for SSD Resnet v1 FPN feature extractors."""
@
abc
.
abstractmethod
@
abc
.
abstractmethod
def
_resnet_scope_name
(
self
,
use_keras
):
def
_resnet_scope_name
(
self
):
pass
pass
@
abc
.
abstractmethod
@
abc
.
abstractmethod
...
@@ -52,7 +48,7 @@ class SSDResnetFPNFeatureExtractorTestBase(
...
@@ -52,7 +48,7 @@ class SSDResnetFPNFeatureExtractorTestBase(
use_keras
=
False
):
use_keras
=
False
):
pass
pass
def
test_extract_features_returns_correct_shapes_256
(
self
,
use_keras
):
def
test_extract_features_returns_correct_shapes_256
(
self
):
image_height
=
256
image_height
=
256
image_width
=
256
image_width
=
256
depth_multiplier
=
1.0
depth_multiplier
=
1.0
...
@@ -62,10 +58,10 @@ class SSDResnetFPNFeatureExtractorTestBase(
...
@@ -62,10 +58,10 @@ class SSDResnetFPNFeatureExtractorTestBase(
(
2
,
2
,
2
,
256
)]
(
2
,
2
,
2
,
256
)]
self
.
check_extract_features_returns_correct_shape
(
self
.
check_extract_features_returns_correct_shape
(
2
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
2
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
expected_feature_map_shape
)
expected_feature_map_shape
,
use_keras
=
self
.
is_tf2
()
)
def
test_extract_features_returns_correct_shapes_with_dynamic_inputs
(
def
test_extract_features_returns_correct_shapes_with_dynamic_inputs
(
self
,
use_keras
):
self
):
image_height
=
256
image_height
=
256
image_width
=
256
image_width
=
256
depth_multiplier
=
1.0
depth_multiplier
=
1.0
...
@@ -75,10 +71,10 @@ class SSDResnetFPNFeatureExtractorTestBase(
...
@@ -75,10 +71,10 @@ class SSDResnetFPNFeatureExtractorTestBase(
(
2
,
2
,
2
,
256
)]
(
2
,
2
,
2
,
256
)]
self
.
check_extract_features_returns_correct_shapes_with_dynamic_inputs
(
self
.
check_extract_features_returns_correct_shapes_with_dynamic_inputs
(
2
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
2
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
expected_feature_map_shape
,
use_keras
=
u
se
_keras
)
expected_feature_map_shape
,
use_keras
=
se
lf
.
is_tf2
()
)
def
test_extract_features_returns_correct_shapes_with_depth_multiplier
(
def
test_extract_features_returns_correct_shapes_with_depth_multiplier
(
self
,
use_keras
):
self
):
image_height
=
256
image_height
=
256
image_width
=
256
image_width
=
256
depth_multiplier
=
0.5
depth_multiplier
=
0.5
...
@@ -91,10 +87,10 @@ class SSDResnetFPNFeatureExtractorTestBase(
...
@@ -91,10 +87,10 @@ class SSDResnetFPNFeatureExtractorTestBase(
(
2
,
2
,
2
,
expected_num_channels
)]
(
2
,
2
,
2
,
expected_num_channels
)]
self
.
check_extract_features_returns_correct_shape
(
self
.
check_extract_features_returns_correct_shape
(
2
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
2
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
expected_feature_map_shape
,
use_keras
=
u
se
_keras
)
expected_feature_map_shape
,
use_keras
=
se
lf
.
is_tf2
()
)
def
test_extract_features_returns_correct_shapes_with_min_depth
(
def
test_extract_features_returns_correct_shapes_with_min_depth
(
self
,
use_keras
):
self
):
image_height
=
256
image_height
=
256
image_width
=
256
image_width
=
256
depth_multiplier
=
1.0
depth_multiplier
=
1.0
...
@@ -106,23 +102,24 @@ class SSDResnetFPNFeatureExtractorTestBase(
...
@@ -106,23 +102,24 @@ class SSDResnetFPNFeatureExtractorTestBase(
(
2
,
4
,
4
,
min_depth
),
(
2
,
4
,
4
,
min_depth
),
(
2
,
2
,
2
,
min_depth
)]
(
2
,
2
,
2
,
min_depth
)]
def
graph_fn
(
image_tensor
):
with
test_utils
.
GraphContextOrNone
()
as
g
:
image_tensor
=
tf
.
random
.
uniform
([
2
,
image_height
,
image_width
,
3
])
feature_extractor
=
self
.
_create_feature_extractor
(
feature_extractor
=
self
.
_create_feature_extractor
(
depth_multiplier
,
pad_to_multiple
,
min_depth
=
min_depth
,
depth_multiplier
,
pad_to_multiple
,
min_depth
=
min_depth
,
use_keras
=
use_keras
)
use_keras
=
self
.
is_tf2
())
if
use_keras
:
def
graph_fn
():
if
self
.
is_tf2
():
return
feature_extractor
(
image_tensor
)
return
feature_extractor
(
image_tensor
)
return
feature_extractor
.
extract_features
(
image_tensor
)
return
feature_extractor
.
extract_features
(
image_tensor
)
image_tensor
=
np
.
random
.
rand
(
2
,
image_height
,
image_width
,
feature_maps
=
self
.
execute
(
graph_fn
,
[],
graph
=
g
)
3
).
astype
(
np
.
float32
)
feature_maps
=
self
.
execute
(
graph_fn
,
[
image_tensor
])
for
feature_map
,
expected_shape
in
zip
(
feature_maps
,
for
feature_map
,
expected_shape
in
zip
(
feature_maps
,
expected_feature_map_shape
):
expected_feature_map_shape
):
self
.
assertAllEqual
(
feature_map
.
shape
,
expected_shape
)
self
.
assertAllEqual
(
feature_map
.
shape
,
expected_shape
)
def
test_extract_features_returns_correct_shapes_with_pad_to_multiple
(
def
test_extract_features_returns_correct_shapes_with_pad_to_multiple
(
self
,
use_keras
):
self
):
image_height
=
254
image_height
=
254
image_width
=
254
image_width
=
254
depth_multiplier
=
1.0
depth_multiplier
=
1.0
...
@@ -133,55 +130,62 @@ class SSDResnetFPNFeatureExtractorTestBase(
...
@@ -133,55 +130,62 @@ class SSDResnetFPNFeatureExtractorTestBase(
self
.
check_extract_features_returns_correct_shape
(
self
.
check_extract_features_returns_correct_shape
(
2
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
2
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
expected_feature_map_shape
,
use_keras
=
u
se
_keras
)
expected_feature_map_shape
,
use_keras
=
se
lf
.
is_tf2
()
)
def
test_extract_features_raises_error_with_invalid_image_size
(
def
test_extract_features_raises_error_with_invalid_image_size
(
self
,
use_keras
):
self
):
image_height
=
32
image_height
=
32
image_width
=
32
image_width
=
32
depth_multiplier
=
1.0
depth_multiplier
=
1.0
pad_to_multiple
=
1
pad_to_multiple
=
1
self
.
check_extract_features_raises_error_with_invalid_image_size
(
self
.
check_extract_features_raises_error_with_invalid_image_size
(
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
image_height
,
image_width
,
depth_multiplier
,
pad_to_multiple
,
use_keras
=
u
se
_keras
)
use_keras
=
se
lf
.
is_tf2
()
)
def
test_preprocess_returns_correct_value_range
(
self
,
use_keras
):
def
test_preprocess_returns_correct_value_range
(
self
):
image_height
=
128
image_height
=
128
image_width
=
128
image_width
=
128
depth_multiplier
=
1
depth_multiplier
=
1
pad_to_multiple
=
1
pad_to_multiple
=
1
test_image
=
tf
.
constant
(
np
.
random
.
rand
(
4
,
image_height
,
image_width
,
3
))
test_image_np
=
np
.
random
.
rand
(
4
,
image_height
,
image_width
,
3
)
feature_extractor
=
self
.
_create_feature_extractor
(
depth_multiplier
,
with
test_utils
.
GraphContextOrNone
()
as
g
:
pad_to_multiple
,
test_image
=
tf
.
constant
(
test_image_np
)
use_keras
=
use_keras
)
feature_extractor
=
self
.
_create_feature_extractor
(
preprocessed_image
=
feature_extractor
.
preprocess
(
test_image
)
depth_multiplier
,
pad_to_multiple
,
use_keras
=
self
.
is_tf2
())
with
self
.
test_session
()
as
sess
:
test_image_out
,
preprocessed_image_out
=
sess
.
run
(
def
graph_fn
():
[
test_image
,
preprocessed_image
])
preprocessed_image
=
feature_extractor
.
preprocess
(
test_image
)
self
.
assertAllClose
(
preprocessed_image_out
,
return
preprocessed_image
test_image_out
-
[[
123.68
,
116.779
,
103.939
]])
preprocessed_image_out
=
self
.
execute
(
graph_fn
,
[],
graph
=
g
)
def
test_variables_only_created_in_scope
(
self
,
use_keras
):
self
.
assertAllClose
(
preprocessed_image_out
,
test_image_np
-
[[
123.68
,
116.779
,
103.939
]])
def
test_variables_only_created_in_scope
(
self
):
if
self
.
is_tf2
():
self
.
skipTest
(
'test_variables_only_created_in_scope is only tf1'
)
depth_multiplier
=
1
depth_multiplier
=
1
pad_to_multiple
=
1
pad_to_multiple
=
1
scope_name
=
self
.
_resnet_scope_name
(
use_keras
)
scope_name
=
self
.
_resnet_scope_name
()
self
.
check_feature_extractor_variables_under_scope
(
self
.
check_feature_extractor_variables_under_scope
(
depth_multiplier
,
depth_multiplier
,
pad_to_multiple
,
pad_to_multiple
,
scope_name
,
scope_name
,
use_keras
=
u
se
_keras
)
use_keras
=
se
lf
.
is_tf2
()
)
def
test_variable_count
(
self
,
use_keras
):
def
test_variable_count
(
self
):
if
self
.
is_tf2
():
self
.
skipTest
(
'test_variable_count is only tf1'
)
depth_multiplier
=
1
depth_multiplier
=
1
pad_to_multiple
=
1
pad_to_multiple
=
1
variables
=
self
.
get_feature_extractor_variables
(
variables
=
self
.
get_feature_extractor_variables
(
depth_multiplier
,
depth_multiplier
,
pad_to_multiple
,
pad_to_multiple
,
use_keras
=
u
se
_keras
)
use_keras
=
se
lf
.
is_tf2
()
)
# The number of expected variables in resnet_v1_50, resnet_v1_101,
# The number of expected variables in resnet_v1_50, resnet_v1_101,
# and resnet_v1_152 is 279, 534, and 789 respectively.
# and resnet_v1_152 is 279, 534, and 789 respectively.
expected_variables_len
=
279
expected_variables_len
=
279
scope_name
=
self
.
_resnet_scope_name
(
use_keras
)
scope_name
=
self
.
_resnet_scope_name
()
if
scope_name
in
(
'ResNet101V1_FPN'
,
'resnet_v1_101'
):
if
scope_name
in
(
'ResNet101V1_FPN'
,
'resnet_v1_101'
):
expected_variables_len
=
534
expected_variables_len
=
534
elif
scope_name
in
(
'ResNet152V1_FPN'
,
'resnet_v1_152'
):
elif
scope_name
in
(
'ResNet152V1_FPN'
,
'resnet_v1_152'
):
...
...
research/object_detection/models/ssd_resnet_v1_fpn_feature_extractor_test.py
→
research/object_detection/models/ssd_resnet_v1_fpn_feature_extractor_
tf1_
test.py
View file @
420a7253
...
@@ -13,13 +13,15 @@
...
@@ -13,13 +13,15 @@
# limitations under the License.
# limitations under the License.
# ==============================================================================
# ==============================================================================
"""Tests for ssd resnet v1 FPN feature extractors."""
"""Tests for ssd resnet v1 FPN feature extractors."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
object_detection.models
import
ssd_resnet_v1_fpn_feature_extractor
from
object_detection.models
import
ssd_resnet_v1_fpn_feature_extractor
from
object_detection.models
import
ssd_resnet_v1_fpn_feature_extractor_testbase
from
object_detection.models
import
ssd_resnet_v1_fpn_feature_extractor_testbase
from
object_detection.
mode
ls
import
ssd_resnet_v1_fpn_keras_feature_extractor
from
object_detection.
uti
ls
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SSDResnet50V1FeatureExtractorTest
(
class
SSDResnet50V1FeatureExtractorTest
(
ssd_resnet_v1_fpn_feature_extractor_testbase
.
ssd_resnet_v1_fpn_feature_extractor_testbase
.
SSDResnetFPNFeatureExtractorTestBase
):
SSDResnetFPNFeatureExtractorTestBase
):
...
@@ -29,31 +31,17 @@ class SSDResnet50V1FeatureExtractorTest(
...
@@ -29,31 +31,17 @@ class SSDResnet50V1FeatureExtractorTest(
use_explicit_padding
=
False
,
min_depth
=
32
,
use_explicit_padding
=
False
,
min_depth
=
32
,
use_keras
=
False
):
use_keras
=
False
):
is_training
=
True
is_training
=
True
if
use_keras
:
return
(
return
(
ssd_resnet_v1_fpn_keras_feature_extractor
.
ssd_resnet_v1_fpn_feature_extractor
.
SSDResnet50V1FpnFeatureExtractor
(
SSDResNet50V1FpnKerasFeatureExtractor
(
is_training
,
depth_multiplier
,
min_depth
,
pad_to_multiple
,
is_training
=
is_training
,
self
.
conv_hyperparams_fn
,
depth_multiplier
=
depth_multiplier
,
use_explicit_padding
=
use_explicit_padding
))
min_depth
=
min_depth
,
pad_to_multiple
=
pad_to_multiple
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
name
=
'ResNet50V1_FPN'
))
else
:
return
(
ssd_resnet_v1_fpn_feature_extractor
.
SSDResnet50V1FpnFeatureExtractor
(
is_training
,
depth_multiplier
,
min_depth
,
pad_to_multiple
,
self
.
conv_hyperparams_fn
,
use_explicit_padding
=
use_explicit_padding
))
def
_resnet_scope_name
(
self
,
use_keras
=
False
):
def
_resnet_scope_name
(
self
):
if
use_keras
:
return
'ResNet50V1_FPN'
return
'resnet_v1_50'
return
'resnet_v1_50'
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SSDResnet101V1FeatureExtractorTest
(
class
SSDResnet101V1FeatureExtractorTest
(
ssd_resnet_v1_fpn_feature_extractor_testbase
.
ssd_resnet_v1_fpn_feature_extractor_testbase
.
SSDResnetFPNFeatureExtractorTestBase
):
SSDResnetFPNFeatureExtractorTestBase
):
...
@@ -63,31 +51,17 @@ class SSDResnet101V1FeatureExtractorTest(
...
@@ -63,31 +51,17 @@ class SSDResnet101V1FeatureExtractorTest(
use_explicit_padding
=
False
,
min_depth
=
32
,
use_explicit_padding
=
False
,
min_depth
=
32
,
use_keras
=
False
):
use_keras
=
False
):
is_training
=
True
is_training
=
True
if
use_keras
:
return
(
return
(
ssd_resnet_v1_fpn_keras_feature_extractor
.
ssd_resnet_v1_fpn_feature_extractor
.
SSDResnet101V1FpnFeatureExtractor
(
SSDResNet101V1FpnKerasFeatureExtractor
(
is_training
,
depth_multiplier
,
min_depth
,
pad_to_multiple
,
is_training
=
is_training
,
self
.
conv_hyperparams_fn
,
depth_multiplier
=
depth_multiplier
,
use_explicit_padding
=
use_explicit_padding
))
min_depth
=
min_depth
,
pad_to_multiple
=
pad_to_multiple
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
name
=
'ResNet101V1_FPN'
))
else
:
return
(
ssd_resnet_v1_fpn_feature_extractor
.
SSDResnet101V1FpnFeatureExtractor
(
is_training
,
depth_multiplier
,
min_depth
,
pad_to_multiple
,
self
.
conv_hyperparams_fn
,
use_explicit_padding
=
use_explicit_padding
))
def
_resnet_scope_name
(
self
,
use_keras
):
def
_resnet_scope_name
(
self
):
if
use_keras
:
return
'ResNet101V1_FPN'
return
'resnet_v1_101'
return
'resnet_v1_101'
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SSDResnet152V1FeatureExtractorTest
(
class
SSDResnet152V1FeatureExtractorTest
(
ssd_resnet_v1_fpn_feature_extractor_testbase
.
ssd_resnet_v1_fpn_feature_extractor_testbase
.
SSDResnetFPNFeatureExtractorTestBase
):
SSDResnetFPNFeatureExtractorTestBase
):
...
@@ -97,28 +71,13 @@ class SSDResnet152V1FeatureExtractorTest(
...
@@ -97,28 +71,13 @@ class SSDResnet152V1FeatureExtractorTest(
use_explicit_padding
=
False
,
min_depth
=
32
,
use_explicit_padding
=
False
,
min_depth
=
32
,
use_keras
=
False
):
use_keras
=
False
):
is_training
=
True
is_training
=
True
if
use_keras
:
return
(
return
(
ssd_resnet_v1_fpn_keras_feature_extractor
.
ssd_resnet_v1_fpn_feature_extractor
.
SSDResnet152V1FpnFeatureExtractor
(
SSDResNet152V1FpnKerasFeatureExtractor
(
is_training
,
depth_multiplier
,
min_depth
,
pad_to_multiple
,
is_training
=
is_training
,
self
.
conv_hyperparams_fn
,
depth_multiplier
=
depth_multiplier
,
use_explicit_padding
=
use_explicit_padding
))
min_depth
=
min_depth
,
pad_to_multiple
=
pad_to_multiple
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
name
=
'ResNet152V1_FPN'
))
else
:
return
(
ssd_resnet_v1_fpn_feature_extractor
.
SSDResnet152V1FpnFeatureExtractor
(
is_training
,
depth_multiplier
,
min_depth
,
pad_to_multiple
,
self
.
conv_hyperparams_fn
,
use_explicit_padding
=
use_explicit_padding
))
def
_resnet_scope_name
(
self
,
use_keras
):
def
_resnet_scope_name
(
self
):
if
use_keras
:
return
'ResNet152V1_FPN'
return
'resnet_v1_152'
return
'resnet_v1_152'
...
...
research/object_detection/models/ssd_resnet_v1_fpn_feature_extractor_tf2_test.py
0 → 100644
View file @
420a7253
# Copyright 2017 The TensorFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
"""Tests for ssd resnet v1 FPN feature extractors."""
import
unittest
import
tensorflow.compat.v1
as
tf
from
object_detection.models
import
ssd_resnet_v1_fpn_feature_extractor_testbase
from
object_detection.models
import
ssd_resnet_v1_fpn_keras_feature_extractor
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
SSDResnet50V1FeatureExtractorTest
(
ssd_resnet_v1_fpn_feature_extractor_testbase
.
SSDResnetFPNFeatureExtractorTestBase
):
"""SSDResnet50v1Fpn feature extractor test."""
def
_create_feature_extractor
(
self
,
depth_multiplier
,
pad_to_multiple
,
use_explicit_padding
=
False
,
min_depth
=
32
,
use_keras
=
True
):
is_training
=
True
return
(
ssd_resnet_v1_fpn_keras_feature_extractor
.
SSDResNet50V1FpnKerasFeatureExtractor
(
is_training
=
is_training
,
depth_multiplier
=
depth_multiplier
,
min_depth
=
min_depth
,
pad_to_multiple
=
pad_to_multiple
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
name
=
'ResNet50V1_FPN'
))
def
_resnet_scope_name
(
self
):
return
'ResNet50V1_FPN'
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
SSDResnet101V1FeatureExtractorTest
(
ssd_resnet_v1_fpn_feature_extractor_testbase
.
SSDResnetFPNFeatureExtractorTestBase
):
"""SSDResnet101v1Fpn feature extractor test."""
def
_create_feature_extractor
(
self
,
depth_multiplier
,
pad_to_multiple
,
use_explicit_padding
=
False
,
min_depth
=
32
,
use_keras
=
False
):
is_training
=
True
return
(
ssd_resnet_v1_fpn_keras_feature_extractor
.
SSDResNet101V1FpnKerasFeatureExtractor
(
is_training
=
is_training
,
depth_multiplier
=
depth_multiplier
,
min_depth
=
min_depth
,
pad_to_multiple
=
pad_to_multiple
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
name
=
'ResNet101V1_FPN'
))
def
_resnet_scope_name
(
self
):
return
'ResNet101V1_FPN'
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
SSDResnet152V1FeatureExtractorTest
(
ssd_resnet_v1_fpn_feature_extractor_testbase
.
SSDResnetFPNFeatureExtractorTestBase
):
"""SSDResnet152v1Fpn feature extractor test."""
def
_create_feature_extractor
(
self
,
depth_multiplier
,
pad_to_multiple
,
use_explicit_padding
=
False
,
min_depth
=
32
,
use_keras
=
False
):
is_training
=
True
return
(
ssd_resnet_v1_fpn_keras_feature_extractor
.
SSDResNet152V1FpnKerasFeatureExtractor
(
is_training
=
is_training
,
depth_multiplier
=
depth_multiplier
,
min_depth
=
min_depth
,
pad_to_multiple
=
pad_to_multiple
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
name
=
'ResNet152V1_FPN'
))
def
_resnet_scope_name
(
self
):
return
'ResNet152V1_FPN'
if
__name__
==
'__main__'
:
tf
.
test
.
main
()
research/object_detection/models/ssd_resnet_v1_ppn_feature_extractor_test.py
→
research/object_detection/models/ssd_resnet_v1_ppn_feature_extractor_
tf1_
test.py
View file @
420a7253
...
@@ -13,12 +13,15 @@
...
@@ -13,12 +13,15 @@
# limitations under the License.
# limitations under the License.
# ==============================================================================
# ==============================================================================
"""Tests for ssd resnet v1 feature extractors."""
"""Tests for ssd resnet v1 feature extractors."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
object_detection.models
import
ssd_resnet_v1_ppn_feature_extractor
from
object_detection.models
import
ssd_resnet_v1_ppn_feature_extractor
from
object_detection.models
import
ssd_resnet_v1_ppn_feature_extractor_testbase
from
object_detection.models
import
ssd_resnet_v1_ppn_feature_extractor_testbase
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SSDResnet50V1PpnFeatureExtractorTest
(
class
SSDResnet50V1PpnFeatureExtractorTest
(
ssd_resnet_v1_ppn_feature_extractor_testbase
.
ssd_resnet_v1_ppn_feature_extractor_testbase
.
SSDResnetPpnFeatureExtractorTestBase
):
SSDResnetPpnFeatureExtractorTestBase
):
...
@@ -40,6 +43,7 @@ class SSDResnet50V1PpnFeatureExtractorTest(
...
@@ -40,6 +43,7 @@ class SSDResnet50V1PpnFeatureExtractorTest(
return
'resnet_v1_50'
return
'resnet_v1_50'
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SSDResnet101V1PpnFeatureExtractorTest
(
class
SSDResnet101V1PpnFeatureExtractorTest
(
ssd_resnet_v1_ppn_feature_extractor_testbase
.
ssd_resnet_v1_ppn_feature_extractor_testbase
.
SSDResnetPpnFeatureExtractorTestBase
):
SSDResnetPpnFeatureExtractorTestBase
):
...
@@ -62,6 +66,7 @@ class SSDResnet101V1PpnFeatureExtractorTest(
...
@@ -62,6 +66,7 @@ class SSDResnet101V1PpnFeatureExtractorTest(
return
'resnet_v1_101'
return
'resnet_v1_101'
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
SSDResnet152V1PpnFeatureExtractorTest
(
class
SSDResnet152V1PpnFeatureExtractorTest
(
ssd_resnet_v1_ppn_feature_extractor_testbase
.
ssd_resnet_v1_ppn_feature_extractor_testbase
.
SSDResnetPpnFeatureExtractorTestBase
):
SSDResnetPpnFeatureExtractorTestBase
):
...
...
research/object_detection/predictors/convolutional_box_predictor_test.py
→
research/object_detection/predictors/convolutional_box_predictor_
tf1_
test.py
View file @
420a7253
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
from
__future__
import
absolute_import
from
__future__
import
absolute_import
from
__future__
import
division
from
__future__
import
division
from
__future__
import
print_function
from
__future__
import
print_function
import
unittest
from
absl.testing
import
parameterized
from
absl.testing
import
parameterized
import
numpy
as
np
import
numpy
as
np
from
six.moves
import
range
from
six.moves
import
range
...
@@ -35,8 +35,10 @@ from object_detection.predictors.heads import class_head
...
@@ -35,8 +35,10 @@ from object_detection.predictors.heads import class_head
from
object_detection.predictors.heads
import
mask_head
from
object_detection.predictors.heads
import
mask_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
ConvolutionalBoxPredictorTest
(
test_case
.
TestCase
):
class
ConvolutionalBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_conv_hyperparams
(
self
):
def
_build_arg_scope_with_conv_hyperparams
(
self
):
...
@@ -281,6 +283,7 @@ class ConvolutionalBoxPredictorTest(test_case.TestCase):
...
@@ -281,6 +283,7 @@ class ConvolutionalBoxPredictorTest(test_case.TestCase):
self
.
assertEqual
(
bad_dangling_ops
,
[])
self
.
assertEqual
(
bad_dangling_ops
,
[])
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
WeightSharedConvolutionalBoxPredictorTest
(
test_case
.
TestCase
):
class
WeightSharedConvolutionalBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_conv_hyperparams
(
self
):
def
_build_arg_scope_with_conv_hyperparams
(
self
):
...
...
research/object_detection/predictors/convolutional_keras_box_predictor_test.py
→
research/object_detection/predictors/convolutional_keras_box_predictor_
tf2_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.convolutional_keras_box_predictor."""
"""Tests for object_detection.predictors.convolutional_keras_box_predictor."""
import
unittest
import
numpy
as
np
import
numpy
as
np
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
...
@@ -26,8 +27,10 @@ from object_detection.predictors.heads import keras_class_head
...
@@ -26,8 +27,10 @@ from object_detection.predictors.heads import keras_class_head
from
object_detection.predictors.heads
import
keras_mask_head
from
object_detection.predictors.heads
import
keras_mask_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
ConvolutionalKerasBoxPredictorTest
(
test_case
.
TestCase
):
class
ConvolutionalKerasBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
):
def
_build_conv_hyperparams
(
self
):
...
@@ -47,23 +50,23 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -47,23 +50,23 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
return
hyperparams_builder
.
KerasLayerHyperparams
(
conv_hyperparams
)
return
hyperparams_builder
.
KerasLayerHyperparams
(
conv_hyperparams
)
def
test_get_boxes_for_five_aspect_ratios_per_location
(
self
):
def
test_get_boxes_for_five_aspect_ratios_per_location
(
self
):
conv_box_predictor
=
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
0
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
min_depth
=
0
,
max_depth
=
32
,
num_layers_before_predictor
=
1
,
use_dropout
=
True
,
dropout_keep_prob
=
0.8
,
kernel_size
=
1
,
box_code_size
=
4
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
conv_box_predictor
=
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
0
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
min_depth
=
0
,
max_depth
=
32
,
num_layers_before_predictor
=
1
,
use_dropout
=
True
,
dropout_keep_prob
=
0.8
,
kernel_size
=
1
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features
])
box_predictions
=
conv_box_predictor
([
image_features
])
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
...
@@ -78,23 +81,23 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -78,23 +81,23 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
self
.
assertAllEqual
(
objectness_predictions
.
shape
,
[
4
,
320
,
1
])
self
.
assertAllEqual
(
objectness_predictions
.
shape
,
[
4
,
320
,
1
])
def
test_get_boxes_for_one_aspect_ratio_per_location
(
self
):
def
test_get_boxes_for_one_aspect_ratio_per_location
(
self
):
conv_box_predictor
=
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
0
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
1
],
min_depth
=
0
,
max_depth
=
32
,
num_layers_before_predictor
=
1
,
use_dropout
=
True
,
dropout_keep_prob
=
0.8
,
kernel_size
=
1
,
box_code_size
=
4
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
conv_box_predictor
=
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
0
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
1
],
min_depth
=
0
,
max_depth
=
32
,
num_layers_before_predictor
=
1
,
use_dropout
=
True
,
dropout_keep_prob
=
0.8
,
kernel_size
=
1
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features
])
box_predictions
=
conv_box_predictor
([
image_features
])
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
...
@@ -111,23 +114,23 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -111,23 +114,23 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
self
):
self
):
num_classes_without_background
=
6
num_classes_without_background
=
6
image_features
=
np
.
random
.
rand
(
4
,
8
,
8
,
64
).
astype
(
np
.
float32
)
image_features
=
np
.
random
.
rand
(
4
,
8
,
8
,
64
).
astype
(
np
.
float32
)
conv_box_predictor
=
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
min_depth
=
0
,
max_depth
=
32
,
num_layers_before_predictor
=
1
,
use_dropout
=
True
,
dropout_keep_prob
=
0.8
,
kernel_size
=
1
,
box_code_size
=
4
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
conv_box_predictor
=
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
min_depth
=
0
,
max_depth
=
32
,
num_layers_before_predictor
=
1
,
use_dropout
=
True
,
dropout_keep_prob
=
0.8
,
kernel_size
=
1
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features
])
box_predictions
=
conv_box_predictor
([
image_features
])
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
...
@@ -144,7 +147,7 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -144,7 +147,7 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_get_predictions_with_feature_maps_of_dynamic_shape
(
def
test_get_predictions_with_feature_maps_of_dynamic_shape
(
self
):
self
):
image_features
=
tf
.
placeholder
(
dtype
=
tf
.
float32
,
shape
=
[
4
,
None
,
None
,
64
]
)
tf
.
keras
.
backend
.
clear_session
(
)
conv_box_predictor
=
(
conv_box_predictor
=
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
is_training
=
False
,
is_training
=
False
,
...
@@ -161,28 +164,25 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -161,28 +164,25 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
kernel_size
=
1
,
kernel_size
=
1
,
box_code_size
=
4
box_code_size
=
4
))
))
box_predictions
=
conv_box_predictor
([
image_features
])
variables
=
[]
box_encodings
=
tf
.
concat
(
def
graph_fn
(
image_features
):
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
=
conv_box_predictor
([
image_features
])
objectness_predictions
=
tf
.
concat
(
variables
.
extend
(
list
(
conv_box_predictor
.
variables
))
box_predictions
[
box_predictor
.
CLASS_PREDICTIONS_WITH_BACKGROUND
],
box_encodings
=
tf
.
concat
(
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
init_op
=
tf
.
global_variables_initializer
()
objectness_predictions
=
tf
.
concat
(
box_predictions
[
box_predictor
.
CLASS_PREDICTIONS_WITH_BACKGROUND
],
axis
=
1
)
return
box_encodings
,
objectness_predictions
resolution
=
32
resolution
=
32
expected_num_anchors
=
resolution
*
resolution
*
5
expected_num_anchors
=
resolution
*
resolution
*
5
with
self
.
test_session
()
as
sess
:
box_encodings
,
objectness_predictions
=
self
.
execute
(
sess
.
run
(
init_op
)
graph_fn
,
[
np
.
random
.
rand
(
4
,
resolution
,
resolution
,
64
)])
(
box_encodings_shape
,
objectness_predictions_shape
)
=
sess
.
run
(
actual_variable_set
=
set
([
var
.
name
.
split
(
':'
)[
0
]
for
var
in
variables
])
[
tf
.
shape
(
box_encodings
),
tf
.
shape
(
objectness_predictions
)],
self
.
assertAllEqual
(
box_encodings
.
shape
,
[
4
,
expected_num_anchors
,
1
,
4
])
feed_dict
=
{
image_features
:
self
.
assertAllEqual
(
objectness_predictions
.
shape
,
np
.
random
.
rand
(
4
,
resolution
,
resolution
,
64
)})
[
4
,
expected_num_anchors
,
1
])
actual_variable_set
=
set
(
[
var
.
op
.
name
for
var
in
tf
.
trainable_variables
()])
self
.
assertAllEqual
(
box_encodings_shape
,
[
4
,
expected_num_anchors
,
1
,
4
])
self
.
assertAllEqual
(
objectness_predictions_shape
,
[
4
,
expected_num_anchors
,
1
])
expected_variable_set
=
set
([
expected_variable_set
=
set
([
'BoxPredictor/SharedConvolutions_0/Conv2d_0_1x1_32/bias'
,
'BoxPredictor/SharedConvolutions_0/Conv2d_0_1x1_32/bias'
,
'BoxPredictor/SharedConvolutions_0/Conv2d_0_1x1_32/kernel'
,
'BoxPredictor/SharedConvolutions_0/Conv2d_0_1x1_32/kernel'
,
...
@@ -195,7 +195,7 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -195,7 +195,7 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
[
'box_encodings'
,
'class_predictions_with_background'
])
[
'box_encodings'
,
'class_predictions_with_background'
])
def
test_use_depthwise_convolution
(
self
):
def
test_use_depthwise_convolution
(
self
):
image_features
=
tf
.
placeholder
(
dtype
=
tf
.
float32
,
shape
=
[
4
,
None
,
None
,
64
]
)
tf
.
keras
.
backend
.
clear_session
(
)
conv_box_predictor
=
(
conv_box_predictor
=
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
box_predictor_builder
.
build_convolutional_keras_box_predictor
(
is_training
=
False
,
is_training
=
False
,
...
@@ -213,27 +213,25 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -213,27 +213,25 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
box_code_size
=
4
,
box_code_size
=
4
,
use_depthwise
=
True
use_depthwise
=
True
))
))
box_predictions
=
conv_box_predictor
([
image_features
])
variables
=
[]
box_encodings
=
tf
.
concat
(
def
graph_fn
(
image_features
):
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
=
conv_box_predictor
([
image_features
])
objectness_predictions
=
tf
.
concat
(
variables
.
extend
(
list
(
conv_box_predictor
.
variables
))
box_predictions
[
box_predictor
.
CLASS_PREDICTIONS_WITH_BACKGROUND
],
box_encodings
=
tf
.
concat
(
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
init_op
=
tf
.
global_variables_initializer
()
objectness_predictions
=
tf
.
concat
(
box_predictions
[
box_predictor
.
CLASS_PREDICTIONS_WITH_BACKGROUND
],
axis
=
1
)
return
box_encodings
,
objectness_predictions
resolution
=
32
resolution
=
32
expected_num_anchors
=
resolution
*
resolution
*
5
expected_num_anchors
=
resolution
*
resolution
*
5
with
self
.
test_session
()
as
sess
:
box_encodings
,
objectness_predictions
=
self
.
execute
(
sess
.
run
(
init_op
)
graph_fn
,
[
np
.
random
.
rand
(
4
,
resolution
,
resolution
,
64
)])
(
box_encodings_shape
,
objectness_predictions_shape
)
=
sess
.
run
(
actual_variable_set
=
set
([
var
.
name
.
split
(
':'
)[
0
]
for
var
in
variables
])
[
tf
.
shape
(
box_encodings
),
tf
.
shape
(
objectness_predictions
)],
self
.
assertAllEqual
(
box_encodings
.
shape
,
[
4
,
expected_num_anchors
,
1
,
4
])
feed_dict
=
{
image_features
:
self
.
assertAllEqual
(
objectness_predictions
.
shape
,
np
.
random
.
rand
(
4
,
resolution
,
resolution
,
64
)})
actual_variable_set
=
set
(
[
var
.
op
.
name
for
var
in
tf
.
trainable_variables
()])
self
.
assertAllEqual
(
box_encodings_shape
,
[
4
,
expected_num_anchors
,
1
,
4
])
self
.
assertAllEqual
(
objectness_predictions_shape
,
[
4
,
expected_num_anchors
,
1
])
[
4
,
expected_num_anchors
,
1
])
expected_variable_set
=
set
([
expected_variable_set
=
set
([
'BoxPredictor/SharedConvolutions_0/Conv2d_0_1x1_32/bias'
,
'BoxPredictor/SharedConvolutions_0/Conv2d_0_1x1_32/bias'
,
...
@@ -259,6 +257,7 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -259,6 +257,7 @@ class ConvolutionalKerasBoxPredictorTest(test_case.TestCase):
[
'box_encodings'
,
'class_predictions_with_background'
])
[
'box_encodings'
,
'class_predictions_with_background'
])
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
WeightSharedConvolutionalKerasBoxPredictorTest
(
test_case
.
TestCase
):
class
WeightSharedConvolutionalKerasBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
,
add_batch_norm
=
True
):
def
_build_conv_hyperparams
(
self
,
add_batch_norm
=
True
):
...
@@ -288,19 +287,20 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -288,19 +287,20 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
# pylint: disable=line-too-long
# pylint: disable=line-too-long
def
test_get_boxes_for_five_aspect_ratios_per_location
(
self
):
def
test_get_boxes_for_five_aspect_ratios_per_location
(
self
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
0
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
0
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features
])
box_predictions
=
conv_box_predictor
([
image_features
])
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
...
@@ -314,20 +314,21 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -314,20 +314,21 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
self
.
assertAllEqual
(
objectness_predictions
.
shape
,
[
4
,
320
,
1
])
self
.
assertAllEqual
(
objectness_predictions
.
shape
,
[
4
,
320
,
1
])
def
test_bias_predictions_to_background_with_sigmoid_score_conversion
(
self
):
def
test_bias_predictions_to_background_with_sigmoid_score_conversion
(
self
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
True
,
num_classes
=
2
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
class_prediction_bias_init
=-
4.6
,
box_code_size
=
4
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
True
,
num_classes
=
2
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
class_prediction_bias_init
=-
4.6
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features
])
box_predictions
=
conv_box_predictor
([
image_features
])
class_predictions
=
tf
.
concat
(
box_predictions
[
class_predictions
=
tf
.
concat
(
box_predictions
[
box_predictor
.
CLASS_PREDICTIONS_WITH_BACKGROUND
],
axis
=
1
)
box_predictor
.
CLASS_PREDICTIONS_WITH_BACKGROUND
],
axis
=
1
)
...
@@ -339,20 +340,21 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -339,20 +340,21 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_get_multi_class_predictions_for_five_aspect_ratios_per_location
(
def
test_get_multi_class_predictions_for_five_aspect_ratios_per_location
(
self
):
self
):
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features
])
box_predictions
=
conv_box_predictor
([
image_features
])
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
...
@@ -369,20 +371,21 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -369,20 +371,21 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_get_multi_class_predictions_from_two_feature_maps
(
def
test_get_multi_class_predictions_from_two_feature_maps
(
self
):
self
):
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
def
graph_fn
(
image_features1
,
image_features2
):
def
graph_fn
(
image_features1
,
image_features2
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features1
,
image_features2
])
box_predictions
=
conv_box_predictor
([
image_features1
,
image_features2
])
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
...
@@ -401,20 +404,21 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -401,20 +404,21 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_get_multi_class_predictions_from_feature_maps_of_different_depth
(
def
test_get_multi_class_predictions_from_feature_maps_of_different_depth
(
self
):
self
):
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
def
graph_fn
(
image_features1
,
image_features2
,
image_features3
):
def
graph_fn
(
image_features1
,
image_features2
,
image_features3
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
(
box_predictions
=
conv_box_predictor
(
[
image_features1
,
image_features2
,
image_features3
])
[
image_features1
,
image_features2
,
image_features3
])
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
...
@@ -435,20 +439,25 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -435,20 +439,25 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_predictions_multiple_feature_maps_share_weights_separate_batchnorm
(
def
test_predictions_multiple_feature_maps_share_weights_separate_batchnorm
(
self
):
self
):
tf
.
keras
.
backend
.
clear_session
()
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
))
variables
=
[]
def
graph_fn
(
image_features1
,
image_features2
):
def
graph_fn
(
image_features1
,
image_features2
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features1
,
image_features2
])
box_predictions
=
conv_box_predictor
([
image_features1
,
image_features2
])
variables
.
extend
(
list
(
conv_box_predictor
.
variables
))
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
class_predictions_with_background
=
tf
.
concat
(
class_predictions_with_background
=
tf
.
concat
(
...
@@ -456,25 +465,41 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -456,25 +465,41 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
axis
=
1
)
axis
=
1
)
return
(
box_encodings
,
class_predictions_with_background
)
return
(
box_encodings
,
class_predictions_with_background
)
with
self
.
test_session
(
graph
=
tf
.
Graph
()):
self
.
execute
(
graph_fn
,
[
graph_fn
(
tf
.
random_uniform
([
4
,
32
,
32
,
3
],
d
type
=
tf
.
float32
),
np
.
random
.
rand
(
4
,
32
,
32
,
3
).
as
type
(
np
.
float32
),
tf
.
random_uniform
([
4
,
16
,
16
,
3
],
d
type
=
tf
.
float32
)
)
np
.
random
.
rand
(
4
,
16
,
16
,
3
).
as
type
(
np
.
float32
)
actual_variable_set
=
set
(
])
[
var
.
op
.
name
for
var
in
tf
.
trainable_
variables
()
])
actual_variable_set
=
set
(
[
var
.
name
.
split
(
':'
)[
0
]
for
var
in
variables
])
expected_variable_set
=
set
([
expected_variable_set
=
set
([
# Box prediction tower
# Box prediction tower
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_0/kernel'
),
'BoxPredictionTower/conv2d_0/kernel'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_0/BatchNorm/feature_0/beta'
),
'BoxPredictionTower/conv2d_0/BatchNorm/feature_0/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_0/BatchNorm/feature_0/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_0/BatchNorm/feature_0/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_0/BatchNorm/feature_1/beta'
),
'BoxPredictionTower/conv2d_0/BatchNorm/feature_1/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_0/BatchNorm/feature_1/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_0/BatchNorm/feature_1/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_1/kernel'
),
'BoxPredictionTower/conv2d_1/kernel'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_1/BatchNorm/feature_0/beta'
),
'BoxPredictionTower/conv2d_1/BatchNorm/feature_0/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_1/BatchNorm/feature_0/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_1/BatchNorm/feature_0/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_1/BatchNorm/feature_1/beta'
),
'BoxPredictionTower/conv2d_1/BatchNorm/feature_1/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_1/BatchNorm/feature_1/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'BoxPredictionTower/conv2d_1/BatchNorm/feature_1/moving_variance'
),
# Box prediction head
# Box prediction head
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'WeightSharedConvolutionalBoxHead/BoxPredictor/kernel'
),
'WeightSharedConvolutionalBoxHead/BoxPredictor/kernel'
),
...
@@ -485,14 +510,30 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -485,14 +510,30 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
'ClassPredictionTower/conv2d_0/kernel'
),
'ClassPredictionTower/conv2d_0/kernel'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_0/BatchNorm/feature_0/beta'
),
'ClassPredictionTower/conv2d_0/BatchNorm/feature_0/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_0/BatchNorm/feature_0/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_0/BatchNorm/feature_0/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_0/BatchNorm/feature_1/beta'
),
'ClassPredictionTower/conv2d_0/BatchNorm/feature_1/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_0/BatchNorm/feature_1/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_0/BatchNorm/feature_1/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_1/kernel'
),
'ClassPredictionTower/conv2d_1/kernel'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_1/BatchNorm/feature_0/beta'
),
'ClassPredictionTower/conv2d_1/BatchNorm/feature_0/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_1/BatchNorm/feature_0/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_1/BatchNorm/feature_0/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_1/BatchNorm/feature_1/beta'
),
'ClassPredictionTower/conv2d_1/BatchNorm/feature_1/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_1/BatchNorm/feature_1/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'ClassPredictionTower/conv2d_1/BatchNorm/feature_1/moving_variance'
),
# Class prediction head
# Class prediction head
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'WeightSharedConvolutionalClassHead/ClassPredictor/kernel'
),
'WeightSharedConvolutionalClassHead/ClassPredictor/kernel'
),
...
@@ -502,21 +543,26 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -502,21 +543,26 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_predictions_multiple_feature_maps_share_weights_without_batchnorm
(
def
test_predictions_multiple_feature_maps_share_weights_without_batchnorm
(
self
):
self
):
tf
.
keras
.
backend
.
clear_session
()
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
apply_batch_norm
=
False
))
variables
=
[]
def
graph_fn
(
image_features1
,
image_features2
):
def
graph_fn
(
image_features1
,
image_features2
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
apply_batch_norm
=
False
))
box_predictions
=
conv_box_predictor
([
image_features1
,
image_features2
])
box_predictions
=
conv_box_predictor
([
image_features1
,
image_features2
])
variables
.
extend
(
list
(
conv_box_predictor
.
variables
))
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
class_predictions_with_background
=
tf
.
concat
(
class_predictions_with_background
=
tf
.
concat
(
...
@@ -524,11 +570,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -524,11 +570,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
axis
=
1
)
axis
=
1
)
return
(
box_encodings
,
class_predictions_with_background
)
return
(
box_encodings
,
class_predictions_with_background
)
with
self
.
test_session
(
graph
=
tf
.
Graph
()):
self
.
execute
(
graph_fn
,
[
graph_fn
(
tf
.
random_uniform
([
4
,
32
,
32
,
3
],
d
type
=
tf
.
float32
),
np
.
random
.
rand
(
4
,
32
,
32
,
3
).
as
type
(
np
.
float32
),
tf
.
random_uniform
([
4
,
16
,
16
,
3
],
d
type
=
tf
.
float32
)
)
np
.
random
.
rand
(
4
,
16
,
16
,
3
).
as
type
(
np
.
float32
)
actual_variable_set
=
set
(
])
[
var
.
op
.
name
for
var
in
tf
.
trainable_
variables
()
])
actual_variable_set
=
set
(
[
var
.
name
.
split
(
':'
)[
0
]
for
var
in
variables
])
expected_variable_set
=
set
([
expected_variable_set
=
set
([
# Box prediction tower
# Box prediction tower
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
...
@@ -562,23 +608,27 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -562,23 +608,27 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_predictions_multiple_feature_maps_share_weights_with_depthwise
(
def
test_predictions_multiple_feature_maps_share_weights_with_depthwise
(
self
):
self
):
tf
.
keras
.
backend
.
clear_session
()
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
apply_batch_norm
=
False
,
use_depthwise
=
True
))
variables
=
[]
def
graph_fn
(
image_features1
,
image_features2
):
def
graph_fn
(
image_features1
,
image_features2
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
apply_batch_norm
=
False
,
use_depthwise
=
True
))
box_predictions
=
conv_box_predictor
([
image_features1
,
image_features2
])
box_predictions
=
conv_box_predictor
([
image_features1
,
image_features2
])
variables
.
extend
(
list
(
conv_box_predictor
.
variables
))
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
class_predictions_with_background
=
tf
.
concat
(
class_predictions_with_background
=
tf
.
concat
(
...
@@ -586,11 +636,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -586,11 +636,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
axis
=
1
)
axis
=
1
)
return
(
box_encodings
,
class_predictions_with_background
)
return
(
box_encodings
,
class_predictions_with_background
)
with
self
.
test_session
(
graph
=
tf
.
Graph
()):
self
.
execute
(
graph_fn
,
[
graph_fn
(
tf
.
random_uniform
([
4
,
32
,
32
,
3
],
d
type
=
tf
.
float32
),
np
.
random
.
rand
(
4
,
32
,
32
,
3
).
as
type
(
np
.
float32
),
tf
.
random_uniform
([
4
,
16
,
16
,
3
],
d
type
=
tf
.
float32
)
)
np
.
random
.
rand
(
4
,
16
,
16
,
3
).
as
type
(
np
.
float32
)
actual_variable_set
=
set
(
])
[
var
.
op
.
name
for
var
in
tf
.
trainable_
variables
()
])
actual_variable_set
=
set
(
[
var
.
name
.
split
(
':'
)[
0
]
for
var
in
variables
])
expected_variable_set
=
set
([
expected_variable_set
=
set
([
# Box prediction tower
# Box prediction tower
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
...
@@ -635,23 +685,27 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -635,23 +685,27 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
self
.
assertEqual
(
expected_variable_set
,
actual_variable_set
)
self
.
assertEqual
(
expected_variable_set
,
actual_variable_set
)
def
test_no_batchnorm_params_when_batchnorm_is_not_configured
(
self
):
def
test_no_batchnorm_params_when_batchnorm_is_not_configured
(
self
):
tf
.
keras
.
backend
.
clear_session
()
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
apply_batch_norm
=
False
))
variables
=
[]
def
graph_fn
(
image_features1
,
image_features2
):
def
graph_fn
(
image_features1
,
image_features2
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
apply_batch_norm
=
False
))
box_predictions
=
conv_box_predictor
(
box_predictions
=
conv_box_predictor
(
[
image_features1
,
image_features2
])
[
image_features1
,
image_features2
])
variables
.
extend
(
list
(
conv_box_predictor
.
variables
))
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
class_predictions_with_background
=
tf
.
concat
(
class_predictions_with_background
=
tf
.
concat
(
...
@@ -659,11 +713,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -659,11 +713,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
axis
=
1
)
axis
=
1
)
return
(
box_encodings
,
class_predictions_with_background
)
return
(
box_encodings
,
class_predictions_with_background
)
with
self
.
test_session
(
graph
=
tf
.
Graph
()):
self
.
execute
(
graph_fn
,
[
graph_fn
(
tf
.
random_uniform
([
4
,
32
,
32
,
3
],
d
type
=
tf
.
float32
),
np
.
random
.
rand
(
4
,
32
,
32
,
3
).
as
type
(
np
.
float32
),
tf
.
random_uniform
([
4
,
16
,
16
,
3
],
d
type
=
tf
.
float32
)
)
np
.
random
.
rand
(
4
,
16
,
16
,
3
).
as
type
(
np
.
float32
)
actual_variable_set
=
set
(
])
[
var
.
op
.
name
for
var
in
tf
.
trainable_
variables
()
])
actual_variable_set
=
set
(
[
var
.
name
.
split
(
':'
)[
0
]
for
var
in
variables
])
expected_variable_set
=
set
([
expected_variable_set
=
set
([
# Box prediction tower
# Box prediction tower
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
...
@@ -697,22 +751,27 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -697,22 +751,27 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_predictions_share_weights_share_tower_separate_batchnorm
(
def
test_predictions_share_weights_share_tower_separate_batchnorm
(
self
):
self
):
tf
.
keras
.
backend
.
clear_session
()
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
share_prediction_tower
=
True
))
variables
=
[]
def
graph_fn
(
image_features1
,
image_features2
):
def
graph_fn
(
image_features1
,
image_features2
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
share_prediction_tower
=
True
))
box_predictions
=
conv_box_predictor
(
box_predictions
=
conv_box_predictor
(
[
image_features1
,
image_features2
])
[
image_features1
,
image_features2
])
variables
.
extend
(
list
(
conv_box_predictor
.
variables
))
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
class_predictions_with_background
=
tf
.
concat
(
class_predictions_with_background
=
tf
.
concat
(
...
@@ -720,11 +779,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -720,11 +779,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
axis
=
1
)
axis
=
1
)
return
(
box_encodings
,
class_predictions_with_background
)
return
(
box_encodings
,
class_predictions_with_background
)
with
self
.
test_session
(
graph
=
tf
.
Graph
()):
self
.
execute
(
graph_fn
,
[
graph_fn
(
tf
.
random_uniform
([
4
,
32
,
32
,
3
],
d
type
=
tf
.
float32
),
np
.
random
.
rand
(
4
,
32
,
32
,
3
).
as
type
(
np
.
float32
),
tf
.
random_uniform
([
4
,
16
,
16
,
3
],
d
type
=
tf
.
float32
)
)
np
.
random
.
rand
(
4
,
16
,
16
,
3
).
as
type
(
np
.
float32
)
actual_variable_set
=
set
(
])
[
var
.
op
.
name
for
var
in
tf
.
trainable_
variables
()
])
actual_variable_set
=
set
(
[
var
.
name
.
split
(
':'
)[
0
]
for
var
in
variables
])
expected_variable_set
=
set
([
expected_variable_set
=
set
([
# Shared prediction tower
# Shared prediction tower
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
...
@@ -733,12 +792,28 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -733,12 +792,28 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
'PredictionTower/conv2d_0/BatchNorm/feature_0/beta'
),
'PredictionTower/conv2d_0/BatchNorm/feature_0/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_0/BatchNorm/feature_1/beta'
),
'PredictionTower/conv2d_0/BatchNorm/feature_1/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_0/BatchNorm/feature_0/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_0/BatchNorm/feature_1/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_0/BatchNorm/feature_0/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_0/BatchNorm/feature_1/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_1/kernel'
),
'PredictionTower/conv2d_1/kernel'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_1/BatchNorm/feature_0/beta'
),
'PredictionTower/conv2d_1/BatchNorm/feature_0/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_1/BatchNorm/feature_1/beta'
),
'PredictionTower/conv2d_1/BatchNorm/feature_1/beta'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_1/BatchNorm/feature_0/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_1/BatchNorm/feature_1/moving_mean'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_1/BatchNorm/feature_0/moving_variance'
),
(
'WeightSharedConvolutionalBoxPredictor/'
'PredictionTower/conv2d_1/BatchNorm/feature_1/moving_variance'
),
# Box prediction head
# Box prediction head
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
'WeightSharedConvolutionalBoxHead/BoxPredictor/kernel'
),
'WeightSharedConvolutionalBoxHead/BoxPredictor/kernel'
),
...
@@ -753,24 +828,28 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -753,24 +828,28 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
def
test_predictions_share_weights_share_tower_without_batchnorm
(
def
test_predictions_share_weights_share_tower_without_batchnorm
(
self
):
self
):
tf
.
keras
.
backend
.
clear_session
()
num_classes_without_background
=
6
num_classes_without_background
=
6
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
share_prediction_tower
=
True
,
apply_batch_norm
=
False
))
variables
=
[]
def
graph_fn
(
image_features1
,
image_features2
):
def
graph_fn
(
image_features1
,
image_features2
):
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(
add_batch_norm
=
False
),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
,
5
],
depth
=
32
,
num_layers_before_predictor
=
2
,
box_code_size
=
4
,
share_prediction_tower
=
True
,
apply_batch_norm
=
False
))
box_predictions
=
conv_box_predictor
(
box_predictions
=
conv_box_predictor
(
[
image_features1
,
image_features2
])
[
image_features1
,
image_features2
])
variables
.
extend
(
list
(
conv_box_predictor
.
variables
))
box_encodings
=
tf
.
concat
(
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
class_predictions_with_background
=
tf
.
concat
(
class_predictions_with_background
=
tf
.
concat
(
...
@@ -778,11 +857,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -778,11 +857,11 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
axis
=
1
)
axis
=
1
)
return
(
box_encodings
,
class_predictions_with_background
)
return
(
box_encodings
,
class_predictions_with_background
)
with
self
.
test_session
(
graph
=
tf
.
Graph
()):
self
.
execute
(
graph_fn
,
[
graph_fn
(
tf
.
random_uniform
([
4
,
32
,
32
,
3
],
d
type
=
tf
.
float32
),
np
.
random
.
rand
(
4
,
32
,
32
,
3
).
as
type
(
np
.
float32
),
tf
.
random_uniform
([
4
,
16
,
16
,
3
],
d
type
=
tf
.
float32
)
)
np
.
random
.
rand
(
4
,
16
,
16
,
3
).
as
type
(
np
.
float32
)
actual_variable_set
=
set
(
])
[
var
.
op
.
name
for
var
in
tf
.
trainable_
variables
()
])
actual_variable_set
=
set
(
[
var
.
name
.
split
(
':'
)[
0
]
for
var
in
variables
])
expected_variable_set
=
set
([
expected_variable_set
=
set
([
# Shared prediction tower
# Shared prediction tower
(
'WeightSharedConvolutionalBoxPredictor/'
(
'WeightSharedConvolutionalBoxPredictor/'
...
@@ -806,40 +885,6 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -806,40 +885,6 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
self
.
assertEqual
(
expected_variable_set
,
actual_variable_set
)
self
.
assertEqual
(
expected_variable_set
,
actual_variable_set
)
def
test_get_predictions_with_feature_maps_of_dynamic_shape
(
self
):
image_features
=
tf
.
placeholder
(
dtype
=
tf
.
float32
,
shape
=
[
4
,
None
,
None
,
64
])
conv_box_predictor
=
(
box_predictor_builder
.
build_weight_shared_convolutional_keras_box_predictor
(
is_training
=
False
,
num_classes
=
0
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
num_predictions_per_location_list
=
[
5
],
depth
=
32
,
num_layers_before_predictor
=
1
,
box_code_size
=
4
))
box_predictions
=
conv_box_predictor
([
image_features
])
box_encodings
=
tf
.
concat
(
box_predictions
[
box_predictor
.
BOX_ENCODINGS
],
axis
=
1
)
objectness_predictions
=
tf
.
concat
(
box_predictions
[
box_predictor
.
CLASS_PREDICTIONS_WITH_BACKGROUND
],
axis
=
1
)
init_op
=
tf
.
global_variables_initializer
()
resolution
=
32
expected_num_anchors
=
resolution
*
resolution
*
5
with
self
.
test_session
()
as
sess
:
sess
.
run
(
init_op
)
(
box_encodings_shape
,
objectness_predictions_shape
)
=
sess
.
run
(
[
tf
.
shape
(
box_encodings
),
tf
.
shape
(
objectness_predictions
)],
feed_dict
=
{
image_features
:
np
.
random
.
rand
(
4
,
resolution
,
resolution
,
64
)})
self
.
assertAllEqual
(
box_encodings_shape
,
[
4
,
expected_num_anchors
,
4
])
self
.
assertAllEqual
(
objectness_predictions_shape
,
[
4
,
expected_num_anchors
,
1
])
def
test_other_heads_predictions
(
self
):
def
test_other_heads_predictions
(
self
):
box_code_size
=
4
box_code_size
=
4
num_classes_without_background
=
3
num_classes_without_background
=
3
...
@@ -847,37 +892,36 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
...
@@ -847,37 +892,36 @@ class WeightSharedConvolutionalKerasBoxPredictorTest(test_case.TestCase):
mask_height
=
5
mask_height
=
5
mask_width
=
5
mask_width
=
5
num_predictions_per_location
=
5
num_predictions_per_location
=
5
box_prediction_head
=
keras_box_head
.
WeightSharedConvolutionalBoxHead
(
box_code_size
=
box_code_size
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
num_predictions_per_location
=
num_predictions_per_location
)
class_prediction_head
=
keras_class_head
.
WeightSharedConvolutionalClassHead
(
num_class_slots
=
num_classes_without_background
+
1
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
num_predictions_per_location
=
num_predictions_per_location
)
other_heads
=
{
other_head_name
:
keras_mask_head
.
WeightSharedConvolutionalMaskHead
(
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
num_predictions_per_location
=
num_predictions_per_location
,
mask_height
=
mask_height
,
mask_width
=
mask_width
)
}
conv_box_predictor
=
box_predictor
.
WeightSharedConvolutionalBoxPredictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
box_prediction_head
=
box_prediction_head
,
class_prediction_head
=
class_prediction_head
,
other_heads
=
other_heads
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
depth
=
32
,
num_layers_before_predictor
=
2
)
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
box_prediction_head
=
keras_box_head
.
WeightSharedConvolutionalBoxHead
(
box_code_size
=
box_code_size
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
num_predictions_per_location
=
num_predictions_per_location
)
class_prediction_head
=
keras_class_head
.
WeightSharedConvolutionalClassHead
(
num_class_slots
=
num_classes_without_background
+
1
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
num_predictions_per_location
=
num_predictions_per_location
)
other_heads
=
{
other_head_name
:
keras_mask_head
.
WeightSharedConvolutionalMaskHead
(
num_classes
=
num_classes_without_background
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
num_predictions_per_location
=
num_predictions_per_location
,
mask_height
=
mask_height
,
mask_width
=
mask_width
)
}
conv_box_predictor
=
box_predictor
.
WeightSharedConvolutionalBoxPredictor
(
is_training
=
False
,
num_classes
=
num_classes_without_background
,
box_prediction_head
=
box_prediction_head
,
class_prediction_head
=
class_prediction_head
,
other_heads
=
other_heads
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
inplace_batchnorm_update
=
False
,
depth
=
32
,
num_layers_before_predictor
=
2
)
box_predictions
=
conv_box_predictor
([
image_features
])
box_predictions
=
conv_box_predictor
([
image_features
])
for
key
,
value
in
box_predictions
.
items
():
for
key
,
value
in
box_predictions
.
items
():
box_predictions
[
key
]
=
tf
.
concat
(
value
,
axis
=
1
)
box_predictions
[
key
]
=
tf
.
concat
(
value
,
axis
=
1
)
...
...
research/object_detection/predictors/heads/box_head_test.py
→
research/object_detection/predictors/heads/box_head_
tf1_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.heads.box_head."""
"""Tests for object_detection.predictors.heads.box_head."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
google.protobuf
import
text_format
from
google.protobuf
import
text_format
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors.heads
import
box_head
from
object_detection.predictors.heads
import
box_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
MaskRCNNBoxHeadTest
(
test_case
.
TestCase
):
class
MaskRCNNBoxHeadTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
self
,
def
_build_arg_scope_with_hyperparams
(
self
,
...
@@ -59,6 +62,7 @@ class MaskRCNNBoxHeadTest(test_case.TestCase):
...
@@ -59,6 +62,7 @@ class MaskRCNNBoxHeadTest(test_case.TestCase):
self
.
assertAllEqual
([
64
,
1
,
20
,
4
],
prediction
.
get_shape
().
as_list
())
self
.
assertAllEqual
([
64
,
1
,
20
,
4
],
prediction
.
get_shape
().
as_list
())
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
ConvolutionalBoxPredictorTest
(
test_case
.
TestCase
):
class
ConvolutionalBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
def
_build_arg_scope_with_hyperparams
(
...
@@ -92,6 +96,7 @@ class ConvolutionalBoxPredictorTest(test_case.TestCase):
...
@@ -92,6 +96,7 @@ class ConvolutionalBoxPredictorTest(test_case.TestCase):
self
.
assertAllEqual
([
64
,
323
,
1
,
4
],
box_encodings
.
get_shape
().
as_list
())
self
.
assertAllEqual
([
64
,
323
,
1
,
4
],
box_encodings
.
get_shape
().
as_list
())
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
WeightSharedConvolutionalBoxPredictorTest
(
test_case
.
TestCase
):
class
WeightSharedConvolutionalBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
def
_build_arg_scope_with_hyperparams
(
...
...
research/object_detection/predictors/heads/class_head_test.py
→
research/object_detection/predictors/heads/class_head_
tf1_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.heads.class_head."""
"""Tests for object_detection.predictors.heads.class_head."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
google.protobuf
import
text_format
from
google.protobuf
import
text_format
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors.heads
import
class_head
from
object_detection.predictors.heads
import
class_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
MaskRCNNClassHeadTest
(
test_case
.
TestCase
):
class
MaskRCNNClassHeadTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
self
,
def
_build_arg_scope_with_hyperparams
(
self
,
...
@@ -81,6 +84,7 @@ class MaskRCNNClassHeadTest(test_case.TestCase):
...
@@ -81,6 +84,7 @@ class MaskRCNNClassHeadTest(test_case.TestCase):
self
.
assertSetEqual
(
expected_var_names
,
actual_variable_set
)
self
.
assertSetEqual
(
expected_var_names
,
actual_variable_set
)
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
ConvolutionalClassPredictorTest
(
test_case
.
TestCase
):
class
ConvolutionalClassPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
def
_build_arg_scope_with_hyperparams
(
...
@@ -140,6 +144,7 @@ class ConvolutionalClassPredictorTest(test_case.TestCase):
...
@@ -140,6 +144,7 @@ class ConvolutionalClassPredictorTest(test_case.TestCase):
self
.
assertSetEqual
(
expected_var_names
,
actual_variable_set
)
self
.
assertSetEqual
(
expected_var_names
,
actual_variable_set
)
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
WeightSharedConvolutionalClassPredictorTest
(
test_case
.
TestCase
):
class
WeightSharedConvolutionalClassPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
def
_build_arg_scope_with_hyperparams
(
...
...
research/object_detection/predictors/heads/keras_box_head_test.py
→
research/object_detection/predictors/heads/keras_box_head_
tf2_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.heads.box_head."""
"""Tests for object_detection.predictors.heads.box_head."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
google.protobuf
import
text_format
from
google.protobuf
import
text_format
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors.heads
import
keras_box_head
from
object_detection.predictors.heads
import
keras_box_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
ConvolutionalKerasBoxHeadTest
(
test_case
.
TestCase
):
class
ConvolutionalKerasBoxHeadTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
):
def
_build_conv_hyperparams
(
self
):
...
@@ -51,10 +54,13 @@ class ConvolutionalKerasBoxHeadTest(test_case.TestCase):
...
@@ -51,10 +54,13 @@ class ConvolutionalKerasBoxHeadTest(test_case.TestCase):
freeze_batchnorm
=
False
,
freeze_batchnorm
=
False
,
num_predictions_per_location
=
1
,
num_predictions_per_location
=
1
,
use_depthwise
=
False
)
use_depthwise
=
False
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
box_encodings
=
box_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
1
,
4
],
box_encodings
.
get_shape
().
as_list
())
box_encodings
=
box_prediction_head
(
image_feature
)
return
box_encodings
box_encodings
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
1
,
4
],
box_encodings
.
shape
)
def
test_prediction_size_depthwise_true
(
self
):
def
test_prediction_size_depthwise_true
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
...
@@ -66,12 +72,16 @@ class ConvolutionalKerasBoxHeadTest(test_case.TestCase):
...
@@ -66,12 +72,16 @@ class ConvolutionalKerasBoxHeadTest(test_case.TestCase):
freeze_batchnorm
=
False
,
freeze_batchnorm
=
False
,
num_predictions_per_location
=
1
,
num_predictions_per_location
=
1
,
use_depthwise
=
True
)
use_depthwise
=
True
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
box_encodings
=
box_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
1
,
4
],
box_encodings
.
get_shape
().
as_list
())
box_encodings
=
box_prediction_head
(
image_feature
)
return
box_encodings
box_encodings
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
1
,
4
],
box_encodings
.
shape
)
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
MaskRCNNKerasBoxHeadTest
(
test_case
.
TestCase
):
class
MaskRCNNKerasBoxHeadTest
(
test_case
.
TestCase
):
def
_build_fc_hyperparams
(
def
_build_fc_hyperparams
(
...
@@ -102,12 +112,16 @@ class MaskRCNNKerasBoxHeadTest(test_case.TestCase):
...
@@ -102,12 +112,16 @@ class MaskRCNNKerasBoxHeadTest(test_case.TestCase):
dropout_keep_prob
=
0.5
,
dropout_keep_prob
=
0.5
,
box_code_size
=
4
,
box_code_size
=
4
,
share_box_across_classes
=
False
)
share_box_across_classes
=
False
)
roi_pooled_features
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
7
,
7
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
roi_pooled_features
=
tf
.
random_uniform
(
prediction
=
box_prediction_head
(
roi_pooled_features
)
[
64
,
7
,
7
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
1
,
20
,
4
],
prediction
.
get_shape
().
as_list
())
prediction
=
box_prediction_head
(
roi_pooled_features
)
return
prediction
prediction
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
1
,
20
,
4
],
prediction
.
shape
)
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
WeightSharedConvolutionalKerasBoxHead
(
test_case
.
TestCase
):
class
WeightSharedConvolutionalKerasBoxHead
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
):
def
_build_conv_hyperparams
(
self
):
...
@@ -133,10 +147,13 @@ class WeightSharedConvolutionalKerasBoxHead(test_case.TestCase):
...
@@ -133,10 +147,13 @@ class WeightSharedConvolutionalKerasBoxHead(test_case.TestCase):
conv_hyperparams
=
conv_hyperparams
,
conv_hyperparams
=
conv_hyperparams
,
num_predictions_per_location
=
1
,
num_predictions_per_location
=
1
,
use_depthwise
=
False
)
use_depthwise
=
False
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
box_encodings
=
box_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
4
],
box_encodings
.
get_shape
().
as_list
())
box_encodings
=
box_prediction_head
(
image_feature
)
return
box_encodings
box_encodings
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
4
],
box_encodings
.
shape
)
def
test_prediction_size_depthwise_true
(
self
):
def
test_prediction_size_depthwise_true
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
...
@@ -145,40 +162,38 @@ class WeightSharedConvolutionalKerasBoxHead(test_case.TestCase):
...
@@ -145,40 +162,38 @@ class WeightSharedConvolutionalKerasBoxHead(test_case.TestCase):
conv_hyperparams
=
conv_hyperparams
,
conv_hyperparams
=
conv_hyperparams
,
num_predictions_per_location
=
1
,
num_predictions_per_location
=
1
,
use_depthwise
=
True
)
use_depthwise
=
True
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
box_encodings
=
box_prediction_head
(
image_feature
)
self
.
assertAllEqual
([
64
,
323
,
4
],
box_encodings
.
get_shape
().
as_list
())
def
test_variable_count_depth_wise_true
(
self
):
g
=
tf
.
Graph
()
with
g
.
as_default
():
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
box_prediction_head
=
keras_box_head
.
WeightSharedConvolutionalBoxHead
(
box_code_size
=
4
,
conv_hyperparams
=
conv_hyperparams
,
num_predictions_per_location
=
1
,
use_depthwise
=
True
)
image_feature
=
tf
.
random_uniform
(
image_feature
=
tf
.
random_uniform
(
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
_
=
box_prediction_head
(
image_feature
)
box_encodings
=
box_prediction_head
(
image_feature
)
variables
=
g
.
get_collection
(
tf
.
GraphKeys
.
GLOBAL_VARIABLES
)
return
box_encodings
self
.
assertEqual
(
len
(
variables
),
3
)
box_encodings
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
4
],
box_encodings
.
shape
)
def
test_variable_count_depth_wise_true
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
box_prediction_head
=
keras_box_head
.
WeightSharedConvolutionalBoxHead
(
box_code_size
=
4
,
conv_hyperparams
=
conv_hyperparams
,
num_predictions_per_location
=
1
,
use_depthwise
=
True
)
image_feature
=
tf
.
random_uniform
(
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
box_prediction_head
(
image_feature
)
self
.
assertEqual
(
len
(
box_prediction_head
.
variables
),
3
)
def
test_variable_count_depth_wise_False
(
self
):
def
test_variable_count_depth_wise_False
(
self
):
g
=
tf
.
Graph
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
with
g
.
as_default
():
box_prediction_head
=
keras_box_head
.
WeightSharedConvolutionalBoxHead
(
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
box_code_size
=
4
,
box_prediction_head
=
keras_box_head
.
WeightSharedConvolutionalBoxHead
(
conv_hyperparams
=
conv_hyperparams
,
box_code_size
=
4
,
num_predictions_per_location
=
1
,
conv_hyperparams
=
conv_hyperparams
,
use_depthwise
=
False
)
num_predictions_per_location
=
1
,
image_feature
=
tf
.
random_uniform
(
use_depthwise
=
False
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
box_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertEqual
(
len
(
box_prediction_head
.
variables
),
2
)
_
=
box_prediction_head
(
image_feature
)
variables
=
g
.
get_collection
(
tf
.
GraphKeys
.
GLOBAL_VARIABLES
)
self
.
assertEqual
(
len
(
variables
),
2
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
tf
.
test
.
main
()
tf
.
test
.
main
()
research/object_detection/predictors/heads/keras_class_head_test.py
→
research/object_detection/predictors/heads/keras_class_head_
tf2_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.heads.class_head."""
"""Tests for object_detection.predictors.heads.class_head."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
google.protobuf
import
text_format
from
google.protobuf
import
text_format
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors.heads
import
keras_class_head
from
object_detection.predictors.heads
import
keras_class_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
ConvolutionalKerasClassPredictorTest
(
test_case
.
TestCase
):
class
ConvolutionalKerasClassPredictorTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
):
def
_build_conv_hyperparams
(
self
):
...
@@ -53,11 +56,13 @@ class ConvolutionalKerasClassPredictorTest(test_case.TestCase):
...
@@ -53,11 +56,13 @@ class ConvolutionalKerasClassPredictorTest(test_case.TestCase):
freeze_batchnorm
=
False
,
freeze_batchnorm
=
False
,
num_predictions_per_location
=
1
,
num_predictions_per_location
=
1
,
use_depthwise
=
False
)
use_depthwise
=
False
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
class_predictions
=
class_prediction_head
(
image_feature
,)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
20
],
class_predictions
=
class_prediction_head
(
image_feature
,)
class_predictions
.
get_shape
().
as_list
())
return
class_predictions
class_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
20
],
class_predictions
.
shape
)
def
test_prediction_size_depthwise_true
(
self
):
def
test_prediction_size_depthwise_true
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
...
@@ -71,13 +76,16 @@ class ConvolutionalKerasClassPredictorTest(test_case.TestCase):
...
@@ -71,13 +76,16 @@ class ConvolutionalKerasClassPredictorTest(test_case.TestCase):
freeze_batchnorm
=
False
,
freeze_batchnorm
=
False
,
num_predictions_per_location
=
1
,
num_predictions_per_location
=
1
,
use_depthwise
=
True
)
use_depthwise
=
True
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
class_predictions
=
class_prediction_head
(
image_feature
,)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
20
],
class_predictions
=
class_prediction_head
(
image_feature
,)
class_predictions
.
get_shape
().
as_list
())
return
class_predictions
class_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
20
],
class_predictions
.
shape
)
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
MaskRCNNClassHeadTest
(
test_case
.
TestCase
):
class
MaskRCNNClassHeadTest
(
test_case
.
TestCase
):
def
_build_fc_hyperparams
(
self
,
def
_build_fc_hyperparams
(
self
,
...
@@ -106,12 +114,16 @@ class MaskRCNNClassHeadTest(test_case.TestCase):
...
@@ -106,12 +114,16 @@ class MaskRCNNClassHeadTest(test_case.TestCase):
freeze_batchnorm
=
False
,
freeze_batchnorm
=
False
,
use_dropout
=
True
,
use_dropout
=
True
,
dropout_keep_prob
=
0.5
)
dropout_keep_prob
=
0.5
)
roi_pooled_features
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
7
,
7
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
roi_pooled_features
=
tf
.
random_uniform
(
prediction
=
class_prediction_head
(
roi_pooled_features
)
[
64
,
7
,
7
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
1
,
20
],
prediction
.
get_shape
().
as_list
())
prediction
=
class_prediction_head
(
roi_pooled_features
)
return
prediction
prediction
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
1
,
20
],
prediction
.
shape
)
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
WeightSharedConvolutionalKerasClassPredictorTest
(
test_case
.
TestCase
):
class
WeightSharedConvolutionalKerasClassPredictorTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
):
def
_build_conv_hyperparams
(
self
):
...
@@ -137,10 +149,13 @@ class WeightSharedConvolutionalKerasClassPredictorTest(test_case.TestCase):
...
@@ -137,10 +149,13 @@ class WeightSharedConvolutionalKerasClassPredictorTest(test_case.TestCase):
conv_hyperparams
=
conv_hyperparams
,
conv_hyperparams
=
conv_hyperparams
,
num_predictions_per_location
=
1
,
num_predictions_per_location
=
1
,
use_depthwise
=
False
)
use_depthwise
=
False
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
class_predictions
=
class_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
20
],
class_predictions
.
get_shape
().
as_list
())
class_predictions
=
class_prediction_head
(
image_feature
)
return
class_predictions
class_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
20
],
class_predictions
.
shape
)
def
test_prediction_size_depthwise_true
(
self
):
def
test_prediction_size_depthwise_true
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
...
@@ -149,42 +164,39 @@ class WeightSharedConvolutionalKerasClassPredictorTest(test_case.TestCase):
...
@@ -149,42 +164,39 @@ class WeightSharedConvolutionalKerasClassPredictorTest(test_case.TestCase):
conv_hyperparams
=
conv_hyperparams
,
conv_hyperparams
=
conv_hyperparams
,
num_predictions_per_location
=
1
,
num_predictions_per_location
=
1
,
use_depthwise
=
True
)
use_depthwise
=
True
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
class_predictions
=
class_prediction_head
(
image_feature
)
self
.
assertAllEqual
([
64
,
323
,
20
],
class_predictions
.
get_shape
().
as_list
())
def
test_variable_count_depth_wise_true
(
self
):
g
=
tf
.
Graph
()
with
g
.
as_default
():
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
class_prediction_head
=
(
keras_class_head
.
WeightSharedConvolutionalClassHead
(
num_class_slots
=
20
,
conv_hyperparams
=
conv_hyperparams
,
num_predictions_per_location
=
1
,
use_depthwise
=
True
))
image_feature
=
tf
.
random_uniform
(
image_feature
=
tf
.
random_uniform
(
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
_
=
class_prediction_head
(
image_feature
)
class_predictions
=
class_prediction_head
(
image_feature
)
variables
=
g
.
get_collection
(
tf
.
GraphKeys
.
GLOBAL_VARIABLES
)
return
class_predictions
self
.
assertEqual
(
len
(
variables
),
3
)
class_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
20
],
class_predictions
.
shape
)
def
test_variable_count_depth_wise_true
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
class_prediction_head
=
(
keras_class_head
.
WeightSharedConvolutionalClassHead
(
num_class_slots
=
20
,
conv_hyperparams
=
conv_hyperparams
,
num_predictions_per_location
=
1
,
use_depthwise
=
True
))
image_feature
=
tf
.
random_uniform
(
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
class_prediction_head
(
image_feature
)
self
.
assertEqual
(
len
(
class_prediction_head
.
variables
),
3
)
def
test_variable_count_depth_wise_False
(
self
):
def
test_variable_count_depth_wise_False
(
self
):
g
=
tf
.
Graph
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
with
g
.
as_default
():
class_prediction_head
=
(
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
keras_class_head
.
WeightSharedConvolutionalClassHead
(
class_prediction_head
=
(
num_class_slots
=
20
,
keras_class_head
.
WeightSharedConvolutionalClassHead
(
conv_hyperparams
=
conv_hyperparams
,
num_class_slots
=
20
,
num_predictions_per_location
=
1
,
conv_hyperparams
=
conv_hyperparams
,
use_depthwise
=
False
))
num_predictions_per_location
=
1
,
image_feature
=
tf
.
random_uniform
(
use_depthwise
=
False
))
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
class_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertEqual
(
len
(
class_prediction_head
.
variables
),
2
)
_
=
class_prediction_head
(
image_feature
)
variables
=
g
.
get_collection
(
tf
.
GraphKeys
.
GLOBAL_VARIABLES
)
self
.
assertEqual
(
len
(
variables
),
2
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
...
...
research/object_detection/predictors/heads/keras_mask_head_test.py
→
research/object_detection/predictors/heads/keras_mask_head_
tf2_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.heads.mask_head."""
"""Tests for object_detection.predictors.heads.mask_head."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
google.protobuf
import
text_format
from
google.protobuf
import
text_format
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors.heads
import
keras_mask_head
from
object_detection.predictors.heads
import
keras_mask_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
ConvolutionalMaskPredictorTest
(
test_case
.
TestCase
):
class
ConvolutionalMaskPredictorTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
):
def
_build_conv_hyperparams
(
self
):
...
@@ -55,11 +58,13 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
...
@@ -55,11 +58,13 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
use_depthwise
=
False
,
use_depthwise
=
False
,
mask_height
=
7
,
mask_height
=
7
,
mask_width
=
7
)
mask_width
=
7
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
mask_predictions
=
mask_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
20
,
7
,
7
],
mask_predictions
=
mask_prediction_head
(
image_feature
)
mask_predictions
.
get_shape
().
as_list
())
return
mask_predictions
mask_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
20
,
7
,
7
],
mask_predictions
.
shape
)
def
test_prediction_size_use_depthwise_true
(
self
):
def
test_prediction_size_use_depthwise_true
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
...
@@ -75,11 +80,13 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
...
@@ -75,11 +80,13 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
use_depthwise
=
True
,
use_depthwise
=
True
,
mask_height
=
7
,
mask_height
=
7
,
mask_width
=
7
)
mask_width
=
7
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
mask_predictions
=
mask_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
20
,
7
,
7
],
mask_predictions
=
mask_prediction_head
(
image_feature
)
mask_predictions
.
get_shape
().
as_list
())
return
mask_predictions
mask_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
20
,
7
,
7
],
mask_predictions
.
shape
)
def
test_class_agnostic_prediction_size_use_depthwise_false
(
self
):
def
test_class_agnostic_prediction_size_use_depthwise_false
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
...
@@ -96,11 +103,13 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
...
@@ -96,11 +103,13 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
mask_height
=
7
,
mask_height
=
7
,
mask_width
=
7
,
mask_width
=
7
,
masks_are_class_agnostic
=
True
)
masks_are_class_agnostic
=
True
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
mask_predictions
=
mask_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
1
,
7
,
7
],
mask_predictions
=
mask_prediction_head
(
image_feature
)
mask_predictions
.
get_shape
().
as_list
())
return
mask_predictions
mask_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
1
,
7
,
7
],
mask_predictions
.
shape
)
def
test_class_agnostic_prediction_size_use_depthwise_true
(
self
):
def
test_class_agnostic_prediction_size_use_depthwise_true
(
self
):
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
conv_hyperparams
=
self
.
_build_conv_hyperparams
()
...
@@ -117,13 +126,16 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
...
@@ -117,13 +126,16 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
mask_height
=
7
,
mask_height
=
7
,
mask_width
=
7
,
mask_width
=
7
,
masks_are_class_agnostic
=
True
)
masks_are_class_agnostic
=
True
)
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
mask_predictions
=
mask_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
1
,
7
,
7
],
mask_predictions
=
mask_prediction_head
(
image_feature
)
mask_predictions
.
get_shape
().
as_list
())
return
mask_predictions
mask_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
1
,
7
,
7
],
mask_predictions
.
shape
)
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
MaskRCNNMaskHeadTest
(
test_case
.
TestCase
):
class
MaskRCNNMaskHeadTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
,
def
_build_conv_hyperparams
(
self
,
...
@@ -155,10 +167,13 @@ class MaskRCNNMaskHeadTest(test_case.TestCase):
...
@@ -155,10 +167,13 @@ class MaskRCNNMaskHeadTest(test_case.TestCase):
mask_prediction_num_conv_layers
=
2
,
mask_prediction_num_conv_layers
=
2
,
mask_prediction_conv_depth
=
256
,
mask_prediction_conv_depth
=
256
,
masks_are_class_agnostic
=
False
)
masks_are_class_agnostic
=
False
)
roi_pooled_features
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
7
,
7
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
roi_pooled_features
=
tf
.
random_uniform
(
prediction
=
mask_prediction_head
(
roi_pooled_features
)
[
64
,
7
,
7
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
1
,
20
,
14
,
14
],
prediction
.
get_shape
().
as_list
())
prediction
=
mask_prediction_head
(
roi_pooled_features
)
return
prediction
prediction
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
1
,
20
,
14
,
14
],
prediction
.
shape
)
def
test_prediction_size_with_convolve_then_upsample
(
self
):
def
test_prediction_size_with_convolve_then_upsample
(
self
):
mask_prediction_head
=
keras_mask_head
.
MaskRCNNMaskHead
(
mask_prediction_head
=
keras_mask_head
.
MaskRCNNMaskHead
(
...
@@ -172,12 +187,16 @@ class MaskRCNNMaskHeadTest(test_case.TestCase):
...
@@ -172,12 +187,16 @@ class MaskRCNNMaskHeadTest(test_case.TestCase):
mask_prediction_conv_depth
=
256
,
mask_prediction_conv_depth
=
256
,
masks_are_class_agnostic
=
True
,
masks_are_class_agnostic
=
True
,
convolve_then_upsample
=
True
)
convolve_then_upsample
=
True
)
roi_pooled_features
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
14
,
14
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
roi_pooled_features
=
tf
.
random_uniform
(
prediction
=
mask_prediction_head
(
roi_pooled_features
)
[
64
,
14
,
14
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
1
,
1
,
28
,
28
],
prediction
.
get_shape
().
as_list
())
prediction
=
mask_prediction_head
(
roi_pooled_features
)
return
prediction
prediction
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
1
,
1
,
28
,
28
],
prediction
.
shape
)
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
WeightSharedConvolutionalMaskPredictorTest
(
test_case
.
TestCase
):
class
WeightSharedConvolutionalMaskPredictorTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
):
def
_build_conv_hyperparams
(
self
):
...
@@ -204,11 +223,13 @@ class WeightSharedConvolutionalMaskPredictorTest(test_case.TestCase):
...
@@ -204,11 +223,13 @@ class WeightSharedConvolutionalMaskPredictorTest(test_case.TestCase):
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
mask_height
=
7
,
mask_height
=
7
,
mask_width
=
7
))
mask_width
=
7
))
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
mask_predictions
=
mask_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
20
,
7
,
7
],
mask_predictions
=
mask_prediction_head
(
image_feature
)
mask_predictions
.
get_shape
().
as_list
())
return
mask_predictions
mask_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
20
,
7
,
7
],
mask_predictions
.
shape
)
def
test_class_agnostic_prediction_size
(
self
):
def
test_class_agnostic_prediction_size
(
self
):
mask_prediction_head
=
(
mask_prediction_head
=
(
...
@@ -219,11 +240,13 @@ class WeightSharedConvolutionalMaskPredictorTest(test_case.TestCase):
...
@@ -219,11 +240,13 @@ class WeightSharedConvolutionalMaskPredictorTest(test_case.TestCase):
mask_height
=
7
,
mask_height
=
7
,
mask_width
=
7
,
mask_width
=
7
,
masks_are_class_agnostic
=
True
))
masks_are_class_agnostic
=
True
))
image_feature
=
tf
.
random_uniform
(
def
graph_fn
():
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
image_feature
=
tf
.
random_uniform
(
mask_predictions
=
mask_prediction_head
(
image_feature
)
[
64
,
17
,
19
,
1024
],
minval
=-
10.0
,
maxval
=
10.0
,
dtype
=
tf
.
float32
)
self
.
assertAllEqual
([
64
,
323
,
1
,
7
,
7
],
mask_predictions
=
mask_prediction_head
(
image_feature
)
mask_predictions
.
get_shape
().
as_list
())
return
mask_predictions
mask_predictions
=
self
.
execute
(
graph_fn
,
[])
self
.
assertAllEqual
([
64
,
323
,
1
,
7
,
7
],
mask_predictions
.
shape
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
tf
.
test
.
main
()
tf
.
test
.
main
()
research/object_detection/predictors/heads/keypoint_head_test.py
→
research/object_detection/predictors/heads/keypoint_head_
tf1_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.heads.keypoint_head."""
"""Tests for object_detection.predictors.heads.keypoint_head."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
google.protobuf
import
text_format
from
google.protobuf
import
text_format
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors.heads
import
keypoint_head
from
object_detection.predictors.heads
import
keypoint_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
MaskRCNNKeypointHeadTest
(
test_case
.
TestCase
):
class
MaskRCNNKeypointHeadTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
self
,
def
_build_arg_scope_with_hyperparams
(
self
,
...
...
research/object_detection/predictors/heads/mask_head_test.py
→
research/object_detection/predictors/heads/mask_head_
tf1_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.heads.mask_head."""
"""Tests for object_detection.predictors.heads.mask_head."""
import
unittest
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
from
google.protobuf
import
text_format
from
google.protobuf
import
text_format
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -21,8 +22,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors.heads
import
mask_head
from
object_detection.predictors.heads
import
mask_head
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
MaskRCNNMaskHeadTest
(
test_case
.
TestCase
):
class
MaskRCNNMaskHeadTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
self
,
def
_build_arg_scope_with_hyperparams
(
self
,
...
@@ -75,6 +78,7 @@ class MaskRCNNMaskHeadTest(test_case.TestCase):
...
@@ -75,6 +78,7 @@ class MaskRCNNMaskHeadTest(test_case.TestCase):
self
.
assertAllEqual
([
64
,
1
,
1
,
28
,
28
],
prediction
.
get_shape
().
as_list
())
self
.
assertAllEqual
([
64
,
1
,
1
,
28
,
28
],
prediction
.
get_shape
().
as_list
())
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
ConvolutionalMaskPredictorTest
(
test_case
.
TestCase
):
class
ConvolutionalMaskPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
def
_build_arg_scope_with_hyperparams
(
...
@@ -131,6 +135,7 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
...
@@ -131,6 +135,7 @@ class ConvolutionalMaskPredictorTest(test_case.TestCase):
mask_predictions
.
get_shape
().
as_list
())
mask_predictions
.
get_shape
().
as_list
())
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
WeightSharedConvolutionalMaskPredictorTest
(
test_case
.
TestCase
):
class
WeightSharedConvolutionalMaskPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
def
_build_arg_scope_with_hyperparams
(
...
...
research/object_detection/predictors/mask_rcnn_box_predictor_test.py
→
research/object_detection/predictors/mask_rcnn_box_predictor_
tf1_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.mask_rcnn_box_predictor."""
"""Tests for object_detection.predictors.mask_rcnn_box_predictor."""
import
unittest
import
numpy
as
np
import
numpy
as
np
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
...
@@ -23,8 +24,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -23,8 +24,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors
import
mask_rcnn_box_predictor
as
box_predictor
from
object_detection.predictors
import
mask_rcnn_box_predictor
as
box_predictor
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
MaskRCNNBoxPredictorTest
(
test_case
.
TestCase
):
class
MaskRCNNBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_hyperparams
(
self
,
def
_build_arg_scope_with_hyperparams
(
self
,
...
...
research/object_detection/predictors/mask_rcnn_keras_box_predictor_test.py
→
research/object_detection/predictors/mask_rcnn_keras_box_predictor_
tf2_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.mask_rcnn_box_predictor."""
"""Tests for object_detection.predictors.mask_rcnn_box_predictor."""
import
unittest
import
numpy
as
np
import
numpy
as
np
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
...
@@ -23,8 +24,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -23,8 +24,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors
import
mask_rcnn_keras_box_predictor
as
box_predictor
from
object_detection.predictors
import
mask_rcnn_keras_box_predictor
as
box_predictor
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
MaskRCNNKerasBoxPredictorTest
(
test_case
.
TestCase
):
class
MaskRCNNKerasBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_hyperparams
(
self
,
def
_build_hyperparams
(
self
,
...
@@ -46,17 +49,17 @@ class MaskRCNNKerasBoxPredictorTest(test_case.TestCase):
...
@@ -46,17 +49,17 @@ class MaskRCNNKerasBoxPredictorTest(test_case.TestCase):
return
hyperparams_builder
.
KerasLayerHyperparams
(
hyperparams
)
return
hyperparams_builder
.
KerasLayerHyperparams
(
hyperparams
)
def
test_get_boxes_with_five_classes
(
self
):
def
test_get_boxes_with_five_classes
(
self
):
mask_box_predictor
=
(
box_predictor_builder
.
build_mask_rcnn_keras_box_predictor
(
is_training
=
False
,
num_classes
=
5
,
fc_hyperparams
=
self
.
_build_hyperparams
(),
freeze_batchnorm
=
False
,
use_dropout
=
False
,
dropout_keep_prob
=
0.5
,
box_code_size
=
4
,
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
mask_box_predictor
=
(
box_predictor_builder
.
build_mask_rcnn_keras_box_predictor
(
is_training
=
False
,
num_classes
=
5
,
fc_hyperparams
=
self
.
_build_hyperparams
(),
freeze_batchnorm
=
False
,
use_dropout
=
False
,
dropout_keep_prob
=
0.5
,
box_code_size
=
4
,
))
box_predictions
=
mask_box_predictor
(
box_predictions
=
mask_box_predictor
(
[
image_features
],
[
image_features
],
prediction_stage
=
2
)
prediction_stage
=
2
)
...
@@ -70,18 +73,19 @@ class MaskRCNNKerasBoxPredictorTest(test_case.TestCase):
...
@@ -70,18 +73,19 @@ class MaskRCNNKerasBoxPredictorTest(test_case.TestCase):
self
.
assertAllEqual
(
class_predictions_with_background
.
shape
,
[
2
,
1
,
6
])
self
.
assertAllEqual
(
class_predictions_with_background
.
shape
,
[
2
,
1
,
6
])
def
test_get_boxes_with_five_classes_share_box_across_classes
(
self
):
def
test_get_boxes_with_five_classes_share_box_across_classes
(
self
):
mask_box_predictor
=
(
box_predictor_builder
.
build_mask_rcnn_keras_box_predictor
(
is_training
=
False
,
num_classes
=
5
,
fc_hyperparams
=
self
.
_build_hyperparams
(),
freeze_batchnorm
=
False
,
use_dropout
=
False
,
dropout_keep_prob
=
0.5
,
box_code_size
=
4
,
share_box_across_classes
=
True
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
mask_box_predictor
=
(
box_predictor_builder
.
build_mask_rcnn_keras_box_predictor
(
is_training
=
False
,
num_classes
=
5
,
fc_hyperparams
=
self
.
_build_hyperparams
(),
freeze_batchnorm
=
False
,
use_dropout
=
False
,
dropout_keep_prob
=
0.5
,
box_code_size
=
4
,
share_box_across_classes
=
True
))
box_predictions
=
mask_box_predictor
(
box_predictions
=
mask_box_predictor
(
[
image_features
],
[
image_features
],
prediction_stage
=
2
)
prediction_stage
=
2
)
...
@@ -95,19 +99,19 @@ class MaskRCNNKerasBoxPredictorTest(test_case.TestCase):
...
@@ -95,19 +99,19 @@ class MaskRCNNKerasBoxPredictorTest(test_case.TestCase):
self
.
assertAllEqual
(
class_predictions_with_background
.
shape
,
[
2
,
1
,
6
])
self
.
assertAllEqual
(
class_predictions_with_background
.
shape
,
[
2
,
1
,
6
])
def
test_get_instance_masks
(
self
):
def
test_get_instance_masks
(
self
):
mask_box_predictor
=
(
box_predictor_builder
.
build_mask_rcnn_keras_box_predictor
(
is_training
=
False
,
num_classes
=
5
,
fc_hyperparams
=
self
.
_build_hyperparams
(),
freeze_batchnorm
=
False
,
use_dropout
=
False
,
dropout_keep_prob
=
0.5
,
box_code_size
=
4
,
conv_hyperparams
=
self
.
_build_hyperparams
(
op_type
=
hyperparams_pb2
.
Hyperparams
.
CONV
),
predict_instance_masks
=
True
))
def
graph_fn
(
image_features
):
def
graph_fn
(
image_features
):
mask_box_predictor
=
(
box_predictor_builder
.
build_mask_rcnn_keras_box_predictor
(
is_training
=
False
,
num_classes
=
5
,
fc_hyperparams
=
self
.
_build_hyperparams
(),
freeze_batchnorm
=
False
,
use_dropout
=
False
,
dropout_keep_prob
=
0.5
,
box_code_size
=
4
,
conv_hyperparams
=
self
.
_build_hyperparams
(
op_type
=
hyperparams_pb2
.
Hyperparams
.
CONV
),
predict_instance_masks
=
True
))
box_predictions
=
mask_box_predictor
(
box_predictions
=
mask_box_predictor
(
[
image_features
],
[
image_features
],
prediction_stage
=
3
)
prediction_stage
=
3
)
...
...
research/object_detection/predictors/rfcn_box_predictor_test.py
→
research/object_detection/predictors/rfcn_box_predictor_
tf1_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.rfcn_box_predictor."""
"""Tests for object_detection.predictors.rfcn_box_predictor."""
import
unittest
import
numpy
as
np
import
numpy
as
np
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
...
@@ -22,8 +23,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -22,8 +23,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors
import
rfcn_box_predictor
as
box_predictor
from
object_detection.predictors
import
rfcn_box_predictor
as
box_predictor
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf2
(),
'Skipping TF1.X only test.'
)
class
RfcnBoxPredictorTest
(
test_case
.
TestCase
):
class
RfcnBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_arg_scope_with_conv_hyperparams
(
self
):
def
_build_arg_scope_with_conv_hyperparams
(
self
):
...
...
research/object_detection/predictors/rfcn_keras_box_predictor_test.py
→
research/object_detection/predictors/rfcn_keras_box_predictor_
tf2_
test.py
View file @
420a7253
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
# ==============================================================================
# ==============================================================================
"""Tests for object_detection.predictors.rfcn_box_predictor."""
"""Tests for object_detection.predictors.rfcn_box_predictor."""
import
unittest
import
numpy
as
np
import
numpy
as
np
import
tensorflow.compat.v1
as
tf
import
tensorflow.compat.v1
as
tf
...
@@ -22,8 +23,10 @@ from object_detection.builders import hyperparams_builder
...
@@ -22,8 +23,10 @@ from object_detection.builders import hyperparams_builder
from
object_detection.predictors
import
rfcn_keras_box_predictor
as
box_predictor
from
object_detection.predictors
import
rfcn_keras_box_predictor
as
box_predictor
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.protos
import
hyperparams_pb2
from
object_detection.utils
import
test_case
from
object_detection.utils
import
test_case
from
object_detection.utils
import
tf_version
@
unittest
.
skipIf
(
tf_version
.
is_tf1
(),
'Skipping TF2.X only test.'
)
class
RfcnKerasBoxPredictorTest
(
test_case
.
TestCase
):
class
RfcnKerasBoxPredictorTest
(
test_case
.
TestCase
):
def
_build_conv_hyperparams
(
self
):
def
_build_conv_hyperparams
(
self
):
...
@@ -42,18 +45,17 @@ class RfcnKerasBoxPredictorTest(test_case.TestCase):
...
@@ -42,18 +45,17 @@ class RfcnKerasBoxPredictorTest(test_case.TestCase):
return
hyperparams_builder
.
KerasLayerHyperparams
(
conv_hyperparams
)
return
hyperparams_builder
.
KerasLayerHyperparams
(
conv_hyperparams
)
def
test_get_correct_box_encoding_and_class_prediction_shapes
(
self
):
def
test_get_correct_box_encoding_and_class_prediction_shapes
(
self
):
rfcn_box_predictor
=
box_predictor
.
RfcnKerasBoxPredictor
(
is_training
=
False
,
num_classes
=
2
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
num_spatial_bins
=
[
3
,
3
],
depth
=
4
,
crop_size
=
[
12
,
12
],
box_code_size
=
4
)
def
graph_fn
(
image_features
,
proposal_boxes
):
def
graph_fn
(
image_features
,
proposal_boxes
):
rfcn_box_predictor
=
box_predictor
.
RfcnKerasBoxPredictor
(
is_training
=
False
,
num_classes
=
2
,
conv_hyperparams
=
self
.
_build_conv_hyperparams
(),
freeze_batchnorm
=
False
,
num_spatial_bins
=
[
3
,
3
],
depth
=
4
,
crop_size
=
[
12
,
12
],
box_code_size
=
4
)
box_predictions
=
rfcn_box_predictor
(
box_predictions
=
rfcn_box_predictor
(
[
image_features
],
[
image_features
],
proposal_boxes
=
proposal_boxes
)
proposal_boxes
=
proposal_boxes
)
...
...
Prev
1
…
3
4
5
6
7
8
9
Next
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