toolsmith

업로드 없음 · 전부 브라우저에서 처리

배경 제거는 실제로 어떻게 동작하나 — 그리고 언제 실패하나

무언가를 오려 내는 것이 아닙니다. 모델은 화소 하나하나에 대해 '이것이 주인공에 얼마나 속하는가'를 추측합니다. 그것을 알고 나면 지금까지 본 이상한 결과가 전부 설명됩니다.

수정

나오는 것은 잘라 낸 그림이 아니라 마스크입니다

모델은 사진을 보고 같은 모양의 흑백 그림 한 장을 내놓습니다. 주인공이라고 확신하는 곳은 희고, 배경이라고 확신하는 곳은 검고, 헷갈리는 곳은 그 사이의 회색입니다. 그 흑백 그림이 그대로 결과의 투명도가 됩니다.

그러니 윤곽선도 없고 경로도 없으며 무엇을 따라 그린 것도 아닙니다. 돌아오는 것은 확신의 정도이고, 그것이 투명도로 그려진 것뿐입니다. 머리카락·털·흔들린 자국·유리·그림자는 그 중간에 앉습니다 — 가장자리가 흐릿한 것은 모델이 서툴러서가 아니라 정직해서입니다.

모델은 '눈에 띄는 하나'를 찾습니다

여기서 도는 U²-Net은 돌출 객체 탐지 모델입니다. 학습받은 질문이 하나뿐입니다 — 이 그림에서 두드러지는 것은 무엇인가. 적당히 단순한 배경 앞에 놓인 피사체 하나가 딱 이 모델의 자리입니다.

답이 하나가 아닌 그림을 주면 거부하지 않습니다. 대신 약하고 어중간한 마스크를 전체에 깔아 놓습니다. 사진 24장을 넣고 알파값을 직접 읽어 봤는데, 주인공이 하나가 아닌 열 장은 반투명한 얼룩이거나 아무것도 아니었습니다. 숲을 위에서 찍은 항공사진은 확신하는 화소가 0.0% 였는데도 형식상으로는 '성공' 했습니다.

조용히 실패하는 쪽이라서, 지금은 도구가 마스크를 직접 재서 빈 PNG를 건네는 대신 말로 알려 줍니다.

  • 됩니다: 인물 한 명, 탁자 위의 물건, 반려동물, 신발, 자전거, 하늘을 배경으로 한 산.
  • 안 됩니다: 군중, 교통 정체, 튤립밭, 책장, 산호초, 위에서 본 숲.
  • 중간: 비슷한 것이 여럿인 그림 — 일부만, 그것도 반투명하게 나올 수 있습니다.

가장자리가 무뎌지는 이유, 큰 사진일수록 더 그런 이유

모델은 실제 크기와 무관하게 사진을 320×320으로 봅니다. 마스크도 320×320으로 나옵니다. 그것을 씌우려면 원본 크기로 다시 늘려야 합니다. 4000픽셀짜리 사진이라면 마스크 화소 하나가 실제 화소 열댓 개를 덮게 되고, 그것이 윤곽선에서 보입니다.

더 좋은 사진을 고른다고 해결되지 않습니다 — 방법 자체의 모양입니다. 결과를 작게 쓸 것이라면 문제가 안 되고, 크게 쓸 것이라면 문제가 됩니다.

받는 용량과 품질을 맞바꾸는 자리도 있습니다. 빠른 모델은 4.4MB, 정밀한 모델은 168MB로 40배 차이인데 같은 사진에서 결과가 눈에 띄게 다릅니다. 작은 쪽은 배경의 옅은 유령이 남고, 큰 쪽은 머리카락과 작은 소품까지 깨끗하게 떨어집니다.

모델이 고르면 안 되는 때

사진에 물건이 여럿이거나, 원하는 것이 화면의 주인공이 아니라면 모델 품질을 올려도 소용이 없습니다. 애초에 어느 것을 말하는지 물어본 적이 없기 때문입니다.

그때는 도구가 다릅니다. 클릭 컷아웃은 무거운 인코더로 그림을 한 번 훑어 둔 다음, 클릭마다 거의 즉시 답합니다. CPU에서 인코더 6.0초, 클릭 0.10초로 실측했고, 그래서 '기다렸다 보는' 화면이 아니라 '누르고 바로 보는' 화면이 될 수 있었습니다. 점 하나는 대개 물체의 일부를 잡고, 두 번째 점이 무엇까지가 그 물체인지 알려 줍니다.

PNG로 저장하지 않으면 투명이 사라집니다

JPG에는 투명도 자리가 아예 없습니다. 누끼를 JPG로 저장하면 투명했던 곳이 흰색이나 검은색으로 채워져 돌아옵니다. 다 만든 뒤에 이걸 알고 놀라는 경우가 많습니다. PNG와 WebP는 투명을 담으니 그쪽으로 저장하세요.

하나만 더 짚습니다. 배경 제거에 넣는 사진은 대개 사람이 찍힌 사진입니다. 이 처리는 브라우저 탭 안에서 돌기 때문에 사진이 어디로도 전송되지 않습니다 — 다만 시작하려면 모델을 먼저 받아야 하고, 그 용량은 누르기 전에 알려 드립니다.

업로드 없이 지금 해 보기

주인공을 못 찾았다고 나옵니다. 왜인가요?

마스크가 어딘가에서 강하게 나온 게 아니라 전체적으로 약하게 나왔기 때문입니다. 확신하는 화소와 어중간한 화소를 따로 세는데, 확신하는 것이 거의 없거나 어중간한 것에 크게 밀리면 그 사진에는 찾을 주인공이 하나가 아니라는 뜻입니다.

머리카락 가장자리를 깨끗하게 딸 수 있나요?

어느 정도까지입니다. 정밀 모델이 머리카락에서 훨씬 낫습니다. 다만 마스크는 320×320으로 계산해 늘려 쓰기 때문에, 고해상도 사진에서는 가장자리가 가늘어지는 데 한계가 있습니다. 손으로 딴 마스크와 같아지지는 않습니다.

엉뚱한 물체를 지웠습니다. 고를 수 있나요?

배경 제거로는 안 됩니다. 모델이 두드러지는 것을 고를 뿐 무엇을 원하는지 알 방법이 없습니다. 클릭 컷아웃을 쓰세요 — 원하는 물체를 직접 가리키고, 점을 더해 포함하거나 뺄 수 있습니다.

읽어 둘 만한 글