isPowerfulBlog
[프로젝트] Anti-aginGAN for CAT based StyleGAN2 본문
-
BOAZ 18기 분석 그리고 엔지 병행으로 1년간 활동하면서 진짜진짜 새로운 걸 많이 해보고 주변 사람들 통해서 너무 많이 배운 것 같다.
이건 분석 컨퍼런스 프로젝트! (엔지도 조만간 올려야지!)
✅ 프로젝트 상세
프로젝트 기간
22년 8월 - 23년 1월
말이 5-6개월이지 주제선정, 스터디, 시행착오에3-4개월은 썼기 때문에
진짜 프로젝트에 과정에 포함된 시간은 2달 정도라고 봐야겠다.
프로젝트 주제
Anti-aginGAN for CAT based StyleGAN2
고양이의 어린 시절을 보여주는 프로젝트
사용 모델
- StyleGAN2 - TensorFlow
- StyleGAN2 ADA - TensorFlow
환경
Google Colab, pro
깃허브
컨퍼런스 영상
0️⃣ 프로젝트 시작 전, 스터디
주제 선정 전에 나는 이미 GAN 관련된 주제로 컨퍼런스 준비를 하고 싶다고 생각했기 때문에(그저 재밌어보였음)
GAN 기초 스터디를 열었다.
18기 분석 BASE 커리큘럼에는 GAN이 없었어서 GAN이 뭔지 아예 몰랐음..
(19기부터는 생겼다! GAN 안 배우면 섭섭해서 내가 분석 BASE 방학 커리큘럼 막주차에 GAN 넣었다!!)
◾ GAN 기초 스터디
- GAN 때문이야
- 교재: GAN첫걸음, 한빛미디어
- 기간: 22.07-22.08, 주 1회, 총 5주
- 내용: GAN, DCGAN, CGAN, CycleGAN 등 GAN 기초 이론 및 실습, 팀별 논문 리뷰
1️⃣ 프로젝트 초반, 주제 초안 및 논문 리뷰
◾ 처음 주제
처음 주제는 아마도 가상 인플루언서처럼 가상 고양이를 만들겠다는
약간 어이없는 주제로 팀을 만들었던 것 같다.
지금보면 이걸 같이 해주는 사람이 있었다는게...
-
나름의 이유는 있었다
- 개발은 엔지 어드브에서 하거나, 전공이 소융인지라 언제든 할 수 있을 것 같았다.
- 그래서 웹, 앱 개발 이런 것과 아예 벗어나서 딥러닝 자체에 집중을 좀 해보고 싶었다.
- 그리고 레퍼런스가 많아 안정적인 주제보다 좀 지멋대로인, 남들은 안 하는 주제 해보고 싶었다. -> 사춘기였었나봄ㅠ.ㅠ
- 기술 스택 및 경험을 쌓기 위해서 의무적으로 하는 프로젝트가 아니라, 그냥 내가 좋아서 하는 프로젝트 해보고 싶었다! -> 이게 젤 컸다
◾ 주제 디벨롭
팀원의 좋은 아이디어로 허접한 주제가 좀 더 디벨롭 되었다.
"공장식으로 태어난 고양이, 강아지들과 또 그 생명체를 돈주고 사고 또 버려지는 행태들에 주목해보자!!!"
-
고양이의 어린 모습이 마냥 귀여워서 충분한 준비와 책임감을 갖지 않은 채로 돈을 주고 사고,
또 이후에 책임지지 못하고 버리는 유기묘, 유기견 문제가 정말 심각한 문제라고 생각했다.
한 때 관련 유튜브를 보며 화가 많이 났었다 정말.😡
-
- 귀여운 아기 고양이들을 이미지를 생성해내서 사람들의 이목을 끌고.
- 그리고 노화가 많이 진행된 고양이 이미지를 생성해내서
- 사람들이 한 생명을 분양받을 때 신중해야 함을 지적하고자 했다.
- 이땐 인스타그램 계정을 운영하고자 했다.
◾ 논문 리뷰
각종 GAN 관련 논문 리뷰를 진행했다.
GAN 기초 스터디에서도 후반부에 논문 리뷰를 진행했었고,
ADV 팀원들과도 논문 리뷰를 진행했다.
-
최종적으로는 StyleGAN을 기반으로 진행하기로 했다.
-
StyleGAN 파생 모델들이 굉장히 많았지만 정확하게 우리가 하고자 하는 주제랑은 거리가 있었기 때문에,
베이스 모델에서 파생시키는게 좋을 것 같았다.
(물론 이후에도 계속 논문, 레퍼런스를 찾아보며 바꿔야하나 말아야하나 말 많긴했다...)
2️⃣ 프로젝트 초중반, 주제 확정, 데이터 수집 및 시행착오
◾ 주제 초안 문제
원래 주제로 진행하고자 할 때 문제점이 조금 있었다.
- 고양이의 노화를 나타내는 특징이 무엇인가?
- 노화가 진행된 고양이 데이터셋을 모을 수 있는가?
특히나 데이터셋을 모으는건 불가능에 가까운 문제였다.
그래서 비슷한 목적을 가지지만 방향을 거꾸로 틀었다.
◾ 최종 주제
고양이의 어린 시절을 보여주는 프로젝트
- 어른 고양이 이미지를
- 아기 고양이 이미지로 바꿔주어
- (이미 다 성장한)유기묘를 입양한 집사들에게 고양이의 어린시절 추억을 만들어주고자 했다.
귀여운 주제...
◾ 데이터 수집
일단 아기 고양이 데이터셋을 수집해야했다!
웹 크롤링 했다... 어쩔 수 없다...
오랜만에 크롤링을 해서 너무너무 헷갈렸다.
-
2000장 이상의 아기고양이 이미지를 확보했다.
-
최종적으로 사용하지는 않았지만
캐글에서 고양이 데이터셋도 처음엔 가져와서 이런 저런 실험에 사용했었다.
▪️ 데이터 전처리
데이터 전처리는 딱히 뭐가 많지 않았다.
우리가 사용할 수 있는 GPU를 생각하면 이미지 사이즈를 줄이는게 당연했다.
128x128과 256x256 그리고 512x512로 이미지 리사이징을 진행했다.
상황에 맞는 이미지 사이즈를 선택하기로 하고,
◾ 시행착오
StyleGAN과 친해지는 모든 과정들이 어려웠다.
GAN 기초 스터디 때 정리해놓은 StyleGAN 정리 글을 수도 없이 다시 보고 StyleGAN의 구조를 수도 없이 살펴봤다.
latent vector, latent space, style 등 제대로 정의해보려고하면 잘 모르고 있는 부분들이 많았다.
기본적으로 stylegan의 색다른 input 방식이 진짜... 헷갈렸다
▪️ latent vector 조합 실험
latent vector라는걸 이해하기 위해서 무작정 아기 고양이 이미지와 어른 고양이 이미지의 latent vector를 뽑아내어 조합하는 실험을 진행했다.
- 개별 요소 덧셈, 뺄셈, 곱셈 등으로 조합해본 결과
- 덧셈 외에 의미있는 결과물X
-
- 여러 요소들 평균을 내어 조합해본 결과
- 역시나 덧셈 외에 의미있는 결과물X
지금 보면 당연히 나머지 연산은 이상한 연산이 맞다...
아무튼 이런식으로 latent vector라는게 뭔지 직접 실험해보면서 이해를 했다.
▪️ stylemixing 실험
학습시킨 stylegan2-ada-pytorch 모델로 style mixing 실험을 진행하면서 style mixing에 대해서도 이해하는 시간을 가졌다.
- 왼쪽 열이 base 이미지
- 상단 행이 base 이미지에 입혀질 style 이미지
-
아마 여기까지가 중간발표 내용이였던 것 같다.
3️⃣ 프로젝트 중후반, 프로세스 설계, 환경 구축
◾ 프로세스 설계
그래서 어떻게 할 것인가!!! 는 이 프로젝트의 가장 가장 막막한 부분이였다.
아무리 벡터를 조합한다고 해서 어른 고양이가 아기 고양이가 되지 않았고 그건 당연한 결과였기 때문에
구체적으로 해결할 수 있는 방안과 프로세스 설계가 필요했다.
▪️ 문제정의
설계에 앞서 우리가 근본적으로 뭘 해결하고자 했지?를 다시 생각해보고 가장 해결해야할 부분을 체크했다.
어른 고양이가 아기 고양이로 변할 때,
- 종이 바뀌어서는 안 된다.
- 둘이 닮아야 한다.
- 모든 종의 고양이에 대해서 동일하게 어려지는 변화가 나타나야한다.
▪️ 방법론
위의 문제들을 해결하기 위해서는 특징들을 통계적으로 분석하고, 특정 부분에 영향을 미치는 요소들을 찾아내고 또 적용해야했다.
여러 search를 통해서 pca가 충분히 가능성 있는 방법임을 알게 되었고 이를 통해서 문제를 해결해보기로 했다.
▪️ 프로세스 구조도
pca 생각하니까 뭔가 해결 방안이 술술 떠올라서 신나게 구조도를 그렸던 기억...
신나서 팀원들한테 그림 그려주면서 설명해준 기억...
너무 막막했는데 뭔가 길이 보이는 것 같아서 기분 좋게 집에 갔던 것 같다.
-
결과적으로는 이 방식으로 문제를 해결하게 되었다! 뿌-듯 (이게 될 줄은...)
◾ TensorFlow 환경 구축
처음 실험은 pytorch 모델로 진행을 했지만, 여러모로 TensorFlow로 되어있는 tool들이 많은 것 같아 tensorflow 모델로 갈아타기로 했다.
local에서 conda나 docker로 빌드했으면 편하게 환경 구축을 했을 텐데,
google colab의 gpu를 사용해야했기 때문에 google colab에서 환경구축을 했고, 굉장히 고역이였다...
이렇게나 환경 설정이 힘든거 인줄... 분석, 엔지 컨퍼 준비하면서 참 많이 느꼈다...
하지만 구글링을 열심히 열심히 해서 잘 해결 되었다 다행!
-
Tensorflow 모델로 StyleGAN2 모델과 StyleGAN2-ADA 모델은 뚝딱 학습시켰다.
4️⃣ 프로젝트 후반, 모델 fine tuning, PCA, 적용 및 결과
◾ 모델 fine tuning - FreezeD
StyleGAN2, StyleGAN2-ADA 모델을 아기고양이 데이터셋으로 쌩으로 학습시켰을 때, 저화질 문제가 있었다.
찾아보니 StyleGAN2에 FreezeD를 많이 얹어 사용한다고 하길래
나도 StyleGAN2-ADA pre-trained 모델에 FreezeD 방식으로 fine-tuning을 진행했다.
결과적으로 더 괜찮은 이미지 생성!
◾ PCA 실험
pretrained StyleGAN2-ADA + 아기고양이 데이터 FreezeD 모델에 대해서
latent space에 PCA를 적용했다.
특정 개수의 주성분을 뽑아서 어른 고양이 이미지 latent vector에 직접 적용해보면서 변화를 관찰했다.
굉장한 노가다였다!
200개는 그냥 넘고... 300개도 넘게 봤을 듯...
-
여러 노가다를 통해 결과적으로 의미있는 주성분들을 뽑아내고, 적용했다.
◾ 적용 및 결과
잘 적용이 되었다!
하면서도 너무 신기했다.
다른 고양이에 대해서도 적용이 된다..
☑️ 프로젝트 발표 및 후기
23년 1월 28일, 서울시청 후생동 강당에서 제17회 보아즈 빅데이터 컨퍼런스가 진행됐다.
일주일 전 와다다다 피피티 만들어놔서 맘이 편했다...
엔지 우리팀 발표가 2번째, 분석 우리팀 발표가 4번째였고
이 프로젝트(분석)은 발표를 내가 맡았었다.
내 차례 5분 전에는 정말 토할 뻔했다 너무 긴장해서;;;;;;;;;
그래도 ...말 다 하고 내려와서 다행이다... 좋은 경험이었다...
-
1년이 이렇게 쓱 지나갔다는게.. 새삼 시간 정말 빠르고
보아즈 덕에 내 한 학기 휴학 약 6개월 동안 너무 알차고 재밌게 보냈다.
진짜 휴학 최고로 잘 보낸 것 같다...
특히 대표진으로 활동했던 6개월 동안은 내가 내가 아닌 것 같았다~~
좋은 의미로다가!!
다 너무 좋고 멋진 사람들이여서 옆에서 많이 배운 것 같다.
-
컨퍼 준비하는, 준비하게 될 많은... 보아즈 분들..에게 도움이 되면 좋겠당
난... 너무 헛짓거리를 많이 했으니 다음 분들은 나보단 덜 고생했으면...
'AI' 카테고리의 다른 글
[LangChain] Text Splitter로 긴 문서를 작은 Chunk로 쪼개기 (0) | 2024.04.19 |
---|---|
[LLM] LangChain 🦜🔗 (0) | 2023.11.07 |
[Anaconda] 아나콘다 기본 명령어 (0) | 2023.01.24 |
[Numpy] npz: 파일 구조 확인하기 (1) | 2023.01.16 |
[Error] StyleGAN2 | AssertionError : assert state["version"] in [2, 3, 4] (0) | 2023.01.06 |