또자의 코딩교실

[2차 프로젝트] Colab을 활용한 CartoonGAN 사용 - 1 본문

코딩공부/프로젝트 진행

[2차 프로젝트] Colab을 활용한 CartoonGAN 사용 - 1

또자자 2022. 1. 27. 19:55

안녕하세요... 프로젝트 개발에 찌들어있다가 이제 천천히 블로그를 다시 돌려보려고 합니다.

이번 포스팅 내용에는 구글 코랩을 활용한 오픈소스 카툰갠 사용 튜토리얼 및 저희의 프로젝트 GAN모델에 대해서 적어보려해요.

 

>>Google Colab을 활용도구로 사용하신 이유가 무엇입니까?
먼저 git에서 가지고 온 코드가 리눅스 기반의 작업환경이었기 때문이고, 훨씬 더 빠른 gpu를 활용해 작업능률을 올리기 위해서였습니다.

 

>>왜 카툰갠을 사용했습니까?
StyleGAN2, AnimeGAN, CartoonGAN 등 기존에 존재하던 모델들을 적용해 사용해본 결과, 원하는 이미지와 가장 가까운 결과물을 만들수있는모델이 CartoonGAN이라고 판단 후 개선을 하기로 결정하였습니다.

 

>>PyMySQL과 코드를 병합시키는 과정에서 제일 어려웠던 점이 있다면?
코드를 병합시키는 과정에서 폴더의 경로지정과 parameter지정에 있어 순서가 꼬여 500 internal error가 많이 발생했었으나 처음부터 천천히 디버깅을 통해 오류를 해결할 수 있었습니다. 

 

일단 구글 코랩을 통해 적용해본 오픈소스 깃허브 코드들은 Semantic Segmentation, CartoonGAN, AnimeGANv2, realESR-GAN입니다. 구글 코랩은 구글에서 제공하는 고성능 파이썬 주피터 환경이라 생각하시면 편한데요, 주피터노트북의 local repository를 구글 드라이브에 새로 mount하여 사용할 수도 있습니다.

 

먼저 구글 코랩의 스크린샷을 보면서 천천히 알아볼까요?

구글 코랩에 접속하게 된다면 사용할 python ipynb파일을 고를 수 있습니다. 저는 semantic segmentation 을 한번 구글 코랩에서 돌려보도록 할게요.

 

저는 카툰갠의 훈련을 위해 코랩의 프로버전을 결제한 상태여서 코랩 프로버전으로 표시가 되고 있어요.

아까 말씀드린 것 처럼 나의 구글 계정 드라이브를 임포트하고, 깃허브 repository를 클론해올게요.

저장경로 카테고리 또한 지정할 수 있어요.

 

다음 코드를 입력하셔서 나의 구글계정 드라이브를 마운트하세요.

from google.colab import drive
drive.mount('/content/drive/')

계속 진행하시면 됩니다.

 

이후 드라이브 마운트를 완료하시면 옆의 파일 탐색기에 drive가 생성된 것을 확인하실 수 있습니다.

2번째 커널에서는 우리가 사용할 semantic segmentation을 git clone하는 코드입니다.

이후 %cd 를 통해 앞으로 코드가 실행될 기본적인 경로를 지정해주시면 됩니다.

 

저 안의 semantic-segmentation이 우리가 직접적으로 access 되고 있는 저장경로가 됩니다.

이제 그러면 어떻게 코랩에서 해당 깃허브 source를 실행시킬지 알아봅시다.

 

git repository를 들어가 봅시다.

개발자들에게 오픈소스 깃허브는 아주 중요한 식재료에요. 

이미지를 누르면 해당 깃허브 리포지토리로 이동합니다.

README를 읽어보시면 코드의 개요와 사용방법들이 적혀있어요.

대충 그림을 보니 사진의 누끼를 따서 배경과 합성해주는 코드인것 같네요!

이런 과정을 거쳐서 segmentation이 되는 것 같습니다. openCV에 기반을 둔 코드인 것 같아요.

이러한 도구들을 사용하여 개발하였다고 적혀있네요. 

아쉽게도 친절한 설명은 없지만 아주 간단히 적용시킬 수 있을거에요!

왜냐면 구성 코드가 main.ipynb 밖에 없거든요.

나머지는 main.ipynb파일을 보시면서 코드 복붙 및 pytorch 환경 조성등을 해주시면 됩니다.

pytorch 환경설정 방법은 나중에 포스팅할게요.

그러면 결과값들이 실행되시는걸 볼 수 있어요.

다음은 제 코랩 스크린샷입니다.

여기서 나오는 컬러파레트는 semantic segmentation이 인식할 수 있는 객체들입니다.

객체들을 인식하고 mask값에 따라서 원하는 물체들만 가져올 수 있어요.

메인이 되는 segment def입니다.

배경을 설정하는 코드에요. input 이미지에 맞춰서 배경사이즈를 자동으로 변경해준답니다.

인풋 이미지는 여기 넣어주시면 됩니다.

다음 방식으로 mask의 예측값을 위 컬러파레트에서 지정하시면 원하는 객체만 추출할 수 있어요.

이런식으로 결과가 나오는 것을 알 수 잇어요.

이런 간단한 튜토리얼이 끝났으니 저희가 쓰는 카툰갠의 프로젝트 실 사용 코드를 한번 보실게요.

저장 경로를 지정합니다.

이런식으로 기존에 주피터 노트북처럼 주석또한 기입할 수 있으니

늘 유능한 개발자라면 본인의 코드를 정리하고 체크하는 습관을 들이도록 해요.

저 주석들은 cartoonGAN에 학습시키는 data들을 메모해 둔 것이랍니다.

 

그리고.... 실행코드는 무려 한줄!

CartoonGAN_main.py를 실행시키는것. 이게 다입니다.

 

기존의 저희 프로젝트는 카툰갠의 Untrained Model을 가져와서 전이학습을 시키는 것이 목표였기 때문에 

각종 argument를 clone한 git Repository에서 직접 변경하고 

그 후 ipynb에서는 실행만 시키는 방식으로 훈련과 테스트를 진행할 수 있어요.

 

이후 더 자세한 사항은 다른 포스팅에서 계속해서 진행하도록 하겠습니다.

 

 

 

 

Comments