Re: 자동채색 : 모델 성능 개선을 위한 데이터 정제

yslee·2022년 8월 20일
0

자동채색

목록 보기
1/1

repo: https://github.com/rapidrabbit76/SketchColorization

(https://github.com/rapidrabbit76/SketchColorization)

Re: 자동채색 프로젝트

최근 회사에서 데이터 파이프라인을 작성하는 도중 문뜩 아이디어를 떠올라 프로젝트를 다시 시작하고자 한다.

개인적으로 애착이 많고 더 좋은 서비스로 만들어보고 싶은 욕심도 있었지만
더 이상의 아이디어도 없고 HW도 부족해 손을 놓고 있던 프로젝트였다.
석사 졸업준비 및 취업준비로 시간이 없어 방치하고 있었지만 ...

지금까지의 상황을 요약하면 1.4TB 정도의 데이터 및 400만 장의 데이터를 수집, 간단한 필터링만 진행해 학습을 진행하고 있었다. Danbooru2018 dataset에 대한 채색 성능은 FID 기준으로 40에서 50 사이 값을 보이고 있었다.

작년부터 모델 구조 및 데이터 전처리, 학습 방식의 개선으로는 성능향상에 한계를 느끼고 있었다.
기존 프로젝트의 방향은 모델과 손실함수에 집중, 실제 선화에서도 안정적인 채색이 가능하도록 진행했다. 하지만 이번엔 기존 데이터를 잘 나누어 모델에 변화를 주려고 한다.

기존 프로젝트 문제

데이터 관리 X

기존 자동채색 프로젝트의 경우 데이터에 대한 관리가 전혀 없었다. (정말 전혀 없다.)

  • 메타데이터는 수집 사이트별로 json과 dataframe pickle로 파편화
  • 이미지는 수집했으며 메타데이터는 없는 경우가 많음
  • 자동화된 파이프라인 따윈 없음 (모든것이 jupyter, 개별 스크립트)
  • 모든 이미지 데이터를 고화질 원본으로만 보관

노이즈가 엄청난 학습 데이터

수집된 데이터는 필터링을 제외하고는 모든 데이터를 학습에 사용했기 때문에 데이터에 노이즈도 많았으리라 생각한다.

개선 방안

Metatada DB 도입

file system에 의존되어 있는 metadata를 DB에 넣어 보려 한다. 데이터를 모아서 보면 새로운 통찰을 받을 수 있지 않을까 싶어 metadata DB를 도입하려 한다. DB는 nosql로 Mongodb를 선택했다. 국내에 참고할 자료도 많아 문제가 생겼을 때 빨리 해결할 수 있을 거로 기대한다.

thumbnail image 생성

기존 데이터의 경우 고화질 위주로 저장되어 있어 무거워 다루기 힘든 경우가 많았다. 대학원 당시 데이터 전송 네트워크 I/O를 줄여보고자 tfrecode로 묶어 2GB 단위로 관리를 했었는데 이렇게 해도 문제가 많아 간단하게 실험하기 위한 작은 데이터를 별도로 생성해 관리하고자 한다.

수집 자동화

지금까진 필요할 때 수집을 진행해 메타데이터랑 이미지의 파편화가 너무 심했다. 이번 기회로 airflow를 도입, 수집부터 정제까지의 ETL를 관리해보고자 한다. 기존 환경이 모두 컨테이너 단위로 돌고 있어서 argo를 도입할까 고민했지만, 더 이상의 복잡성을 관리하기엔 자신이 없어 airflow를 사용해 진행해 보기로 했다.

데이터 군집 나누기


지금까진 모든 데이터를 학습에 사용했다. 생각해보면 학습 데이터 분포를 따라가는 생성 모델이라면 특정 Mode 데이터만 학습해 생성모델의 출력 특징을 조절 할 수 있지 않을까 싶다.
petalica paint와 네이버 웹툰 painter에서도 모델 옵션을 가지고 있는거 처럼 데이터로 모델의 옵션을 만들 수 있지 않을까 생각한다.

서비스 되는 모델들의 경우 모델 구조나 테스트 방식이 조금 다를거 같지만 내가 가진 HW에서는 다양한 실험을 빨리하기에는 힘들다...

학습 데이터 필터링

또한 데이터 군집을 나누는 과정으로 불필요한 데이터를 제거해 보고자 한다. 지금도 그레이 스케일, 가로/세로 비율이 1:4를 초과, 사용되는 색의 종류가 얼마 없는 케이스 등등 몇 가지 필터링은 진행했지만

  • text graphic처럼 큰 텍스트를 포함
  • 지나치게 편향된 색
  • Real 이미지 (Not Anime)
  • 등등

정량화하기 어려운 속성의 경우 필터링을 할 수 없었다.

이미 수집된 데이터도 인력으로 라벨링 해볼 규모가 아니기 때문에 자동화된 방법을 찾아야 한다.
지금까지 생각한 방법은

  • Danbooru dataset 으로 학습된 다양한 모델
  • metric learning
  • 선화 데이터의 군집화

를 조합해 메타데이터를 생성 및 필터링해보고자 한다.
학습되지 않은 속성의 경우 일부 수동으로 분류해서 데이터를 만들어 모델을 만들어야겠지만 ㅠㅠㅠ


ps. 같이 하실 분은 언제나 환영합니다.

profile
지식보다 지혜를

0개의 댓글