평범한 필기장

[최종 프로젝트 일지 - 1주차] 최종 프로젝트 시작! 본문

Experience/Naver Boostcamp 6기

[최종 프로젝트 일지 - 1주차] 최종 프로젝트 시작!

junseok-rh 2024. 3. 12. 01:07

 앞서 최종 프로젝트 준비 기간을 포스팅 했다. 준비 기간 동안 팀원 각자의 역할을 정하고 프로젝트 주제를 확정짓고 우리가 쓸 모델들을 리서치하고 데이터를 리서치했었다. 그러고 우리의 계획에 대해 멘토님께 설명해 드리고 피드백을 받았다.

 멘토님의 피드백을 받고 주제를 어떻게 수정할지, 우리의 문제점을 어떻게 보완할지 고민을 했었다. 주제의 큰 틀을 변화시키지 않으면서 문제점을 수정하기 위해 나는 새로운 주제를 제안했다. 기존 쇼핑몰 사용자를 위한 서비스가 아닌 디자이너를 위한 서비스! 

 기존 주제는 문제점으로는 virtual try on 모델을 학습시키가 까다롭고 학습 시키기 위한 데이터를 찾고 제작하는게 쉽지 않다는 것이 있었고, 이 때문에 그냥 모델을 가져다 쓰는게 끝인 프로젝트였다. 그래서 내가 생각한 아이디어는 바로 디자이너늘 돕는 어시스턴트 서비스였다. 디자이너가 옷을 스케치하고 스케치와 함께 옷에 대한 정보를 넣으면 그에 맞게 옷을 생성하고 그 옷을 모델에게 입혀보게 하는 것이다. 그래서 많은 쇼핑몰, 옷 브랜드의 디자이너들이 옷을 제작하기 전에 모델에게 피팅시켜서 미리 어떤 느낌인지 파악하고 디자인을 수정할 수 있게 돕는 서비스를 생각했다. 

 새로운 주제에 맞게 sketch to image 모델과 그에 맞는 데이터 셋을 리서치해야했다.

모델 리서치

 Sketch to image라는 task에 맞는 모델을 리서치할 때, virtual try on 모델을 리서치하는 것보다 훨씬 많은 시간이 들었다. Image to image translation, conditional generation을 주제로 주로 리서치를 진행했다. 다양한 모델들이 있어서 어떤 모델을 쓰는게 우리 task에 맞을지 정하는게 쉽지 않았다. 

 옷을 생성할 때, 스케치 이미지만 있으면 정보가 많이 부족하기 때문에 스케치 이미지에 더해 그에 대한 텍스트 정보도 꼭 필요하다고 생각했기에 text guide conditional image generation인 ControlNet을 선정했다. (ControlNet 논문 포스팅은 조만간 할 예정입니다...!) 

 모델 선정도 선정이었지만 데이터를 찾는게 매우 힘들었다. 옷 스케치와 이미지가 동시에 있는 데이터셋도 별로 없었고 이미지에 대한 설명도 있는 데이터셋은 더더욱 없었다. 그래서 "Multimodal Garment Designer: Human-Centric Latent Diffusion Models for Fashion Image Editing"라는 논문에서 쓰인 연구용 데이터를 사용하기로 했다. 이 논문에서는 VITON-HD라는 데이터셋에 VITON-HD에 있는 옷 사진의 caption 데이터도 들어있어서 이 데이터를 쓰기로 했다. 하지만 이 데이터에는 스케치 데이터는 없었다. 그래서 스케치 데이터를 제작해야하는 상황에 놓였다.

DATA 제작

 스케치 데이터가 매우 필요했던 상황이었기에 우리는 데이터를 제작하기로 결정했다. 팀 내에서 모델링을 주로 맡기로 했기 때문에 모델링 관련 전반을 내가 주도해서 진행했다. 그렇기에 데이터 제작 또한 내가 어떻게 할지 정해서 진행했다.

 어떻게 스케치 데이터를 제작하지?라고 고민하던 찰나 level 1때 팀원 분 중에 프로젝트할 때 나와 동일하게 스케치 이미지가 필요해서 canny edge detection을 이용해서 스케치 이미지를 제작했다는 기억이 떠올랐다. 그래서 우리도 이 방식을 이용해 스케치 데이터를 직접 제작했다. 스케치 데이터를 직접 제작한 예시는 아래와 같다.

 하지만 모든 이미지가 위 이미지 처럼 잘 나오는 것은 아니었다.... 어떤 이미지들은 edge detection을 하면 형체를 알아볼 수 없는 경우가 생겼고, 이러한 문제는 edge detection의 하이퍼파라미터를 수정한다고 해결되지 않는 경우도 있었다. 그래서 결국 만장이 넘는 데이터를 하나하나 보면서 형체를 알아볼 수 없는 데이터는 지워가면서 데이터셋을 구축했다. (완전 노가다...)

ControlNet

프로젝트 첫 주는 프로젝트의 베이스를 구축해야된다고 생각해서 쓸 모델들을 리서치하고 각 모델의 깃헙 레포들을 찾아서 정리해 뒀다. 또한 ControlNet을 학습시켜서 sketch to image를 하는 것이 우리 프로젝트의 메인이라고 생각해서 나는 ControlNet 논문을 읽고 깃헙에 나와있는 tutorial을 하면서 diffusers가 처음이기에 익히는 것을 목표로 했다. (Tutorial의 결과는 내가 저장을 안해서 못보여주지만 깃헙 레포에 자세히 하는 법과 결과가 나와있기 때문에 관심있는 분들은 직접 해보시길..ㅎㅎㅎ)

 Tutorial을 진행하면서 우리의 프로젝트에 맞추기 위해 어떤 기능들이 필요하고 어떤 방식으로 코드를 짜고 해야할 것들을 아래와 같이 노션 페이지에 정리해 나갔다.

Virtual Try On

우리가 찾았던 virtual try on모델들을 동일한 이미지로 inference해서 결과를 비교해보고 그 중에서 결과가 제일 좋아보이는 모델을 선정하기로 했다. 그래서 10개의 동일한 데이터에 대해 inference를 진행했고 그 중 하나의 예시가 아래와 같다.

왼쪽부터 SD-VTON, LaDi-VTON, DCI-VTON의 inference 결과이다.

세 모델들 중에서 DCI-VTON의 결과가 artifact가 가장 적고 다른 이미지에서도 동일하게 나타났기에 virtual try on모델은 DCI-VTON으로 결정을 했다.

마무리...

 이번 주는 리서치, 리서치, 리서치, ...로 끝난 것 같다. 처음에는 제일 최신 모델, SOTA 가져다 쓰면 되지 않을까라는 안일한 생각으로 접했는데 우리 서비스에 맞는 모델, 데이터를 찾는 것이 정말 쉽지 않구나라는 것을 맞으면서 배운 느낌이다. 그래도 데이터 수집 및 제작부터 모델 리서치까지 ai 프로젝트의 초반 부분을 전부다 직접 경험한 것이 처음이기에 배우는 것들이 매우 많았다고 생각한다. 힘들지만 조금만 버텨보자...!!!!