신경망-가장 유사한 이미지 찾기


11

저는 Python, scikit-learn 및 keras로 작업하고 있습니다. Watch_1 , Watch_2 , Watch_3 과 같은 3000 만 개의 전면 시계 이미지가 있습니다 .

위의 사진 (다른 배경색, 어두운 번개 등)보다 이상적인 조건에서 촬영 할 수있는 실제 시계의 사진을 입력으로 받아 3000 가지 중에서 가장 유사한 시계를 찾는 프로그램을 작성하고 싶습니다. 비슷하게 나는 얇은 레이스가있는 둥근 갈색 시계의 사진을 입력으로 제공하면 둥근 모양, 어두운 색 및 얇은 레이스의 출력 시계로 기대한다는 것을 의미합니다.

가장 효율적인 머신 러닝 알고리즘은 무엇입니까?

예를 들어, 이 링크 를 따르면 두 가지 솔루션이 있습니다.

1) CNN을 기능 추출기로 사용하고 입력 이미지를 참조하여 모든 이미지 쌍에 대해 이러한 기능 사이의 거리를 비교하십시오.

2) Siamese Neural Network에서 두 개의 CNN을 사용하여 이미지를 비교합니다.

이 두 가지 옵션이이 작업에 가장 적합한 옵션입니까, 아니면 다른 것을 제안 하시겠습니까?

이 작업에 대해 사전 훈련 된 신경망 (미리 결정된 하이퍼 파라미터 포함)을 알고 있습니까?

나는 이것에 대해 StackOverflow에서 흥미로운 게시물을 찾았지만 꽤 오래되었습니다 : Post_1 , Post_2 , Post_3 .


사이트에 오신 것을 환영합니다! 임베딩 ( 1,000 비트 순서로 빠른 검색위해 이진 해시 권장)을 배우고 유사성 검색을 수행합니다.
Emre

여기에 오게되어 기쁩니다 ... 하하! ... 예, 이것은 좋은 생각
이며이

답변:


4

나는 높은 수준의 아키텍처가 가장 적합하다고 생각하지 않지만 많은 요소와 세부 사항에 달려 있습니다. 내가 알고있는 첫 번째 접근 방식은 특히 TiefVision 에서 수행 한 추가 단계로 확장 될 때 유망합니다 .

  1. 추가 경계 상자 네트워크를 사용하여 이미지의 관련 부분을 나머지 부분과 구별합니다.
  2. 특징 벡터는 단순히 직접 비교되는 것이 아니라 삼중 항을 사용하여 비교 네트워크를 훈련시키는 데 사용됩니다 (특징 벡터를 기반으로 유사성을 학습하고 점점 더 유사한 인스턴스에 대한 예를 학습 함).

이 작업은 게시 한 것보다 훨씬 더 최근 (2016/17)이며 멋진 도구 세트와보다 자세한 용지가 제공 됩니다.

트리플렛 (일명 딥 랭킹)을 사용하는 이유는 무엇입니까?

의견에 명시된 바와 같이 : 특징 벡터를 학습하는 대신 이미지 유사성을 위해 삼중 항을 사용해야하고 거리를 계산 해야하는 이유는 무엇입니까? 삼중 항은 기본적으로 유사성을 신경 쓰지 않는 특징 벡터를 학습하는 대신 유사성 질문을 학습 문제로 공식화하는 방법입니다. 이 접근법은 인간이 인식 한 유사성이 중요한 경우에 특히 의미가 있으며, 이는 기계 인식과 다를 수 있습니다.

삼중 항은 다음과 같이 작동합니다. 3 개의 이미지를 제공합니다. 하나는 비슷한 (가까운) 이미지와 비슷하지 않은 (먼) 이미지입니다. 이것은 훈련 / 테스트 / 검증 데이터입니다. 이러한 샘플에 대해 네트워크를 교육하고 전체적으로 올바른 순서를 예측하면 (비 유사 이미지와 유사하게 분류) 네트워크에서 유사성을 기반으로 이미지를 정렬하는 방법을 배울 수 있습니다.

이 모든 접근 방식은 비교적 복잡합니다. 오버 엔지니어링 될 수도 있지만이를 수행하는 가장 좋은 방법을 요청했으며 Deep Ranking은 매우 높은 정밀도 값을 얻습니다.


당신의 응답을 주셔서 감사합니다. 이것은 흥미로운 것입니다. 삼중 항에 대한 아이디어는 왜 작업에 이미지 쌍을 사용하는 것보다 이미지의 삼중 항을 사용하는 것이 더 나은지 확실하지 않더라도 좋습니다. 원하는 경우 게시물에서 더 설명 할 수 있습니다. 또한 TiefVision을 살펴볼 것입니다.
추방 된

@Universalis는 힌트 (및 공감)에 감사드립니다. 트리플렛과 추론에 대한 자세한 내용으로 답변을 업데이트했습니다. 논문도 잘 작성되었으므로 모든 세부 사항을 살펴보십시오. 그러나 TiefVision과 DeepRanking이 등장한 이후로이를위한 새로운 멋진 방법이있을 수 있습니다.
Gegenwind

귀하의 답변에 다시 한번 감사드립니다. 예, 나는 논문을 보았고 당신이 당신의 대답에 무엇을 추가했는지에 대해 분명했습니다. 이런 의미에서, 나는 당신이 당신의 대답을 추가 한 것을 이미 이해했으며 내 질문은 다음과 같습니다. 쌍 대신 트리플렛을 사용하면 어떤 이점이 있습니까?
02:14에 추방 됨

