행인로 개인 작업실

한 단어로만 학습된 세 개의 캐릭터 모델

새 캐릭터 파인튜닝을 시작하기 전에는 늘 8스텝짜리 스모크 테스트부터 돌린다. 본 학습이 몇 시간 걸리니, 그 전에 파이프라인이 처음부터 끝까지 도는지만 몇 분 안에 확인하는 절차다. 이번에도 스모크는 무사히 통과했다. 그런데 로그 한 줄이 눈에 걸렸다 — “N개 이미지에서 캡션 파일을 찾지 못했습니다.” 학습 스크립트가 캡션 파일의 확장자를 기본값으로 인식하고 있었는데, 그 기본값이 이 프로젝트가 실제로 쓰는 캡션 파일 확장자와 달랐다. 그리고 지금까지 써온 학습 스크립트 어디에도 그걸 명시적으로 지정하는 옵션이 없었다.

에러는 나지 않았다. 조용한 대체 동작이었을 뿐이다 — 캡션 파일을 못 찾으면 학습기는 항상 찾을 수 있는 것, 즉 이미지가 들어 있는 폴더의 이름을 그 폴더 안 모든 이미지의 설명으로 삼는다. 지금까지 이 스크립트들로 만든 캐릭터 모델은 전부, 이미지 옆에 공들여 적어둔 캡션이 아니라 반복되는 한 단어로 학습된 것이었다.

내가 이미 확정 지었던 결론 두 개가 틀렸다

이건 단순히 부끄러운 버그로 끝나지 않았다. 이미 확정했다고 적어둔 결론 두 개를 소급해서 무너뜨렸다. 하나는 이전 두 버전 사이의 품질 개선을 캡션에서 특정 서술을 뺀 덕이라고 적어둔 것이었다. 그럴 수가 없다 — 두 버전 모두 캡션이 애초에 읽히지 않았으니까. 그 두 판 사이에 실제로 바뀐 건 학습 데이터셋과, 추가로 학습된 모델 구성요소 하나뿐이고, 남은 후보는 그 둘뿐이다.

다른 하나는 “트리거 단어 혼자서는 정체성을 제대로 불러오지 못하는” 이유를 “캡션이 항상 트리거와 서술을 짝지어 놓아서 모델이 트리거 단어만 단독으로 학습한 적이 없기 때문”이라고 적어둔 것이었다. 이 설명이 성립하려면 캡션이 실제로 읽혔어야 한다. 안 읽혔다. 트리거 단어가 혼자 서지 못한 현상은, 사실상 캡션이 그 트리거 단어 하나였는데도 일어난 일이다. 진짜 원인은 아직 열려 있다.

캡션이 실제로 읽히자 벌어진 일

플래그를 고치고 캡션이 처음으로 학습기에 제대로 들어가자, 같은 방식으로 만든 새 모델에서 두 가지가 뚜렷하게 나타났다. 첫째, 정적인 포즈와 동적인 포즈 양쪽에서 트리거 단어 혼자만으로도 정체성이 제대로 불려왔다 — 앞서 겪은 실패가 재현되지 않았다. 둘째, 딱 한 장의 학습 이미지에만 있던 소품(다른 어떤 이미지에도 없던 물건)을 캡션에 적어뒀더니, 최대 강도에서도 대부분 결과물에 그 소품이 나오지 않았다. 이미지를 잘라내는 대신 그 이미지에만 있는 걸 글로 적어두는 것이 트리거 단어가 가져가는 것에서 그걸 떼어놓는 방법이 됐다.

스모크 테스트는 4분쯤 걸렸다. 같은 깨진 설정으로 본 학습을 끝까지 돌렸다면 4시간 20분을 쓰고도 눈에 띄게 달라지는 건 없었을 것이다. 여기서 배울 건 “로그를 잘 읽자”는 추상적인 교훈이 아니라, 에러 메시지 없는 대체 동작이 파이프라인이 가질 수 있는 가장 위험한 실패 유형이라는 것이다. 아무도 그 한 줄을 눈여겨보지 않는 한, 그 이후의 모든 것 — 심지어 그것에 대한 나 자신의 과거 결론까지 — 이 완전히 정상으로 보인다.