교육용(K-12 수업 프레젠테이션 삽화) T2I 모델 후보들을 같은 조건에서 비교하기 위한 실험 환경. 연구개발 단계 — 결과만 좋으면 되므로 라이선스/양자화/파인튜닝은 지금 당장은 신경 쓰지 않는다.
핵심 구조: 프롬프트 구축 → T2I 이미지 생성 → 메트릭 채점, 3단계 파이프라인을 계속 돌리면서 프롬프트 작성기 / T2I 모델 / 채점 방식 세 가지를 동시에 발전시킨다.
① 프롬프트 구축 ② T2I 이미지 생성 ③ 메트릭 채점
(rewriter + style preset) → (configs/models 후보군) → (충실도 + 스타일 + 종합)
↑____________________________________________________|
채점 결과가 다음 라운드 개선 방향을 정함
목적: 오브젝트 설명(한국어 가능) + 개발자가 미리 정한 스타일 프리셋을 합쳐 모델에 넣을 최종 프롬프트를 만든다.
claude-prompt.md 참고(README 통합 후 삭제됨).지금까지 실측해본 모델 후보군(configs/models/) 중에서 프롬프트/채점 결과가 가장 좋은 조합을 고른다.
새 모델을 굳이 더 찾아다니지 않고, 이미 돌려본 것들의 실측 비교부터 채운다.
vram_peak_gb, sec_per_image)에 자동 기록되므로 bench 문서에 손으로 옮기지 않는다.bench/results.md 상세): 단순 프롬프트("an apple" 수준)에서는 모델별 방언 재표현이 출력을 거의 바꾸지 않는다 — 어려운 출력은 대부분 프롬프트 문제가 아니라 모델 능력 한계. 수량/공간/속성 결합 같은 복합 프롬프트에서도 방언으로 실제 개선된 사례는 flux2-klein-4b의 수량 정확도 하나뿐이었고, 나머지 실패(sd35-medium의 좌우 반전 고정, zimage-turbo의 개수 오류, pixart-sigma의 속성 색 전이)는 조건과 무관하게 동일하게 재현돼 능력 한계로 판단. lumina2가 복합 프롬프트 전 축(수량/공간/속성)에서 가장 안정적 — ②에서 후보 압축 시 우선 고려.bench/results.md 참고.enable_model_cpu_offload()(configs/models/flux2-klein-4b-nf4.yaml) 조합으로 16GB 진입에 성공(전체 offload만 쓰는 것보다 VRAM/속도 둘 다 더 나음). 품질 저하는 경미(음영 그라디언트 다소 밋밋, 윤곽선 살짝 거칠어짐 — 구조적 결함 없음). "text encoder만 offload" 방식은 이 파이프라인 구조에서 실질적 절감 효과가 없어 폐기. 결과적으로 lumina2+pixart-sigma 2모델 체제로의 축소는 발동하지 않음 — flux2-klein-4b는 NF4 양자화 조건으로 후보 유지. 상세는 bench/results.md 참고.두 축만 본다: 프롬프트 충실도, 스타일 반영도. (화질/미감/지식 계열 메트릭은 지금 우선순위 아님.)
claude-metric.md 참고(README 통합 후 삭제됨).src/scoring.py)src/score.py(CLIP 프록시, review_app.py가 아직 씀)와 별도로, 실제 VQAScore/CSD 모델을
쓰는 1차 구현. python -m src.scoring --dir <PNG 디렉토리> --out <csv 경로> --components <조합>으로
배치 채점 → <csv 경로> + 같은 이름의 .md 요약 생성. --components는 vqascore,cv,csd 중
조합(csd는 --ref-manifest로 configs/ref_sets/<preset>.yaml 필요) — vqascore/cv 패스와 csd
패스를 분리해서, csd는 정식 ref_set 수집 전엔 건너뛰고 나중에 그 패스만 재실행할 수 있다.
t2i-score (T2I 생성 env와 분리, 동시 로드 안 함 — envs/README.md 참고).t2v_metrics 패키지, clip-flant5-xl. 가중치는 HF_HOME(기본 ~/.cache/huggingface)에
자동 다운로드됨. VRAM: 3090에서 측정 필요, 아직 미측정.CSD/ 서브패키지를 vendor/CSD로 vendoring함(pip 패키지 없음) — 실행 시 PYTHONPATH=vendor
필요. 체크포인트(ViT-L)는 저자 공식 HF 미러 tomg-group-umd/CSD-ViT-L에서
받아 weights/scoring/csd_vit-l.pth에 둘 것(weights/는 .gitignore의 *.pth 규칙으로
자동 제외됨). 저자가 리포 상단에 논문 수치와의 미세한 불일치 가능성을 disclaimer로 밝혀뒀지만
provisional 용도로는 문제없음. 2026-07-20 [email protected] t2i-score env에서 실제
체크포인트 로드+forward 검증 완료 — state dict 키에 module. 접두사가 있어
CSD.utils.convert_state_dict로 벗겨야 함(벗기지 않으면 strict=False가 조용히 0개 키
매치로 통과해 랜덤 초기화 상태로 채점하는 버그였음, src/scoring.py::load_csd_model에서 수정).
validate_ref_set.py --provisional도 파일럿 이미지 3장으로 실측 검증(mean=0.6175,
std=0.0481, configs/ref_sets/_smoke_pilot.yaml). ref_set 정식 검증/수집은
scripts/validate_ref_set.py + bench/style-presets-v2.md의 "5. CSD ref_set 수집 기준"
참고. VRAM: 실측 ~1.6GB(단일 이미지 forward 기준).pilot-complex3-report.md
축별 판정표 기준)으로 로컬 검증함 — 값이 0.77scoring.py에서 완전히 분리된 별도 스크립트 scripts/judge.py —
로컬 VLM(전용 env, 3090에서 직접 추론)으로 API 키 없이 판정한다. 예전에 있던
Anthropic API 기반 score_image_vlm은 제거됨. 2026-07-28부터 기본 judge는
InternVL3-8B-hf(t2i-judge2 env) — TASK-C 삼각검증(사람 vs Qwen2.5-VL/Gemma-3/InternVL3)
결과 사람 채점과의 κ가 셋 중 최고(0.61)라 채택. Qwen2.5-VL-7B-Instruct는 t2i-judge env로
교차검증용으로 남아있다(아래 스모크 테스트는 Qwen 기준 기록). bench_v1의
counting/spatial/attribute 축별로 pass/fail을 구조화 JSON으로 받는다. 실행 순서는
docs/eval_runbook.md 참고. t2i-judge env 구성 시 qwen-vl-utils가 import 시점에
요구하는 torchvision이 설치 목록에서 빠져 있었음 — envs/README.md 참고해 추가로 설치할 것.
스모크 테스트 완료(2026-07-20, 3090 서버): --smoke-map tests/judge_smoke_map.yaml PASS
없이 실행 완료, vram_peak=15.78GB. 단, 결과는 정확도 이슈를 드러냄 — 알려진 실패 파일럿
3장 중 2장(v207 spatial 좌우반전, v205 attribute 색 전이)에서 judge가 pass를 냄(false
positive). v205는 rationale 자체가 "다리도 파란색"이라고 결함을 인지하고도 verdict는
pass로 낸 경우 — 판정 로직(프롬프트/파싱)이 아니라 모델의 spatial-reasoning/fine-grained
attribute 판단 자체가 약한 것으로 보임. counting 축은 성공/실패 양쪽 다 정확히 잡음.
본 실험 결과 해석 시 judge의 spatial/attribute 축 판정은 액면 그대로 신뢰하지 말고
이미지 직접 확인으로 교차검증할 것 — 별도 개선 트랙 필요(프롬프트 튜닝 또는 더 큰 모델).scripts/merge_results.py — pass1(vqascore/cv) + csd + judge CSV를
run×item_id 기준으로 합쳐 harmonic 집계 최종 CSV + 모델별 컴포넌트 평균/모델×축 pass율
리포트를 만든다. csd가 없어도(정식 ref_set 미수집) 나머지 컴포넌트만으로 동작한다.scripts/smoke_test_scoring.py — 정합 성공 3장(lumina2, pilot-complex3-report.md
판정상 3축 모두 성공) vs 실패 3장(sd35-medium 공간 반전 / zimage-turbo 수량 오류 / pixart-sigma
속성 색 전이)에서 vqascore(성공군) > vqascore(실패군)을 assert. 3090의 t2i-score env에서
실행해야 함 — GPU 없는 개발 샌드박스에서는 미실행. 삽화 유형 + 벤치마크 프롬프트셋 정의: 6개 카테고리(사물단독/역사문학/자연과학/생활사회/감정관계/개념은유) × 난이도(easy16/medium16/hard8) × 축(counting/spatial/attribute)으로 40개 벤치마크 프롬프트셋(v1) 확정 → configs/benchmarks/bench_v1.yaml. 이후 모든 비교는 이 셋 기준으로 고정.
스타일 프리셋 확정: 12개 → 4개(edu-flat-v2/playful-soft/storybook-scene/observational) + 보류 1개(mono-minimal)로 통합. 설계 근거·시각 언어·leakage 방지 authoring rules(R1~R9): bench/style-presets-v2.md. 구 12개 프리셋 yaml은 configs/experiments/archive/presets-v1/로 보존(과거 실험 노트가 참조). R9 스모크 테스트 완료(2026-07-19): lumina2 + r9-smoke3(apple/cat/book)로 4개 전부 생성·육안 확인 — leakage 없음 확인되어 4개 전부 status: validated로 전환. observational/storybook-scene은 교육용치고 스타일이 과하게 고퀄리티/복잡하다는 별도 지적이 있었으나 leakage와 무관한 이슈라 일단 본 실험에 포함하고 채점 결과로 판단하기로 함 — 상세는 bench/results.md.
rewriter 1차 구현 + 검증 하네스: src/rewriter(rewrite(prompt_ko, opts) -> {prompt_en, meta}, provider는 opts.llm_fn으로 교체 가능, lang="es"는 인터페이스만 두고 NotImplementedError), scripts/verify_rewriter.py(과목별 한국어 샘플 20개 → 수량/스타일오염/길이 자동 체크 → bench/rewriter-verification-report.md). 자동 체크 실패 시 위반 사유를 피드백으로 넣어 최대 1회 재생성(meta["retried"]에 기록). 기본 provider/모델은 OpenAI gpt-5(src/rewriter/providers.py::call_openai, .env의 OPENAI_API_KEY 사용). tests/에 유닛 테스트 21개 통과. 실행 완료(2026-07-19 재검증): python -m scripts.verify_rewriter 결과 20/20 실제 통과 — 빈 출력을 PASS로 잘못 기록하던 버그(#18) 수정 후 리포트 재생성 확인. 스페인어는 다음 단계.
채점 모듈 1차 구현: src/scoring.py(score_image(image, prompt, components, ref_set=None) → {vqascore?, custom_cv?, csd?}). VLM-as-judge는 scripts/judge.py로 분리(로컬 Qwen2.5-VL). 상세는 아래 "채점 모듈" 절. custom_cv(OpenCV, 모델 불필요)와 배치 CSV/마크다운 생성은 저장소의 실제 파일럿 PNG로 로컬 검증 완료. VQAScore 스모크테스트 완료(2026-07-19, 3090 서버): python scripts/smoke_test_scoring.py PASS — success_mean=0.9133 > failure_mean=0.6767, vram_peak=6.06GB(clip-flant5-xl 로드 기준, T2I 생성 모델과 동시 로드 안 함). t2i-score env 구성 시 t2v-metrics==3.0 자체 패키징 문제(무관한 VLM 백엔드를 import 시점에 전부 끌어옴) 우회가 필요했음 — envs/README.md의 "t2v-metrics 3.0 패키징 문제" 절과 envs/fix_t2v_metrics.sh 참고. CSD도 2026-07-20 실측 검증 완료(체크포인트 로드+forward+validate_ref_set.py --provisional 전체 경로, 위 "채점 모듈" 절 참고).
golden set 확보: 최초 수집분은 벤치마크 대상 12개 run(v231~v242) 이미지에서 골라 자체 참조(self-reference) 오염 발견 → 폐기(refs/_old_self_ref_backup/에 보존, 스코어링엔 미사용). 프론티어 모델(Imagen-4)로 4개 프리셋 독립 재생성(edu-flat-v2 15장/observational 10장/playful-soft 10장/storybook-scene 10장, bench_v1 40개 키워드와 주제 미중복) 후 전량 교체. validate_ref_set.py 4개 프리셋 전부 status: validated(2026-07-20). storybook-scene은 세이프티 필터로 아동 피사체가 전혀 생성되지 않아 성인/비인물 장면 위주로 구성됨 — 아동 대상 스타일 정합성은 추후 재검증 필요.
기존 모델 후보군 실측 비교: 벤치마크 프롬프트셋(bench_v1, 40개) × 확정 스타일 프리셋 4개(edu-flat-v2/observational/playful-soft/storybook-scene) × 3개 후보 모델(lumina2/pixart-sigma/flux2-klein-4b-nf4) = 12개 run(480장) 생성 후 채점 완료(2026-07-20, bench/scores/merged.md). csd 포함 4개 컴포넌트(vqascore/custom_cv/csd/judge_pass_rate) 전부로 harmonic 계산 완료 — flux2-klein-4b-nf4(0.653) > lumina2(0.6303) > pixart-sigma(0.5804).
| model | vqascore | custom_cv | csd | judge_pass_rate | harmonic |
|---|---|---|---|---|---|
| flux2-klein-4b-nf4 | 0.837 | 0.756 | 0.480 | 0.925 | 0.653 |
| lumina2 | 0.840 | 0.739 | 0.443 | 0.944 | 0.630 |
| pixart-sigma | 0.805 | 0.740 | 0.429 | 0.810 | 0.580 |
judge 축별 pass율: pixart-sigma가 counting에서 66%(21/32)로 세 모델 중 유독 낮음(lumina2 94%, flux2-klein 81%) — 방언 파일럿에서 이미 나온 "lumina2가 복합 프롬프트 전 축에서 가장 안정적" 결론과 일치. spatial/attribute는 세 모델 다 80~100%대지만, judge 자체의 spatial/attribute 판정 정확도가 파일럿에서 낮게 나온 바 있어(위 "채점 모듈" 절) 액면 그대로 신뢰하지 않고 이미지 직접 확인이 필요.
lecture24 baseline 확정: 실제 교과서 이미지 기반 완성 프롬프트 24개(vlm-prompts.json, 8카테고리×3 VLM 소스)로 3모델(pixart-sigma/flux2-klein-4b-nf4/qwen-image) 생성+채점 완료(v243v245). 2026-07-24부터 이 테스트를 프로젝트 Baseline으로 고정 — 앞으로 프롬프트/모델/채점 방식 변경은 이 baseline 대비 개선 여부로 판단한다. 상세·리포트 링크는 25장) 보강이 다음 항목.bench/results.md의 "Baseline: lecture24" 절. csd_target은 카테고리당 참조 1장뿐인 provisional 신호라 정식 golden set(카테고리당 15
CSD golden set 보강(lecture24 8카테고리): refs/lecture24/<카테고리>/에 있던 후보 이미지(카테고리당 15~24장, 총 158장)를 scripts/validate_ref_set.py로 검증(8개 전부 validated, outlier 없음, 매니페스트 configs/ref_sets/*.yaml). 카테고리마다 다른 ref_set을 써야 해서 src/scoring.py --components csd(단일 ref_set 전제) 대신 다중참조 평균 채점 전용 scripts/score_csd_golden.py를 새로 작성, 기존 csd_target 채점이 있던 18개 run·420장을 재채점. 상관관계는 강하지만(Pearson r=0.83) 절대값은 80% 이미지에서 하락하고 카테고리별 방향도 갈린다 — 상세는 bench/results.md의 "lecture24 CSD golden set 보강" 절과 reports/csd-golden-set-lecture24/index.html.
3단계 병행 개선 루프 진입: 채점 결과가 가리키는 병목에 따라 프롬프트/모델/채점 중 우선순위를 정해 반복 개선. (파인튜닝·증류는 이 루프에서 결과가 계속 부족할 때만 후순위로 검토.) 위 1차 비교 결과대로면 pixart-sigma의 counting 약점이 우선 조사 대상 — judge 오탐인지 실제 모델 한계인지 이미지 직접 확인 필요.
프롬프트 리라이팅 효과의 counting/attribute-binding 카테고리 편중 검증(TASK-I): 파트 1(재사용
분석)에서 promptenhancer_cn의 VQAScore 개선이 structural(counting/attribute-binding) 카테고리에
유의에 가깝게 몰림(p=0.078)을 보고, 파트 2(short/medium/long 길이 사다리, 신규 생성 v263)로 순수
길이 효과를 분리 검증. 결과는 가설과 반대: 길이가 늘수록 VQAScore/csd_target이 오히려 유의하게
오름(rho +0.41/+0.34, bench/results.md TASK-I 절) — 단 medium→long 구간에서만 유의해 "길이"보다
"제약 디테일 보존"이 실제 원인일 가능성. "길수록 counting이 나빠진다"는 가설은 기각.
conda activate t2i-pixart
python -m src.generate --model pixart-sigma --exp coloring-book
streamlit run src/review_app.py
configs/
models/ 모델 1개 = 파일 1개 (repo, adapter, env, dtype, steps, quant)
experiments/ 스타일 1개 = 파일 1개 (style/negative prompt, seed, 참조할 키워드셋)
archive/presets-v1/ 폐기된 구 프리셋 — 과거 실험 노트가 참조하므로 보존만
keywords/ 고정 벤치마크 키워드셋 — 모델 비교의 기준이므로 함부로 안 바꾼다
benchmarks/ 3단계 파이프라인 전체용 rubric 프롬프트셋(v1, 40개) — bench_v1.yaml
vlm-prompts.json — 실제 교과서 이미지를 VLM으로 역추출한 완성 프롬프트 24개(8카테고리×3소스, "lecture24").
2026-07-24부터 프로젝트 Baseline으로 고정, bench_v1처럼 함부로 편집하지 않는다. 상세는 bench/results.md.
src/
generate.py 모델 × 실험 조합 하나를 생성. 공통 엔트리포인트.
adapters/ 모델별 pipeline 로딩. lazy import (env가 다르므로 필수).
review_app.py 브라우징/평가/비교
image-prompts/
v001_pixart-sigma/
v001_pixart-sigma.md frontmatter = single source of truth
images/
docs/
NextJob.md 다 쓴 작업 계획/진행 메모 — 백업용, 더 이상 갱신 안 함
envs/ conda env 규칙 + 성공한 pip freeze 스냅샷
bench/ 결론과 삽질 메모
reports/ 생성된 리포트(md/html) — bench/reports/였던 것도 여기로 통합
scripts/
sweeps/ 현재 쓰는 스윕/빌드 스크립트
archive/ 끝난 스윕(sweep.sh~9_2.sh) — 과거 기록 보존용, 재실행 대상 아님
logs/ 현재 실행 로그
archive/ 끝난 스윕(sweep*)의 summary.tsv — 과거 기록 보존용
모델(configs/models) × 스타일(configs/experiments) × 키워드셋(configs/keywords)
버전 번호(v001...)는 전역 증가하고, 디렉토리명에 모델명이 붙는다. 어떤 조합이었는지는 노트 frontmatter의 model/experiment/keyword_set에 남는다.
https://docs.google.com/presentation/d/1CKLPUB_i5icXxrAOilvpawpoHU1EJnlE9ZzILbHZjQ8
15분 발표 준비 + Q&A 디스커션 별도 진행
경량화 + 영상 생ㅇ성하는 기존 모델들을 교육 컨텐츠 용으로 쓸만한 영상 (스타일, 품질 동시에 잡기)
기존 모델로 유아용 컨텐츠로 만들어서 한번 보고? 안될거같으면 파인튜닝으로 ㄱㄱ
이거를 경량화 하는게 주요 목적
서베이를 잘 하자
컴프레션?
영상 스타일?
프롬프트 vs 파인튜닝
Few shot adaptation 기반으로 해야할 것.
우선 기존에 걍 모델이 어떻게 다른지 비교? 어디까지 되는지?
컴프레션? 디퓨전에서 quantazation / 일반 뉴럴넷이랑 또 다름
여러 방향으로 접근 가능
파라미터 프루닝이나 distill, … 등등
다음주까진 컴프레션 논문살펴보기
T2I 결과 나오는거 확인하는거 위주로
컴프레션도 적당히 공부해보기
논문을 보는거 보다
교육용 컨텐츠 -> output 가져와야 함
어떻게 비교 평가 할 것인지?
특히 교육용 컨텐츠 T2I라서
일단 제네릭한 이미지 생성에서도 메트릭 찾아보고
비교를 해야함
어떻게 평가할 지 고민
아키텍쳐는 가볍게, 논문이나 프로젝트 페이지 생성 결과를 가져와서 비교
PixArt랑 FLUX만 보면 되는지?
일단 다른거도 비교 추가
7/22 : Task 1: 수업용 프롬프트 20~30개 제작 + 2~3개 모델 결과 분석 + Prompt Rewriting 논문 1~2개
Ideogram이 텍스트 잘 만듬
- json형식으로 되게 explicit하게 넘겨주던데 이런 방법론
텍스트 어떻게 잘 넣음?
그래프 그리기는 또 다른데 어떻게 함?
일단 계획대로 ㄱㄱ
말풍선 내부 user controlbility 확인
그림과 consistency 한지
향상시킬 수 있는 방법이 있는지?
라이센스 이슈 확인, 다른 모델에서 말풍선 어떻게 할건지 파이프라인
quantiztion도 좀 깨지는게 있었는데
metric에 관한 citation?
이런이런게 있다 (인용을 하는 습관을 들이자)
citation을 매 페이지
기존 연구에 비하면 metric은 이런걸 쓰더라, 퍼블릭 데이터는 없는지, 왜 이렇게 변형했는지 등등
quantization 논문 좀 더 필요한거 있으면 읽어보면 되고
다음주에는
유해 컨텐츠 필터링 ㄱㄱ
교육용(K-12 수업 프레젠테이션 삽화) T2I 모델 후보들을 같은 조건에서 비교하기 위한 실험 환경. 연구개발 단계 — 결과만 좋으면 되므로 라이선스/양자화/파인튜닝은 지금 당장은 신경 쓰지 않는다.
핵심 구조: 프롬프트 구축 → T2I 이미지 생성 → 메트릭 채점, 3단계 파이프라인을 계속 돌리면서 프롬프트 작성기 / T2I 모델 / 채점 방식 세 가지를 동시에 발전시킨다.
① 프롬프트 구축 ② T2I 이미지 생성 ③ 메트릭 채점
(rewriter + style preset) → (configs/models 후보군) → (충실도 + 스타일 + 종합)
↑____________________________________________________|
채점 결과가 다음 라운드 개선 방향을 정함
목적: 오브젝트 설명(한국어 가능) + 개발자가 미리 정한 스타일 프리셋을 합쳐 모델에 넣을 최종 프롬프트를 만든다.
claude-prompt.md 참고(README 통합 후 삭제됨).지금까지 실측해본 모델 후보군(configs/models/) 중에서 프롬프트/채점 결과가 가장 좋은 조합을 고른다.
새 모델을 굳이 더 찾아다니지 않고, 이미 돌려본 것들의 실측 비교부터 채운다.
vram_peak_gb, sec_per_image)에 자동 기록되므로 bench 문서에 손으로 옮기지 않는다.bench/results.md 상세): 단순 프롬프트("an apple" 수준)에서는 모델별 방언 재표현이 출력을 거의 바꾸지 않는다 — 어려운 출력은 대부분 프롬프트 문제가 아니라 모델 능력 한계. 수량/공간/속성 결합 같은 복합 프롬프트에서도 방언으로 실제 개선된 사례는 flux2-klein-4b의 수량 정확도 하나뿐이었고, 나머지 실패(sd35-medium의 좌우 반전 고정, zimage-turbo의 개수 오류, pixart-sigma의 속성 색 전이)는 조건과 무관하게 동일하게 재현돼 능력 한계로 판단. lumina2가 복합 프롬프트 전 축(수량/공간/속성)에서 가장 안정적 — ②에서 후보 압축 시 우선 고려.bench/results.md 참고.enable_model_cpu_offload()(configs/models/flux2-klein-4b-nf4.yaml) 조합으로 16GB 진입에 성공(전체 offload만 쓰는 것보다 VRAM/속도 둘 다 더 나음). 품질 저하는 경미(음영 그라디언트 다소 밋밋, 윤곽선 살짝 거칠어짐 — 구조적 결함 없음). "text encoder만 offload" 방식은 이 파이프라인 구조에서 실질적 절감 효과가 없어 폐기. 결과적으로 lumina2+pixart-sigma 2모델 체제로의 축소는 발동하지 않음 — flux2-klein-4b는 NF4 양자화 조건으로 후보 유지. 상세는 bench/results.md 참고.두 축만 본다: 프롬프트 충실도, 스타일 반영도. (화질/미감/지식 계열 메트릭은 지금 우선순위 아님.)
claude-metric.md 참고(README 통합 후 삭제됨).src/scoring.py)src/score.py(CLIP 프록시, review_app.py가 아직 씀)와 별도로, 실제 VQAScore/CSD 모델을
쓰는 1차 구현. python -m src.scoring --dir <PNG 디렉토리> --out <csv 경로> --components <조합>으로
배치 채점 → <csv 경로> + 같은 이름의 .md 요약 생성. --components는 vqascore,cv,csd 중
조합(csd는 --ref-manifest로 configs/ref_sets/<preset>.yaml 필요) — vqascore/cv 패스와 csd
패스를 분리해서, csd는 정식 ref_set 수집 전엔 건너뛰고 나중에 그 패스만 재실행할 수 있다.
t2i-score (T2I 생성 env와 분리, 동시 로드 안 함 — envs/README.md 참고).t2v_metrics 패키지, clip-flant5-xl. 가중치는 HF_HOME(기본 ~/.cache/huggingface)에
자동 다운로드됨. VRAM: 3090에서 측정 필요, 아직 미측정.CSD/ 서브패키지를 vendor/CSD로 vendoring함(pip 패키지 없음) — 실행 시 PYTHONPATH=vendor
필요. 체크포인트(ViT-L)는 저자 공식 HF 미러 tomg-group-umd/CSD-ViT-L에서
받아 weights/scoring/csd_vit-l.pth에 둘 것(weights/는 .gitignore의 *.pth 규칙으로
자동 제외됨). 저자가 리포 상단에 논문 수치와의 미세한 불일치 가능성을 disclaimer로 밝혀뒀지만
provisional 용도로는 문제없음. 2026-07-20 [email protected] t2i-score env에서 실제
체크포인트 로드+forward 검증 완료 — state dict 키에 module. 접두사가 있어
CSD.utils.convert_state_dict로 벗겨야 함(벗기지 않으면 strict=False가 조용히 0개 키
매치로 통과해 랜덤 초기화 상태로 채점하는 버그였음, src/scoring.py::load_csd_model에서 수정).
validate_ref_set.py --provisional도 파일럿 이미지 3장으로 실측 검증(mean=0.6175,
std=0.0481, configs/ref_sets/_smoke_pilot.yaml). ref_set 정식 검증/수집은
scripts/validate_ref_set.py + bench/style-presets-v2.md의 "5. CSD ref_set 수집 기준"
참고. VRAM: 실측 ~1.6GB(단일 이미지 forward 기준).pilot-complex3-report.md
축별 판정표 기준)으로 로컬 검증함 — 값이 0.77scoring.py에서 완전히 분리된 별도 스크립트 scripts/judge.py —
로컬 VLM(전용 env, 3090에서 직접 추론)으로 API 키 없이 판정한다. 예전에 있던
Anthropic API 기반 score_image_vlm은 제거됨. 2026-07-28부터 기본 judge는
InternVL3-8B-hf(t2i-judge2 env) — TASK-C 삼각검증(사람 vs Qwen2.5-VL/Gemma-3/InternVL3)
결과 사람 채점과의 κ가 셋 중 최고(0.61)라 채택. Qwen2.5-VL-7B-Instruct는 t2i-judge env로
교차검증용으로 남아있다(아래 스모크 테스트는 Qwen 기준 기록). bench_v1의
counting/spatial/attribute 축별로 pass/fail을 구조화 JSON으로 받는다. 실행 순서는
docs/eval_runbook.md 참고. t2i-judge env 구성 시 qwen-vl-utils가 import 시점에
요구하는 torchvision이 설치 목록에서 빠져 있었음 — envs/README.md 참고해 추가로 설치할 것.
스모크 테스트 완료(2026-07-20, 3090 서버): --smoke-map tests/judge_smoke_map.yaml PASS
없이 실행 완료, vram_peak=15.78GB. 단, 결과는 정확도 이슈를 드러냄 — 알려진 실패 파일럿
3장 중 2장(v207 spatial 좌우반전, v205 attribute 색 전이)에서 judge가 pass를 냄(false
positive). v205는 rationale 자체가 "다리도 파란색"이라고 결함을 인지하고도 verdict는
pass로 낸 경우 — 판정 로직(프롬프트/파싱)이 아니라 모델의 spatial-reasoning/fine-grained
attribute 판단 자체가 약한 것으로 보임. counting 축은 성공/실패 양쪽 다 정확히 잡음.
본 실험 결과 해석 시 judge의 spatial/attribute 축 판정은 액면 그대로 신뢰하지 말고
이미지 직접 확인으로 교차검증할 것 — 별도 개선 트랙 필요(프롬프트 튜닝 또는 더 큰 모델).scripts/merge_results.py — pass1(vqascore/cv) + csd + judge CSV를
run×item_id 기준으로 합쳐 harmonic 집계 최종 CSV + 모델별 컴포넌트 평균/모델×축 pass율
리포트를 만든다. csd가 없어도(정식 ref_set 미수집) 나머지 컴포넌트만으로 동작한다.scripts/smoke_test_scoring.py — 정합 성공 3장(lumina2, pilot-complex3-report.md
판정상 3축 모두 성공) vs 실패 3장(sd35-medium 공간 반전 / zimage-turbo 수량 오류 / pixart-sigma
속성 색 전이)에서 vqascore(성공군) > vqascore(실패군)을 assert. 3090의 t2i-score env에서
실행해야 함 — GPU 없는 개발 샌드박스에서는 미실행. 삽화 유형 + 벤치마크 프롬프트셋 정의: 6개 카테고리(사물단독/역사문학/자연과학/생활사회/감정관계/개념은유) × 난이도(easy16/medium16/hard8) × 축(counting/spatial/attribute)으로 40개 벤치마크 프롬프트셋(v1) 확정 → configs/benchmarks/bench_v1.yaml. 이후 모든 비교는 이 셋 기준으로 고정.
스타일 프리셋 확정: 12개 → 4개(edu-flat-v2/playful-soft/storybook-scene/observational) + 보류 1개(mono-minimal)로 통합. 설계 근거·시각 언어·leakage 방지 authoring rules(R1~R9): bench/style-presets-v2.md. 구 12개 프리셋 yaml은 configs/experiments/archive/presets-v1/로 보존(과거 실험 노트가 참조). R9 스모크 테스트 완료(2026-07-19): lumina2 + r9-smoke3(apple/cat/book)로 4개 전부 생성·육안 확인 — leakage 없음 확인되어 4개 전부 status: validated로 전환. observational/storybook-scene은 교육용치고 스타일이 과하게 고퀄리티/복잡하다는 별도 지적이 있었으나 leakage와 무관한 이슈라 일단 본 실험에 포함하고 채점 결과로 판단하기로 함 — 상세는 bench/results.md.
rewriter 1차 구현 + 검증 하네스: src/rewriter(rewrite(prompt_ko, opts) -> {prompt_en, meta}, provider는 opts.llm_fn으로 교체 가능, lang="es"는 인터페이스만 두고 NotImplementedError), scripts/verify_rewriter.py(과목별 한국어 샘플 20개 → 수량/스타일오염/길이 자동 체크 → bench/rewriter-verification-report.md). 자동 체크 실패 시 위반 사유를 피드백으로 넣어 최대 1회 재생성(meta["retried"]에 기록). 기본 provider/모델은 OpenAI gpt-5(src/rewriter/providers.py::call_openai, .env의 OPENAI_API_KEY 사용). tests/에 유닛 테스트 21개 통과. 실행 완료(2026-07-19 재검증): python -m scripts.verify_rewriter 결과 20/20 실제 통과 — 빈 출력을 PASS로 잘못 기록하던 버그(#18) 수정 후 리포트 재생성 확인. 스페인어는 다음 단계.
채점 모듈 1차 구현: src/scoring.py(score_image(image, prompt, components, ref_set=None) → {vqascore?, custom_cv?, csd?}). VLM-as-judge는 scripts/judge.py로 분리(로컬 Qwen2.5-VL). 상세는 아래 "채점 모듈" 절. custom_cv(OpenCV, 모델 불필요)와 배치 CSV/마크다운 생성은 저장소의 실제 파일럿 PNG로 로컬 검증 완료. VQAScore 스모크테스트 완료(2026-07-19, 3090 서버): python scripts/smoke_test_scoring.py PASS — success_mean=0.9133 > failure_mean=0.6767, vram_peak=6.06GB(clip-flant5-xl 로드 기준, T2I 생성 모델과 동시 로드 안 함). t2i-score env 구성 시 t2v-metrics==3.0 자체 패키징 문제(무관한 VLM 백엔드를 import 시점에 전부 끌어옴) 우회가 필요했음 — envs/README.md의 "t2v-metrics 3.0 패키징 문제" 절과 envs/fix_t2v_metrics.sh 참고. CSD도 2026-07-20 실측 검증 완료(체크포인트 로드+forward+validate_ref_set.py --provisional 전체 경로, 위 "채점 모듈" 절 참고).
golden set 확보: 최초 수집분은 벤치마크 대상 12개 run(v231~v242) 이미지에서 골라 자체 참조(self-reference) 오염 발견 → 폐기(refs/_old_self_ref_backup/에 보존, 스코어링엔 미사용). 프론티어 모델(Imagen-4)로 4개 프리셋 독립 재생성(edu-flat-v2 15장/observational 10장/playful-soft 10장/storybook-scene 10장, bench_v1 40개 키워드와 주제 미중복) 후 전량 교체. validate_ref_set.py 4개 프리셋 전부 status: validated(2026-07-20). storybook-scene은 세이프티 필터로 아동 피사체가 전혀 생성되지 않아 성인/비인물 장면 위주로 구성됨 — 아동 대상 스타일 정합성은 추후 재검증 필요.
기존 모델 후보군 실측 비교: 벤치마크 프롬프트셋(bench_v1, 40개) × 확정 스타일 프리셋 4개(edu-flat-v2/observational/playful-soft/storybook-scene) × 3개 후보 모델(lumina2/pixart-sigma/flux2-klein-4b-nf4) = 12개 run(480장) 생성 후 채점 완료(2026-07-20, bench/scores/merged.md). csd 포함 4개 컴포넌트(vqascore/custom_cv/csd/judge_pass_rate) 전부로 harmonic 계산 완료 — flux2-klein-4b-nf4(0.653) > lumina2(0.6303) > pixart-sigma(0.5804).
| model | vqascore | custom_cv | csd | judge_pass_rate | harmonic |
|---|---|---|---|---|---|
| flux2-klein-4b-nf4 | 0.837 | 0.756 | 0.480 | 0.925 | 0.653 |
| lumina2 | 0.840 | 0.739 | 0.443 | 0.944 | 0.630 |
| pixart-sigma | 0.805 | 0.740 | 0.429 | 0.810 | 0.580 |
judge 축별 pass율: pixart-sigma가 counting에서 66%(21/32)로 세 모델 중 유독 낮음(lumina2 94%, flux2-klein 81%) — 방언 파일럿에서 이미 나온 "lumina2가 복합 프롬프트 전 축에서 가장 안정적" 결론과 일치. spatial/attribute는 세 모델 다 80~100%대지만, judge 자체의 spatial/attribute 판정 정확도가 파일럿에서 낮게 나온 바 있어(위 "채점 모듈" 절) 액면 그대로 신뢰하지 않고 이미지 직접 확인이 필요.
lecture24 baseline 확정: 실제 교과서 이미지 기반 완성 프롬프트 24개(vlm-prompts.json, 8카테고리×3 VLM 소스)로 3모델(pixart-sigma/flux2-klein-4b-nf4/qwen-image) 생성+채점 완료(v243v245). 2026-07-24부터 이 테스트를 프로젝트 Baseline으로 고정 — 앞으로 프롬프트/모델/채점 방식 변경은 이 baseline 대비 개선 여부로 판단한다. 상세·리포트 링크는 25장) 보강이 다음 항목.bench/results.md의 "Baseline: lecture24" 절. csd_target은 카테고리당 참조 1장뿐인 provisional 신호라 정식 golden set(카테고리당 15
CSD golden set 보강(lecture24 8카테고리): refs/lecture24/<카테고리>/에 있던 후보 이미지(카테고리당 15~24장, 총 158장)를 scripts/validate_ref_set.py로 검증(8개 전부 validated, outlier 없음, 매니페스트 configs/ref_sets/*.yaml). 카테고리마다 다른 ref_set을 써야 해서 src/scoring.py --components csd(단일 ref_set 전제) 대신 다중참조 평균 채점 전용 scripts/score_csd_golden.py를 새로 작성, 기존 csd_target 채점이 있던 18개 run·420장을 재채점. 상관관계는 강하지만(Pearson r=0.83) 절대값은 80% 이미지에서 하락하고 카테고리별 방향도 갈린다 — 상세는 bench/results.md의 "lecture24 CSD golden set 보강" 절과 reports/csd-golden-set-lecture24/index.html.
3단계 병행 개선 루프 진입: 채점 결과가 가리키는 병목에 따라 프롬프트/모델/채점 중 우선순위를 정해 반복 개선. (파인튜닝·증류는 이 루프에서 결과가 계속 부족할 때만 후순위로 검토.) 위 1차 비교 결과대로면 pixart-sigma의 counting 약점이 우선 조사 대상 — judge 오탐인지 실제 모델 한계인지 이미지 직접 확인 필요.
프롬프트 리라이팅 효과의 counting/attribute-binding 카테고리 편중 검증(TASK-I): 파트 1(재사용
분석)에서 promptenhancer_cn의 VQAScore 개선이 structural(counting/attribute-binding) 카테고리에
유의에 가깝게 몰림(p=0.078)을 보고, 파트 2(short/medium/long 길이 사다리, 신규 생성 v263)로 순수
길이 효과를 분리 검증. 결과는 가설과 반대: 길이가 늘수록 VQAScore/csd_target이 오히려 유의하게
오름(rho +0.41/+0.34, bench/results.md TASK-I 절) — 단 medium→long 구간에서만 유의해 "길이"보다
"제약 디테일 보존"이 실제 원인일 가능성. "길수록 counting이 나빠진다"는 가설은 기각.
conda activate t2i-pixart
python -m src.generate --model pixart-sigma --exp coloring-book
streamlit run src/review_app.py
configs/
models/ 모델 1개 = 파일 1개 (repo, adapter, env, dtype, steps, quant)
experiments/ 스타일 1개 = 파일 1개 (style/negative prompt, seed, 참조할 키워드셋)
archive/presets-v1/ 폐기된 구 프리셋 — 과거 실험 노트가 참조하므로 보존만
keywords/ 고정 벤치마크 키워드셋 — 모델 비교의 기준이므로 함부로 안 바꾼다
benchmarks/ 3단계 파이프라인 전체용 rubric 프롬프트셋(v1, 40개) — bench_v1.yaml
vlm-prompts.json — 실제 교과서 이미지를 VLM으로 역추출한 완성 프롬프트 24개(8카테고리×3소스, "lecture24").
2026-07-24부터 프로젝트 Baseline으로 고정, bench_v1처럼 함부로 편집하지 않는다. 상세는 bench/results.md.
src/
generate.py 모델 × 실험 조합 하나를 생성. 공통 엔트리포인트.
adapters/ 모델별 pipeline 로딩. lazy import (env가 다르므로 필수).
review_app.py 브라우징/평가/비교
image-prompts/
v001_pixart-sigma/
v001_pixart-sigma.md frontmatter = single source of truth
images/
docs/
NextJob.md 다 쓴 작업 계획/진행 메모 — 백업용, 더 이상 갱신 안 함
envs/ conda env 규칙 + 성공한 pip freeze 스냅샷
bench/ 결론과 삽질 메모
reports/ 생성된 리포트(md/html) — bench/reports/였던 것도 여기로 통합
scripts/
sweeps/ 현재 쓰는 스윕/빌드 스크립트
archive/ 끝난 스윕(sweep.sh~9_2.sh) — 과거 기록 보존용, 재실행 대상 아님
logs/ 현재 실행 로그
archive/ 끝난 스윕(sweep*)의 summary.tsv — 과거 기록 보존용
모델(configs/models) × 스타일(configs/experiments) × 키워드셋(configs/keywords)
버전 번호(v001...)는 전역 증가하고, 디렉토리명에 모델명이 붙는다. 어떤 조합이었는지는 노트 frontmatter의 model/experiment/keyword_set에 남는다.
https://docs.google.com/presentation/d/1CKLPUB_i5icXxrAOilvpawpoHU1EJnlE9ZzILbHZjQ8
15분 발표 준비 + Q&A 디스커션 별도 진행
경량화 + 영상 생ㅇ성하는 기존 모델들을 교육 컨텐츠 용으로 쓸만한 영상 (스타일, 품질 동시에 잡기)
기존 모델로 유아용 컨텐츠로 만들어서 한번 보고? 안될거같으면 파인튜닝으로 ㄱㄱ
이거를 경량화 하는게 주요 목적
서베이를 잘 하자
컴프레션?
영상 스타일?
프롬프트 vs 파인튜닝
Few shot adaptation 기반으로 해야할 것.
우선 기존에 걍 모델이 어떻게 다른지 비교? 어디까지 되는지?
컴프레션? 디퓨전에서 quantazation / 일반 뉴럴넷이랑 또 다름
여러 방향으로 접근 가능
파라미터 프루닝이나 distill, … 등등
다음주까진 컴프레션 논문살펴보기
T2I 결과 나오는거 확인하는거 위주로
컴프레션도 적당히 공부해보기
논문을 보는거 보다
교육용 컨텐츠 -> output 가져와야 함
어떻게 비교 평가 할 것인지?
특히 교육용 컨텐츠 T2I라서
일단 제네릭한 이미지 생성에서도 메트릭 찾아보고
비교를 해야함
어떻게 평가할 지 고민
아키텍쳐는 가볍게, 논문이나 프로젝트 페이지 생성 결과를 가져와서 비교
PixArt랑 FLUX만 보면 되는지?
일단 다른거도 비교 추가
7/22 : Task 1: 수업용 프롬프트 20~30개 제작 + 2~3개 모델 결과 분석 + Prompt Rewriting 논문 1~2개
Ideogram이 텍스트 잘 만듬
- json형식으로 되게 explicit하게 넘겨주던데 이런 방법론
텍스트 어떻게 잘 넣음?
그래프 그리기는 또 다른데 어떻게 함?
일단 계획대로 ㄱㄱ
말풍선 내부 user controlbility 확인
그림과 consistency 한지
향상시킬 수 있는 방법이 있는지?
라이센스 이슈 확인, 다른 모델에서 말풍선 어떻게 할건지 파이프라인
quantiztion도 좀 깨지는게 있었는데
metric에 관한 citation?
이런이런게 있다 (인용을 하는 습관을 들이자)
citation을 매 페이지
기존 연구에 비하면 metric은 이런걸 쓰더라, 퍼블릭 데이터는 없는지, 왜 이렇게 변형했는지 등등
quantization 논문 좀 더 필요한거 있으면 읽어보면 되고
다음주에는
유해 컨텐츠 필터링 ㄱㄱ