원본이미지
brain tumor
로스 설명
E : cross entropy
input : gray scale + normalization(mean = 0, std=1)로 1, 128,128 size
로스: W loss
critic_real = critic(real_images)
critic_fake = critic(generator(noise))
loss_critic = -(torch.mean(critic_real) - torch.mean(critic_fake))
1, 128,128 size
-> 로스 마이너스값...
W loss보다는 BCE 사용으로 보기 + 중간 사진 저장하게
input , output : 1, 128, 128
loss : BCE
D_loss가 0.00 되면서 학습 안이뤄짐
epoch 100 때에 생성된 이미지..
D가 0이되면 G가 더 이상 더 좋은 이미지 생성 못함
3-1
cv로 읽을 수 /255.로 0~1맞춘 후 가우시안 노이즈 추가
epoch 10때의 현상
그런데 노이즈 255 나눈 후 0~1 된 상태 이미지 너무 치직거려서
노이즈 추가 후에 255로 나눔
에포크 10 때의 이미지
에포크 300 때의 이미지
학습이 잘 되나 싶었으나 되지 않음을 확인했다.
하루동안 돌려놓고 다음날 와서 확인했는데 저모양...
학습 그래프는 위와같다.
3-2
노이즈에 W loss 다시적용해보기.............+ Gradient panelty 적용
data normalization 은 그냥 /255.로
epoch는 최대 100정도만 보고 확인하는게 나을듯
epoch 20 때... 저렇게 나와버려서
3-3
혹시 G loss : -mean(D(fake))가 잘못인가 싶어서 부호를 바꿔 트레이닝 시켰다가 중단.
모델을 DC gan에서 바꿈
latent vec 받아서 (1, nz, 1,1) 바로 trans conv2d (nz -> nc*16) 해줬는데 linear로..
WGAN 에서 그렇게 쓰는거 같길래,,
EPOCH [31/100] Loss_D: 10.0000 Loss_G: -0.0000 D(x): 0.0000 D(G(z)): 0.0000 / 0.0000
Loss G가 0이 되면서 학습 안일어남
3-4
Wloss 이용.
netD에 들어가기전 real image, fake image에 가우사안 노이즈 추가하기.
왜안되지
3-5
epoch 191 때
image 64
DC GAN 이용
class Dataset()
def __getitem__(self, index)
image = self.image_file[index]
data = cv2.imread(image)
#data = noisy("gauss", data)
data =data/255.
dataransform=transforms.Compose([
transforms.ToTensor(),
transforms.Resize(64),
])
data = dataransform(data).type(torch.float64)
return data # torch.Size([1, 128, 128])
class Generator(nn.Module):
def __init__(self):
super(Generator, self).__init__()
self.main = nn.Sequential(
nn.ConvTranspose2d( nz, ngf * 8, 4, 1, 0, bias=False),
nn.BatchNorm2d(ngf * 8),
nn.ReLU(True),
#(ngf*8) x 4 x 4
nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False),
nn.BatchNorm2d(ngf * 4),
nn.ReLU(True),
#(ngf*4) x 8 x 8
nn.ConvTranspose2d( ngf * 4, ngf * 2, 4, 2, 1, bias=False),
nn.BatchNorm2d(ngf * 2),
nn.ReLU(True),
# (ngf*2) x 16 x 16
nn.ConvTranspose2d( ngf * 2, ngf, 4, 2, 1, bias=False),
nn.BatchNorm2d(ngf),
nn.ReLU(True),
# (ngf) x 32 x 32
nn.ConvTranspose2d( ngf, nc, 4, 2, 1, bias=False),
nn.Tanh()
# (nc) x 64 x 64
)
def forward(self, input):
return self.main(input)
class Discriminator(nn.Module):
def __init__(self):
super(Discriminator, self).__init__()
self.main = nn.Sequential(
# (nc) x 64 x 64
nn.Conv2d(nc, ndf, 4, 2, 1, bias=False),
nn.LeakyReLU(0.2, inplace=True),
# (ndf) x 32 x 32
nn.Conv2d(ndf, ndf * 2, 4, 2, 1, bias=False),
nn.BatchNorm2d(ndf * 2),
nn.LeakyReLU(0.2, inplace=True),
# (ndf*2) x 16 x 16
nn.Conv2d(ndf * 2, ndf * 4, 4, 2, 1, bias=False),
nn.BatchNorm2d(ndf * 4),
nn.LeakyReLU(0.2, inplace=True),
# (ndf*4) x 8 x 8
nn.Conv2d(ndf * 4, ndf * 8, 4, 2, 1, bias=False),
nn.BatchNorm2d(ndf * 8),
nn.LeakyReLU(0.2, inplace=True),
# (ndf*8) x 4 x 4
nn.Conv2d(ndf * 8, 1, 4, 1, 0, bias=False),
nn.Sigmoid()
)
def forward(self, input):
return self.main(input)