Kid-Liet / Reg-GAN

149 stars 21 forks source link

About the training details. #1

Closed ElegantLee closed 2 years ago

ElegantLee commented 2 years ago

Thank for your work, Kid-Liet. Could you please complete the training process and important details? I'm looking forward to doing something about the Reg-GAN.

Kid-Liet commented 2 years ago

谢谢您的关注,一部分训练细节在论文底部的补充材料中。近期,会把代码重新整理一遍,以及更新demo和说明。

ElegantLee commented 2 years ago

谢谢您的关注,一部分训练细节在论文底部的补充材料中。近期,会把代码重新整理一遍,以及更新demo和说明。

作者您好,近期我在已经开源的这部分代码上做实验,有一些疑惑,希望您的解答一下。

  1. 怎样准备自己的数据集,应该按照什么样的格式存储,如何对数据集进行划分;
  2. 代码中图片的输入输出通道都是1,输出的结果也是灰度图,为什么不设置为3呢?
Kid-Liet commented 2 years ago
  1. 数据集默认按照 .../xxx/A/ 和.../xxx/B/ 划分为两个文件夹。(参考Yaml中的数据集路径设置,和dataset.py的数据读取方式)。数据格式默认存储成 .npy,并且归一化到(-1,1)。你也可以保存成别的格式,但需要修改dataset.py文件。
  2. 通道数是1,是因为默认数据集来自医学图像,为单通道数据,如果您使用的是RGB数据集,在Yaml中将通道数改为3即可。

希望有帮助到您!

abu1996 commented 2 years ago

感谢您的关注,细节在论文底部的补充材料中。近期,可能代码重新整理,以及更新演示和说明。

作者你好,近期我已经在开源的这部分代码上做了实验,有一些疑惑,希望你的解答一下。

  1. 怎样准备自己的数据集,应该按照自己的格式存储,如何对数据集进行划分;
  2. 代码中图片的输入输出都是1,输出的结果输出通道图,为什么不设置为3呢?

Hello, is your environment configuration successful? ? I would like to ask you the specific version of the package in the environment configuration? ?

Kid-Liet commented 2 years ago

Hello, is your environment configuration successful? ? I would like to ask you the specific version of the package in the environment configuration? ?

The environment, instructions for use and updated code will be released today, please wait a moment.

abu1996 commented 2 years ago
  1. 数据集默认按照.../xxx/A/和.../xxx/B/划分为两个文件夹。(参考Yaml中的数据集路径设置,和dataset.py的数据读取方式)。格式默认存储成 .npy,并且归一化到(-1,1)。你也可以保存成其他格式,但需要修改 dataset.py 文件。
  2. 通道数是 1,是因为默认数据集来自医学图像,为单通道数据,如果您使用的是 RGB 数据集,在 Yaml 中将通道数改为 3 个细菌。

希望对您有帮助! 在训练自己的数据集时,我遇到了这样的错误:OSError: Failed to interpret file './data/scratch/train2D//A\Grease_0.jpg' as a pickle。想问一下在A和B的文件夹下是直接存放图片吗??我看到您提到了“格式默认存储成 .npy,”请问这是A和B文件夹下存放的文件格式吗?

Kid-Liet commented 2 years ago

在训练自己的数据集时,我遇到了这样的错误:OSError: Failed to interpret file './data/scratch/train2D//A\Grease_0.jpg' as a pickle。想问一下在A和B的文件夹下是直接存放图片吗??我看到您提到了“格式默认存储成 .npy,”请问这是A和B文件夹下存放的文件格式吗?

npy为A和B文件夹下的数据格式,如果您使用的是jpg,需要修改dataset.py的读图方式。

ElegantLee commented 2 years ago

作者您好,在训练Reg-GAN的过程中,鉴别器D的loss可以降到很低,但是生成器的loss却总体呈上升趋势的,并且平滑度损失也是一直上升。您在训练过程中有遇到这样的情况吗?:disappointed_relieved:

Kid-Liet commented 2 years ago

作者您好,在训练Reg-GAN的过程中,鉴别器D的loss可以降到很低,但是生成器的loss却总体呈上升趋势的,并且平滑度损失也是一直上升。您在训练过程中有遇到这样的情况吗?😥

这个是有可能的,如果您使用的A-B的数据集在存在很大的噪声(或者是A-B之间是unpaired的情况)。那么矫正噪声的难度就会很大,生成器的loss很难和辨别器loss实现55开。但对于gan而言,loss仅作参考,主要还是看生成出来的图像,建议训练久一点。

ElegantLee commented 2 years ago

作者您好,在训练Reg-GAN的过程中,鉴别器D的loss可以降到很低,但是生成器的loss却总体呈上升趋势的,并且平滑度损失也是一直上升。您在训练过程中有遇到这样的情况吗?😥

这个是有可能的,如果您使用的A-B的数据集在存在很大的噪声(或者是A-B之间是unpaired的情况)。那么矫正噪声的难度就会很大,生成器的loss很难和辨别器loss实现55开。但对于gan而言,loss仅作参考,主要还是看生成出来的图像,建议训练久一点。

  1. 可否从另一个角度理解:鉴别器训练得太好,需要限制鉴别器的能力。而通过correction loss使得网络在有噪声标签下的学习近似在干净无噪声标签上的学习,鉴别器D鉴别R(G(x), y)和y,这加强了鉴别器的学习能力。
  2. 这里不是很理解smooth loss所表达的物理意义。看了您的相关参考文献,我的理解是:通过correction loss会使网络产生不连续的变形场,而smooth loss用来强制使网络产生平滑的变形场。不知道这样理解对不对。。。
  3. 网络训练,最终得到的结果应该是G(x)生成的fake image,还是R(G(x), y)得到的结果?
