MAPLE UPSCALE · EXPERIMENT PLAN
원본 픽셀을 지키는 업스케일 모델 만들기
GAN · CNN 확산 · DiT를 직접 학습하고, 2·3·4배 중 쓸 만한 배율을 고르는 실험 계획입니다.
계획 작성일: 2026-09-11. 데이터·장비 현황만 확인했습니다. 새 모델 학습, 패키지 설치, 체크포인트 다운로드는 시작하지 않았습니다.
파란 칸의 원본 색·투명도는 유지하고,
나머지는 전체 그림을 참고해 채웁니다.
1. 이번에 답할 질문
- 같은 데이터와 픽셀 보존 규칙에서 GAN, CNN 확산, DiT 중 어떤 방식이 옛 도트에 잘 맞는가?
- 한 픽셀을 보존하면서 주변을 채우는 방식은 어떤 배율에서 모양·색·선명도의 균형이 좋은가?
- DiT의 픽셀 보존 조건이 전체 그림의 품질에도 도움이 되는가?
‘기존 디퓨전’은 합성곱 중심 U-Net 확산 모델로 해석합니다. DiT와 같은 확산 학습법을 사용하고, 잡음을 처리하는 신경망 구조를 바꿉니다.
2. 직접 학습할 세 모델
| 실험 | 기본 구조 | 학습 방식 | 주 비교의 픽셀 보존 |
|---|---|---|---|
| GAN | 작은 RRDB 생성망 + 판별망 | 재구성 학습 후 GAN 학습 | 적용 |
| CNN 확산 | 합성곱 중심 U-Net | 픽셀 공간에서 조건부 잡음 제거 | 적용 |
| DiT | 작은 Transformer, 패치 입력·출력 | CNN 확산과 같은 조건부 잡음 제거 | 적용 |
세 모델 모두 우리 학습셋으로 생성망/복원망을 처음부터 학습합니다. 사전학습 Real-ESRGAN과 AnimeSharp는 별도의 외부 기준선으로 둡니다. GAN 지각 손실에 사전학습 특징 추출기를 쓰면 그 사용을 명시합니다.
CNN 확산과 DiT는 같은 입력 정보, 노이즈 일정, 예측 대상, 손실, 샘플러를 사용합니다. DiT-SR 등의 구조를 참고하지만, VAE 압축 없이 픽셀을 다루는 자체 실험이므로 논문 그대로의 재현이라고 부르지 않습니다.
3. 한 픽셀 보존 규칙
한 칸을 가로·세로 s배로 늘리면 s×s칸이 됩니다. 그중 지정한 한 칸의 **RGBA(색과 투명도)**를 원본과 같게 유지합니다.
| 배율 | 한 칸이 되는 영역 | 유지할 칸 | 모델이 채울 칸 | 전체 중 고정 비율 |
|---|---|---|---|---|
| 2배 | 2×2 | 1 | 3 | 25% |
| 3배 | 3×3 | 1 | 8 | 약 11.1% |
| 4배 | 4×4 | 1 | 15 | 6.25% |
학습용 저해상도는 고해상도에서 해당 위치의 픽셀을 직접 뽑아 만듭니다. 평균을 내거나 흐리게 만들지 않습니다. 현재 설명 사이트의 BOX 축소 예시와는 다른 데이터 생성 규칙입니다.
고정 위치는 각 블록의 (⌊s/2⌋, ⌊s/2⌋)로 통일합니다. 2배는 (1,1), 3배는 (1,1), 4배는 (2,2)이며 좌표는 0부터 셉니다. 위치의 좋고 나쁨도 변수이므로 초기에는 바꾸지 않습니다.
4. 데이터부터 정리
첫 범위는 몬스터·NPC의 투명 배경 스프라이트입니다. 스킬 이펙트·배경·타일·아이템은 후속 일반화 시험으로 남겨, 첫 실험에서 서로 다른 작업이 섞이지 않게 합니다.
2026-09-11 로컬 파일 헤더를 확인한 현황입니다. 아래 수는 정제 전이며, 독립 캐릭터 수나 최신 에셋 수를 뜻하지 않습니다.
| 종류 | stand 첫 프레임 확인 | 캔버스 양쪽이 96픽셀 이상 |
|---|---|---|
| 몬스터 | 7,551장 | 4,053장 |
| NPC | 9,848장 | 1,874장 |
- 투명 여백을 뺀 실제 그림 크기, 선·채색 스타일, 단순 확대 흔적을 확인해 학습 목표에 맞는 큰 그림을 고릅니다. 파일 크기·색 수만으로 제작 시기를 정하지 않습니다.
- 제작 시기가 확인된 에셋은 별도 표기합니다. 확인되지 않은 것은 ‘큰 원본 후보’로 부릅니다.
- 같은 캐릭터, 애니메이션 프레임, 재색칠, 재사용 이미지를 묶습니다. 완전·유사 중복 검사와 대표 이미지 검토를 함께 합니다.
- 묶음을 먼저 80/10/10으로 학습·검증·최종 시험에 분리하고, 그 뒤에 자르기·축소·증강을 합니다. 같은 계열의 프레임이 여러 세트에 들어가지 않게 합니다.
- 파일럿은 정제된 약 500개 묶음부터 시작합니다. 본학습 후보는 2,000개 이상을 목표로 하되, 실제 품질·묶음 수를 확인한 뒤 확정합니다. 장수 할당을 채우려고 부적합 이미지를 넣지 않습니다.
- 묶음별 균등 추출로 긴 애니메이션이 학습을 독점하지 않게 합니다. 첫 실험은 프레임 수를 묶음당 최대 8장으로 제한하고, 시험용 애니메이션은 전체 시퀀스를 보존합니다.
- 실제 옛 도트는 개발용과 최종 시험용을 각각 약 50개 묶음으로 별도 선정합니다. 이들과 같은 계열은 학습셋에서 제외합니다. 제작연도 미확인은 구분해 표시합니다.
5. 순서와 결정 시점
| 단계 | 할 일 | 다음 단계로 넘어가는 기준 |
|---|---|---|
| 0. 시험지 확정 | 데이터 목록, 묶음 분리, 픽셀 위치, RGBA 처리, 평가 코드 | 원본 해시·분리 검사·PNG 고정점 오차 0 확인 |
| 1. 학습이 되는지 확인 | 16~32개 묶음으로 세 모델 각각 작은 과적합 실험 | 미지 영역의 오차 감소, 이미지·알파 정상, 재시작 재현 |
| 2. 배율 파일럿 | 3개 모델 × 2·3·4배 = 9개 짧은 실험, 학습 시드 1개 | 검증셋과 옛 도트 개발용 갤러리로 배율 선정 |
| 3. 본학습 | 선정 배율에서 세 모델, 학습 시드 2개씩 = 6회 | 동일 예산에서 모델별 품질·속도·편차 기록 |
| 4. 보존 효과 확인 | 같은 배율의 DiT를 보존 없이 별도로 학습, 같은 시드 2개 = 2회 | 픽셀 고정이 전체 형태·미지 영역 복원에 주는 영향 확인 |
| 5. 최종 시험 | 봉인한 합성 시험셋과 옛 도트 시험셋으로 평가 | 최종 비교 웹사이트·노트북·체크포인트 기록 |
2배의 복원이 쉽다는 이유만으로 배율을 고르지 않습니다. 실제로 필요한 캐릭터 크기, 원본의 인상, 외곽선, 애니메이션 품질을 함께 봅니다. 모든 배율은 원본/출력 크기를 표기하고, 같은 화면 크기와 실제 1:1 픽셀 보기 모두 제공합니다.
검증 결과가 애셋 종류에 따라 갈리면, 먼저 한 배율로 세 모델의 주 비교를 완성한 뒤 범주별 배율 적용을 별도 실험으로 둡니다. 최종 시험셋을 보고 배율·모델·시드를 바꾸지 않습니다.
6. 무엇을 비교할까?
| 기준 | 보는 내용 |
|---|---|
| 픽셀 보존 | 저장한 PNG에서 지정 위치의 RGBA 최대 오차가 0인지 |
| 복원 정확도 | 정답이 있는 합성 시험셋의 고정점을 제외한 전경 RGB 오차/PSNR, 미지 알파 오차 |
| 그림의 인상 | 동일 배경에 합성한 전체 이미지 LPIPS(특징 차이), 모델명을 가린 사람 평가 |
| 도트 품질 | 눈·표정·실루엣·팔레트, 선이 뭉개지거나 가짜 무늬가 생기는지 |
| 투명도 | 검정·흰색·게임 배경에서 테두리, 투명 영역에 생긴 얼룩 |
| 애니메이션 | 원점·공통 캔버스를 맞춘 시퀀스의 선·색 흔들림 |
| 비용 | 학습 GPU 시간, 메모리, 학습 노출 수, 전체 이미지 추론 시간, 모델 크기 |
고정점은 정답이 이미 들어가므로 전체 PSNR만으로 우열을 정하지 않습니다. LPIPS는 전체 합성 이미지의 보조 지표로 쓰며, 마스크에 구멍을 낸 이미지를 ‘미지 영역 LPIPS’로 계산하지 않습니다.
실제 옛 도트에는 고해상도 정답이 없으므로 PSNR을 붙이지 않습니다. 모델명이 없는 동일 조건의 결과를 놓고 정체성·사용 가능성을 평가합니다. 정량 수치는 캐릭터 묶음별 평균과 편차로 보고합니다.
7. 공정한 비교 규칙
- CNN 확산과 DiT는 같은 확산 설정을 공유합니다. 구조 외 변수를 바꾸는 실험은 별도 이름으로 기록합니다.
- 파일럿/본학습 단계마다 모델별 같은 GPU 시간 상한과 같은 튜닝 횟수를 둡니다. GAN의 재구성 예열·판별망 학습도 예산에 포함합니다.
- 생성망/복원망은 약 1,000만~2,000만 매개변수를 초기 설계 범위로 삼습니다. 정확한 수, GAN 판별망 크기, 계산량을 별도 공개합니다. 매개변수 수가 같다고 계산 비용도 같다고 보지 않습니다.
- 같은 시험 이미지·추론 난수 목록·확산 반복 횟수를 사용합니다. 기본 결과는 미리 정한 첫 시드로 표시하고, 별도 3개 시드의 편차도 보고합니다. 정답을 보고 가장 좋은 샘플만 고르지 않습니다.
- 실용 비교에는 최근접·bicubic과 기존 Real-ESRGAN·AnimeSharp를 넣습니다. 기존 모델은 원래 출력과 동일 고정점 후처리를 적용한 출력을 구분합니다. 후처리가 추가 학습을 뜻하지 않습니다.
- 기존 체크포인트의 기본 배율과 최종 배율이 다르면 추가 리사이즈를 명시합니다. 예: 기본 4배 출력을 3배로 줄이는 파이프라인. 학습 모델의 native 3배와 같은 구조라고 부르지 않습니다.
- 보존을 끈 DiT는 별도로 정상 학습합니다. 미지 영역만 학습한 모델에서 마지막 덮어쓰기만 끈 결과를 무제약 학습 모델로 취급하지 않습니다.
8. 장비·시간 예산
RTX PRO 6000 96GB, 시스템 RAM 약 62GiB, SSD 여유 약 823GiB를 확인했습니다. 확인 시 GPU 약 36GiB가 사용 중이므로, 실행 직전 가용량을 다시 확인하고 다른 작업은 건드리지 않습니다.
한 번에 학습 작업 하나만 실행합니다. 원본 전체를 RAM에 올리지 않고, 캐릭터별 목록과 지연 로딩을 사용합니다. GPU뿐 아니라 RAM·swap도 기록합니다.
시간은 아직 측정하지 않았습니다. 계획용 예산안은 파일럿 1회 0.5~1 GPU시간, 본학습/보존 비교 1회 4~8 GPU시간입니다. 9회 파일럿 + 8회 본학습·비교라면 36.5~73 GPU시간이며, 데이터 정리·초기 점검·평가 시간은 별도입니다.
이는 수렴 시간 예측이 아니라 계산량 상한 제안입니다. 단계 1에서 처리속도·메모리·학습곡선을 확인한 뒤 최종 상한을 정합니다. 학습곡선이 아직 개선 중이면 예산 내 결과로 명시하고 무조건 우승 모델을 선언하지 않습니다.
9. 남길 산출물
모델마다 노트북·설정·체크포인트·출력 폴더를 분리하고, 마지막에 비교 노트북과 웹 갤러리로 합칩니다.
예정 노트북: 00_dataset_audit.ipynb, 01_pairs_and_masks.ipynb, 02_gan.ipynb, 03_unet_diffusion.ipynb, 04_dit.ipynb, 05_anchor_ablation.ipynb, 06_compare.ipynb.
- 코드:
/home/son/prj/maple/6_upscale/experiments/(후속 구현 시 생성) - 학습 데이터 목록·프로젝트 전용 처리물:
6_upscale/data/(git 제외) - 원본:
/home/son/data_ssd/public/datasets/maplestory_io/KMS_389/ - 모델:
/home/son/data_ssd/public/models/maple_upscale/(후속 생성, git 제외) - 출력:
6_upscale/outputs/{모델}/{배율}/{시드}/(무거운 산출물 git 제외)
기존 에셋을 복사해서 학습셋 전체를 다시 저장하지 않습니다. 목록과 처리 규칙을 버전 관리하고, 원본·마스크·출력의 해시와 실행 설정을 함께 남깁니다.
10. 다음에 시작할 일
첫 착수 범위는 데이터 선별 갤러리, 캐릭터 묶음 분리, 2·3·4배 점샘플 쌍과 보존 검사입니다. 그 결과를 확인한 뒤 세 모델의 소량 학습 점검으로 넘어갑니다. 이번 작업은 이 계획을 검토 가능한 문서로 만드는 데까지입니다.