루브릭¶
제목 | 내용 |
---|---|
1. GAN의 두 모델 구조를 통해 이미지를 성공적으로 생성하였다. | 오브젝트 종류를 육안으로 구별할 수 있을 만한 이미지를 생성하였다. |
2. 생성 이미지 시각화 및 학습 그래프를 통해 GAN 학습이 바르게 진행되었음을 입증하였다. | gif를 통해 생성이미지 품질이 서서히 향상되는 것과, fake accuracy가 추세적으로 0.5를 향해 하향하고 있음을 확인하였다. |
3. 추가적인 GAN 모델구조 혹은 학습과정 개선 아이디어를 제안하고 이를 적용하였다. | 제출 아이디어를 제출 프로젝트에 반영하고, 그 결과가 아이디어 적용 이전보다 향상되었음을 시각적으로 입증하였다. |
결과 정리¶
▶ Model One
- generator
- training history
▶ Model Two
- generator
- training history
▶ Model Three
- generator
- training history
▶ Model Four
- generator
- training history
▶ Model One
generator_one.summary()
Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_2 (Dense) (None, 16384) 1638400 batch_normalization_3 (Batc (None, 16384) 65536 hNormalization) leaky_re_lu_5 (LeakyReLU) (None, 16384) 0 reshape_1 (Reshape) (None, 8, 8, 256) 0 conv2d_transpose_3 (Conv2DT (None, 8, 8, 128) 819200 ranspose) batch_normalization_4 (Batc (None, 8, 8, 128) 512 hNormalization) leaky_re_lu_6 (LeakyReLU) (None, 8, 8, 128) 0 conv2d_transpose_4 (Conv2DT (None, 16, 16, 64) 204800 ranspose) batch_normalization_5 (Batc (None, 16, 16, 64) 256 hNormalization) leaky_re_lu_7 (LeakyReLU) (None, 16, 16, 64) 0 conv2d_transpose_5 (Conv2DT (None, 32, 32, 3) 4800 ranspose) ================================================================= Total params: 2,733,504 Trainable params: 2,700,352 Non-trainable params: 33,152 _________________________________________________________________
⏳ make_generator_model 함수를 만들어 언제든 생성자를 생성가능하게 만들었다.
⏳ 함수 내부에서는 먼저 tf.keras.Sequential()
로 모델을 시작한 후 레이어를 쌓아준다.
⏳ 중요한 레이어는 Conv2DTranspose
레이어다.
Con2DTranspose
층은 일반적인 Conv2D와 반대로 이미지 사이즈를 넓혀주는 층이다.
이 모델에서는 세 번의 Conv2DTranspose 층을 이용해 (8, 8, 128) → (16, 16, 64) → (32, 32, 3)
순으로 이미지를 키워나간다.
⏳ 최종 사이즈는 (32, 32, 3)로 준비했던 데이터셋과 형상이 동일하다.
What is Transposed Convolutional Layer❓❓❓
⏳ 레이어의 사이사이에 특정 층들이 반복되는 것을 볼 수 있다.
BatchNormalization
레이어는 신경망의 가중치가 폭발하지 않도록 가중치 값을 정규화 시켜준다.
⏳ 중간층들의 활성화 함수는 모두 LeakyReLU 를 사용하였으며,
마지막 층에는 tanh(하이퍼볼릭탄젠트 함수로 시그모이드 함수를 transformation해서 얻을 수 있다.)를 사용하는데,
이유는 (-1 ~ 1) 이내의 값으로 픽셀 값을 정규화시켰던 데이터셋과 동일하게 하기 위함이다.
🔥 Model One 에 대한 결론은 좋지 못하다
▶ Model Four
generator_four.summary()
Model: "sequential_7" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_8 (Dense) (None, 8192) 827392 batch_normalization_22 (Bat (None, 8192) 32768 chNormalization) leaky_re_lu_25 (LeakyReLU) (None, 8192) 0 reshape_4 (Reshape) (None, 8, 8, 128) 0 conv2d_18 (Conv2D) (None, 8, 8, 128) 262272 batch_normalization_23 (Bat (None, 8, 8, 128) 512 chNormalization) leaky_re_lu_26 (LeakyReLU) (None, 8, 8, 128) 0 conv2d_transpose_11 (Conv2D (None, 16, 16, 128) 262272 Transpose) batch_normalization_24 (Bat (None, 16, 16, 128) 512 chNormalization) leaky_re_lu_27 (LeakyReLU) (None, 16, 16, 128) 0 conv2d_19 (Conv2D) (None, 16, 16, 128) 409728 batch_normalization_25 (Bat (None, 16, 16, 128) 512 chNormalization) leaky_re_lu_28 (LeakyReLU) (None, 16, 16, 128) 0 conv2d_transpose_12 (Conv2D (None, 32, 32, 128) 262272 Transpose) batch_normalization_26 (Bat (None, 32, 32, 128) 512 chNormalization) leaky_re_lu_29 (LeakyReLU) (None, 32, 32, 128) 0 conv2d_20 (Conv2D) (None, 32, 32, 128) 409728 batch_normalization_27 (Bat (None, 32, 32, 128) 512 chNormalization) leaky_re_lu_30 (LeakyReLU) (None, 32, 32, 128) 0 conv2d_21 (Conv2D) (None, 32, 32, 3) 9603 ================================================================= Total params: 2,478,595 Trainable params: 2,460,931 Non-trainable params: 17,664 _________________________________________________________________
✅ Model Four 차이점
⏳ 전체적인 generator model
, discriminator model
의 설계
model.add(layers.BatchNormalization(momentum=0.9))
model.add(layers.LeakyReLU(alpha=0.1))
# momentum=0.9 와 alpha=0.1 추가
⏳ optimizer
generator_optimizer = tf.keras.optimizers.Adam(learning_rate=0.01, beta_1=0.5)
discriminator_optimizer = tf.keras.optimizers.Adam(learning_rate=0.01, beta_1=0.5)
⏳ BATCH_SIZE
BATCH_SIZE = 16
⏳ EPOCH
EPOCH = 100
⛳ 회고 ⛳¶
학습 시간은 오래걸리고 많지 않은 시간으로 여러방면으로 시도를 못해본 것이 아쉽다.
그래도 짧은 시간 안에 만족할만한 결과가 나왔다.
Model One 에서 아름다운 결과물 도출로 개선이 시급하여 다양한 시도를 해보았다.
Model 의 층이 깊어지고 BatchNormalization 및 LeakyReLu 설정 값을 통해 이미지 생성 성능 향상이 가능하다.
optimizer 의 Adam 설정 값의 변화를 주었는데 효과 성능 검증은 한번 더 진행 해봐야 정확할 것 같다.
GAN-DCGAN(Deep convolutional generative adversarial networks)
'인공지능' 카테고리의 다른 글
인공지능 퀴즈 풀기|KorQuAD_BERT (0) | 2022.02.25 |
---|---|
트랜스포머로 만드는 대화형 챗봇|Transformer (0) | 2022.02.22 |
[Part 1]CIFAR-10 을 활용한 이미지 생성기 (1) | 2022.02.15 |
[Part 2]인공지능으로 새로운 패션을 만들 수 있다! (0) | 2022.02.11 |
[Part 1]인공지능으로 새로운 패션을 만들 수 있다! (0) | 2022.02.11 |