실전 예제로 배우는 GAN

파이썬, 텐서플로, 케라스로 다양한 GAN 아키텍처를 구축하고 활용하기

파이썬, 텐서플로, 케라스를 사용해 강력한 생성 모델을 구현함으로써 차세대 딥러닝을 간소화한다!

생성적 적대 신경망(GAN) 개발 작업은 복잡할 뿐만 아니라, 이해하기 쉬운 코드를 찾기도 어렵다. 이 책에서는 CycleGAN, simGAN, DCGAN 및 2차원 이미지로 3차원 형상을 생성하는 모델과 같은 여덟 가지 최신 GAN 구현 예제를 소개한다. 각 장마다 파이썬, 텐서플로, 케라스의 공통 아키텍처를 바탕으로 쉽게 구축할 수 있는 GAN 아키텍처를 읽기 쉬운 형태로 탐구해 보는 데 도움이 되는 유용한 방법을 담고 있다.

모델의 작동 방식을 이해할 수 있게 다양한 GAN 아키텍처 유형을 다루는 일부터 DCGAN, Pix2Pix 등과 관련된 사용 사례를 다루는 데 도움이 되는 직관적인 방법들이 들어 있다. 또한 바로 구현해 볼 수 있는 코드 기반 솔루션을 제공하는 덕분에, GAN 모델을 사용하면서 부딪히는 문제를 해결하거나 도전에 대응할 수 있는 실질적인 도움을 얻게 될 것이다.

 

★ 이 책에서 다루는 내용 ★

  • 한 가지 GAN 아키텍처의 구조를 의사코드로 배운다
  • 구축할 각 GAN 모델의 공통 아키텍처를 이해한다
  • 텐서플로와 케라스를 사용해 다양한 GAN 아키텍처를 구현해 본다
  • 서로 다른 데이터셋을 사용해 GAN 모델에서 신경망 기능을 활성화해 본다.
  • 다양한 GAN 모델을 결합하고 해당 모델들을 미세하게 조정하는 방법을 배운다
  • 2차원 이미지를 가져와서 3차원 형상으로 만들어 내는 모델을 제작해 본다.
  • Pix2Pix를 사용해 GAN을 개발함으로써 화풍을 모사하게 해 본다.

조시 칼린(Josh Kalin)

조시 칼린은 로봇공학과 머신러닝을 접목한 분야에 집중하는 물리학자이자 기술자이다. 고급 센서 및 산업용 로봇, 머신러닝, 자율 주행 차량을 연구하는 일에 종사한다. 물리학, 기계공학, 컴퓨터과학 학위를 취득했다. 여가 시간에는 차량을 다루는 일(36대의 소유 차량을 세어 보는 일), 컴퓨터를 조립하는 일, 로봇공학 및 머신러닝 분야의 신기술을 학습하는 일(이 책을 쓰는 일 같은 것)을 즐겨 한다.

박진수

