我正在使用自动编码器对高分辨率的灰度图像进行去噪。每幅图像被分成特定大小的子批次,即52 x 52,模型对这些批次中的每一批进行处理,结果是将每幅图像中的去噪批次连接回原始图像。以下是结果后的图像示例:

你可以在拼接后看到更小的图像批次。如何克服这种行为?
我想过做进一步的处理,比如在边缘添加模糊,将它们混合在一起,但我认为这不是最佳解决方案。
拼接代码:
num_hor_patch = 19
num_ver_patch = 26
print("Building the Images Batches")
for i in range(num_image):
reconstruct = []
for j in range(num_hor_patch):
from_vertical_patches = predictions[start_pos:(start_pos+num_ver_patch)]
horizontal_patch = np.concatenate(from_vertical_patches, axis=1)
start_pos += num_ver_patch
reconstruct.append(horizontal_patch)
restored_image = np.concatenate(np.array(reconstruct), axis=0)
output.append(restored_image)
start_pos = 0
test_data = np.array([np.reshape(test_data[i], (52, 52)) for i in range(test_data.shape[0])])
for i in range(num_image):
reconstruct = []
for j in range(num_hor_patch):
from_vertical_patches = test_data[start_pos:(start_pos+num_ver_patch)]
horizontal_patch = np.concatenate(from_vertical_patches, axis=1)
start_pos += num_ver_patch
reconstruct.append(horizontal_patch)
restored_image = np.concatenate(np.array(reconstruct), axis=0)
input.append(restored_image)
start_pos = 0
test_noisy_data = np.array([np.reshape(test_noisy_data[i], (52, 52)) for i in range(test_noisy_data.shape[0])])
for i in range(num_image):
reconstruct = []
for j in range(num_hor_patch):
from_vertical_patches = test_noisy_data[start_pos:(start_pos+num_ver_patch)]
horizontal_patch = np.concatenate(from_vertical_patches, axis=1)
start_pos += num_ver_patch
reconstruct.append(horizontal_patch)
restored_image = np.concatenate(np.array(reconstruct), axis=0)
noisy.append(restored_image)
print("Exporting the Model")
output_model['output'] = output
output_model['original'] = input
output_model['noisy'] = noisy发布于 2020-07-30 10:30:58
从图像上看,您正在处理分辨率约为400x800的图像。为此,16 be 32 be的V100 GPU的内存应该足够一个像样的批量大小与一个像样的模型容量!即使不是这样,您也可以使用混合精度甚至fp16将内存利用率降低2到4倍。
如果您的分辨率太高,无法玩这些技巧,那么理想情况下,您需要通过在GPU上拆分图像补丁(空间分区),并在向前和向后传递过程中在计算图中的这些域之间交换张量,来实现模型并行方法。这将使补丁保持一致,但可能会导致严重的性能瓶颈!
你可以看看这个UNET架构,你必须从Conv3D转换到Conv2D,并从分割切换到去噪任务。
https://github.com/tensorflow/mesh/blob/master/mesh_tensorflow/experimental/unet.py
发布于 2020-07-24 03:17:26
所以,如果我错了,请纠正我,但你有以下问题:
问题是如何使用自动编码器对图像进行去噪?
您当前的解决方案是:
对于每个瓦片,将图像划分为不重叠的瓦片和非重叠瓦片使用autoencoder
这种解决方案在瓷砖之间的接缝中产生了非常不一致的结果。
我认为您需要使用重叠 tiles,而不是非重叠 tiles。
这意味着每个像素都是多个平铺的一部分,而不只是一个。因此,将有几个去噪值,一个来自他所属的每个瓦片。
每个像素的最终值将是该像素所属的所有分片的值的平均值。
新的解决方案:
https://stackoverflow.com/questions/62880561
复制相似问题