Google 이미지 검색의 작동 방식을 가장 잘 추측하는 것은 무엇입니까? 사진을 업로드하고 유사한 이미지를 검색 할 수 있습니다. 유사한 이미지를 식별하기 위해 어떤 알고리즘을 사용합니까?
Google 이미지 검색의 작동 방식을 가장 잘 추측하는 것은 무엇입니까? 사진을 업로드하고 유사한 이미지를 검색 할 수 있습니다. 유사한 이미지를 식별하기 위해 어떤 알고리즘을 사용합니까?
답변:
Google이 사용하는 알고리즘을 모르겠습니다. 그러나 최고의 추측을 원했기 때문에 비슷한 시스템 을 어떻게 구성 할 수 있는지 에 대한 아이디어를 드리겠습니다 .
이미지 별 이미지 검색을 다루는 전체 필드를 CBIR (Content Based Image Retrieval)이라고 합니다. 아이디어는 어떻게 든 이미지 컨텐츠에 대한 정보 를 포함 하는 이미지 표현 (사람이 반드시 이해할 수있는 것은 아님)을 구성하는 것 입니다.
두 가지 기본 접근 방식이 있습니다.
낮은 수준의 지역 접근 방식 은 매우 잘 연구되었습니다. 현재의 가장 좋은 접근 방식은 로컬 기능을 추출하고 (여기에 관련된 기능 추출 알고리즘 선택) 로컬 설명자를 사용하여 이미지를 비교합니다.
최신 작업에서는 로컬 설명자가 먼저 클러스터 된 다음 클러스터가 시각적 단어 로 취급됩니다. 이 기술은 Google 문서 검색과 매우 유사하지만 문자 단어 대신 시각적 단어를 사용합니다.
시각적 단어는 언어의 단어 뿌리와 동등한 것으로 생각할 수 있습니다. 예를 들어, 단어 work, working, working은 모두 동일한 단어 root에 속합니다.
이러한 종류의 방법의 단점 중 하나는 일반적으로 질감이 낮은 이미지에서 성능이 저하된다는 것입니다.
이미 이러한 접근 방식에 대해 자세히 설명하고 많은 답변을 보았으므로 해당 답변에 대한 링크를 제공합니다.
시맨틱 접근법 은 일반적으로 전체 이미지의 계층 적 표현을 기반으로합니다. 이러한 접근 방식은 특히 일반적인 이미지 유형에 대해서는 아직 완벽하지 않습니다. 이러한 종류의 기술을 특정 이미지 도메인에 적용하는 데 약간의 성공이 있습니다.
현재 이러한 접근법에 대한 연구가 진행 중이므로 결론을 내릴 수 없습니다. 이제이 답변 에서 이러한 기술의 기본 개념을 설명했습니다 .
다시 한 번 간단히 말하면, 일반적인 아이디어는 나무 모양의 구조를 가진 이미지를 나타내는 것입니다. 여기서 나뭇잎에는 이미지 세부 정보가 포함되어 있으며 그러한 나무의 뿌리에 가까운 노드에서 객체를 찾을 수 있습니다. 그런 다음 어떻게 든 하위 트리를 비교하여 다른 이미지에 포함 된 객체를 식별합니다.
다음은 다양한 트리 표현에 대한 참조입니다. 나는 그것들을 모두 읽지는 않았으며, 그들 중 일부는 CBIR 대신 세분화를 위해 이러한 종류의 표현을 사용하지만 여전히 여기에 있습니다.
페넬로페의 대답 외에도 지각 해싱과 기본 기능이 쉽게 구현되고 고급 영역에 들어가기 전에 배우거나 배우기 좋은 두 가지 접근 방식이 있습니다.
지각 해싱
지각 해싱 알고리즘은 암호화 해시와 달리 해시를 구성하는 것을 목표로합니다. 예를 들어 스케일링 또는 JPEG 압축에 의해 약간 왜곡 된 동일한 이미지에 대해 유사하거나 거의 유사한 해시 값을 제공합니다. 이미지 수집에서 거의 중복을 감지하는 데 유용한 목적을 제공합니다.
가장 기본적인 형태로 다음과 같이 구현할 수 있습니다.
이미지를 회색조로 변환
이미지를 제로로 만드십시오
결과는 이미지의 저주파 구성 요소를 기반으로하기 때문에 탄력적 인 64 비트 해시입니다. 이 테마의 변형은 각 이미지를 64 개의 서브 블록으로 나누고 글로벌 이미지 평균을 로컬 서브 블록 평균과 비교하고 그에 따라 1 또는 0을 작성하는 것입니다.
지각 해싱은 예를 들어 phash에 의해 구현됩니다.
단어 가방 모델
bag-of-words 모델은 이미지, 예를 들어 개가있는 모든 이미지를 의미 적으로 식별하는 것을 목표로합니다. 특정 단어의 발생에 따라 텍스트 문서를 분류하는 것과 동일한 방식으로 특정 이미지 패치를 사용하여이를 수행합니다. "dog"과 "dogs"라고 단어를 분류하여 "dog"범주가 "dog"또는 "dogs"를 포함하는 모든 문서를 가리키는 역 파일에 식별자로 저장할 수 있습니다.
가장 간단한 형태로 이미지와 함께 다음과 같이 할 수 있습니다.
이제 방대한 SIFT 디스크립터 모음이 있습니다. 문제는 거의 동일한 이미지에서도 디스크립터 사이에 약간의 불일치가 있다는 것입니다. 동일한 단어를 "개"와 "개"를 동일하게 취급하는 것과 같은 단어를 다소 비슷하게 그룹화하고 오류를 보상해야합니다. 여기서 클러스터링이 시작됩니다.
이미지 쿼리 (예 : 쿼리 이미지와 유사한 이미지 찾기)는 다음과 같이 해결됩니다.
위의 답변에서 무시 된 것처럼 보이는 다른 흥미로운 접근법은 Deep Convolutional Neural Networks입니다. 구글이 이미지 검색 엔진 과 번역 서비스를 위해 지금 사용하고있는 것 같다 . CNN은 유사성 찾기와 같은인지 작업에서 매우 강력하며, CNN은 네트워크 계층을 통해 내장 된 Bag-of-worlds와 유사한 절차를 수행합니다. 이 기술의 단점은 훈련을위한 거대한 데이터 세트를 학습 할 수없고 훈련 단계에서 계산 비용이 많이 든다는 것입니다.
이와 관련하여 제안 된 논문 :
오픈 소스 딥 러닝 이미지 검색 구현 (후반부) : https://github.com/paucarre/tiefvision