본문 바로가기

컴린이 일기장/Today I Learned

[TIL] CycleGAN 이용해 사진 ↔ 고흐의 그림 변환하기

반응형

[주절주절]

-

[Today I Learned]

# 시드 설정하기

# Set random seed for reproductibility 
manualSeed = 999
print("Random seed:",manualSeed)
random.seed(manualSeed)
torch.manual_seed(manualSeed)

모델이나 이런저런 util을 바꾸고 추가하다 보면 어느 순간 잘되던 학습이 안 되는 때가 있다. 그때, weight init과 같은 것들의 영향을 줄여 정말 내가 새로 추가한 것이 문제인지 알 수 있게 된다.

# Data imbalance

1) 고흐의 그림은 유한하지만 풍경, 인물 사진은 무한하게 구할 수 있기 때문에 학습에 사용할 수 있는 데이터 수에도 차이가 나게 된다. 배치 사이즈를 조절해 배치 개수를 맞춰줄 수 있다. 배치 사이즈가 다르기 때문에 target label의 shape 등을 잘 설정해주어야 한다.

2) 배치 개수를 조절하지 않고 배치 사이즈만 설정한 뒤 zip()을 이용하는 방법도 있다. A의 데이터 개수가 3개, B의 데이터 개수가 5개라고 할 때, zip(A, B)로 반복문을 돌리면 더 적은 개수인 3에 맞춰 3번 반복문을 돌게 된다.

+ 데이터 로더를 따로 구성해도 zip()을 이용해 같은 반복문을 돌게 할 수 있다.

# CUDA out of memory

128 x 128 컬러 이미지, 배치 사이즈 8을 주니까 돌아간다. 

# zero_grad

Optimizer에 zero_grad()를 해주면, Optimizer의 인자로 이미 Generator나 Discriminator의 파라미터가 넘겨져 있기 때문에 Generator나 Discriminator에 대해서는 zero_grad()를 해줄 필요가 없다.

# 깨달음

모델 구현 두 번째 만에 왜 여러 파일로 나눠서 관리하는 지를 깨달았다. 다음 모델부턴 그렇게 해볼 예정 : >

 

[질문 노트]

Q. BatchNorm과 다르게 InstanceNorm은 weight가 안 잡힌다. 공식문서에 있는 식, 설명은 같은데...

 

 

Q. 보통 데이터 폴더 구조는 어떻게? 라벨링이 들어가긴 하는데, 이미지를 라벨로 구분해 불러오고 처리해오는 방법을 모르겠다.

Q.  만약 배치 사이즈를 다르게 구성한다면, 데이터 비율이 어느 정도 되는 것이 좋을까?

Q. Learning rate scheduler를 달았더니 갑자기 모델이 학습을 못한다. : / 100 epoch 이후에 실행되게 설정했는데 문제가 뭘까? 

Q. (사진> 그림) 모델은 학습이 잘 되었는데, (그림> 학습) 모델은 학습이 거의 안되었다. 뭐가 문젠지를 잘 모르겠다. 🤔

 

30 epoch - 위) 사진>그림 / 아래) 그림 >사진
90 epoch - 위) 사진>그림 / 아래) 그림 >사진

 

 

반응형