Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
bob
bob.bio.face
Commits
07081e3d
Commit
07081e3d
authored
May 17, 2021
by
Tiago de Freitas Pereira
Browse files
Update cnn training
parent
7a9cd948
Pipeline
#50850
failed with stage
in 34 minutes and 21 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
cnn_training/arcface.py
View file @
07081e3d
...
...
@@ -52,23 +52,24 @@ validation-tf-record-path: "/path/lfw_pairs.tfrecord"
Usage:
arcface.py <config-yaml> <checkpoint_path> [--pre-train]
arcface.py <config-yaml> <checkpoint_path> [--pre-train
--pre-train-epochs=<kn>
]
arcface.py -h | --help
Options:
-h --help Show this screen.
--pre-train If set pretrains the CNN with the crossentropy softmax for 2 epochs
-h --help Show this screen.
--pre-train If set pretrains the CNN with the crossentropy softmax for 2 epochs
--pre-train-epochs=<kn> Number of epochs to pretrain [default: 40]
arcface.py arcface -h | help
"""
import
os
from
functools
import
partial
import
numpy
as
np
import
pkg_resources
import
tensorflow
as
tf
from
bob.learn.tensorflow.models.inception_resnet_v2
import
InceptionResNetV2
from
bob.learn.tensorflow.models
import
resnet50
v1
from
bob.learn.tensorflow.models
import
resnet50
_modified
,
resnet101_modified
from
bob.learn.tensorflow.metrics
import
predict_using_tensors
from
tensorflow.keras
import
layers
from
bob.learn.tensorflow.callbacks
import
add_backup_callback
...
...
@@ -100,11 +101,11 @@ BACKBONES = dict()
BACKBONES
[
"inception-resnet-v2"
]
=
InceptionResNetV2
BACKBONES
[
"efficientnet-B0"
]
=
tf
.
keras
.
applications
.
EfficientNetB0
BACKBONES
[
"resnet50"
]
=
tf
.
keras
.
applications
.
ResNet50
BACKBONES
[
"resnet50_modified"
]
=
resnet50_modified
BACKBONES
[
"resnet101_modified"
]
=
resnet101_modified
BACKBONES
[
"mobilenet-v2"
]
=
tf
.
keras
.
applications
.
MobileNetV2
# from bob.learn.tensorflow.models.lenet5 import LeNet5_simplified
BACKBONES
[
"resnet50v1"
]
=
resnet50v1
##############################
# SOLVER SPECIFICATIONS
##############################
...
...
@@ -134,7 +135,8 @@ DATA_SHAPES = dict()
# Inputs with 182x182 are cropped to 160x160
DATA_SHAPES
[
182
]
=
160
DATA_SHAPES
[
112
]
=
98
DATA_SHAPES
[
112
]
=
112
# DATA_SHAPES[112] = 98
DATA_SHAPES
[
126
]
=
112
...
...
@@ -157,7 +159,6 @@ VALIDATION_BATCH_SIZE = 38
def
create_model
(
n_classes
,
model_spec
,
backbone
,
bottleneck
,
dropout_rate
,
input_shape
,
pre_train
):
if
backbone
==
"inception-resnet-v2"
:
pre_model
=
BACKBONES
[
backbone
](
include_top
=
False
,
bottleneck
=
False
,
input_shape
=
input_shape
,
...
...
@@ -177,12 +178,9 @@ def create_model(
if
pre_train
:
# pre_model = add_top(pre_model, n_classes=n_classes)
logits_premodel
=
ArcFaceLayer
(
n_classes
,
s
=
model_spec
[
"arcface"
][
"s"
],
m
=
model_spec
[
"arcface"
][
"m"
],
arc
=
False
,
)(
embeddings
,
None
)
logits_premodel
=
ArcFaceLayer
(
n_classes
,
s
=
0
,
m
=
0
,
arc
=
False
,)(
embeddings
,
None
)
# Wrapping the embedding validation
# logits_premodel = pre_model.get_layer("logits").output
...
...
@@ -284,6 +282,7 @@ def train_and_evaluate(
validation_path
,
lerning_rate_schedule
,
pre_train
=
False
,
pre_train_epochs
=
30
,
):
# number of training steps to do before validating a model. This also defines an epoch
...
...
@@ -343,12 +342,15 @@ def train_and_evaluate(
# Tracking in the tensorboard
tf
.
summary
.
scalar
(
"learning rate"
,
data
=
lr
,
step
=
epoch
)
if
epoch
in
range
(
20
0
):
if
epoch
in
range
(
4
0
):
return
1
*
lr
elif
epoch
<
1000
:
return
lr
*
np
.
exp
(
-
0.005
)
else
:
elif
epoch
<
300
:
# return lr * np.exp(-0.005)
return
0.01
elif
epoch
<
1200
:
return
0.0001
else
:
return
0.00001
if
lerning_rate_schedule
==
"cosine-decay-restarts"
:
decay_steps
=
50
...
...
@@ -381,7 +383,7 @@ def train_and_evaluate(
# STEPS_PER_EPOCH
pre_model
.
fit
(
train_ds
,
epochs
=
20
,
epochs
=
int
(
pre_train_epochs
)
,
validation_data
=
val_ds
,
steps_per_epoch
=
STEPS_PER_EPOCH
,
validation_steps
=
VALIDATION_SAMPLES
//
VALIDATION_BATCH_SIZE
,
...
...
@@ -449,5 +451,6 @@ if __name__ == "__main__":
if
"lerning-rate-schedule"
in
config
else
None
,
pre_train
=
args
[
"--pre-train"
],
pre_train_epochs
=
args
[
"--pre-train-epochs"
],
)
Write
Preview
Supports
Markdown
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