얼굴 인식
개요
Immich는 사진과 비디오에서 얼굴을 인식하고 사람별로 그룹화합니다. 그런 다음 이 사람들에게 이름을 할당하고 검색할 수 있습니다.
사람 목록은 탐색 페이지에 표시됩니다.

사람을 클릭하면 얼굴이 포함된 자산 목록이 표시됩니다.

자산 세부 보기에서도 자산에서 인식된 얼굴을 보여줍니다.

동작
추가로 수행할 수 있는 작업은 다음과 같습니다:
- 사람의 대표 사진 변경
- 사람의 생일 설정
- 두 개 이상의 감지된 얼굴을 한 사람으로 병합
- 탐색 페이지 및 세부 보기에서 특정 사람의 얼굴 숨기기
- 인식되지 않은 얼굴을 사람에 할당
해당 작업은 사람이 있는 세부 보기에서 앱 바에서 찾을 수 있습니다.

얼굴 감지 작동 방식
얼굴 감지는 생성된 미리 보기 이미지를 기계 학습 서비스로 전송하여 처리합니다. 서비스는 관련 모델을 다운로드했는지 확인 후 다운로드되지 않았다면 다운로드합니다. 이미지는 디코딩, 전처리된 후 얼굴 감지 모델로 전달됩니다 (특정 하드웨어 가속 지원 시 이를 포함하여). 출력된 경계 상자와 점수는 이미지를 다시 크롭하고 전처리하여 얼굴 인식 모델로 전달됩니다 (필요시 가속 제공). 얼굴 인식 모델의 임베딩은 경계 상자와 점수와 함께 서버에 다시 전송되어 데이터베이스에 추가됩니다. 특히 임베딩은 얼굴 인식 클러스터링 동안 빠르게 검색할 수 있도록 색인화됩니다.
얼굴 인식 작동 방식
우리가 사용하는 얼굴 인식 알고리즘은 인기 있는 클러스터링 알고리즘인 DBSCAN에서 파생되었습니다. 이는 기본적으로 감지된 얼굴을 그래프의 점으로 간주하여 서로 가까운 점을 그룹화하는 데 초점을 둡니다.
중요한 개념은 무엇인가를 _핵심 점_으로 간주할지 여부입니다. 핵심 점은 특정 거리 이내에 최소한의 점을 가지고 있습니다. 비핵심 점은 클러스터에 할당될 수 있지만 핵심 점에 도달할 수 있는 경우에만 가능합니다; 비핵심 점은 클러스터의 일부일지라도 클러스터를 확장하는 데 사용할 수 없습니다. Immich에서는 최소 인식 얼굴 설정이 핵심 점으로 간주되는 임계값을 제어합니다.
각 얼굴에 대해 특정 거리 내 다른 얼굴을 찾아봅니다. 이 거리에 있는 얼굴들은 유사한 것으로 간주되며, 이들 중 어떤 얼굴이 특정 인물과 관련되어 있는지 확인합니다.
기존의 사람이 있으면, 가장 유사한 얼굴의 인물을 현재 처리 중인 얼굴에 할당합니다.
기존의 사람이 없으면 DBSCAN 알고리즘에서 핵심 점인지 여부를 결정해야 합니다. 기본적으로 3개의 유사한 얼굴이 있다면 (현재 고려 중인 얼굴 포함), 이는 핵심 점입니다. 새로운 인물이 생성되고 이 얼굴은 해당 인물에 할당됩니다. 다른 얼굴이 처리될 때 이 얼굴과 유사하면 해당 인물과 연관이 있는 것으로 보고 해당 인물에 할당됩니다.
하지만 충분히 유사한 얼굴이 없는 경우 새로운 인물은 생성되지 않습니다. 대신 이 얼굴은 모든 다른 얼굴이 처리될 때까지 기다립니다. 이전에 매칭되지 않았던 얼굴이 현재 매칭을 가지게 되면 해당 얼굴은 인물에 할당됩니다. 그렇지 않다면 이 얼굴은 배경에 있는 낯선 사람과 같은 외부 요소로 간주됩니다.
알고리즘은 DBSCAN과 일부 미묘한 차이가 있습니다:
- DBSCAN은 점진적인 클러스터링 개념이 없으며 모든 포인트를 한 번에 클러스터링합니다. 얼굴 인식은 더 많은 자산이 추가되더라도 매번 다시 클러스터링하지 않고 발전해야 합니다.
- 위 설명된 알고리즘은 큐에 있는 자산 집합 내에서 작동합니다. 이 얼굴들이 처리되고 새로운 라운드의 얼굴이 감지되면 알고리즘은 전 라운드에서 생성된 클러스터 (인물)를 유지하며, 이는 전통적인 DBSCAN과 다릅니다.
- 얼굴 감지와 썸네일 생성 완료를 기다린 후 시작합니다: 큐 내 얼굴 집합이 클수록 결과가 개선됩니다.
- 나중에 모든 자산에서 얼굴 인식을 다시 실행하면 DBSCAN처럼 작동합니다.
- DBSCAN은 범위 기반 검색 (즉, 특정 거리에 있는 포인트)에 설계되었으나 고차원 벡터 색인들은 일반적으로 가장 가까운 K 결과를 얻는 데 최적화되어 있습니다. 인식 알고리즘은 성능을 위해 특정 거리에 있는 유사한 모든 얼굴을 검색하려고 하지 않습니다. 대신 각 얼굴에 대해 작은 수의 매치를 검색합니다. 최종 결과는 동일하거나 유사한 결과를 가져오지만 성능 특성이 다를 수 있습니다.
- 이 때문에 인식 과정의 일부는 야간 작업 동안 처리되어 잠재적 매칭이 있는 할당되지 않은 얼굴들을 인식할 수 있도록 합니다.
자산을 한 번에 가져오지 않았거나 서버가 직업을 처리하는 속도가 업로드보다 빠른 경우 클러스터링이 최적화되지 않았을 수 있습니다. 현재 결과에 노력을 들이지 않았다면 모든 자산에서 얼굴 인식을 다시 실행하여 가장 좋은 시작점을 얻는 것이 좋습니다. 그 시기가 너무 늦었다면 할당되지 않은 얼굴을 선택적으로 수동으로 할당하고, 얼굴 인식을 통해 학습하고 더 많은 얼굴을 자동으로 할당하도록 돕는 것이 가능합니다.
설정
관리 > 설정 > 기계 학습 설정 > 얼굴 인식으로 이동하면 사용 가능한 옵션을 볼 수 있습니다.
다양한 옵션을 테스트할 준비가 되지 않았다면 여기에서 매개변수를 조정하는 것이 좋습니다. 특정 설정에 엄격한 매개변수를 지정해야 할 경우 다른 설정을 완화하는 것이 보상하는 좋은 옵션이 될 수 있습니다.
결과 조정 방법은 이 가이드에서 배울 수 있습니다.
얼굴 인식 모델
다양한 모델이 제공되며 기본 설정이 일반적으로 최고의 모델로 간주됩니다. 기본이 너무 과도한 경우 더 작은 모델을 선택할 수도 있습니다.
최소 감지 점수
이 설정은 얼굴 감지 모델의 결과가 허위 긍정으로 필터링될지 여부에 영향을 미칩니다. 더 많은 얼굴을 감지하기 위해 낮게 설정하고 싶을 수 있지만 이는 다루기 어려운 허위 긍정을 유 발할 수 있으며 얼굴 인식에 해를 입힐 수 있습니다. 이 설정은 0.5 이하로 설정하지 않는 것을 강력히 추천합니다. 0.9와 같은 매우 높은 값으로 설정하는 것도 추천되지 않습니다: 기본값이 이미 정확성을 편향하고 있어 너무 높은 임계값은 많은 얼굴이 감지되지 않게 됩니다.
이 설정을 변경한 후에는 새 얼굴 감지 작업에만 적용됩니다. 모든 자산에 새 설정을 적용하려면 모든 자산에 대해 얼굴 감지를 다시 실행해야 합니다.
최대 인식 거리
얼굴 인식 작동 방식에서 설명된 거리 임계값. 기본 설정은 대부분의 사람에게 잘 작동하며 쌍둥이 또는 매우 유사하게 생긴 사람들이 있는 라이브러리의 경우 임계값을 낮추는 것이 좋을 수 있습니다. 너무 낮은 임계값은 얼굴 인식 후 중복된 사람을 병합해야 하는 의미만 생기며, 너무 높은 임계값은 수정 불가능한 결과를 초래할 수 있습니다. 0.3 이하 또는 0.7 이상으로 설정하지 않는 것이 강력히 추천됩니다.
최소 인식 얼굴
얼굴 인식 작동 방식에서 설명된 핵심 점 임계값. 이 설정은 여러 함의를 가집니다. 첫째, 이 수치보다 적은 얼굴을 가진 사람은 즉시 숨겨집니다. 둘째, 느슨하게 관련된 얼굴이 서로 연결되지 않도록 특정 밀도 수준을 요구하여 클러스터링을 더욱 강화합니다.
이 설정을 증가시키 는 것은 인식 거리 증가 또는 최소 감지 점수 감소 시 좋은 아이디어입니다. 설정을 1로 설정하면 핵심 점 개념이 비활성화되지만 더 직접적이고 수동적인 접근 방식을 선호할 경우 선택할 수 있습니다.