AI 인테리어 디자인에서 가장 어려운 부분은 AI 자체가 아니다
요약
AI 인테리어 디자인의 한계점은 '새로운 공간 생성'에 그치며, 실제 건축 구조를 유지하며 리디자인하는 것이 어렵습니다. 이 문제를 해결하기 위해 개발된 시스템은 '기본 거부(Default-deny)' 원칙을 적용하여 변경하지 말아야 할 요소를 명시적으로 잠금 처리합니다.
핵심 포인트
- AI 모델은 공간의 구조적 개념이 없어 실제 건축 리디자인에 한계가 있습니다.
- 해결책은 더 나은 모델보다, 보존해야 할 요소(잠금장치)를 구체적으로 지정하는 것입니다.
- 모든 요청에서 변경하지 말아야 할 요소를 자동으로 잠금 처리하여 정확도를 높였습니다.
- 공간 클래스 공유 시 발생하는 오류(가드레일 환각 등)를 방지하기 위해 분류를 세분화해야 합니다.
어떤 이미지 모델에게 '이 거실을 스칸디나비아 스타일로 리디자인 해줘'라고 요청하면 아름다운 스칸디나비아 거실을 얻게 됩니다.
하지만 그것은 당신의 거실이 아닙니다.
창문 위치가 바뀌었고, 방 길이가 길어졌습니다. 건축가가 바닥 중앙에 남겨둔 이상한 하중 지지 기둥도 사라졌습니다. 모델은 당신의 방을 리디자인하지 않았습니다. 단지 같은 장르의 공간인 새로운 방을 생성했을 뿐입니다. 그것은 믿기 어려울 정도로 멋져 보이지만, 아무것도 살 수 없고, 계약자에게 보여줄 수도 없으며, 실제로 적용할 수도 없기 때문에 완전히 쓸모가 없습니다.
저는 지난 몇 달 동안 이 하나의 문제에 대한 앱을 만들었습니다. AI 인테리어 디자인에 대해 쓰인 글 중 거의 아무도 이것에 대해 이야기하지 않기 때문에 제가 배운 것을 공유합니다.
모델이 이렇게 작동하는 이유
이미지-투-이미지 생성(Image-to-image generation)에는 '입력 따르기'와 '프롬프트 따르기' 사이의 다이얼이 있습니다. 이를 입력 쪽으로 돌리면 쿠션만 약간 다른 당신의 방을 얻게 됩니다. 이를 프롬프트 쪽으로 돌리면 당신 것이 아닌 멋진 방을 얻게 됩니다.
'건축은 유지하고 내용물만 변경해 줘'라는 중간 설정은 없습니다. 모델에게는 건축이라는 개념이 없습니다. 오직 픽셀과 텍스트 프롬프트만을 가지고 있습니다.
따라서, 하나의 모델과 하나의 프롬프트, 그리고 강도 슬라이더를 사용하는 순진한 접근 방식은 어느 방향으로 가도 실패하며, 작동하게 만들 수 있는 값은 존재하지 않습니다. 저는 그 버전을 출시했습니다. 사람들은 한 번 시도해 보고 다시 돌아오지 않았는데, 이는 올바른 반응이었습니다.
실제로 효과가 있었던 것: 모델에게 건드리면 안 되는 것을 알려주기
해결책은 더 나은 모델이 아니었습니다. 그것은 사용자가 요청하지 않아도 모든 요청마다 무엇을 변경해서는 안 되는지 구체적으로 지정하는 것이었습니다.
저희 시스템의 리디자인 요청에는 이제 사용자가 무엇을 입력했는지와 관계없이 프롬프트에 자동으로 추가되는 일련의 잠금장치(locks)가 포함되어 있습니다. 대략적으로 말하면, 하나의 잠금장치는 건축 구조를 고정하고, 다른 하나는 이 공간이 어떤 종류인지, 그리고 세 번째는 방의 용도가 무엇인지를 지정합니다.
그 아래의 규칙은 이렇습니다. 사용자가 명시적으로 이름을 언급하지 않는 한 사진 속 모든 것은 잠겨 있습니다. 만약 누군가 "소파를 바꿔줘"라고 말하면, 소파만 잠금이 풀리고 다른 것은 아무것도 잠금 해제되지 않습니다. 아무 말도 하지 않으면 구조적인 요소는 잠금 해제되지 않습니다. 이는 방화벽을 작성하는 방식과 동일한 '기본 거부(Default-deny)' 원칙입니다.
이것은 글로 쓰면 당연하게 들립니다. 저는 여기에 도달하기까지 오랜 시간이 걸렸습니다. 왜냐하면 본능적으로 모델에게 자유를 주고 그것을 잘 사용해 주기를 바라는 경향이 있기 때문입니다. 하지만 그렇지 않습니다. 자유는 창(window)을 잃게 만드는 방법입니다.
제가 저지른 장면 클래스 오류
제가 처음 만든 버전에는 세 가지 장면 클래스가 있었습니다: 실내(interior), 실외(outdoor), 그리고 외부(exterior)였습니다. 정원과 발코니는 "실외" 카테고리를 공유했습니다.
정원에 난 가드레일이 다시 등장하기 시작했습니다.
발코니 잠금 규칙은 "가드레일과 건물 가장자리를 보존하라"고 명시되어 있었는데, 이는 발코니에 있기 때문입니다. 정원은 그렇지 않습니다. 하지만 이들이 클래스를 공유했기 때문에, 정원 프롬프트는 "가드레일을 보존하라"는 지침을 물려받았고, 순종적인 모델은 가드레일을 보존하기 위해 존재하지 않는 가드레일을 만들어냈습니다.
해결책은 그들을 분리하여 각 공간 유형이 실제로 가지고 있는 것들만을 명시하도록 만든 것입니다.
저는 이 교훈이 실내를 넘어 훨씬 더 광범위하게 적용된다고 생각합니다. 일부 구성 요소가 갖지 않은 특징을 언급하는 공유된 추상화는 모델로 하여금 그러한 특징들을 환각(hallucinate)처럼 만들어내게 할 것입니다. 모델은 사용자의 프롬프트를 현실에 대한 설명으로 읽습니다. 만약 프롬프트가 가드레일을 묘사한다면, 지금 그곳에는 가드레일이 존재합니다.
출력 검증 (Validating the output)
잠금 장치는 드리프트(drift)를 줄여줄 뿐, 완전히 없애지는 못합니다. 따라서 생성 후 단계에서 결과물을 원래의 상태와 비교하여 잠겨 있어야 할 요소들을 확인하고, 방이 명확하게 이동한 경우 재시도(retries)를 수행합니다.
여기서 중요한 제약 조건은 시간입니다. 아무도 소파가 나오는지 보려고 3분씩 기다려주지 않습니다. 따라서 재시도는 정해진 시계에 맞춰 실행되며, 시간이 다 되었을 때 검증이 통과되지 않으면 오류 대신 최선의 시도를 얻게 됩니다. 사용자들은 기다리는 것보다 불완전한 결과물을 훨씬 더 쉽게 용서합니다.
이 분야를 시작하려는 사람에게 해주고 싶은 말
- 차별점은 생성(generation)이 아니라 제약 조건(constraint)입니다. 누구나 이미지 모델을 호출할 수 있습니다. 제품의 가치는 사용자가 변경하지 못하도록 막는 부분에 있습니다.
- 기본적으로 잠금(locked) 상태를 유지하세요. 사용자에게 무엇을 변경하고 싶은지 명시하게 하세요. 너무 많이 잠근 경우의 실패 모드는 '아무 일도 일어나지 않음'이라 혼란스럽습니다. 반면, 너무 자유로운 경우의 실패 모드는 '여기는 내 집이 아니다'라 가치가 없습니다.
- 추상적인 개념(abstraction)이 그 구성 요소가 가지지 않은 기능을 설명하도록 절대 두지 마세요. 예시: 유령 난간(phantom railing).
- 품질을 고려하기 전에 벽시계 시간(wall-clock time)을 먼저 계산하세요. 4분이 걸려 완벽한 결과물보다 20초 만에 나오는 좋은 결과물이 더 낫습니다.
이것이 어떻게 끝났는지 보고 싶다면, decorin.ai에서 계정 없이 무료로 사용해 볼 수 있습니다. 연출된 사진이 아닌 실제 방의 사진을 업로드하고, 창문이 원래 위치에 그대로 남아 있는지 확인해 보세요. 그것이 진정한 테스트입니다.
여기 내용 중 이해가 안 되는 부분이 있거나, 같은 문제를 겪었지만 다르게 해결한 방법이 있다면 댓글로 알려주세요. 저는 아직 작업 중이라 제가 틀린 부분을 듣는 것이 듣지 못하는 것보다 훨씬 낫습니다. 이 부분에 대한 질문은 기꺼이 답변해 드리겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기