호이호우
Beatlefeed
호이호우
전체 방문자
오늘
어제
  • 분류 전체보기 (75)
    • 세상은 지금... (4)
    • 인공지능 (24)
    • 코딩배우기 (21)
      • HTML, CSS (7)
    • 심리학 (25)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • mnist
  • U-Net Generator
  • 파이썬
  • Loss Function
  • generator
  • BatchNormalization
  • Deep learning
  • ADHD
  • LeakyReLU
  • Encoder
  • Python
  • cGAN
  • 심리치료
  • Decoder
  • Optimizer
  • discriminator
  • DCGAN
  • 인공지능
  • Momentum
  • 발달심리학
  • Sketch2Pokemon
  • 행동심리
  • Gan
  • CIFAR-10
  • keras
  • 권위주의적육아
  • tensorflow
  • Diana Baumrind
  • U-Net
  • pix2pix

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
호이호우

Beatlefeed

[Part 2]CIFAR-10 을 활용한 이미지 생성기
인공지능

[Part 2]CIFAR-10 을 활용한 이미지 생성기

2022. 2. 16. 00:11
반응형
[part2]CIFAR_100_DCGAN

루브릭¶


제목 내용
1. GAN의 두 모델 구조를 통해 이미지를 성공적으로 생성하였다. 오브젝트 종류를 육안으로 구별할 수 있을 만한 이미지를 생성하였다.
2. 생성 이미지 시각화 및 학습 그래프를 통해 GAN 학습이 바르게 진행되었음을 입증하였다. gif를 통해 생성이미지 품질이 서서히 향상되는 것과, fake accuracy가 추세적으로 0.5를 향해 하향하고 있음을 확인하였다.
3. 추가적인 GAN 모델구조 혹은 학습과정 개선 아이디어를 제안하고 이를 적용하였다. 제출 아이디어를 제출 프로젝트에 반영하고, 그 결과가 아이디어 적용 이전보다 향상되었음을 시각적으로 입증하였다.

결과 정리¶

▶ Model One

  • generator

1-1.jpg

  • training history

1-2.jpg

▶ Model Two

  • generator

2-1.jpg

  • training history

2-2.jpg

▶ Model Three

  • generator

3-1.jpg

  • training history

3-2.jpg

▶ Model Four

  • generator

4-1.jpg

  • training history

4-2.jpg

▶ Model One

In [ ]:
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

In [ ]:
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 추가

BatchNormalization 의 momentum

⏳ 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
    '인공지능' 카테고리의 다른 글
    • 인공지능 퀴즈 풀기|KorQuAD_BERT
    • 트랜스포머로 만드는 대화형 챗봇|Transformer
    • [Part 1]CIFAR-10 을 활용한 이미지 생성기
    • [Part 2]인공지능으로 새로운 패션을 만들 수 있다!
    호이호우
    호이호우
    나의 관심 콘텐츠를 즐겁게 볼 수 있는 Beatlefeed!

    티스토리툴바