ewrfcas/MVSFormer

我想知道测试t&t数据集时出现的深度图异常状况原因,感谢作者

crazydiamondaz opened this issue · 8 comments

我想知道测试t&t数据集时出现的深度图异常状况原因,感谢作者

我在使用作者的代码测试t&t数据集中的temple例时,发现生成的视图有好有坏,我想知道这些较坏的例子是因为什么导致的,是因为我的失误,还是因为网络无法匹配出明显的特征,还是因为pair.txt中指出的参考图片有误。正确生成的深度图如下所示:
image
错误生成的深度图包括如下例子:
image
image
我未对作者的代码进行修改,只降低了分辨率运行测试。
最后感谢作者的付出与劳动,感谢开源!

方便发一下,出现这个问题对应的image id 以及 你运行的脚本吗

感谢您的回复!
我使用的脚本:
CUDA_VISIBLE_DEVICES=0 python test.py --dataset tt --batch_size 1
--testpath "/dockerdata/yorkan/dataset/tnt/tankandtemples/advanced"
--testlist "./lists/tanksandtemples/advanced.txt"
--resume "/dockerdata/yorkan/dataset/tnt/MVSFormer-Blended/best.pth"
--outdir "/dockerdata/yorkan/tnt/output"
--interval_scale 1.0 --num_view 10 --numdepth 256
--max_h 1088 --max_w 1920 --filter_method dpcd
--prob_threshold 0.5,0.5,0.5,0.5
--combine_conf --tmps 5.0,5.0,5.0,1.0
输入的图片(Temples数据集序号23图片):
image
输出的深度图:(我将pfm转换为了图片格式,GitHub无法直接发送pfm文件)

image
将pfm转换为pfm的脚本如下:
def read_pfm(file_path):
with open(file_path, "rb") as file:
color = None
width = None
height = None
scale = None
endian = None

    header = file.readline().decode("utf-8").rstrip()
    if header == "PF":
        color = True
    elif header == "Pf":
        color = False
    else:
        raise Exception("Not a PFM file.")

    dimensions = file.readline().decode("utf-8").rstrip()
    width, height = map(int, dimensions.split(" "))

    scale = float(file.readline().decode("utf-8").rstrip())
    if scale < 0:
        endian = "<"
        scale = -scale
    else:
        endian = ">"

    data = np.fromfile(file, endian + "f")
    shape = (height, width, 3) if color else (height, width)
    data = np.reshape(data, shape)
    data = np.flipud(data)
    return data, scale

def pfm_to_jpg(pfm_file, jpg_file):
data, _ = read_pfm(pfm_file)
print(np.min(data),np.max(data))
data = (data - np.min(data)) / (np.max(data) - np.min(data)) * 255
data = data.astype(np.uint8)
image = Image.fromarray(data)
image.save(jpg_file)
再次感谢您的回复与工作

其实这个和depth range有关系,我看了一下,22 和23 的image 他们的camera 的depth range 是0.3 左右,前面一些图片他们的最小depth range是0.6左右,你其实可以手动修改他的depth range,把最小的depth range 设置高一点depth 就会好一些,出现这个原因主要是因为 在depth sample的时候采用的inverse sampling, 最小的depth range 不能太小

你可以手动check一下,如果最小的depth range 设置的比较小,你可以打印每个stage的depth value的范围

感谢您的回复,我实验了一下,那张图片确实会生成不错的深度,但是周围的原本正常的序号22图片生成出了错误的深度图。这是正常的吗?还是我应该去调整每个图片的depth range,才能得到不错的深度图和正确的模型呢?

感谢您的回复,我实验了一下,那张图片确实会生成不错的深度,但是周围的原本正常的序号22图片生成出了错误的深度图。这是正常的吗?还是我应该去调整每个图片的depth range,才能得到不错的深度图和正确的模型呢?
补充信息:我在使用前面的脚本实验时,除了Temple以外的所有模型都能正确生成,除了产生了错误深度图的Temple无法生成正确的点云模型。

感谢您的回复,我实验了一下,那张图片确实会生成不错的深度,但是周围的原本正常的序号22图片生成出了错误的深度图。这是正常的吗?还是我应该去调整每个图片的depth range,才能得到不错的深度图和正确的模型呢?

一般而言colmap其实估计出来的depth range 比较好,出现depth 很远的情况,主要是我们后面depth range 在refine的时候,可能有越界的问题, 所以限制一下最近depth 就可以解决。(当然也可以代码里对depth range进行限制)