흠 어쩌면 나는 당신의 접근 방식을 오해했을 것입니다. 삼중 항은 이미지 1이 이미지 3보다 이미지 2에 더 가깝다는 비교 정보를 제공합니다. 2 개의 이미지 만 있고 "이 2가 유사하다"는 비교 요소는 "어떤 점에서 비슷한"요소가 부족합니다. 특징 벡터의 충분하지 않습니다. 다시 말해, 주문별로 유사성을 배우고 주문할 항목이 2 개 이상 없으면 부족합니다.
Gegenwind

답변 감사합니다. 그러나 지금도 종이를 좀 더주의 깊게 읽은 후에도이 감독되지 않은 접근 방식에 대해 이미지 쌍이 아닌 세 쌍이 필요한 이유가 명확하지 않습니다. 레이블을 사용할 때 삼중 항을 사용하면 쌍으로 얻을 수없는 이미지의 전체 유사성 순위를 얻게됩니다. 그러나이 (비정형) 감독되지 않은 접근 방식에서 각 이미지 쌍 (항상 한 쌍의 이미지가 입력 이미지 임)에 대한 손실 함수의 값을 비교하여 비교하지 않는 이유는 무엇입니까? 입력 이미지?
추방

2

VGG-16과 같이 이미지 넷 클래스에서 잘 작동하는 분류기를 선택합니다. 그런 다음 시계 이미지를 통해 실행하십시오. 확실히, 당신은 출력이 높은 확률로 대부분 "감시"를 기대할 수 있습니다.

그러나 다른 모든 범주의 활성화 수준과 같은 추가 기능이 제공됩니다. 그것은 0과 1 사이의 천 값의 벡터를 제공합니다.

네트워크의 다양한 지점에서 활성화를 추출 할 수도 있습니다. 그런 다음 해당 활성화 및 출력의 유사성은 이미지가 유사한 경우에만 두 경우간에 유사해야합니다.


답변 해 주셔서 감사합니다 (공개). 예, 나는 이것을 내 마음에 가지고 있었고 어떤 의미에서 그것은 내가 내 포스트에서 제공 한 첫 번째 옵션과 관련이 있습니다. 나는 또한 SURF와 같은 다른 검출기를 사용하는 방법에 대해 생각했다 그래서이 충분히 성공하면 ... 나는 ... 볼
추방

2

먼저 데이터 확대에 중점을 둘 것입니다. 이미지의 배경이 흰색이므로 약간 더 쉽습니다. 흰색 배경을 투명한 배경으로 바꾸고 이미지를 축소 한 다음 회전하여 대상 데이터와 유사한 배경에 놓습니다.

다른 조합으로 여러 번이 작업을 수행하고 각 시계마다 레이블을 지정하십시오. 그런 다음 분류에 규칙적인 컨볼 루션 신경망을 사용하는 것이 좋습니다. 각 레이블에는 점수가 부여되며, 가장 높은 신뢰도를 가진 레이블을 선택하고 가장 유사한 레이블을 선택하십시오 .

예를 들어 이미지로 분류자를 실행 하고이 결과를 얻는다고 가정 해보십시오.

Watch1: 0.51

Watch2: 0.30

Watch3: 0.25

CNN은 Watch1이 입력 이미지의 시계라는 51 %의 신뢰를 가지고 있다고 말합니다. 그러나 사실은 그것이 더 비슷해 보인다고 생각하는 것입니다. Watch2는 다음에 더 비슷할 것입니다.

좋은 결과를 얻지 못하면 평소대로하십시오. 매개 변수를 실험하고 /하거나 더 많은 레이어를 추가하십시오. 실패한 곳을 찾으십시오. 이러한 통찰력을 얻은 후에는이를 사용하여 특정 문제에 대해보다 특수한 유형의 회선 네트워크를 선택할 수 있습니다. 그것이 어떻게 수행되는지에 대한 사전 지식없이 그것을 찾는 것은 올바른 접근법이 아닙니다. 기본 컨볼 루션 모델로 시작한 다음 거기서 작업하는 것이 좋습니다.


1
답변 해 주셔서 감사합니다 (공개). 예, 나는 이미 마음에 데이터 보강을했습니다. 그러나 귀하의 답변은 명확하지 않습니다. "각 시계마다 레이블이 있습니다"는 무슨 뜻입니까? 각 시계에 개별적으로 레이블을 지정하거나 서로 비슷한 지 여부에 따라 다른 시계와 쌍으로 레이블을 지정합니까? (이것은 이전의 경우,이 효율적하시기 바랍니다 이유를 다음 설명)
추방

그것은 이전의 제안입니다. 나는 당신이 이미 그들 모두에 라벨을 붙일 수있는 편리한 방법이 있다고 가정했습니다. 이것은 기본적으로 가장 기본적인 솔루션이므로 효율적이지 않습니다. 내 제안은 기본 모델이 더 전문화 된 모델을 습득 할 수있는 충분한 정보를 제공 할 수 있다는 것입니다. @Gegenwind가 말한 것처럼 깊은 순위를 보는 것은 매우 유망한 것으로 보입니다. 좀 더 명확하게 답변을 업데이트했습니다.
zimio

흠, 그래 이제 네가 의미하는 바가 더 분명하다. ... 이것은 일반적으로 좋은 제안이다 : 기초부터 시작하여 더 복잡한 물건으로 단계별로 이동 ... 어쨌든 고맙다 ...
추방
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.