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
cd598da1
Commit
cd598da1
authored
Aug 23, 2021
by
anivegesana
Browse files
Fix merge
parent
b92025a9
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
201 additions
and
21 deletions
+201
-21
official/vision/beta/projects/yolo/modeling/backbones/darknet.py
...l/vision/beta/projects/yolo/modeling/backbones/darknet.py
+2
-5
official/vision/beta/projects/yolo/modeling/backbones/darknet_test.py
...ion/beta/projects/yolo/modeling/backbones/darknet_test.py
+1
-1
official/vision/beta/projects/yolo/modeling/factory.py
official/vision/beta/projects/yolo/modeling/factory.py
+148
-0
official/vision/beta/projects/yolo/modeling/layers/nn_blocks.py
...al/vision/beta/projects/yolo/modeling/layers/nn_blocks.py
+3
-11
official/vision/beta/projects/yolo/modeling/layers/nn_blocks_test.py
...sion/beta/projects/yolo/modeling/layers/nn_blocks_test.py
+2
-3
official/vision/beta/projects/yolo/modeling/yolo_model_test.py
...ial/vision/beta/projects/yolo/modeling/yolo_model_test.py
+44
-0
official/vision/beta/projects/yolo/ops/box_ops_test.py
official/vision/beta/projects/yolo/ops/box_ops_test.py
+1
-1
No files found.
official/vision/beta/projects/yolo/modeling/backbones/darknet.py
View file @
cd598da1
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
# Lint as: python3
# Lint as: python3
"""Contains definitions of Darknet Backbone Networks.
"""Contains definitions of Darknet Backbone Networks.
Th
es
e models are inspired by ResNet and CSPNet.
The models are inspired by ResNet and CSPNet.
Residual networks (ResNets) were proposed in:
Residual networks (ResNets) were proposed in:
[1] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun
[1] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun
...
@@ -43,8 +43,6 @@ from official.modeling import hyperparams
...
@@ -43,8 +43,6 @@ from official.modeling import hyperparams
from
official.vision.beta.modeling.backbones
import
factory
from
official.vision.beta.modeling.backbones
import
factory
from
official.vision.beta.projects.yolo.modeling.layers
import
nn_blocks
from
official.vision.beta.projects.yolo.modeling.layers
import
nn_blocks
# builder required classes
class
BlockConfig
:
class
BlockConfig
:
"""Class to store layer config to make code more readable."""
"""Class to store layer config to make code more readable."""
...
@@ -667,8 +665,7 @@ def build_darknet(
...
@@ -667,8 +665,7 @@ def build_darknet(
l2_regularizer
:
tf
.
keras
.
regularizers
.
Regularizer
=
None
)
->
tf
.
keras
.
Model
:
l2_regularizer
:
tf
.
keras
.
regularizers
.
Regularizer
=
None
)
->
tf
.
keras
.
Model
:
"""Builds darknet."""
"""Builds darknet."""
backbone_cfg
=
model_config
.
backbone
.
get
()
backbone_cfg
=
backbone_config
.
backbone
.
get
()
norm_activation_config
=
model_config
.
norm_activation
model
=
Darknet
(
model
=
Darknet
(
model_id
=
backbone_cfg
.
model_id
,
model_id
=
backbone_cfg
.
model_id
,
...
...
official/vision/beta/projects/yolo/modeling/backbones/darknet_test.py
View file @
cd598da1
...
@@ -70,7 +70,7 @@ class DarknetTest(parameterized.TestCase, tf.test.TestCase):
...
@@ -70,7 +70,7 @@ class DarknetTest(parameterized.TestCase, tf.test.TestCase):
@
combinations
.
generate
(
@
combinations
.
generate
(
combinations
.
combine
(
combinations
.
combine
(
strategy
=
[
strategy
=
[
strategy_combinations
.
tpu_strategy
,
strategy_combinations
.
cloud_
tpu_strategy
,
strategy_combinations
.
one_device_strategy_gpu
,
strategy_combinations
.
one_device_strategy_gpu
,
],
],
use_sync_bn
=
[
False
,
True
],
use_sync_bn
=
[
False
,
True
],
...
...
official/vision/beta/projects/yolo/modeling/factory.py
0 → 100644
View file @
cd598da1
from
official.vision.beta.modeling.backbones
import
factory
from
yolo.modeling.decoders.yolo_decoder
import
YoloDecoder
from
yolo.modeling.heads.yolo_head
import
YoloHead
from
yolo.modeling.layers.detection_generator
import
YoloLayer
from
yolo.modeling.backbones.darknet
import
build_darknet
from
yolo.modeling
import
yolo_model
from
yolo.configs
import
yolo
def
build_yolo_decoder
(
input_specs
,
model_config
:
yolo
.
Yolo
,
l2_regularization
):
activation
=
(
model_config
.
decoder
.
activation
if
model_config
.
decoder
.
activation
!=
"same"
else
model_config
.
norm_activation
.
activation
)
subdivisions
=
1
if
model_config
.
decoder
.
version
is
None
:
# custom yolo
model
=
YoloDecoder
(
input_specs
,
embed_spp
=
model_config
.
decoder
.
embed_spp
,
use_fpn
=
model_config
.
decoder
.
use_fpn
,
fpn_depth
=
model_config
.
decoder
.
fpn_depth
,
path_process_len
=
model_config
.
decoder
.
path_process_len
,
max_level_process_len
=
model_config
.
decoder
.
max_level_process_len
,
xy_exponential
=
model_config
.
decoder
.
xy_exponential
,
activation
=
activation
,
subdivisions
=
subdivisions
,
use_spatial_attention
=
model_config
.
use_sam
,
use_sync_bn
=
model_config
.
norm_activation
.
use_sync_bn
,
norm_momentum
=
model_config
.
norm_activation
.
norm_momentum
,
norm_epsilon
=
model_config
.
norm_activation
.
norm_epsilon
,
kernel_regularizer
=
l2_regularization
)
return
model
if
model_config
.
decoder
.
type
==
None
:
model_config
.
decoder
.
type
=
"regular"
if
model_config
.
decoder
.
version
not
in
yolo_model
.
YOLO_MODELS
.
keys
():
raise
Exception
(
"unsupported model version please select from {v3, v4},
\n\n
\
or specify a custom decoder config using YoloDecoder in you yaml"
)
if
model_config
.
decoder
.
type
not
in
yolo_model
.
YOLO_MODELS
[
model_config
.
decoder
.
version
].
keys
():
raise
Exception
(
"unsupported model type please select from
\
{yolo_model.YOLO_MODELS[model_config.decoder.version].keys()},
\
\n\n
or specify a custom decoder config using YoloDecoder in you yaml"
)
base_model
=
yolo_model
.
YOLO_MODELS
[
model_config
.
decoder
.
version
][
model_config
.
decoder
.
type
]
cfg_dict
=
model_config
.
decoder
.
as_dict
()
for
key
in
base_model
:
if
cfg_dict
[
key
]
is
not
None
:
base_model
[
key
]
=
cfg_dict
[
key
]
base_dict
=
dict
(
activation
=
activation
,
subdivisions
=
subdivisions
,
use_spatial_attention
=
model_config
.
decoder
.
use_spatial_attention
,
use_sync_bn
=
model_config
.
norm_activation
.
use_sync_bn
,
norm_momentum
=
model_config
.
norm_activation
.
norm_momentum
,
norm_epsilon
=
model_config
.
norm_activation
.
norm_epsilon
,
kernel_regularizer
=
l2_regularization
)
base_model
.
update
(
base_dict
)
print
(
base_model
)
model
=
YoloDecoder
(
input_specs
,
**
base_model
)
return
model
def
build_yolo_filter
(
model_config
:
yolo
.
Yolo
,
decoder
:
YoloDecoder
,
masks
,
xy_scales
,
path_scales
):
def
_build
(
values
):
print
(
values
)
if
"all"
in
values
and
values
[
"all"
]
is
not
None
:
for
key
in
values
:
if
key
!=
'all'
:
values
[
key
]
=
values
[
"all"
]
print
(
values
)
return
values
model
=
YoloLayer
(
masks
=
masks
,
classes
=
model_config
.
num_classes
,
anchors
=
model_config
.
_boxes
,
iou_thresh
=
model_config
.
filter
.
iou_thresh
,
nms_thresh
=
model_config
.
filter
.
nms_thresh
,
max_boxes
=
model_config
.
filter
.
max_boxes
,
nms_type
=
model_config
.
filter
.
nms_type
,
path_scale
=
path_scales
,
scale_xy
=
xy_scales
,
darknet
=
model_config
.
filter
.
darknet
,
label_smoothing
=
model_config
.
filter
.
label_smoothing
,
pre_nms_points
=
model_config
.
filter
.
pre_nms_points
,
use_scaled_loss
=
model_config
.
filter
.
use_scaled_loss
,
truth_thresh
=
_build
(
model_config
.
filter
.
truth_thresh
.
as_dict
()),
loss_type
=
_build
(
model_config
.
filter
.
loss_type
.
as_dict
()),
max_delta
=
_build
(
model_config
.
filter
.
max_delta
.
as_dict
()),
new_cords
=
_build
(
model_config
.
filter
.
new_cords
.
as_dict
()),
iou_normalizer
=
_build
(
model_config
.
filter
.
iou_normalizer
.
as_dict
()),
cls_normalizer
=
_build
(
model_config
.
filter
.
cls_normalizer
.
as_dict
()),
obj_normalizer
=
_build
(
model_config
.
filter
.
obj_normalizer
.
as_dict
()),
ignore_thresh
=
_build
(
model_config
.
filter
.
ignore_thresh
.
as_dict
()),
objectness_smooth
=
_build
(
model_config
.
filter
.
objectness_smooth
.
as_dict
()))
return
model
def
build_yolo_head
(
input_specs
,
model_config
:
yolo
.
Yolo
,
l2_regularization
):
head
=
YoloHead
(
min_level
=
model_config
.
min_level
,
max_level
=
model_config
.
max_level
,
classes
=
model_config
.
num_classes
,
boxes_per_level
=
model_config
.
boxes_per_scale
,
norm_momentum
=
model_config
.
norm_activation
.
norm_momentum
,
norm_epsilon
=
model_config
.
norm_activation
.
norm_epsilon
,
kernel_regularizer
=
l2_regularization
,
smart_bias
=
model_config
.
smart_bias
)
return
head
def
build_yolo
(
input_specs
,
model_config
,
l2_regularization
,
masks
,
xy_scales
,
path_scales
):
print
(
model_config
.
as_dict
())
print
(
input_specs
)
print
(
l2_regularization
)
# backbone = factory.build_backbone(input_specs, model_config,
# l2_regularization)
backbone
=
build_darknet
(
input_specs
,
model_config
,
l2_regularization
)
decoder
=
build_yolo_decoder
(
backbone
.
output_specs
,
model_config
,
l2_regularization
)
head
=
build_yolo_head
(
decoder
.
output_specs
,
model_config
,
l2_regularization
)
filter
=
build_yolo_filter
(
model_config
,
head
,
masks
,
xy_scales
,
path_scales
)
model
=
yolo_model
.
Yolo
(
backbone
=
backbone
,
decoder
=
decoder
,
head
=
head
,
filter
=
filter
)
model
.
build
(
input_specs
.
shape
)
model
.
decoder
.
summary
()
model
.
summary
()
losses
=
filter
.
losses
return
model
,
losses
official/vision/beta/projects/yolo/modeling/layers/nn_blocks.py
View file @
cd598da1
...
@@ -23,9 +23,6 @@ from official.vision.beta.ops import spatial_transform_ops
...
@@ -23,9 +23,6 @@ from official.vision.beta.ops import spatial_transform_ops
@
tf
.
keras
.
utils
.
register_keras_serializable
(
package
=
'yolo'
)
@
tf
.
keras
.
utils
.
register_keras_serializable
(
package
=
'yolo'
)
class
Identity
(
tf
.
keras
.
layers
.
Layer
):
class
Identity
(
tf
.
keras
.
layers
.
Layer
):
def
__init__
(
self
,
**
kwargs
):
super
().
__init__
(
**
kwargs
)
def
call
(
self
,
inputs
):
def
call
(
self
,
inputs
):
return
inputs
return
inputs
...
@@ -642,11 +639,6 @@ class CSPRoute(tf.keras.layers.Layer):
...
@@ -642,11 +639,6 @@ class CSPRoute(tf.keras.layers.Layer):
x
=
self
.
_conv3
(
inputs
)
x
=
self
.
_conv3
(
inputs
)
return
(
x
,
y
)
return
(
x
,
y
)
self
.
_conv2
=
ConvBN
(
filters
=
self
.
_filters
//
self
.
_filter_scale
,
kernel_size
=
(
1
,
1
),
strides
=
(
1
,
1
),
**
dark_conv_args
)
@
tf
.
keras
.
utils
.
register_keras_serializable
(
package
=
'yolo'
)
@
tf
.
keras
.
utils
.
register_keras_serializable
(
package
=
'yolo'
)
class
CSPConnect
(
tf
.
keras
.
layers
.
Layer
):
class
CSPConnect
(
tf
.
keras
.
layers
.
Layer
):
...
@@ -683,8 +675,8 @@ class CSPConnect(tf.keras.layers.Layer):
...
@@ -683,8 +675,8 @@ class CSPConnect(tf.keras.layers.Layer):
"""Initializer for CSPConnect block.
"""Initializer for CSPConnect block.
Args:
Args:
filters: integer for output depth, or the number of features to learn
filters: integer for output depth, or the number of features to learn
.
filter_scale: integer dicating (filters//2) or the number of filters in
filter_scale: integer dic
t
ating (filters//2) or the number of filters in
the partial feature stack.
the partial feature stack.
drop_final: `bool`, whether to drop final conv layer.
drop_final: `bool`, whether to drop final conv layer.
drop_first: `bool`, whether to drop first conv layer.
drop_first: `bool`, whether to drop first conv layer.
...
@@ -807,7 +799,7 @@ class CSPStack(tf.keras.layers.Layer):
...
@@ -807,7 +799,7 @@ class CSPStack(tf.keras.layers.Layer):
model_to_wrap: callable Model or a list of callable objects that will
model_to_wrap: callable Model or a list of callable objects that will
process the output of CSPRoute, and be input into CSPConnect.
process the output of CSPRoute, and be input into CSPConnect.
list will be called sequentially.
list will be called sequentially.
filter_scale: integer dicating (filters//2) or the number of filters in
filter_scale: integer dic
t
ating (filters//2) or the number of filters in
the partial feature stack.
the partial feature stack.
activation: string for activation function to use in layer.
activation: string for activation function to use in layer.
kernel_initializer: string to indicate which function to use to initialize
kernel_initializer: string to indicate which function to use to initialize
...
...
official/vision/beta/projects/yolo/modeling/layers/nn_blocks_test.py
View file @
cd598da1
...
@@ -16,8 +16,6 @@
...
@@ -16,8 +16,6 @@
from
absl.testing
import
parameterized
from
absl.testing
import
parameterized
import
numpy
as
np
import
numpy
as
np
import
tensorflow
as
tf
import
tensorflow
as
tf
import
numpy
as
np
from
absl.testing
import
parameterized
from
official.vision.beta.projects.yolo.modeling.layers
import
nn_blocks
from
official.vision.beta.projects.yolo.modeling.layers
import
nn_blocks
...
@@ -62,6 +60,7 @@ class CSPConnectTest(tf.test.TestCase, parameterized.TestCase):
...
@@ -62,6 +60,7 @@ class CSPConnectTest(tf.test.TestCase, parameterized.TestCase):
grad_loss
=
loss
(
x_hat
,
y
)
grad_loss
=
loss
(
x_hat
,
y
)
grad
=
tape
.
gradient
(
grad_loss
,
test_layer
.
trainable_variables
)
grad
=
tape
.
gradient
(
grad_loss
,
test_layer
.
trainable_variables
)
optimizer
.
apply_gradients
(
zip
(
grad
,
test_layer
.
trainable_variables
))
optimizer
.
apply_gradients
(
zip
(
grad
,
test_layer
.
trainable_variables
))
self
.
assertNotIn
(
None
,
grad
)
self
.
assertNotIn
(
None
,
grad
)
...
@@ -72,7 +71,7 @@ class CSPRouteTest(tf.test.TestCase, parameterized.TestCase):
...
@@ -72,7 +71,7 @@ class CSPRouteTest(tf.test.TestCase, parameterized.TestCase):
def
test_pass_through
(
self
,
width
,
height
,
filters
,
mod
):
def
test_pass_through
(
self
,
width
,
height
,
filters
,
mod
):
x
=
tf
.
keras
.
Input
(
shape
=
(
width
,
height
,
filters
))
x
=
tf
.
keras
.
Input
(
shape
=
(
width
,
height
,
filters
))
test_layer
=
nn_blocks
.
CSPRoute
(
filters
=
filters
,
filter_scale
=
mod
)
test_layer
=
nn_blocks
.
CSPRoute
(
filters
=
filters
,
filter_scale
=
mod
)
outx
,
px
=
test_layer
(
x
)
outx
,
_
=
test_layer
(
x
)
print
(
outx
)
print
(
outx
)
print
(
outx
.
shape
.
as_list
())
print
(
outx
.
shape
.
as_list
())
self
.
assertAllEqual
(
self
.
assertAllEqual
(
...
...
official/vision/beta/projects/yolo/modeling/yolo_model_test.py
0 → 100644
View file @
cd598da1
# Copyright 2021 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.
# Lint as: python3
"""Tests for Yolo models."""
from
official.vision.beta.projects.yolo.modeling.backbones.darknet
import
\
Darknet
from
official.vision.beta.projects.yolo.modeling.decoders.yolo_decoder
import
\
YoloDecoder
from
official.vision.beta.projects.yolo.modeling.heads.yolo_head
import
YoloHead
from
official.vision.beta.projects.yolo.modeling
import
yolo_model
class
YoloTest
(
parameterized
.
TestCase
,
tf
.
test
.
TestCase
):
def
test_network_creation
(
self
):
backbone
=
[
'darknettiny'
,
'darknet53'
,
'cspdarknet53'
,
'altered_cspdarknet53'
,
'cspdarknettiny'
,
'csp-large'
]
base_model
=
yolo_model
.
YOLO_MODELS
[
version
][
decoder
]
backbone
=
Darknet
(
model_id
=
backbone
)
decoder
=
YoloDecoder
(
backbone
.
output_specs
,
**
base_model
)
head
=
YoloHead
(
min_level
=
model_config
.
min_level
,
max_level
=
model_config
.
max_level
,
classes
=
model_config
.
num_classes
,
boxes_per_level
=
model_config
.
boxes_per_scale
,
norm_momentum
=
model_config
.
norm_activation
.
norm_momentum
,
norm_epsilon
=
model_config
.
norm_activation
.
norm_epsilon
,
kernel_regularizer
=
l2_regularization
,
smart_bias
=
model_config
.
smart_bias
)
pass
if
__name__
==
'__main__'
:
tf
.
test
.
main
()
official/vision/beta/projects/yolo/ops/box_ops_test.py
View file @
cd598da1
...
@@ -51,4 +51,4 @@ class InputUtilsTest(parameterized.TestCase, tf.test.TestCase):
...
@@ -51,4 +51,4 @@ class InputUtilsTest(parameterized.TestCase, tf.test.TestCase):
self
.
assertArrayNear
(
diou
,
expected_iou
,
0.001
)
self
.
assertArrayNear
(
diou
,
expected_iou
,
0.001
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
tf
.
test
.
main
()
tf
.
test
.
main
()
\ No newline at end of file
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