발신: Jacob's Tech Tavern (jacobbartlett@substack.com) 발행일: 2026-07-07 원문 링크: https://blog.jacobstechtavern.com/p/apple-photos-and-face-recognition 이 글은 유료 구독 전용이며, Step #2 도중 "유료 구독자라면"이라는 문구에서 무료 미리보기가 끊깁니다. 아래는 공개된 부분을 직역한 것입니다.
AI 기능은 걸핏하면 꺼내져서 우리 얼굴 앞에 들이밀어진다. 무슨 말인지 다들 알 것이다. 공감하는 척하지만 쓸모없는 고객 서비스 봇들. 소셜 미디어의 자동 게시물 작성. 아무도 요청하지 않은 이메일 요약(그리고 필터링까지!).
종종 우리는 진짜 타깃 고객이 아니다. 그저 주주들에게 자신들의 AI 전략을 설명하기 위한 것일 뿐이다(짜증나긴 하지만, 메타가 20% 정리해고로 하고 있는 일보다는 나은 것 같긴 하다…).
가장 좋은 종류의 AI 기능은 보이지 않는 것이라고 말해도 별로 논란이 되지 않을 것이다. 굳이 생각하지 않아도 조용히 제품을 개선해주는 것 말이다. 추천 알고리즘. 큐레이션. 시맨틱 검색(Semantic Search).
Apple Photos는 좋은 사례 연구다. 미심쩍은 iOS 26 리디자인에 대해서는 하고 싶은 말을 다 해도 좋지만, 이 제품은 근본적으로 탄탄하다. 수십 년에 걸친 당신의 삶을 클라우드에 안전하게 보관해준다. 매일 추억의 슬라이드쇼를 큐레이션해준다. 그리고 당신 사진들 속에서 누가 누구인지 알아내는 데 있어서 꽤나 뛰어나다.
"People & Pets"(사람과 반려동물) 기능을 이용하면 얼굴을 탭해서 그 사람이 나온 모든 사진을 볼 수 있다. Apple Photos의 "People & Pets"는 얼굴로 사진을 필터링한다.
안면 인식(Facial Recognition)은 탄탄한 ML 작업 없이는 불가능하다. 수천 장의 이미지에 걸쳐 얼굴 지문(Facial Fingerprint)을 계산하고, 비슷한 이미지들을 가족과 친구들의 라이브러리로 클러스터링(Clustering)하는 작업이 백그라운드에서 모두 이루어진다.
어떤 시스템을 이해하는 가장 좋은 방법은 직접 엉성하게나마 자신만의 버전을 뚝딱 만들어보는 것이다. 그래서 나는 정확히 그렇게 했다.
목차: 샘플 프로젝트(The Sample Project) / Step #1: Vision으로 얼굴 찾기 / Step #2: 임베딩(Embedding) 계산하기 / Step #3: 클러스터링 파이프라인(The Clustering Pipeline) / Step #4: 파이프라인 최적화(Optimising the Pipeline) / 마지막 주문(Last Orders)
The Sample Project
오늘은 뭔가를 디컴파일할 기분이 아니었기 때문에 Apple의 구체적인 구현 방식에 대해서는 말할 수 없지만, 안면 인식 소프트웨어의 개념 자체는 놀라울 정도로 단순한 3단계 파이프라인이다.
- Vision을 통해 각 사진에서 얼굴을 탐지한다.
- ML 모델을 통해 탐지된 각 얼굴을 임베딩(Embedding)으로 변환한다.
- 클러스터링(Clustering) 알고리즘을 통해 비슷한 임베딩들을 사람 단위로 묶는다.
가장 좋은 부분은? 이 모든 게 온디바이스(On-device) 모델로 로컬에서 작동하며, 그것도 꽤나 잘 작동한다는 점이다.
더 깊이 들어갈 수 있도록 샘플 프로젝트도 함께 공유하겠다. 그 과정에서 임베딩에 대해 아주 많은 것을 배우게 될 것이다. 최종적으로 어디에 도달하는지 살짝 스포일러를 하자면, 내 512차원 얼굴 임베딩을 3D 기하학(3D Geometry)으로 투영하는 것이다. 전체 샘플 프로젝트는 내 GitHub 저장소에서 받을 수 있다.
Step #1: Finding Faces with Vision
얼굴 라이브러리를 구축하는 첫 단계는 주어진 이미지에서 어떤 픽셀이 당신에게 흥미로운지를 파악하는 것이다.
나는 모든 픽셀이 아름답다고 생각하지만, 실제로 안면 인식에 도움이 되는 것은 이미지의 극히 일부분뿐이다. 바로 얼굴이다. 사진에는 방대한 양의 정보가 담겨 있지만, 단지 얼굴을 매칭하고 싶은 것이라면 그중 대부분은 노이즈에 불과하다.
우리는 이미지 안에서 실제로 얼굴을 포함하고 있는 좌표를 찾아내야 한다.
Apple의 Vision 프레임워크에는 바로 이를 위한 내장 API가 있다. VNDetectFaceRectanglesRequest에 이미지를 넘겨주면, 각 얼굴을 둘러싼 바운딩 박스(Bounding Box) 목록을 반환해준다.
이 작업은 누군가를 식별하는 일은 전혀 하지 않는다. 그냥 사각형일 뿐이다. 어쩌면 시시하게 느껴질 수도 있지만, 그렇다고 덜 중요한 것은 아니다. 이것이 우리의 첫 번째 구성 요소(Building Block)다.
이제 우리는 사진의 나머지 부분은 무시하고, 이미지 단위가 아니라 얼굴 단위로 작업할 수 있다. 여기에 간단한 후처리(Post-processing) 단계를 추가해, 콘서트 셀카 뒤쪽에 흐릿하게 나온 녀석처럼 너무 작거나 신뢰도(Confidence)가 낮아 쓸모없는 얼굴들을 걸러내면 더욱 도움이 된다.
1단계는 끝났다. 우리는 각 이미지에 연결된 사각형 목록을 갖게 되었다. 다음으로, 우리는 이 잘라낸 이미지들을… 수학으로 변환할 것이다.
Step #2: Computing Embeddings
임베딩(Embedding)이란 무엇인가? 초라하고 작은 비밀 덩어리다. 벡터(Vector)를 그럴싸하게 부르는 말이고, 벡터는 숫자 목록을 그럴싸하게 부르는 말이다. 부동소수점(Float) 512개로 이루어진 배열이다. 법의학적인 비유를 좋아한다면, 이는 이미지를 나타내는 수치적 지문(Numerical Fingerprint)이라고 할 수 있다.
우리는 얼굴 이미지의 픽셀을 선택한 안면 인식 모델의 가중치(Weight)에 통과시켜 이 임베딩들을 만들어낸다. 픽셀이 들어가고, 임베딩이 나온다.
여담: 안면 인식 모델은 어떻게 학습되는가? 대부분의 ML이 그렇듯, 방대한 양의 라벨링된 데이터셋에서 시작한다. 각 사람마다 다양한 포즈, 조명, 나이, 표정, 이미지 품질에 걸쳐 많은 사진을 확보해서, 모델이 한 사람이 여러 범위의 픽셀 값으로 표현될 수 있다는 것을 학습하도록 만든다. 그다음부터는 일반적인 신경망(Neural Network)을 학습시키는 것과 동일한 방식으로 학습시킨다.
이제 우리는 얼굴을 어디서 찾을지 알고 있으니, 사실상 기하학(Geometry)을 계산하는 셈이다. 두 눈 사이의 간격, 입의 위치, 두개골의 형태 같은 기하학적 특징들 말이다. 이러한 속성들은 성형 수술을 하지 않는 한 대체로 일정하게 유지되는 경향이 있다.
유료 구독자라면, 이제 정말 재미있는 부분에 도달한다. 얼굴로부터 임베딩 벡터(Embedding Vector)를 계산하는 것, 이를 512차원 초구(Hypersphere) 위에 배치하는 것, 그리고 얼굴을 정확하게 그룹화하기 위해 클러스터링(Clustering) 알고리즘을 실행하는 것이다.
[이하 유료 구독자 전용 콘텐츠 — 접근 불가]
핵심 요약 (20줄)
- 이 글은 Apple Photos의 안면 인식 기능이 어떻게 작동하는지를 저자가 직접 미니 프로젝트로 재현해보며 설명하는 뉴스레터 아티클이다.
- 저자는 눈에 띄지 않게 조용히 제품을 개선하는 AI 기능이야말로 가장 좋은 AI 기능이라고 주장하며, Apple Photos의 "People & Pets" 얼굴 필터링 기능을 그 좋은 사례로 제시한다.
- 안면 인식은 겉으로는 마법처럼 보이지만, 실제로는 놀라울 정도로 단순한 3단계 머신러닝 파이프라인으로 이루어져 있다고 설명한다.
- 첫 번째 단계는 Vision 프레임워크를 이용해 각 사진 속에서 얼굴을 탐지하는 것이다.
- 두 번째 단계는 탐지된 각 얼굴을 ML 모델을 통해 임베딩(Embedding) 벡터로 변환하는 것이다.
- 세 번째 단계는 클러스터링(Clustering) 알고리즘을 이용해 비슷한 임베딩들을 같은 사람 단위로 묶는 것이다.
- 이 모든 과정은 서버가 아니라 온디바이스(On-device) 모델로 로컬에서 처리되며, 성능도 상당히 우수하다고 저자는 말한다.
- 저자는 이 파이프라인을 직접 구현한 샘플 프로젝트를 GitHub 저장소에 공개했다고 밝힌다.
- Step #1에서는 VNDetectFaceRectanglesRequest라는 Vision 프레임워크의 내장 API를 사용해 사진 속 얼굴의 바운딩 박스(Bounding Box) 좌표를 얻는 방법을 설명한다.
- 이 단계는 얼굴이 누구인지 식별하는 작업은 전혀 하지 않으며, 단지 얼굴이 있는 사각형 영역을 찾아낼 뿐이다.
- 이후 너무 작거나 신뢰도(Confidence)가 낮은 얼굴은 후처리 단계에서 걸러내어, 이미지 전체가 아니라 얼굴 단위로 작업할 수 있게 만든다.
- Step #2에서는 임베딩이 무엇인지, 즉 이미지를 나타내는 512개 부동소수점(Float) 숫자로 이루어진 벡터라는 개념을 설명한다.
- 얼굴 이미지의 픽셀을 안면 인식 모델의 가중치(Weight)에 통과시키면 이 512차원 임베딩 벡터가 출력된다.
- 안면 인식 모델은 한 사람의 다양한 포즈, 조명, 나이, 표정, 이미지 품질을 담은 대규모 라벨링 데이터셋으로 학습되며, 일반적인 신경망(Neural Network)과 동일한 방식으로 훈련된다.
- 임베딩이 포착하는 정보는 두 눈 사이 간격, 입의 위치, 두개골 형태 같은 기하학적 특징으로, 이는 성형 수술을 하지 않는 한 비교적 일정하게 유지된다.
- 저자는 이 미리보기의 마지막 부분에서 유료 구독자에게는 얼굴 임베딩 벡터 계산, 이를 512차원 초구(Hypersphere) 위에 배치하는 과정, 정확한 얼굴 그룹화를 위한 클러스터링 알고리즘 실행이라는 "진짜 재미있는 부분"이 이어진다고 예고한다.
- 특히 저자는 512차원 얼굴 임베딩을 3차원 기하학(3D Geometry)으로 투영하는 결과물을 이 글의 핵심 볼거리로 미리 언급한다.
- 전체 목차에 따르면 이 글은 샘플 프로젝트 소개, Step #1 얼굴 찾기, Step #2 임베딩 계산, Step #3 클러스터링 파이프라인, Step #4 파이프라인 최적화, 그리고 마무리 순으로 구성되어 있다.
- 그러나 이번에 확보한 원문은 무료 미리보기 구간이라, Step #2 중간에서 "유료 구독자라면"이라는 문구와 함께 본문이 끊긴다.
- 따라서 목차상의 Step #3 클러스터링 파이프라인과 Step #4 파이프라인 최적화에 해당하는 실제 구현 내용, 즉 임베딩을 초구에 배치하고 클러스터링해 3D로 시각화하는 구체적인 과정은 이 미리보기에는 포함되어 있지 않다.