ShoufaChen / DiffusionDet

[ICCV2023 Best Paper Finalist] PyTorch implementation of DiffusionDet (https://arxiv.org/abs/2211.09788)
Other
2.1k stars 162 forks source link

ddim中对于time生成的程序语句似乎不对? #118

Open yuanqianguang opened 3 months ago

yuanqianguang commented 3 months ago

作者您好: 以下是我遇到的问题,望能得到解答。

def ddim_sample(self, batched_inputs, backbone_feats, images_whwh, images, clip_denoised=True, do_postprocess=True):
    batch = images_whwh.shape[0]
    shape = (batch, self.num_proposals, 4)
    total_timesteps, sampling_timesteps, eta, objective = self.num_timesteps, self.sampling_timesteps, self.ddim_sampling_eta, self.objective

    # [-1, 0, 1, 2, ..., T-1] when sampling_timesteps == total_timesteps
    times = torch.linspace(-1, total_timesteps - 1, steps=sampling_timesteps + 1)
    times = list(reversed(times.int().tolist()))
    time_pairs = list(zip(times[:-1], times[1:]))  # [(T-1, T-2), (T-2, T-3), ..., (1, 0), (0, -1)]

这段程序中关于sampling_timesteps设置为1之后,所生成的times似乎是(999,-1)这样的结果,这样的话在下面的for循环中好像就无法实现逐步去噪的作用,循环语句中的内容只会执行一次。按我的理解是,生成#语句中那样的时间步序列,然后循环很多次以达到一个逐步去噪的作用。 是我的理解错误么?望百忙之中回复,谢谢~

zjutnlper commented 1 month ago

你好老哥,问一下问题,为啥里面加噪声的时候,需要对bbox的坐标进行变化,从xyxy变成cxcywh

yuanqianguang commented 1 month ago

你好老哥,问一下问题,为啥里面加噪声的时候,需要对bbox的坐标进行变化,从xyxy变成cxcywh

我的理解是,噪声仅加在xyxy上的话,模型只会学到坐标上的去噪,而宽高尺度去噪是通过隐式的方式去学习的,会比较难学一点。而改为cxcywh的话,模型会去学习坐标去噪和宽高尺度去噪,这样就把宽高尺度上去噪的学习显式化了,模型更容易去学习,我是这样理解的不知道对不对

zjutnlper commented 1 month ago

你好老哥,问一下问题,为啥里面加噪声的时候,需要对bbox的坐标进行变化,从xyxy变成cxcywh

我的理解是,噪声仅加在xyxy上的话,模型只会学到坐标上的去噪,而宽高尺度去噪是通过隐式的方式去学习的,会比较难学一点。而改为cxcywh的话,模型会去学习坐标去噪和宽高尺度去噪,这样就把宽高尺度上去噪的学习显式化了,模型更容易去学习,我是这样理解的不知道对不对

感觉你说的有点道理,老哥你有试过直接加噪在xyxy上吗

yuanqianguang commented 1 month ago

你好老哥,问一下问题,为啥里面加噪声的时候,需要对bbox的坐标进行变化,从xyxy变成cxcywh

我的理解是,噪声仅加在xyxy上的话,模型只会学到坐标上的去噪,而宽高尺度去噪是通过隐式的方式去学习的,会比较难学一点。而改为cxcywh的话,模型会去学习坐标去噪和宽高尺度去噪,这样就把宽高尺度上去噪的学习显式化了,模型更容易去学习,我是这样理解的不知道对不对

感觉你说的有点道理,老哥你有试过直接加噪在xyxy上吗

没有哎,我只是读了一下这个论文,并没有去做复现和尝试

zjutnlper commented 1 month ago

你好老哥,问一下问题,为啥里面加噪声的时候,需要对bbox的坐标进行变化,从xyxy变成cxcywh

我的理解是,噪声仅加在xyxy上的话,模型只会学到坐标上的去噪,而宽高尺度去噪是通过隐式的方式去学习的,会比较难学一点。而改为cxcywh的话,模型会去学习坐标去噪和宽高尺度去噪,这样就把宽高尺度上去噪的学习显式化了,模型更容易去学习,我是这样理解的不知道对不对

感觉你说的有点道理,老哥你有试过直接加噪在xyxy上吗

没有哎,我只是读了一下这个论文,并没有去做复现和尝试

好吧,谢谢老哥了