tensorflow 如何将带有keras预处理层的视频增强统一应用于视频中的所有帧?

vu8f3i0k  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(103)

我尝试将数据增强应用到视频数据集,其中每个视频都应用了不同的增强。例如,视频1中的所有帧都水平翻转并旋转10°。另一方面,视频2中的所有帧都没有翻转并旋转-5°。我在预处理层中传递了一个种子,但是,视频1的每一帧被不同地增强。2这是我的方法看起来:

def data_augment(frames,seed):
    x = tf.keras.layers.CenterCrop(height=1000,width=1200) (frames)
    x = Resizing(width=128,height=128) (x)
    x = Rescaling(1./255) (x)
    x = RandomContrast((0.2,0.2),seed=seed) (x)
    x = RandomTranslation(height_factor=0.15,width_factor=0.2,fill_mode="constant",fill_value=0.0,seed=seed) (x)
    x = RandomFlip("horizontal",seed=seed) (x)
    x = RandomRotation(factor=0.01,fill_mode="constant",seed=seed) (x)
    return x
yzuktlbb

yzuktlbb1#

视频增强::对于视频,合并时间轴和通道轴,将其视为图像增强问题,并对最终结果进行整形,使视频对所有帧的增强效果相同。

#input dimension:
BATCH, TIME,WIDTH, HEIGHT,_= tf.shape(videos)

**步骤1:**更改输入形状-(batch, time, width, height, 3) to (batch, width, height, time*3)

#move time to last
videos = tf.transpose(videos, [0, 2, 3, 4, 1])

#combine channels and time
out_shape = (BATCH, WIDTH, HEIGHT, TIME*3)

videos = tf.reshape(videos, out_shape)

**步骤2:**应用增强

augmented_data = data_augment(videos,...)

**第3步:**恢复原始形状

BATCH, WIDTH, HEIGHT,channels= tf.shape(augmented_data)

augmented_data = tf.reshape(augmented_data, (BATCH, HEIGHT, WIDTH, 3, channels//3))
augmented_data = tf.transpose(augmented_data, [0, 4, 1, 2, 3])

相关问题