Kid-Liet commented 2 years ago
  1. 可否从另一个角度理解:鉴别器训练得太好,需要限制鉴别器的能力。而通过correction loss使得网络在有噪声标签下的学习近似在干净无噪声标签上的学习,鉴别器D鉴别R(G(x), y)和y,这加强了鉴别器的学习能力。
  2. 这里不是很理解smooth loss所表达的物理意义。看了您的相关参考文献,我的理解是:通过correction loss会使网络产生不连续的变形场,而smooth loss用来强制使网络产生平滑的变形场。不知道这样理解对不对。。。
  3. 网络训练,最终得到的结果应该是G(x)生成的fake image,还是R(G(x), y)得到的结果?
  1. 鉴别器并没有鉴别R(G(x), y)和y,鉴别的是G(x)和y。这里并没有加强鉴别器的学习能力。绝大部分情况下,鉴别器都会优于生成器,这是由数据情况以及任务难度天生所决定的。我的经验是即使很多时候辨别器的loss远远小于生成器的loss,也不影响训练,只要生成器能继续提高就行了。
  2. 这样理解是ok的。我们假设一种情况,如果没有对形变场加以限制,生成器即使生成的结果不是很好,形变场通过强制扭曲以及重采样操作也可以让生成后的图像非常接近我们的目标y,并满足min(correction loss),这显然不是我们想要的结果。
  3. 只使用G(x)生成fake image。真实测试场景中,我们必须假设没有label可以提供。
abu1996 commented 2 years ago
  1. 数据集默认按照.../xxx/A/和.../xxx/B/划分为两个文件夹。(参考Yaml中的数据集路径设置,和dataset.py的数据读取方式)。格式默认存储成 .npy,并且归一化到(-1,1)。你也可以保存成其他格式,但需要修改 dataset.py 文件。
  2. 通道数是 1,是因为默认数据集来自医学图像,为单通道数据,如果您使用的是 RGB 数据集,在 Yaml 中将通道数改为 3 个细菌。

希望对您有帮助! 在训练自己的数据集时,我遇到了这样的错误:OSError: Failed to interpret file './data/scratch/train2D//A\Grease_0.jpg' as a pickle。想问一下在A和B的文件夹下是直接存放图片吗??我看到您提到了“格式默认存储成 .npy,”请问这是A和B文件夹下存放的文件格式吗?

你好,我是将图片有jpg格式转换为了npy的格式后进行了训练,但是报错“ValueError: size shape must match input shape. Input is 3D, size is 2” 1

ElegantLee commented 2 years ago
  1. 可否从另一个角度理解:鉴别器训练得太好,需要限制鉴别器的能力。而通过correction loss使得网络在有噪声标签下的学习近似在干净无噪声标签上的学习,鉴别器D鉴别R(G(x), y)和y,这加强了鉴别器的学习能力。
  2. 这里不是很理解smooth loss所表达的物理意义。看了您的相关参考文献,我的理解是:通过correction loss会使网络产生不连续的变形场,而smooth loss用来强制使网络产生平滑的变形场。不知道这样理解对不对。。。
  3. 网络训练,最终得到的结果应该是G(x)生成的fake image,还是R(G(x), y)得到的结果?
  1. 鉴别器并没有鉴别R(G(x), y)和y,鉴别的是G(x)和y。这里并没有加强鉴别器的学习能力。绝大部分情况下,鉴别器都会优于生成器,这是由数据情况以及任务难度天生所决定的。我的经验是即使很多时候辨别器的loss远远小于生成器的loss,也不影响训练,只要生成器能继续提高就行了。
  2. 这样理解是ok的。我们假设一种情况,如果没有对形变场加以限制,生成器即使生成的结果不是很好,形变场通过强制扭曲以及重采样操作也可以让生成后的图像非常接近我们的目标y,并满足min(correction loss),这显然不是我们想要的结果。
  3. 只使用G(x)生成fake image。真实测试场景中,我们必须假设没有label可以提供。

感谢您的耐心解答:+1:,问题1看错了,谢谢纠正。

ElegantLee commented 2 years ago
  1. 数据集默认按照.../xxx/A/和.../xxx/B/划分为两个文件夹。(参考Yaml中的数据集路径设置,和dataset.py的数据读取方式)。格式默认存储成 .npy,并且归一化到(-1,1)。你也可以保存成其他格式,但需要修改 dataset.py 文件。
  2. 通道数是 1,是因为默认数据集来自医学图像,为单通道数据,如果您使用的是 RGB 数据集,在 Yaml 中将通道数改为 3 个细菌。

希望对您有帮助! 在训练自己的数据集时,我遇到了这样的错误:OSError: Failed to interpret file './data/scratch/train2D//A\Grease_0.jpg' as a pickle。想问一下在A和B的文件夹下是直接存放图片吗??我看到您提到了“格式默认存储成 .npy,”请问这是A和B文件夹下存放的文件格式吗?

你好,我是将图片有jpg格式转换为了npy的格式后进行了训练,但是报错“ValueError: size shape must match input shape. Input is 3D, size is 2” 1

这需要你仔细debug,在dataset.py 及trainer.py。

Kid-Liet commented 2 years ago

你好,我是将图片有jpg格式转换为了npy的格式后进行了训练,但是报错“ValueError: size shape must match input shape. Input is 3D, size is 2” 1

可能是因为使用的是RGB的数据。这个其实很简单,是因为我们默认数据为单通道,即读到图像为(W,H)的shape,您读到的rgb为三通道数据,即(3,W,H),这会导致在resize的时候出错,修改方式为:

在utils.py文件中,将tensor = np.expand_dims(tensor, 0) 注释掉就行了 image