Commit e9355843 authored by A. Unique TensorFlower's avatar A. Unique TensorFlower Committed by saberkun
Browse files

Internal change

PiperOrigin-RevId: 401839863
parent 8bfa4d03
...@@ -24,7 +24,7 @@ from official.vision.beta.projects.yt8m.configs import yt8m as yt8m_cfg ...@@ -24,7 +24,7 @@ from official.vision.beta.projects.yt8m.configs import yt8m as yt8m_cfg
from official.vision.beta.projects.yt8m.dataloaders import yt8m_input from official.vision.beta.projects.yt8m.dataloaders import yt8m_input
from official.vision.beta.projects.yt8m.eval_utils import eval_util from official.vision.beta.projects.yt8m.eval_utils import eval_util
from official.vision.beta.projects.yt8m.modeling import yt8m_model_utils as utils from official.vision.beta.projects.yt8m.modeling import yt8m_model_utils as utils
from official.vision.beta.projects.yt8m.modeling.yt8m_model import YT8MModel from official.vision.beta.projects.yt8m.modeling.yt8m_model import DbofModel
@task_factory.register_task_cls(yt8m_cfg.YT8MTask) @task_factory.register_task_cls(yt8m_cfg.YT8MTask)
...@@ -40,13 +40,26 @@ class YT8MTask(base_task.Task): ...@@ -40,13 +40,26 @@ class YT8MTask(base_task.Task):
input_specs = tf.keras.layers.InputSpec(shape=[None] + common_input_shape) input_specs = tf.keras.layers.InputSpec(shape=[None] + common_input_shape)
logging.info('Build model input %r', common_input_shape) logging.info('Build model input %r', common_input_shape)
l2_weight_decay = self.task_config.losses.l2_weight_decay
# Divide weight decay by 2.0 to match the implementation of tf.nn.l2_loss.
# (https://www.tensorflow.org/api_docs/python/tf/keras/regularizers/l2)
# (https://www.tensorflow.org/api_docs/python/tf/nn/l2_loss)
l2_regularizer = (
tf.keras.regularizers.l2(l2_weight_decay /
2.0) if l2_weight_decay else None)
# Model configuration. # Model configuration.
model_config = self.task_config.model model_config = self.task_config.model
model = YT8MModel( norm_activation_config = model_config.norm_activation
input_params=model_config, model = DbofModel(
params=model_config,
input_specs=input_specs, input_specs=input_specs,
num_frames=train_cfg.num_frames, num_frames=train_cfg.num_frames,
num_classes=train_cfg.num_classes) num_classes=train_cfg.num_classes,
activation=norm_activation_config.activation,
use_sync_bn=norm_activation_config.use_sync_bn,
norm_momentum=norm_activation_config.norm_momentum,
norm_epsilon=norm_activation_config.norm_epsilon,
kernel_regularizer=l2_regularizer)
return model return model
def build_inputs(self, params: yt8m_cfg.DataConfig, input_context=None): def build_inputs(self, params: yt8m_cfg.DataConfig, input_context=None):
...@@ -163,9 +176,10 @@ class YT8MTask(base_task.Task): ...@@ -163,9 +176,10 @@ class YT8MTask(base_task.Task):
num_frames = tf.cast(num_frames, tf.float32) num_frames = tf.cast(num_frames, tf.float32)
sample_frames = self.task_config.train_data.num_frames sample_frames = self.task_config.train_data.num_frames
if self.task_config.model.sample_random_frames: if self.task_config.model.sample_random_frames:
features = utils.SampleRandomFrames(features, num_frames, sample_frames) features = utils.sample_random_frames(features, num_frames, sample_frames)
else: else:
features = utils.SampleRandomSequence(features, num_frames, sample_frames) features = utils.sample_random_sequence(features, num_frames,
sample_frames)
num_replicas = tf.distribute.get_strategy().num_replicas_in_sync num_replicas = tf.distribute.get_strategy().num_replicas_in_sync
with tf.GradientTape() as tape: with tf.GradientTape() as tape:
...@@ -237,9 +251,10 @@ class YT8MTask(base_task.Task): ...@@ -237,9 +251,10 @@ class YT8MTask(base_task.Task):
# sample random frames (None, 5, 1152) -> (None, 30, 1152) # sample random frames (None, 5, 1152) -> (None, 30, 1152)
sample_frames = self.task_config.validation_data.num_frames sample_frames = self.task_config.validation_data.num_frames
if self.task_config.model.sample_random_frames: if self.task_config.model.sample_random_frames:
features = utils.SampleRandomFrames(features, num_frames, sample_frames) features = utils.sample_random_frames(features, num_frames, sample_frames)
else: else:
features = utils.SampleRandomSequence(features, num_frames, sample_frames) features = utils.sample_random_sequence(features, num_frames,
sample_frames)
outputs = self.inference_step(features, model) outputs = self.inference_step(features, model)
outputs = tf.nest.map_structure(lambda x: tf.cast(x, tf.float32), outputs) outputs = tf.nest.map_structure(lambda x: tf.cast(x, tf.float32), outputs)
...@@ -276,7 +291,7 @@ class YT8MTask(base_task.Task): ...@@ -276,7 +291,7 @@ class YT8MTask(base_task.Task):
predictions=step_logs[self.avg_prec_metric.name][1]) predictions=step_logs[self.avg_prec_metric.name][1])
return state return state
def reduce_aggregated_logs(self, aggregated_logs): def reduce_aggregated_logs(self, aggregated_logs, global_step=None):
avg_prec_metrics = self.avg_prec_metric.get() avg_prec_metrics = self.avg_prec_metric.get()
self.avg_prec_metric.clear() self.avg_prec_metric.clear()
return avg_prec_metrics return avg_prec_metrics
...@@ -15,54 +15,15 @@ ...@@ -15,54 +15,15 @@
"""YT8M model training driver.""" """YT8M model training driver."""
from absl import app from absl import app
from absl import flags
import gin
from official.common import distribute_utils
from official.common import flags as tfm_flags from official.common import flags as tfm_flags
from official.core import task_factory from official.vision.beta import train
from official.core import train_lib
from official.core import train_utils
from official.modeling import performance
# pylint: disable=unused-import # pylint: disable=unused-import
from official.vision.beta.projects.yt8m.configs import yt8m from official.vision.beta.projects.yt8m.configs import yt8m
from official.vision.beta.projects.yt8m.tasks import yt8m_task from official.vision.beta.projects.yt8m.tasks import yt8m_task
# pylint: enable=unused-import # pylint: enable=unused-import
FLAGS = flags.FLAGS
def main(_):
gin.parse_config_files_and_bindings(FLAGS.gin_file, FLAGS.gin_params)
params = train_utils.parse_configuration(FLAGS)
model_dir = FLAGS.model_dir
if 'train' in FLAGS.mode:
# Pure eval modes do not output yaml files. Otherwise continuous eval job
# may race against the train job for writing the same file.
train_utils.serialize_config(params, model_dir)
# Sets mixed_precision policy. Using 'mixed_float16' or 'mixed_bfloat16'
# can have significant impact on model speeds by utilizing float16 in case of
# GPUs, and bfloat16 in the case of TPUs. loss_scale takes effect only when
# dtype is float16
if params.runtime.mixed_precision_dtype:
performance.set_mixed_precision_policy(params.runtime.mixed_precision_dtype)
distribution_strategy = distribute_utils.get_distribution_strategy(
distribution_strategy=params.runtime.distribution_strategy,
all_reduce_alg=params.runtime.all_reduce_alg,
num_gpus=params.runtime.num_gpus,
tpu_address=params.runtime.tpu)
with distribution_strategy.scope():
task = task_factory.get_task(params.task, logging_dir=model_dir)
train_lib.run_experiment(
distribution_strategy=distribution_strategy,
task=task,
mode=FLAGS.mode,
params=params,
model_dir=model_dir)
if __name__ == '__main__': if __name__ == '__main__':
tfm_flags.define_flags() tfm_flags.define_flags()
app.run(main) app.run(train.main)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment