LikeTech Main.

Kaggle - I'm Something of a Painter Myself

Jihoon Na
Jihoon Na

Introduction

오늘은 Kaggle competitions에서 I'm Something of a Painter Myself라는 대회에 대한 간단한 소개를 해보겠습니다! 완전히 data science를 접해보시지 않은 분들을 기준으로 글을 쓰기 위해서 Kaggle이 뭐하는 곳인지 먼저 소개해드리겠습니다.

Kaggle

diagram

캐글의 역사는 생각보다 오래되었는데요. 2010년에 설립된 데이터 분석 및 예측 대회 플랫폼입니다. 기업이나 학교에서 자신들이 풀고자 하는 문제를 이곳에 데이터와 함께 올리고 다양한 사람들이 참여하여 문제를 해결하고 경쟁하는 플랫폼입니다. 가장 유명한 예제는 타이타닉 생존자 예측 대회인데, 그 내용은 이 링크를 참고해주세요 [사실 링크 아직 준비 중]. Kaggle 플랫폼이 좋은 이유는 사람들이 자신의 좋은 솔루션을 공유하기도 하고 자체적으로 코드를 실행시킬 수 있는 notebook을 제공하기 때문에 web 환경에서 편한하게 접근해서 데이터 분석을 해볼 수 있습니다.

I'm Something of a Painter Myself

diagram

오늘 함께 살펴볼 대회는 I'm Something of a Painter Myself - will you be the next Monet? 이라는 대회입니다. Gan을 통해서 옛 화가들의 그림체로 사진을 변환시키는 예제들이 이미 흔히 있어왔는데, 이걸 누가 더 잘하는 지에 대한 대회가 열린 것 입니다. 간단히 대회 description에 있는 내용을 소개해 드리도록 하겠습니다.

Computer vision has advanced tremendously in recent years and GANs are now capable of mimicking objects in a very convincing way. But creating museum-worthy masterpieces is thought of to be, well, more art than science. So can (data) science, in the form of GANs, trick classifiers into believing you’ve created a true Monet? That’s the challenge you’ll take on! ref) Kaggle

대회 내용은 위에서 언급한 것 처럼 진짜 모네가 그린 것 같은 그림을 만드는 것입니다! 대회에 관련 된 조금 더 구체적인 내용은 다음과 같습니다.

A GAN consists of at least two neural networks: a generator model and a discriminator model. The generator is a neural network that creates the images. For our competition, you should generate images in the style of Monet. This generator is trained using a discriminator. The two models will work against each other, with the generator trying to trick the discriminator, and the discriminator trying to accurately classify the real vs. generated images. Your task is to build a GAN that generates 7,000 to 10,000 Monet-style images.

위의 내용처럼 gan을 구성하는 2개의 모델을 만들어야하는데요. 하나는 사진을 그림처럼 만들어주는 generator, 하나는 이것이 사진인지, 그림인지를 구분해줄 수 있는 discriminator model을 만들어야하는 것입니다. Gan의 기본적인 원리 대로 generator model과 discriminator model이 경쟁하면서 학습하도록 하는 것이고 결론적으로는 7000 ~ 10000개의 모네 스타일의 이미지를 만들어내는 Gan을 만드는 것이 이 대회의 목적입니다. 그럼 다음으로 데이터를 살펴볼까요?

Datasets

이 대회의 데이터 셋은 다른 대회의 데이터 셋보다 상대적으로 단순한데요. 데이터 셋은 아래 4가지로 구성됩니다.

monet_jpg - 300 Monet paintings sized 256x256 in JPEG format

monet_tfrec - 300 Monet paintings sized 256x256 in TFRecord format

photo_jpg - 7028 photos sized 256x256 in JPEG format

photo_tfrec - 7028 photos sized 256x256 in TFRecord format

크게 모네의 그림 300점과 변환할 사진들 7028개 인데요. jpg 파일은 그냥 이미지 파일이라 설명이 필요없을 듯 하고, tfrec에 해서 말씀드리도록 하겠습니다. TFRecord 파일 포맷은 텐서플로우의 학습 데이터 등을 저장하기 위한 바이너리 데이터 포맷입니다. TFRecord가 따로 있는 이유는 JPG와 PNG 포맷을 매번 읽어 디코딩하는 것이 비효율적이고 이미지에 대한 메타데이터를 별도로 관리해야하는 번거로움 때문에 편리를 위해 사용하는 포맷입니다.

Submission format image.zip이라는 이름의 7000~10000개의 256*256 크기의 이미지를 포함하고 있는 압축폴더를 제출해야합니다.

Codes

(https://www.kaggle.com/amyjang/monet-cyclegan-tutorial)

diagram

사실 처음에 데이터가 있으면, 이걸 어떻게 읽어야할지, 라벨링은 어떻게 처리해야할지, pre-processing은 어떻게해야할지 감이 오지 않습니다. 아무리 간단한 코드여도 백지부터 시작하는건 매우 어려운 일이니까요. Kaggle의 좋은 점은 이렇게 백지부터 코드를 쓰지 않아도 된다는 점입니다. 그 이유는 이미 잘하는 사람들이 자신의 notebook을 공개해두었기 때문입니다. Competition의 code 탭을 누르면 사람들이 자신의 노하우를 공개해 놓은 글들을 확인하실 수 있습니다. 또한 필터를 이용해서 가장 많은 투표를 받은 글이 무엇인지. 가장 코멘트가 많은 글이 무엇인지를 확인할 수 있습니다. 이 포스팅에서는 가장 많은 투표를 받은 Amy Jang의 Tutorial을 따라가 보겠습니다.

diagram

오른쪽 위의 Edit My Copy를 누르시면 나만의 실행 환경에 Amy Jang의 코드를 바로 복사해와 실행해볼 수 있습니다.

diagram

나의 해당에 코드를 복사해오면 다음과 같이 나의 환경에 코드가 복제 되어 집니다. 아예 Kaggle을 처음 접하는 분들을 대상으로하는 글이기 때문에 노트북의 기본적인 주요 기능들에 대해서 설명드리도록 하겠습니다. 우선 맨 위쪽에 있는 재생 버튼은 한 코드 블록만 실행 시키는 것을 의미합니다. 한 블록만 실행하는 것은 shift 키를 누른체로 enter 키를 누르는 것과 동일한 동작입니다. 그리고 그 오른쪽에 있는 세모가 두개 있는 버튼은 전체 코드를 실행시키는 것을 의미합니다. 전체 재생을 누르기전에 오른쪽의 setiings를 보시면 Accelerator를 보실 수 있습니다. 이걸 통해 TPU로 실행을 시킬지 GPU로 실행을 시킬지 CPU로 실행을 시킬지 설정할 수 있습니다.

그럼 오른쪽 세모 두개가 있는 전체 실행을 눌러 아무것도 모르지만 Cycle gan을 이용한 Monet의 그림체를 닮은 사진들을 생성해 봅시다!

다음 글에서는 Amy Jang의 코드를 함께 리뷰해보도록 하겠습니다~!

Result

Kaggle과 고수 분들의 코드와 함께라면 일단 결과물을 만들 수는 있다.