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
3ce2f61b
Commit
3ce2f61b
authored
Jul 12, 2020
by
Kaushik Shivakumar
Browse files
Merge branch 'master' of
https://github.com/tensorflow/models
into context_tf2
parents
bb16d5ca
8e9296ff
Changes
248
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
3583 additions
and
8 deletions
+3583
-8
research/object_detection/configs/tf2/ssd_efficientdet_d0_512x512_coco17_tpu-8.config
...nfigs/tf2/ssd_efficientdet_d0_512x512_coco17_tpu-8.config
+199
-0
research/object_detection/configs/tf2/ssd_efficientdet_d1_640x640_coco17_tpu-8.config
...nfigs/tf2/ssd_efficientdet_d1_640x640_coco17_tpu-8.config
+199
-0
research/object_detection/configs/tf2/ssd_efficientdet_d2_768x768_coco17_tpu-8.config
...nfigs/tf2/ssd_efficientdet_d2_768x768_coco17_tpu-8.config
+199
-0
research/object_detection/configs/tf2/ssd_efficientdet_d3_896x896_coco17_tpu-32.config
...figs/tf2/ssd_efficientdet_d3_896x896_coco17_tpu-32.config
+199
-0
research/object_detection/configs/tf2/ssd_efficientdet_d4_1024x1024_coco17_tpu-32.config
...gs/tf2/ssd_efficientdet_d4_1024x1024_coco17_tpu-32.config
+199
-0
research/object_detection/configs/tf2/ssd_efficientdet_d5_1280x1280_coco17_tpu-32.config
...gs/tf2/ssd_efficientdet_d5_1280x1280_coco17_tpu-32.config
+199
-0
research/object_detection/configs/tf2/ssd_efficientdet_d6_1408x1408_coco17_tpu-32.config
...gs/tf2/ssd_efficientdet_d6_1408x1408_coco17_tpu-32.config
+201
-0
research/object_detection/configs/tf2/ssd_efficientdet_d7_1536x1536_coco17_tpu-32.config
...gs/tf2/ssd_efficientdet_d7_1536x1536_coco17_tpu-32.config
+201
-0
research/object_detection/configs/tf2/ssd_mobilenet_v1_fpn_640x640_coco17_tpu-8.config
...figs/tf2/ssd_mobilenet_v1_fpn_640x640_coco17_tpu-8.config
+197
-0
research/object_detection/configs/tf2/ssd_mobilenet_v2_320x320_coco17_tpu-8.config
.../configs/tf2/ssd_mobilenet_v2_320x320_coco17_tpu-8.config
+197
-0
research/object_detection/configs/tf2/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8.config
.../tf2/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8.config
+201
-0
research/object_detection/configs/tf2/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8.config
.../tf2/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8.config
+201
-0
research/object_detection/configs/tf2/ssd_resnet101_v1_fpn_1024x1024_coco17_tpu-8.config
...gs/tf2/ssd_resnet101_v1_fpn_1024x1024_coco17_tpu-8.config
+197
-0
research/object_detection/configs/tf2/ssd_resnet101_v1_fpn_640x640_coco17_tpu-8.config
...figs/tf2/ssd_resnet101_v1_fpn_640x640_coco17_tpu-8.config
+197
-0
research/object_detection/configs/tf2/ssd_resnet152_v1_fpn_1024x1024_coco17_tpu-8.config
...gs/tf2/ssd_resnet152_v1_fpn_1024x1024_coco17_tpu-8.config
+197
-0
research/object_detection/configs/tf2/ssd_resnet152_v1_fpn_640x640_coco17_tpu-8.config
...figs/tf2/ssd_resnet152_v1_fpn_640x640_coco17_tpu-8.config
+197
-0
research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_1024x1024_coco17_tpu-8.config
...igs/tf2/ssd_resnet50_v1_fpn_1024x1024_coco17_tpu-8.config
+197
-0
research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.config
...nfigs/tf2/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.config
+197
-0
research/object_detection/core/box_predictor.py
research/object_detection/core/box_predictor.py
+1
-1
research/object_detection/core/densepose_ops.py
research/object_detection/core/densepose_ops.py
+8
-7
No files found.
research/object_detection/configs/tf2/ssd_efficientdet_d0_512x512_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with EfficientNet-b0 + BiFPN feature extractor,
# shared box predictor and focal loss (a.k.a EfficientDet-d0).
# See EfficientDet, Tan et al, https://arxiv.org/abs/1911.09070
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from an EfficientNet-b0 checkpoint.
#
# Train on TPU-8
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
add_background_class
:
false
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
3
}
}
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension
:
512
max_dimension
:
512
pad_to_max_dimension
:
true
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
64
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
decay
:
0
.
99
epsilon
:
0
.
001
}
}
num_layers_before_predictor
:
3
kernel_size
:
3
use_depthwise
:
true
}
}
feature_extractor
{
type
:
'ssd_efficientnet-b0_bifpn_keras'
bifpn
{
min_level
:
3
max_level
:
7
num_iterations
:
3
num_filters
:
64
}
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
99
,
epsilon
:
0
.
001
,
}
}
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
1
.
5
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
5
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/ckpt-0"
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
300000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_scale_crop_and_pad_to_square
{
output_size
:
512
scale_min
:
0
.
1
scale_max
:
2
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
:
8
e
-
2
total_steps
:
300000
warmup_learning_rate
: .
001
warmup_steps
:
2500
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_efficientdet_d1_640x640_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with EfficientNet-b1 + BiFPN feature extractor,
# shared box predictor and focal loss (a.k.a EfficientDet-d1).
# See EfficientDet, Tan et al, https://arxiv.org/abs/1911.09070
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from an EfficientNet-b1 checkpoint.
#
# Train on TPU-8
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
add_background_class
:
false
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
3
}
}
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension
:
640
max_dimension
:
640
pad_to_max_dimension
:
true
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
88
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
decay
:
0
.
99
epsilon
:
0
.
001
}
}
num_layers_before_predictor
:
3
kernel_size
:
3
use_depthwise
:
true
}
}
feature_extractor
{
type
:
'ssd_efficientnet-b1_bifpn_keras'
bifpn
{
min_level
:
3
max_level
:
7
num_iterations
:
4
num_filters
:
88
}
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
99
,
epsilon
:
0
.
001
,
}
}
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
1
.
5
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
5
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/ckpt-0"
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
300000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_scale_crop_and_pad_to_square
{
output_size
:
640
scale_min
:
0
.
1
scale_max
:
2
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
:
8
e
-
2
total_steps
:
300000
warmup_learning_rate
: .
001
warmup_steps
:
2500
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_efficientdet_d2_768x768_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with EfficientNet-b2 + BiFPN feature extractor,
# shared box predictor and focal loss (a.k.a EfficientDet-d2).
# See EfficientDet, Tan et al, https://arxiv.org/abs/1911.09070
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from an EfficientNet-b2 checkpoint.
#
# Train on TPU-8
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
add_background_class
:
false
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
3
}
}
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension
:
768
max_dimension
:
768
pad_to_max_dimension
:
true
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
112
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
decay
:
0
.
99
epsilon
:
0
.
001
}
}
num_layers_before_predictor
:
3
kernel_size
:
3
use_depthwise
:
true
}
}
feature_extractor
{
type
:
'ssd_efficientnet-b2_bifpn_keras'
bifpn
{
min_level
:
3
max_level
:
7
num_iterations
:
5
num_filters
:
112
}
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
99
,
epsilon
:
0
.
001
,
}
}
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
1
.
5
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
5
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/ckpt-0"
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
300000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_scale_crop_and_pad_to_square
{
output_size
:
768
scale_min
:
0
.
1
scale_max
:
2
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
:
8
e
-
2
total_steps
:
300000
warmup_learning_rate
: .
001
warmup_steps
:
2500
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_efficientdet_d3_896x896_coco17_tpu-32.config
0 → 100644
View file @
3ce2f61b
# SSD with EfficientNet-b3 + BiFPN feature extractor,
# shared box predictor and focal loss (a.k.a EfficientDet-d3).
# See EfficientDet, Tan et al, https://arxiv.org/abs/1911.09070
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from an EfficientNet-b3 checkpoint.
#
# Train on TPU-32
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
add_background_class
:
false
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
3
}
}
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension
:
896
max_dimension
:
896
pad_to_max_dimension
:
true
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
160
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
decay
:
0
.
99
epsilon
:
0
.
001
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
use_depthwise
:
true
}
}
feature_extractor
{
type
:
'ssd_efficientnet-b3_bifpn_keras'
bifpn
{
min_level
:
3
max_level
:
7
num_iterations
:
6
num_filters
:
160
}
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
99
,
epsilon
:
0
.
001
,
}
}
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
1
.
5
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
5
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/ckpt-0"
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
300000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_scale_crop_and_pad_to_square
{
output_size
:
896
scale_min
:
0
.
1
scale_max
:
2
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
:
8
e
-
2
total_steps
:
300000
warmup_learning_rate
: .
001
warmup_steps
:
2500
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_efficientdet_d4_1024x1024_coco17_tpu-32.config
0 → 100644
View file @
3ce2f61b
# SSD with EfficientNet-b4 + BiFPN feature extractor,
# shared box predictor and focal loss (a.k.a EfficientDet-d4).
# See EfficientDet, Tan et al, https://arxiv.org/abs/1911.09070
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from an EfficientNet-b4 checkpoint.
#
# Train on TPU-32
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
add_background_class
:
false
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
3
}
}
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension
:
1024
max_dimension
:
1024
pad_to_max_dimension
:
true
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
224
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
decay
:
0
.
99
epsilon
:
0
.
001
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
use_depthwise
:
true
}
}
feature_extractor
{
type
:
'ssd_efficientnet-b4_bifpn_keras'
bifpn
{
min_level
:
3
max_level
:
7
num_iterations
:
7
num_filters
:
224
}
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
99
,
epsilon
:
0
.
001
,
}
}
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
1
.
5
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
5
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/ckpt-0"
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
300000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_scale_crop_and_pad_to_square
{
output_size
:
1024
scale_min
:
0
.
1
scale_max
:
2
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
:
8
e
-
2
total_steps
:
300000
warmup_learning_rate
: .
001
warmup_steps
:
2500
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_efficientdet_d5_1280x1280_coco17_tpu-32.config
0 → 100644
View file @
3ce2f61b
# SSD with EfficientNet-b5 + BiFPN feature extractor,
# shared box predictor and focal loss (a.k.a EfficientDet-d5).
# See EfficientDet, Tan et al, https://arxiv.org/abs/1911.09070
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from an EfficientNet-b5 checkpoint.
#
# Train on TPU-32
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
add_background_class
:
false
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
3
}
}
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension
:
1280
max_dimension
:
1280
pad_to_max_dimension
:
true
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
288
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
decay
:
0
.
99
epsilon
:
0
.
001
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
use_depthwise
:
true
}
}
feature_extractor
{
type
:
'ssd_efficientnet-b5_bifpn_keras'
bifpn
{
min_level
:
3
max_level
:
7
num_iterations
:
7
num_filters
:
288
}
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
99
,
epsilon
:
0
.
001
,
}
}
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
1
.
5
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
5
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/ckpt-0"
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
300000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_scale_crop_and_pad_to_square
{
output_size
:
1280
scale_min
:
0
.
1
scale_max
:
2
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
:
8
e
-
2
total_steps
:
300000
warmup_learning_rate
: .
001
warmup_steps
:
2500
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_efficientdet_d6_1408x1408_coco17_tpu-32.config
0 → 100644
View file @
3ce2f61b
# SSD with EfficientNet-b6 + BiFPN feature extractor,
# shared box predictor and focal loss (a.k.a EfficientDet-d6).
# See EfficientDet, Tan et al, https://arxiv.org/abs/1911.09070
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from an EfficientNet-b6 checkpoint.
#
# Train on TPU-32
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
add_background_class
:
false
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
3
}
}
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension
:
1408
max_dimension
:
1408
pad_to_max_dimension
:
true
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
384
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
decay
:
0
.
99
epsilon
:
0
.
001
}
}
num_layers_before_predictor
:
5
kernel_size
:
3
use_depthwise
:
true
}
}
feature_extractor
{
type
:
'ssd_efficientnet-b6_bifpn_keras'
bifpn
{
min_level
:
3
max_level
:
7
num_iterations
:
8
num_filters
:
384
# Use unweighted sum for stability.
combine_method
:
'sum'
}
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
99
,
epsilon
:
0
.
001
,
}
}
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
1
.
5
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
5
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/ckpt-0"
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
300000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_scale_crop_and_pad_to_square
{
output_size
:
1408
scale_min
:
0
.
1
scale_max
:
2
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
:
8
e
-
2
total_steps
:
300000
warmup_learning_rate
: .
001
warmup_steps
:
2500
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_efficientdet_d7_1536x1536_coco17_tpu-32.config
0 → 100644
View file @
3ce2f61b
# SSD with EfficientNet-b6 + BiFPN feature extractor,
# shared box predictor and focal loss (a.k.a EfficientDet-d7).
# See EfficientDet, Tan et al, https://arxiv.org/abs/1911.09070
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from an EfficientNet-b6 checkpoint.
#
# Train on TPU-32
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
add_background_class
:
false
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
3
}
}
image_resizer
{
keep_aspect_ratio_resizer
{
min_dimension
:
1536
max_dimension
:
1536
pad_to_max_dimension
:
true
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
384
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
decay
:
0
.
99
epsilon
:
0
.
001
}
}
num_layers_before_predictor
:
5
kernel_size
:
3
use_depthwise
:
true
}
}
feature_extractor
{
type
:
'ssd_efficientnet-b6_bifpn_keras'
bifpn
{
min_level
:
3
max_level
:
7
num_iterations
:
8
num_filters
:
384
# Use unweighted sum for stability.
combine_method
:
'sum'
}
conv_hyperparams
{
force_use_bias
:
true
activation
:
SWISH
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
99
,
epsilon
:
0
.
001
,
}
}
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
1
.
5
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
5
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/ckpt-0"
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
300000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_scale_crop_and_pad_to_square
{
output_size
:
1536
scale_min
:
0
.
1
scale_max
:
2
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
:
8
e
-
2
total_steps
:
300000
warmup_learning_rate
: .
001
warmup_steps
:
2500
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BEE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_mobilenet_v1_fpn_640x640_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Mobilenet v1 FPN feature extractor, shared box predictor and focal
# loss (a.k.a Retinanet).
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 29.1 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
640
width
:
640
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
256
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_mobilenet_v1_fpn_keras'
fpn
{
min_level
:
3
max_level
:
7
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/mobilenet_v1.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
64
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
num_steps
:
25000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
04
total_steps
:
25000
warmup_learning_rate
: .
013333
warmup_steps
:
2000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
batch_size
:
1
;
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_mobilenet_v2_320x320_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Mobilenet v2
# Trained on COCO17, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 22.2 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
ssd_anchor_generator
{
num_layers
:
6
min_scale
:
0
.
2
max_scale
:
0
.
95
aspect_ratios
:
1
.
0
aspect_ratios
:
2
.
0
aspect_ratios
:
0
.
5
aspect_ratios
:
3
.
0
aspect_ratios
:
0
.
3333
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
300
width
:
300
}
}
box_predictor
{
convolutional_box_predictor
{
min_depth
:
0
max_depth
:
0
num_layers_before_predictor
:
0
use_dropout
:
false
dropout_keep_probability
:
0
.
8
kernel_size
:
1
box_code_size
:
4
apply_sigmoid_to_scores
:
false
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
train
:
true
,
scale
:
true
,
center
:
true
,
decay
:
0
.
97
,
epsilon
:
0
.
001
,
}
}
}
}
feature_extractor
{
type
:
'ssd_mobilenet_v2_keras'
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
train
:
true
,
scale
:
true
,
center
:
true
,
decay
:
0
.
97
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
75
,
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
delta
:
1
.
0
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/mobilenet_v2.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
512
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
num_steps
:
50000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
ssd_random_crop
{
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
8
total_steps
:
50000
warmup_learning_rate
:
0
.
13333
warmup_steps
:
2000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Mobilenet v2 FPN-lite (go/fpn-lite) feature extractor, shared box
# predictor and focal loss (a mobile version of Retinanet).
# Retinanet: see Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 22.2 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
320
width
:
320
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
128
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
share_prediction_tower
:
true
use_depthwise
:
true
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_mobilenet_v2_fpn_keras'
use_depthwise
:
true
fpn
{
min_level
:
3
max_level
:
7
additional_layer_depth
:
128
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/mobilenet_v2.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
num_steps
:
50000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
08
total_steps
:
50000
warmup_learning_rate
: .
026666
warmup_steps
:
1000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Mobilenet v2 FPN-lite (go/fpn-lite) feature extractor, shared box
# predictor and focal loss (a mobile version of Retinanet).
# Retinanet: see Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 28.2 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
640
width
:
640
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
128
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
share_prediction_tower
:
true
use_depthwise
:
true
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_mobilenet_v2_fpn_keras'
use_depthwise
:
true
fpn
{
min_level
:
3
max_level
:
7
additional_layer_depth
:
128
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
00004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/mobilenet_v2.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
128
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
num_steps
:
50000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
08
total_steps
:
50000
warmup_learning_rate
: .
026666
warmup_steps
:
1000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_resnet101_v1_fpn_1024x1024_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Resnet 101 v1 FPN feature extractor, shared box predictor and focal
# loss (a.k.a Retinanet).
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 39.5 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
1024
width
:
1024
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
256
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_resnet101_v1_fpn_keras'
fpn
{
min_level
:
3
max_level
:
7
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/resnet101.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
64
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
100000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
04
total_steps
:
100000
warmup_learning_rate
: .
013333
warmup_steps
:
2000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_resnet101_v1_fpn_640x640_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Resnet 101 v1 FPN feature extractor, shared box predictor and focal
# loss (a.k.a Retinanet).
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 35.4 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
640
width
:
640
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
256
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_resnet101_v1_fpn_keras'
fpn
{
min_level
:
3
max_level
:
7
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/resnet101.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
64
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
25000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
04
total_steps
:
25000
warmup_learning_rate
: .
013333
warmup_steps
:
2000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_resnet152_v1_fpn_1024x1024_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Resnet 152 v1 FPN feature extractor, shared box predictor and focal
# loss (a.k.a Retinanet).
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 39.6 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
1024
width
:
1024
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
256
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_resnet152_v1_fpn_keras'
fpn
{
min_level
:
3
max_level
:
7
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/resnet152.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
64
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
100000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
04
total_steps
:
100000
warmup_learning_rate
: .
013333
warmup_steps
:
2000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_resnet152_v1_fpn_640x640_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Resnet 152 v1 FPN feature extractor, shared box predictor and focal
# loss (a.k.a Retinanet).
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 35.6 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
640
width
:
640
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
256
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_resnet152_v1_fpn_keras'
fpn
{
min_level
:
3
max_level
:
7
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/resnet152.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
64
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
25000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
04
total_steps
:
25000
warmup_learning_rate
: .
013333
warmup_steps
:
2000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_1024x1024_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Resnet 50 v1 FPN feature extractor, shared box predictor and focal
# loss (a.k.a Retinanet).
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 38.3 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
1024
width
:
1024
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
256
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_resnet50_v1_fpn_keras'
fpn
{
min_level
:
3
max_level
:
7
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/resnet50.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
64
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
100000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
04
total_steps
:
100000
warmup_learning_rate
: .
013333
warmup_steps
:
2000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.config
0 → 100644
View file @
3ce2f61b
# SSD with Resnet 50 v1 FPN feature extractor, shared box predictor and focal
# loss (a.k.a Retinanet).
# See Lin et al, https://arxiv.org/abs/1708.02002
# Trained on COCO, initialized from Imagenet classification checkpoint
# Train on TPU-8
#
# Achieves 34.3 mAP on COCO17 Val
model
{
ssd
{
inplace_batchnorm_update
:
true
freeze_batchnorm
:
false
num_classes
:
90
box_coder
{
faster_rcnn_box_coder
{
y_scale
:
10
.
0
x_scale
:
10
.
0
height_scale
:
5
.
0
width_scale
:
5
.
0
}
}
matcher
{
argmax_matcher
{
matched_threshold
:
0
.
5
unmatched_threshold
:
0
.
5
ignore_thresholds
:
false
negatives_lower_than_unmatched
:
true
force_match_for_each_row
:
true
use_matmul_gather
:
true
}
}
similarity_calculator
{
iou_similarity
{
}
}
encode_background_as_zeros
:
true
anchor_generator
{
multiscale_anchor_generator
{
min_level
:
3
max_level
:
7
anchor_scale
:
4
.
0
aspect_ratios
: [
1
.
0
,
2
.
0
,
0
.
5
]
scales_per_octave
:
2
}
}
image_resizer
{
fixed_shape_resizer
{
height
:
640
width
:
640
}
}
box_predictor
{
weight_shared_convolutional_box_predictor
{
depth
:
256
class_prediction_bias_init
: -
4
.
6
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
random_normal_initializer
{
stddev
:
0
.
01
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
num_layers_before_predictor
:
4
kernel_size
:
3
}
}
feature_extractor
{
type
:
'ssd_resnet50_v1_fpn_keras'
fpn
{
min_level
:
3
max_level
:
7
}
min_depth
:
16
depth_multiplier
:
1
.
0
conv_hyperparams
{
activation
:
RELU_6
,
regularizer
{
l2_regularizer
{
weight
:
0
.
0004
}
}
initializer
{
truncated_normal_initializer
{
stddev
:
0
.
03
mean
:
0
.
0
}
}
batch_norm
{
scale
:
true
,
decay
:
0
.
997
,
epsilon
:
0
.
001
,
}
}
override_base_feature_extractor_hyperparams
:
true
}
loss
{
classification_loss
{
weighted_sigmoid_focal
{
alpha
:
0
.
25
gamma
:
2
.
0
}
}
localization_loss
{
weighted_smooth_l1
{
}
}
classification_weight
:
1
.
0
localization_weight
:
1
.
0
}
normalize_loss_by_num_matches
:
true
normalize_loc_loss_by_codesize
:
true
post_processing
{
batch_non_max_suppression
{
score_threshold
:
1
e
-
8
iou_threshold
:
0
.
6
max_detections_per_class
:
100
max_total_detections
:
100
}
score_converter
:
SIGMOID
}
}
}
train_config
: {
fine_tune_checkpoint_version
:
V2
fine_tune_checkpoint
:
"PATH_TO_BE_CONFIGURED/resnet50.ckpt-1"
fine_tune_checkpoint_type
:
"classification"
batch_size
:
64
sync_replicas
:
true
startup_delay_steps
:
0
replicas_to_aggregate
:
8
use_bfloat16
:
true
num_steps
:
25000
data_augmentation_options
{
random_horizontal_flip
{
}
}
data_augmentation_options
{
random_crop_image
{
min_object_covered
:
0
.
0
min_aspect_ratio
:
0
.
75
max_aspect_ratio
:
3
.
0
min_area
:
0
.
75
max_area
:
1
.
0
overlap_thresh
:
0
.
0
}
}
optimizer
{
momentum_optimizer
: {
learning_rate
: {
cosine_decay_learning_rate
{
learning_rate_base
: .
04
total_steps
:
25000
warmup_learning_rate
: .
013333
warmup_steps
:
2000
}
}
momentum_optimizer_value
:
0
.
9
}
use_moving_average
:
false
}
max_number_of_boxes
:
100
unpad_groundtruth_tensors
:
false
}
train_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/train2017-?????-of-00256.tfrecord"
}
}
eval_config
: {
metrics_set
:
"coco_detection_metrics"
use_moving_averages
:
false
}
eval_input_reader
: {
label_map_path
:
"PATH_TO_BE_CONFIGURED/label_map.txt"
shuffle
:
false
num_epochs
:
1
tf_record_input_reader
{
input_path
:
"PATH_TO_BE_CONFIGURED/val2017-?????-of-00032.tfrecord"
}
}
research/object_detection/core/box_predictor.py
View file @
3ce2f61b
...
...
@@ -134,7 +134,7 @@ class BoxPredictor(object):
pass
class
KerasBoxPredictor
(
tf
.
keras
.
Model
):
class
KerasBoxPredictor
(
tf
.
keras
.
layers
.
Layer
):
"""Keras-based BoxPredictor."""
def
__init__
(
self
,
is_training
,
num_classes
,
freeze_batchnorm
,
...
...
research/object_detection/core/densepose_ops.py
View file @
3ce2f61b
...
...
@@ -42,9 +42,6 @@ PART_NAMES = [
b
'left_face'
,
]
_SRC_PATH
=
(
'google3/third_party/tensorflow_models/object_detection/'
'dataset_tools/densepose'
)
def
scale
(
dp_surface_coords
,
y_scale
,
x_scale
,
scope
=
None
):
"""Scales DensePose coordinates in y and x dimensions.
...
...
@@ -266,10 +263,14 @@ class DensePoseHorizontalFlip(object):
def
__init__
(
self
):
"""Constructor."""
uv_symmetry_transforms_path
=
os
.
path
.
join
(
tf
.
resource_loader
.
get_data_files_path
(),
'..'
,
'dataset_tools'
,
'densepose'
,
'UV_symmetry_transforms.mat'
)
data
=
scipy
.
io
.
loadmat
(
uv_symmetry_transforms_path
)
path
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
uv_symmetry_transforms_path
=
tf
.
resource_loader
.
get_path_to_datafile
(
os
.
path
.
join
(
path
,
'..'
,
'dataset_tools'
,
'densepose'
,
'UV_symmetry_transforms.mat'
))
tf
.
logging
.
info
(
'Loading DensePose symmetry transforms file from {}'
.
format
(
uv_symmetry_transforms_path
))
with
tf
.
io
.
gfile
.
GFile
(
uv_symmetry_transforms_path
,
'rb'
)
as
f
:
data
=
scipy
.
io
.
loadmat
(
f
)
# Create lookup maps which indicate how a VU coordinate changes after a
# horizontal flip.
...
...
Prev
1
2
3
4
5
6
7
8
9
10
…
13
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