다양한 개발, 저술, 번역 경험을 바탕으로 다양한 IT 융복합 사업을 전개하기를 바라며 1인 기업으로 발판을 다지고 있다. 번역한 책으로 《전문가를 위한 머신러닝 솔루션》 《딥러닝 모델 설계를 떠받치는 기술》 《따라 하면서 배우는 유니티 ML-Agents》가 있다.

  • ▣ 01장: 생성적 적대 신경망이란?
    • 들어가며
    • 생성 모델과 판별 모델
      • 수행 방법 …
        • 판별 모델링
        • 생성 모델링
      • 작동 방식 …
    • 신경망의 사랑 싸움
      • 수행 방법 …
      • 작동 방식 …
    • 심층 신경망
      • 수행 방법 …
      • 작동 방식 …
    • 아키텍처 구조의 기초
      • 수행 방법 …
      • 작동 방식 …
    • 기본 빌딩 블록: 생성기
      • 수행 방법 …
      • 작동 방식 …
    • 기본 빌딩 블록: 판별기
      • 수행 방법 …
      • 작동 방식 …
    • 기본 빌딩 블록: 손실 함수
      • 수행 방법 …
      • 작동 방식 …
    • 훈련
      • 수행 방법 …
      • 작동 방식 …
    • 서로 다른 방식으로 모아 쓰는 GAN의 각 부분들
      • 수행 방법 …
      • 작동 방식 …
    • GAN의 출력
      • 수행 방법 …
      • 작동 방식 …
    • 한정된 데이터로 일하기: 화풍 모사
      • 새로운 장면을 꿈꾸기: DCGAN
      • 모조 데이터로 보강하기: SimGAN
    • GAN 구조의 이점
      • 수행 방법 …
      • 작동 방식 …
    • 연습문제
    •  
  • ▣ 02장: 데이터 중심, 용이한 환경, 데이터 준비
    • 들어가며
    • 데이터가 그다지도 중요한가?
      • 출발 준비
      • 수행 방법 …
      • 작동 방식 …
      • 더 많은 정보 …
    • 개발 환경 설정
      • 출발 준비
      • 수행 방법 …
        • GPU를 구동할 엔비디아 드라이버 설치하기
        • Nvidia-Docker를 설치하기
        • 개발용 컨테이너 만들기
      • 더 많은 정보
    • 데이터 형식
      • 출발 준비
      • 수행 방법 …
      • 작동 방식 …
        • 코드를 도커 컨테이너에서 실행하기
      • 더 많은 정보 …
    • 데이터 전처리
      • 출발 준비
      • 수행 방법 …
      • 작동 방식 …
      • 더 많은 정보 …
    • 비정상 데이터
      • 출발 준비
      • 수행 방법 …
        • 단변량 방법
      • 더 많은 정보 …
    • 데이터 균형조절
      • 출발 준비
      • 수행 방법 …
        • 표본추출 기법
        • 앙상블 기법
      • 더 많은 정보 …
    • 데이터 확대
      • 출발 준비
      • 수행 방법 …
      • 작동 방식 …
      • 더 많은 정보 …
    • 연습문제
    •  
  • ▣ 03장: 첫 번째 GAN을 100줄 이내로 만들기
    • 들어가며
    • 이론에서 코드로: 간단한 예제를 만들어 보기
      • 출발 준비
      • 수행 방법 …
        • Discriminator 기저 클래스
        • Generator 기저 클래스
        • GAN 기저 클래스
      • 관련 정보
    • 케라스와 텐서플로를 사용해 신경망을 구축하기
      • 출발 준비
      • 수행 방법 …
        • 도커 컨테이너 만들기
      • 관련 정보
    • 첫 번째 GAN 구성요소인 판별기를 설명하기
      • 출발 준비
      • 수행 방법 …
        • 가져오기
        • 초기화 변수(판별기 클래스 내의 init)
        • 판별기에 대한 모델 정의
        • 판별기 클래스의 도우미 메서드
        • 두 번째 GAN 구성요소인 생성기를 설명하기
      • 출발 준비
      • 수행 방법 …
        • 가져오기
    • GAN의 모든 부분을 종합하기
      • 출발 준비
      • 작동 방식 …
        • 1단계: GAN 클래스 초기화
        • 2단계: 모델 정의
        • 3단계: 도우미 함수
    • 여러분의 첫 GAN을 훈련하기
      • 출발 준비
      • 수행 방법 …
        • 훈련 클래스 정의
        • 실행 스크립트를 정의하기
    • 모델을 훈련하고 GAN의 출력을 이해하기
      • 출발 준비
      • 수행 방법 …
      • 작동 방식 …
    • 연습문제
    •  
  • ▣ 04장: DCGAN을 이용한 새 외부 구조물에 대한 꿈
    • 들어가며
    • DCGAN이란 무엇인가? 간단한 의사코드 예제
      • 출발 준비
      • 수행 방법 …
        • 생성기
        • 관련 정보
    • 도구: 독특한 도구가 필요할까?
      • 출발 준비
      • 수행 방법 …
        • DCGAN 개발 환경
        • LSUN 데이터를 내려받아 압축을 풀기
      • 더 많은 정보 …
        • 관련 정보
    • 데이터 파싱: 데이터가 독특한가?
      • 출발 준비
      • 수행 방법 …
    • 코드 구현: 생성기
      • 출발 준비
      • 수행 방법 …
        • 생성기 초기화: DCGAN 업데이트
        • DCGAN 구조 구축
      • 관련 정보
    • 코드 구현: 판별기
      • 출발 준비
      • 수행 방법 …
    • 판별기 클래스 초기화
    • 모델 구조를 구축하기
      • 관련 정보
    • 훈련
      • 출발 준비
      • 수행 방법 …
        • 클래스 초기화로 변경
        • 의사코드에서 변경한 사항을 이해하기
        • 새롭고 향상된 훈련 스크립트
        • 파이썬의 run 스크립트
        • 셸의 run 스크립트
    • 평가: 코드가 작동하는지를 어떻게 알 수 있는가?
      • 출발 준비
      • 작동 방식 …
    • 성능 향상을 위한 파라미터 조절
      • 수행 방법 …
        • 훈련 파라미터
        • 판별기 및 생성기 아키텍처 파라미터
    • 연습문제
    •  
  • ▣ 05장: Pix2Pix를 사용해 이미지를 변환하기
    • 들어가며
    • 의사코드로 맛보는 Pix2Pix
      • 출발 준비
      • 수행 방법 …
        • 판별기
        • 생성기
    • 데이터셋 파싱
      • 출발 준비
      • 수행 방법 …
        • 새로운 Dockerfile을 사용해 도커 컨테이너를 만들기
        • 보조 스크립트 작성
    • 코드 구현: 생성기
      • 출발 준비
      • 수행 방법 …
    • 코드: GAN 신경망
      • 출발 준비
      • 수행 방법 …
    • 코드 구현: 판별기
      • 출발 준비
      • 작동 방식 …
    • 훈련
      • 출발 준비
      • 수행 방법 …
        • 클래스 설정
        • 훈련 메서드
        • 결과를 그리기
        • 도우미 함수
        • 훈련 스크립트 실행
    • 연습문제
    •  
  • ▣ 06장: CycleGAN을 사용해 화풍을 모사하기
    • 들어가며
    • 의사코드: 어떻게 작동하는가?
      • 출발 준비
      • 수행 방법 …
        • CycleGAN은 어떤 점이 강력한가?
    • CycleGAN 데이터셋 파싱
      • 출발 준비
      • 수행 방법 …
        • 도커 구현
        • 데이터 내려받기 스크립트
        • 실제 데이터는 어떻게 보일까?
    • 코드 구현: 생성기
      • 출발 준비
      • 수행 방법 …
    • 코드 구현: 판별기
      • 출발 준비
      • 수행 방법 …
    • 코드 구현: GAN
      • 출발 준비
      • 수행 방법 …
    • 훈련 시작
      • 출발 준비
      • 수행 방법 …
        • 초기화
        • 훈련 메서드
        • 도우미 메서드
    • 연습문제
    •  
  • ▣ 07장: SimGAN에서 모조 이미지를 사용해 사실적인 눈동자 사진을 생성하기
    • 들어가며
    • SimGAN 아키텍처의 작동 원리
      • 출발 준비
      • 수행 방법 …
    • 의사코드: 어떻게 작동하는가?
      • 출발 준비
      • 수행 방법 …
    • 훈련 데이터로 작업하는 방법
      • 출발 준비
      • 수행 방법 …
        • Kaggle과 API
        • 도커 이미지 만들기
        • 도커 이미지 실행하기
    • 코드 구현: 손실 함수
      • 출발 준비
      • 수행 방법 …
    • 코드 구현: 생성기
      • 출발 준비
      • 수행 방법 …
        • 상용구 항목
        • 모델 개발
        • 도우미 함수
    • 코드 구현: 판별기
      • 출발 준비
      • 수행 방법 …
        • 상용구
        • 모델 아키텍처
        • 도우미 함수
    • 코드 구현: GAN
      • 출발 준비
      • 수행 방법 …
    • SimGAN 신경망 훈련
      • 출발 준비
      • 수행 방법 …
        • 초기화
        • 훈련 함수
        • 도우미 함수
        • 파이썬 실행 스크립트
        • 셸 실행 스크립트
    • 연습문제
    •  
  • ▣ 08장: GAN을 사용해 이미지를 3차원 모델로 만들기
    • 들어가며
    • 3D 모델 제작을 위해 GAN 사용 소개
      • 출발 준비
      • 수행 방법 …
        • 2D 이미지의 경우: 이미지의 인코딩 공간 학습
        • 3D 합성곱을 사용해 모델을 훈련하기
    • 환경 준비
      • 출발 준비
      • 수행 방법 …
        • 도커 컨테이너 만들기
        • 도커 컨테이너 만들기
    • 2D 데이터 인코딩 및 3D 객체와 짝짓기
      • 출발 준비
      • 수행 방법 …
        • 간단한 인코더를 실행하는 코드
        • 도커 컨테이너로 인코더를 실행하는 셸 스크립트
    • 코드 구현: 생성기
      • 출발 준비
      • 수행 방법 …
        • 생성기 클래스 준비
        • 생성기 모델 구축
    • 코드 구현: 판별기
      • 출발 준비
      • 수행 방법 …
        • 판별기 클래스 준비
        • 판별기 모델 구축
    • 코드 구현: GAN
      • 출발 준비
      • 수행 방법 …
    • 이 모델을 훈련하기
      • 출발 준비
      • 수행 방법 …
        • 훈련 클래스 준비
        • 도우미 함수
        • 훈련 메서드
        • 신경망의 출력을 그려내기
        • 훈련 스크립트 실행
    • 연습문제
  • 4쪽, 중간 판별 모델링 그림 바로 아래 줄의 다음 내용은 본문 스타일로 수정

    생성 모델은 주어진 입력의 분포에 대한 계급들의 분포를 모델링한다.

  • 6쪽, 표의 제목

    심층 방향성 그래프 모델

    ==>

    심층 방향성(즉, 유향) 그래프 모델

  • 6쪽, 표의 제목

    심층 무방향성 그래프 모델

    ==>

    심층 무방향성(즉, 무향) 그래프 모델

  • 14쪽, 작동 방식 바로 아래 줄

    그럼에도 불구하고 이번 예제에는 판별기만 사용하려고 하는지 궁금한가?

    ==>

    그럼에도 불구하고 이번 예제에는 왜 판별기만 사용하려고 하는지 궁금한가?

  • 17쪽, 본문 기준 세 번째 문단 두 번째 줄

    그렇지만 생성기와 판별기와 같은

    ==>

    그렇지만 생성기나 판별기와 같은

  • 25쪽, 연습문제 1번의 첫 번째 줄 끝 부분

    클래스들을 분류해 보라.

    ==>

    계급들을 분류해 보라.

  • 27쪽, '출발 준비' 단원 바로 아래 줄

    알려주지 않은 깊숙히 감춰 둔

    ==>

    알려주지 않고 깊숙히 감춰 둔

  • 34쪽, 아래서 위로 두 번째 줄

    GPU용를

    ==>

    GPU를

  • 44쪽, '수행 방법' 단원의 다섯 번째 줄

    숫자 형

    ==>

    숫자형

  • 67쪽, 아래에서 위로 여섯 번째 줄

    다음 각 예제에서 기저 클래스는 init 메서드와 model 메서드에서만 다룰 것이다.

    ==>

    다음 각 예제의 기저 클래스에서는 init 메서드와 model 메서드만 다룰 것이다.

  • 69쪽, '케라스와 텐서플로를 사용해 신경망을 구축하기' 단원의 네 번째 줄

    신경 신경망을

    ==>

    신경망을

  • 75쪽, '가져오기' 단원의 첫 번째 줄

    numpy를 등을

    ==>

    numpy 등을

  • 76쪽, '판별기에 대한 모델 정의' 단원의 1번 항 코드를 다음 코드로 대체

    def model(self):
        model = Sequential()
    
  • 77쪽, 첫 번째 줄

    가장 앞서 부분

    ==>

    가장 앞선 부분

  • 77쪽, 4번 항의 두 번째 문단

    다음 블록은 단순히

    ==>

    이 블록은 단순히

  • 77쪽, 5번 항 코드의 마지막 줄

    return mode
    

    ==>

    return model
    
  • 84쪽, '작동 방식' 단원의 두 번째 줄

    결합이 된 모델로 설정하는 데

    ==>

    결합이 된 모델로, 여기서 우리는 이 모델을 설정하는 데

  • 87쪽, 세 번째 줄

    이 클래스는 훈련할 수

    ==>

    이 Trainer 클래스는 훈련할 수

  • 88쪽, 1번 항 바로 윗줄

    init 클래스를 구축하는

    ==>

    init 메서드를 구축하는

  • 99쪽, 각주 끝 부분

    )이라고 보면 된다.

    ==>

    )라고 보면 된다.

  • 100쪽, 본문 세 번째 줄

    각 뉴런이 후속 계층에서 다른 뉴런과

    ==>

    각 뉴런이 후속 계층에 나오는 다른 뉴런과

  • 109쪽, 4번 항 첫 번째 줄

    이미지를 처리를 한 다음에

    ==>

    이미지를 처리한 다음에

  • 111쪽, 1번 항 첫 번째 줄

    모델 유형에 대해 하나의 인수를 추가해야 한다.

    ==>

    모델 유형을 가리키는 인수 한 개를 추가해야 한다.

  • 115쪽, '수행 방법' 단원의 첫 번째 줄

    논문에서 나온 다음과 같은 구조를

    ==>

    논문에 나온 구조를

  • 116쪽, 페이지 하단 코드를 다음 코드로 교체

    def dc_model(self): 
        model = Sequential()
        model.add(Convolution2D (64, 5, 5, subsample=(2,2),
                  input_shape= (self.W, self.H, self.C),
    
  • 117쪽, 첫 번째 본문 줄

    판별기를 구성하는 동안 다음 단계를 수행한다.

    ==>

    판별기를 구성하는 동안 우리는 다음 단계를 수행한 셈이다.

  • 121쪽, 아래로부터 열한 번째 의사코드 줄

    Real

    ==>

    진짜, Batch Size --> 배치 크기

  • 132쪽, 각주

    발사할

    ==>

    발산할

  • 136쪽, 4번 항 첫 번째 줄

    가져 와서

    ==>

    가져와서

  • 139쪽, '코드 구현: 생성기' 단원의 첫 번째 줄

    의사코드에서 U-NET 아키텍처를 사용한다. 이 레시피는 해당

    ==>

    의사코드에서 본 U-NET 아키텍처를 사용한다. 이 레시에서 우리는 해당

  • 143쪽, 첫 번째 단원 제목

    코드: GAN 신경망

    ==>

    코드 구현: GAN 신경망

  • 145쪽, '출발 준비' 단원 첫 번째 줄

    사실을 기억한 점을 떠올려 보자.

    ==>

    사실을 떠올려 보자.

  • 146쪽, 2번 항에 나오는 코드의 세 번째 줄(다음 코드)을 다음 줄로 내림

    self.H = height
    
  • 148쪽, 1번 항에 나오는 줄

    그 밖의 기타 도우미

    ==>

    그 밖의 도우미

  • 162쪽, 5번 항에 나오는 줄

    깨끗한 스크립트를

    ==>

    정리용 스크립트를

  • 167쪽, 첫 번째 코드 아래 설명 줄 끝 부분

    일반화를 제공하는

    ==>

    일반화를 제공하므로,

  • 169쪽, 두 번째 줄

    더 모호한 계층을

    ==>

    더 추상화된 계층을

  • 172쪽, 4번 항

    여섯 개이 모델이

    ==>

    여섯 개의 모델이

  • 173쪽, '훈련 시작' 단원의 두 번째 줄

    비슷한 부분이

    ==>

    비슷한 부분도

  • 175쪽, 5번 항

    인스턴스화에

    ==>

    인스턴화를 할 때

  • 177쪽, '훈련 메서드' 단원의 첫 번째 줄

    공유하므로

    ==>

    공유하지만

  • 180쪽, 3번 항

    에서 동전 던지기

    ==>

    에서 보았던 동전 던지기

  • 183쪽, 밑에서 두 번째 줄

    사용하기 위해

    ==>

    사용하기 위한

  • 194쪽, '도우미 함수' 단원 첫째 줄

    신경망에 필요한 중요한 사용자 지정 손실 함수인 자기 정칙화 손실

    ==>

    신경망에 필요한, 중요한 사용자 지정 손실 함수인, 자기 정칙화 손실

  • 212쪽, 2번 항

    다른 필요한

    ==>

    그 밖에 필요한

  • 222쪽, 3번 항

    모델 메서드를

    ==>

    model 메서드를