如何使用 tf.image.resize_with_pad 但用 1 而不是 0 填充?

问题描述 投票:0回答:1

根据 Tensorflow documentation,填充始终用零而不是 1。

有没有办法将填充更改为

如果没有,张量流数据集的最佳替代方案是什么?

这是我的代码示例:

def resize_with_pad(image, label):
    
    image = tf.image.resize_with_pad(image=image,
                                     target_height=resized_wh,
                                     target_width=resized_wh,
                                     method=ResizeMethod.BILINEAR,
                                     antialias=False)
    return image, label


def create_tf_dataset_pipeline(tf_dataset):
    
    tf_dataset = tf_dataset.map(load_image, num_parallel_calls=AUTOTUNE)
    tf_dataset = tf_dataset.map(normalize, num_parallel_calls=AUTOTUNE)
    tf_dataset = tf_dataset.map(resize_with_pad, num_parallel_calls=AUTOTUNE)
    tf_dataset = tf_dataset.batch(batch_size)
    tf_dataset = tf_dataset.prefetch(AUTOTUNE)
    
    return tf_dataset
    

train_data = tf.data.Dataset.from_tensor_slices((x_train_filepaths, y_train_class))
train_data = create_tf_dataset_pipeline(train_data)

我尝试调整图像大小和填充图像并将其保存在目录中(即前端加载处理),但这非常不灵活,因为每次我想训练不同大小的模型时都需要创建一个新的数据集。如果我能用张量流动态地做到这一点那就更好了。

image-processing computer-vision conv-neural-network tensorflow2.0 tensorflow-datasets
1个回答
0
投票

我刚刚找到了一个临时解决方案。

您可以更改

def pad(..., constant_values=0)
文件中的功能
array_ops.py
, 张量流库文件夹下的某个位置,例如
..\EnvsName\Lib\site-packages\tensorflow\python\ops\array_ops.py
,到
def pad(..., constant_values=255)
并保存。

然后你可以在调用函数时用白色背景([255,255,255],或者你说的“个”)填充

tf.image.resize_with_pad

© www.soinside.com 2019 - 2024. All rights reserved.