마스코트 광고를 만들다 학습이 졌습니다: 비-얼굴 대상 4방향 실측
2026-08-13 정정. 이 글을 올린 뒤 같은 데이터에 대응표본 검정을 돌렸습니다. 아래 표의 숫자는 그대로지만 방법끼리의 순위는 통계적으로 서지 않습니다. 여덟 개 프롬프트(n=8)에서 유의한 것은 네 방법이 전부 베이스라인을 이긴다는 것과 학습 강도 1.0이 0.7을 이긴다는 것뿐이고, Bernini와 학습 LoRA의 0.866 대 0.839 차이는 p=0.28입니다. 따라서 “Bernini가 학습을 앞섰다”는 문장은 근거가 부족하며, 제목의 “학습이 졌다”도 숫자로는 뒷받침되지 않습니다. 다만 최종 영상을 zero-shot으로 만든 판단 자체는 유지합니다. 그 판단의 근거는 점수가 아니라 아래 프레임에서 직접 보이는 배경 붕괴였고, 그건 검정이 필요한 주장이 아니기 때문입니다. 이 사고에서 배운 것은 하나입니다. 평균 차이를 검정 없이 순위로 쓰지 말 것. 자세한 내용은 다음 편에서 다루겠습니다.
브랜드 마스코트를 여러 영상에 반복 등장시켜야 하는 분께 이 글이 드리는 결론은 두 가지입니다. 첫째, 학습을 할지 말지보다 어떤 zero-shot 방법을 고르느냐가 결과를 더 크게 가릅니다. 둘째, 주체가 얼마나 닮았는지만 재는 지표를 보고 방법을 고르면 십중팔구 틀립니다. 실제로 저희가 그 함정에 빠질 뻔했고, 최종 영상을 바꾸게 만든 것은 숫자가 아니라 프레임이었습니다.
먼저 결과물입니다
가상 브랜드 NUBO COFFEE의 마스코트 광고 45초입니다. 카페 카운터에서 시작해 사무실 책상, 로스터리, 쇼윈도, 주방, 컵 컨베이어를 지나 스튜디오 마감샷으로 끝납니다. 8개 샷 전부에서 커피콩 로봇이 같은 비율, 같은 시안색 LED 눈, 같은 손발 형태를 유지합니다.
최종 8개 샷. 장소와 조명이 매번 바뀌는데도 마스코트의 조형이 유지됩니다.
이 마스코트는 완전 합성 캐릭터이고, 아래 여섯 장의 스틸이 모든 방법에 동일하게 주어진 유일한 입력입니다.
이 여섯 장이 zero-shot 레퍼런스로 들어갑니다. 아래 모든 결과는 이 조형과 비교해 판단하시면 됩니다.
학습에 실제로 쓴 데이터도 함께 공개합니다. 아래는 학습셋 12개 클립에서 한 프레임씩 뽑은 것입니다.
400스텝 학습에 들어간 클립 전부입니다. 지금 이 그림에서 배경을 눈여겨봐 주십시오. 열두 개가 전부 같은 베이지색 스튜디오 배경입니다.
이 광고는 학습된 모델이 만든 것이 아닙니다
원래 계획은 정반대였습니다. 지난 편에서 얼굴로 확인한 것은 학습 없이 레퍼런스만 주는 방식이 학습보다 나았다는 결과였고, 저희는 그 이유를 얼굴 전용 사전지식으로 해석했습니다. 그렇다면 얼굴이 아닌 대상, 즉 커피콩 모양의 마스코트에서는 그 사전지식이 힘을 못 쓸 테니 학습이 이겨야 맞습니다. 이 가설을 확인하려고 마스코트 클립 12개를 만들어 400스텝 학습했고, 같은 8개 프롬프트에 대해 네 가지 방법을 나란히 돌렸습니다.
그리고 같은 샷을 나란히 놓는 순간 계획이 무너졌습니다.
같은 프롬프트, 같은 시드입니다. 프롬프트는 “쇼윈도 선반에서 손을 흔든다, 유리 너머 도시 거리 보케, 저녁”. 조건을 아무것도 주지 않은 학습 전 상태는 애초에 다른 로봇을 그려냅니다. 그리고 학습된 모델만 장면을 잃었습니다.
먼저 학습 전 상태를 보시면 이 작업이 왜 필요한지가 분명합니다. 조건 없이 생성하면 커피콩은커녕 흰색 안드로이드가 나옵니다. 주체 충실도 0.461은 그런 상태의 점수입니다. 네 방법 모두 이 지점에서 출발했습니다.
학습된 어댑터는 마스코트를 훌륭하게 지켜냈습니다. 그런데 요청한 장면이 통째로 사라지고 학습 데이터에서 온 것으로 보이는 베이지색 벽 텍스처가 그 자리를 채웠습니다. 이것은 이 샷만의 사고가 아니라 여덟 샷 전부에서 같은 방식으로 일어났습니다. 카페 카운터도, 로스터리 원두 자루도, 스튜디오 조명도 전부 같은 벽이 됐습니다. 학습 arm으로 조립한 영상을 보시면 문제가 더 분명합니다.
광고로 쓸 수 없는 결과입니다. 마스코트는 완벽하게 일관되지만 여덟 장면이 사실상 한 장면이라 이야기가 진행되지 않습니다. 그래서 최종 영상을 이긴 방법으로 다시 조립했고, 진 쪽은 위처럼 비교 자료로 남겼습니다.
실측
여덟 개의 홀드아웃 프롬프트에 동일한 시드로 네 방법과 무조건 생성 베이스라인을 돌렸습니다. 얼굴이 아니므로 얼굴 임베딩 대신 CLIP 이미지 임베딩으로 레퍼런스와의 유사도를 쟀습니다. 최악 프레임은 클립 안에서 주체가 가장 무너진 지점이고, 모션은 프레임 간 변화량으로 정지 화면이 유사도를 부풀리는 것을 걸러내는 안전장치입니다.
| 방법 | 주체 충실도 | 최악 프레임 | 프롬프트 추종 | 모션 |
|---|---|---|---|---|
| 베이스라인 (조건 없음) | 0.461 | 0.410 | 0.381 | 0.025 |
| VACE zero-shot | 0.724 | 0.567 | 0.344 | 0.086 |
| Bernini zero-shot | 0.866 | 0.840 | 0.376 | 0.062 |
| 학습 LoRA (강도 1.0) | 0.839 | 0.760 | 0.350 | 0.079 |
| 학습 LoRA (강도 0.7) | 0.775 | 0.635 | 0.343 | 0.117 |
레퍼런스 여섯 장끼리의 자기 유사도가 0.983이므로 이 값이 도달 가능한 상한입니다.
가설은 절반만 맞았습니다. 학습은 같은 계열의 zero-shot인 VACE를 0.839 대 0.724로 확실히 이겼습니다. 얼굴에서 VACE가 학습을 이겼던 것을 생각하면 순위가 뒤집힌 셈이고, 여기까지는 예상대로입니다. 그런데 다른 zero-shot인 Bernini는 0.866으로 학습을 앞섰고 프롬프트 추종까지 0.376 대 0.350으로 더 좋았습니다. 다시 말해 대상이 얼굴이냐 아니냐보다 어느 zero-shot 방법을 쓰느냐가 결과를 더 크게 결정했습니다.
그러니 방법 이름 없이 “요즘은 학습 없이 레퍼런스만 줘도 잘 나온다”고 하거나 반대로 “그래도 학습이 낫다”고 하는 말은 아직 검증된 게 아닙니다. 같은 베이스 모델 위에서도 어느 zero-shot 구현이냐에 따라 주체 충실도가 0.724와 0.866으로 갈립니다.
지표가 못 본 것
순위보다 오래 남을 교훈은 측정 쪽에 있었습니다.
표만 보면 학습 LoRA 0.839는 VACE 0.724를 크게 이긴 좋은 결과입니다. 그런데 실제 프레임에서 학습본은 여덟 장면을 전부 잃었고 VACE는 장면을 살렸습니다. 주체 충실도 지표는 구조적으로 이 실패를 볼 수 없습니다. 주체만 재기 때문입니다. 프롬프트 추종 지표는 0.350 대 0.344로 아주 약한 신호만 줬는데, 짧은 프롬프트에서 주체 단어가 맞으면 배경이 무너져도 점수가 크게 떨어지지 않기 때문입니다.
원인은 앞에서 보신 학습셋 그림에 그대로 나와 있습니다. 열두 개 클립이 전부 같은 베이지색 스튜디오 배경이라, 어댑터 입장에서는 “이 마스코트”와 “이 배경”이 구분되지 않는 하나의 덩어리였습니다. 클립 12개짜리 소규모 학습에서 어댑터는 마스코트만 외운 게 아니라 그 마스코트가 찍힌 배경까지 함께 외웠습니다. 학습 데이터를 다양한 배경으로 찍었다면 달랐을 가능성이 큽니다만, 그건 아직 재보지 않은 이야기입니다. 강도를 0.7로 낮추면 모션이 0.117로 살아나지만 주체 충실도가 0.775로, 최악 프레임은 0.635까지 내려갑니다. 배경을 되찾는 대신 마스코트를 잃는 교환이라 어느 지점도 광고로 쓸 만하지 않았습니다.
그래서 앞으로 레퍼런스 조건 방법을 비교할 때는 주체 충실도 단독으로 승자를 뽑지 않으려 합니다. 최소한 배경과 장면 구성을 따로 재는 축이 하나 더 필요하고, 그것이 없으면 배경 붕괴형 과적합이 1위로 올라옵니다.
그래도 학습이 남는 자리
두 번의 실험에서 학습이 두 번 졌습니다. 그렇다고 학습을 접어야 한다는 결론은 아닙니다. 다만 남는 근거가 전보다 훨씬 좁아졌습니다.
가장 확실한 자리는 레퍼런스가 부족할 때입니다. 얼굴 실험에서 레퍼런스를 네 장에서 한 장으로 줄이자 zero-shot의 주체 충실도가 0.567에서 0.417로 떨어져 학습된 어댑터 0.487 아래로 내려갔고, 한 인물은 0.199까지 무너졌습니다. zero-shot의 우위는 무조건적인 게 아니라 레퍼런스를 여러 장 확보한 조건에서만 성립합니다.
그다음은 캠페인 규모의 경제성입니다. 학습된 어댑터는 추론할 때 레퍼런스 이미지가 필요 없습니다. 클립을 수백 개 찍는 파이프라인이라면 매 호출마다 레퍼런스를 붙이고 관리하는 오버헤드가 통째로 사라지고, 스타일이나 모션 LoRA와 겹쳐 쓰기도 자유롭습니다.
마지막으로 기존 zero-shot이 아예 재현하지 못하는 속성을 묶어야 하는 경우가 있습니다. 특정한 재질감이나 캐릭터 고유의 동작처럼 레퍼런스 몇 장으로 설명되지 않는 속성들입니다. 다만 이 축은 아직 재보지 않았으니 측정 전에는 주장하지 않겠습니다.
ThakiCloud 관점
이번 두 편의 광고에서 실증한 것은 특정 방법의 우열이 아니라, 방법을 고를 수 있는 위치에 서는 일 자체입니다. 마스코트 클립 생성, 12클립 학습, 네 가지 방법의 동일 조건 비교, 45초 조립까지 전부 사내 GPU에서 닫혔고 브랜드 자산인 캐릭터가 외부 API로 나간 적이 없습니다. 학습이 필요한 국면은 Maxis가, 생성과 서빙은 Metis가 맡는 구조에서 고객은 자기 데이터를 쥔 채로 방법을 갈아탈 수 있습니다.
덧붙이면 이번에 이긴 방법은 학습이 아니었고, 저희는 그 결과를 고치지 않고 그대로 실었습니다. 데이터 주권을 지키는 파이프라인의 값어치는 특정 방법이 이긴다는 데 있지 않습니다. 어느 방법이 이기는지를 자기 데이터로 직접 재볼 수 있다는 데 있습니다. 재봤더니 예상이 틀렸고, 그래서 최종 영상을 바꿨습니다.