Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/pt-br/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. # ==============================================================================

Intervalação de vídeo usando convoluções 3D

Yunpeng Li, Dominik Roblek e Marco Tagliasacchi. From Here to There: Video Inbetweening Using Direct 3D Convolutions (De lá acolá: intervalação de vídeo usando convoluções 3D diretas), 2019.

https://arxiv.org/abs/1905.10240

Características atuais do Hub:

  • Tem modelos para os datasets de vídeos BAIR Robot Pushing e KTH Action (embora este Colab use somente o BAIR).

  • O dataset BAIR já está disponível no Hub. Porém, os vídeos do KTH precisam ser fornecidos pelos próprios usuários.

  • Somente avaliação (geração de vídeos) por enquanto.

  • O tamanho do lote e o tamanho do frame são embutidos no código.

Configuração

Como tfds.load('bair_robot_pushing_small', split='test') baixaria um arquivo de 30 GB que também contém os dados de treinamento, baixamos um arquivo separado que contém apenas os 190 MB de dados de teste. O dataset usado foi publicado por este artigo e está licenciado sob 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: demonstração baseada em entradas de array 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')

Carregue o módulo do Hub

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

Gere e exiba os vídeos

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')