Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/es-419/hub/tutorials/tweening_conv3d.ipynb
25118 views
Kernel: Python 3

Licensed under the Apache License, Version 2.0 (the "License");

# Copyright 2019 The TensorFlow Hub 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. # ==============================================================================

Interpolación de movimiento de videos con convoluciones 3D

Yunpeng Li, Dominik Roblek, and Marco Tagliasacchi. From Here to There: Video Inbetweening Using Direct 3D Convolutions, 2019.

https://arxiv.org/abs/1905.10240

Características actuales del Hub:

  • tiene modelos para videos de BAIR Robot pushing y para conjuntos de datos de videos de acción de KTH (aunque este Colab solo usa BAIR)

  • El conjunto de datos BAIR ya está disponible en Hub. Sin embargo, los vídeos de KTH los deben proporciona los propios usuarios.

  • por ahora solo evaluación (generación de video)

  • el tamaño del lote y el tamaño del fotograma están codificados

Preparación

Dado que tfds.load('bair_robot_pushing_small', split='test') descargaría un archivo de 30 GB que también contiene los datos de entrenamiento, descargamos un archivo separado que solo contiene los datos de prueba de 190 MB. El conjunto de datos que usamos fue publicado mediante este artículo y tiene la licencia Creative Commons BY 4.0.

import tensorflow as tf import matplotlib.pyplot as plt import numpy as np import seaborn as sns import tensorflow_hub as hub import tensorflow_datasets as tfds from tensorflow_datasets.core import SplitGenerator from tensorflow_datasets.video.bair_robot_pushing import BairRobotPushingSmall import tempfile import pathlib TEST_DIR = pathlib.Path(tempfile.mkdtemp()) / "bair_robot_pushing_small/softmotion30_44k/test/"
# Download the test split to $TEST_DIR !mkdir -p $TEST_DIR !wget -nv https://storage.googleapis.com/download.tensorflow.org/data/bair_test_traj_0_to_255.tfrecords -O $TEST_DIR/traj_0_to_255.tfrecords
# Since the dataset builder expects the train and test split to be downloaded, # patch it so it only expects the test data to be available builder = BairRobotPushingSmall() test_generator = SplitGenerator(name='test', gen_kwargs={"filedir": str(TEST_DIR)}) builder._split_generators = lambda _: [test_generator] builder.download_and_prepare()

BAIR: Demostración basada en entradas de arreglos numpy

# @title Load some example data (BAIR). batch_size = 16 # If unable to download the dataset automatically due to "not enough disk space", please download manually to Google Drive and # load using tf.data.TFRecordDataset. ds = builder.as_dataset(split="test") test_videos = ds.batch(batch_size) first_batch = next(iter(test_videos)) input_frames = first_batch['image_aux1'][:, ::15] input_frames = tf.cast(input_frames, tf.float32)
# @title Visualize loaded videos start and end frames. print('Test videos shape [batch_size, start/end frame, height, width, num_channels]: ', input_frames.shape) sns.set_style('white') plt.figure(figsize=(4, 2*batch_size)) for i in range(batch_size)[:4]: plt.subplot(batch_size, 2, 1 + 2*i) plt.imshow(input_frames[i, 0] / 255.0) plt.title('Video {}: First frame'.format(i)) plt.axis('off') plt.subplot(batch_size, 2, 2 + 2*i) plt.imshow(input_frames[i, 1] / 255.0) plt.title('Video {}: Last frame'.format(i)) plt.axis('off')

Cargar módulo Hub

hub_handle = 'https://tfhub.dev/google/tweening_conv3d_bair/1' module = hub.load(hub_handle).signatures['default']

Generar y mostrar los videos

filled_frames = module(input_frames)['default'] / 255.0
# Show sequences of generated video frames. # Concatenate start/end frames and the generated filled frames for the new videos. generated_videos = np.concatenate([input_frames[:, :1] / 255.0, filled_frames, input_frames[:, 1:] / 255.0], axis=1) for video_id in range(4): fig = plt.figure(figsize=(10 * 2, 2)) for frame_id in range(1, 16): ax = fig.add_axes([frame_id * 1 / 16., 0, (frame_id + 1) * 1 / 16., 1], xmargin=0, ymargin=0) ax.imshow(generated_videos[video_id, frame_id]) ax.axis('off')