Mạng lưới thần kinh - Tìm hầu hết các hình ảnh tương tự


11

Tôi đang làm việc với Python, scikit-learn và keras. Tôi có 3000 nghìn hình ảnh của đồng hồ mặt trước như sau: Watch_1 , Watch_2 , Watch_3 .

Tôi muốn viết một chương trình nhận ảnh đầu vào của một chiếc đồng hồ thật có thể được chụp trong điều kiện kém lý tưởng hơn các ảnh trên (màu nền khác nhau, sét tối hơn, v.v.) và tìm những chiếc đồng hồ giống nhau nhất trong số 3000 chiếc đồng hồ. Tương tự tôi có nghĩa là nếu tôi đưa ra một hình ảnh của một chiếc đồng hồ tròn, màu nâu với ren mỏng thì tôi mong đợi như một chiếc đồng hồ đầu ra có hình dạng tròn, màu tối và với ren mỏng.

Thuật toán học máy hiệu quả nhất để làm điều này là gì?

Ví dụ: bằng cách theo liên kết này, tôi có hai giải pháp khác nhau:

1) Sử dụng CNN làm công cụ trích xuất tính năng và so sánh khoảng cách giữa các tính năng này cho mỗi cặp hình ảnh với tham chiếu đến hình ảnh đầu vào.

2) Sử dụng hai CNN trong Mạng thần kinh Xiêm để so sánh các hình ảnh.

Đây có phải là hai lựa chọn tốt nhất cho nhiệm vụ này hay bạn sẽ đề xuất một cái gì đó khác?

Bạn có biết bất kỳ mạng thần kinh được đào tạo trước (với siêu âm được xác định trước) cho nhiệm vụ này?

Tôi đã tìm thấy một số bài viết thú vị trên StackOverflow về điều này nhưng chúng khá cũ: Post_1 , Post_2 , Post_3 .


Chào mừng đến với trang web! Tìm hiểu cách nhúng (Tôi khuyên bạn nên băm nhị phân để truy xuất nhanh theo thứ tự một nghìn bit) sau đó thực hiện tìm kiếm tương tự.
Emre

Tôi rất vui khi được ở đây ... haha! ... Vâng, đây là một ý tưởng hay và tôi đã đọc bài báo này ...
Penseur

Câu trả lời:


4

Tôi không nghĩ rằng một kiến ​​trúc cấp cao như vậy là phù hợp nhất nhưng nó phụ thuộc vào nhiều yếu tố và chi tiết. Từ những gì tôi biết về cách tiếp cận đầu tiên đầy hứa hẹn, đặc biệt là khi được mở rộng bằng các bước bổ sung như được thực hiện trong TiefVision :

  1. Một mạng hộp giới hạn bổ sung được sử dụng để phân biệt phần có liên quan của hình ảnh với phần còn lại
  2. Các vectơ đặc trưng không chỉ đơn giản được so sánh trực tiếp mà được sử dụng để huấn luyện một mạng so sánh bằng cách sử dụng bộ ba (học tương tự dựa trên các vectơ đặc trưng và ví dụ cho các trường hợp tương tự nhiều hơn và ít hơn).

Tác phẩm này gần đây hơn rất nhiều (2016/17) so với những gì bạn đã đăng và đi kèm với một bộ công cụ đẹp và một tờ giấy chi tiết hơn .

Tại sao sử dụng bộ ba aka Xếp hạng sâu?

Như đã nêu trong các ý kiến: Tại sao người ta nên sử dụng bộ ba cho sự tương tự hình ảnh thay vì học các vectơ đặc trưng và tính khoảng cách của chúng? Bộ ba là một cách để đặt câu hỏi tương tự như một vấn đề học tập thay vì học các vectơ đặc trưng mà về cơ bản không quan tâm đến sự tương tự. Cách tiếp cận này đặc biệt có ý nghĩa trong trường hợp sự tương đồng về nhận thức của con người là quan trọng, có thể khác với nhận thức của máy.

Bộ ba hoạt động như thế này: Bạn cung cấp 3 hình ảnh. Một để so sánh với, một hình ảnh tương tự (gần) và một hình ảnh không giống nhau (xa). Đây là dữ liệu đào tạo / kiểm tra / xác nhận của bạn. Huấn luyện mạng của bạn trên các mẫu đó và dự đoán thứ tự chính xác (phân loại tương tự từ các hình ảnh không giống nhau) cho phép mạng tìm hiểu cách đặt hàng hình ảnh dựa trên độ tương tự của chúng.

Tất cả trong tất cả các phương pháp này là tương đối phức tạp. Nó có thể bị áp đảo nhưng bạn cũng đã yêu cầu cách tốt nhất để làm điều này và Deep Xếp hạng đạt được các giá trị chính xác rất cao.


Cảm ơn bạn đã phản hồi của bạn. Đây là một điều thú vị (tôi đã nâng cấp nó). Ý tưởng về bộ ba là tốt mặc dù tôi không chắc chắn tại sao sử dụng bộ ba hình ảnh nhất thiết phải tốt hơn sử dụng các cặp hình ảnh cho nhiệm vụ của mình. Nếu bạn muốn, bạn có thể giải thích nó nhiều hơn tại bài viết của bạn. Ngoài ra tôi sẽ có một cái nhìn tại TiefVision.
Penseur

@Universalis cảm ơn vì gợi ý (và upvote). Tôi đã cập nhật câu trả lời của mình với một số chi tiết khác về bộ ba và lý do. Bài viết cũng được viết rất tốt vì vậy hãy xem tất cả các chi tiết. Có thể có những cách ưa thích mới để làm điều này kể từ khi TiefVision và DeepRanking xuất hiện.
Gegenwind

Cảm ơn một lần nữa cho phản ứng của bạn. Vâng, tôi đã xem qua bài báo và nó khá rõ ràng về những gì bạn đã thêm vào câu trả lời của bạn. Theo nghĩa này, tôi đã hiểu những gì bạn đã thêm câu trả lời của bạn và câu hỏi của tôi rõ ràng hơn là: tại sao không sử dụng 2 hình ảnh (một cặp) thay vì 3 hình ảnh (một bộ ba) để xếp hạng các hình ảnh theo độ tương tự của chúng? Lợi ích bổ sung của việc sử dụng bộ ba thay vì cặp là gì?
Penseur

Hmm có lẽ tôi đã hiểu nhầm cách tiếp cận của bạn. Bộ ba cung cấp thông tin so sánh rằng hình ảnh 1 gần với hình ảnh 2 hơn hình ảnh 3. Chỉ có 2 hình ảnh và cho biết "2 cái này giống nhau" thiếu một yếu tố so sánh "tương tự về mặt nào" bởi vì trong phương pháp này, bạn cho rằng khoảng cách rõ ràng của vector tính năng không cho bạn biết đủ. nói cách khác: Bạn học được sự tương đồng theo thứ tự và bạn thiếu điều đó mà không có ít nhất 2 mặt hàng để đặt hàng.
Gegenwind

Cảm ơn về sự phản hồi của bạn. Tuy nhiên, ngay cả bây giờ và sau khi đọc kỹ hơn một chút về bài báo, tôi không rõ lý do tại sao bạn nhất thiết cần bộ ba và không phải cặp hình ảnh cho phương pháp không giám sát này. Khi sử dụng nhãn, rõ ràng là bằng cách sử dụng bộ ba, bạn sẽ có được thứ hạng tương tự đầy đủ của các hình ảnh mà bạn không thể có được với các cặp. Nhưng theo cách tiếp cận không giám sát này mà bạn đề xuất thì tại sao không so sánh các giá trị của hàm mất cho mỗi cặp hình ảnh (luôn luôn là một hình ảnh của cặp là hình ảnh đầu vào) để tìm ví dụ 5 hình ảnh tương tự nhất với hình ảnh đầu vào?
Penseur

2

Tôi sẽ chọn một bộ phân loại, như VGG-16, hoạt động tốt trên các lớp fantenet. Sau đó, chạy hình ảnh đồng hồ của bạn thông qua nó. Chắc chắn, bạn có thể mong đợi đầu ra chủ yếu là "xem" với xác suất cao.

Tuy nhiên, sau đó bạn nhận được các tính năng bổ sung: mức độ kích hoạt của tất cả các danh mục khác. Điều đó cung cấp cho bạn một vectơ của một nghìn giá trị từ 0 đến 1.

Bạn cũng có thể trích xuất kích hoạt tại các điểm khác nhau trong mạng. Sau đó, sự giống nhau của các kích hoạt và đầu ra đó phải giống nhau giữa hai trường hợp chỉ khi các hình ảnh tương tự nhau.


Cảm ơn bạn đã phản hồi của bạn (upvote). Vâng, tôi đã có điều này trong tâm trí của tôi và theo một nghĩa nào đó, nó có liên quan đến tùy chọn đầu tiên mà tôi cung cấp tại bài viết của mình. Vì vậy, tôi cũng đã suy nghĩ về việc sử dụng các máy dò khác như SURF ... Tôi sẽ xem liệu những thứ này có đủ thành công không ...
Penseur

2

Tôi sẽ tập trung vào tăng dữ liệu đầu tiên. Vì hình ảnh của bạn có nền trắng, bạn có nó dễ dàng hơn một chút. Biến nền trắng thành nền trong suốt, thu nhỏ hình ảnh, xoay nó và đặt nó trong nền tương tự như dữ liệu mục tiêu của bạn.

Làm điều này một loạt các lần với sự kết hợp khác nhau và có một nhãn cho mỗi chiếc đồng hồ. Sau đó, tôi sẽ đề nghị bạn sử dụng một mạng lưới thần kinh tích chập thường xuyên để phân loại. Mỗi nhãn sẽ có một điểm, chọn một nhãn có độ tin cậy cao nhất và nhãn đó phải giống nhau nhất .

Ví dụ: giả sử bạn chạy trình phân loại với một hình ảnh và nhận kết quả này:

Watch1: 0.51

Watch2: 0.30

Watch3: 0.25

CNN đang nói rằng họ có độ tin cậy 51% rằng Watch1 là chiếc đồng hồ trong hình ảnh đầu vào. Nhưng cũng có một sự thật là nó là cái mà nó nghĩ trông giống nhau hơn, Watch2 sẽ là cái tiếp theo giống nhau hơn và cứ thế.

Nếu bạn không có kết quả tốt, hãy làm bình thường. Thử nghiệm với các tham số và / hoặc thêm nhiều lớp. Cố gắng tìm ra nơi nó đang thất bại. Sau khi bạn có cái nhìn sâu sắc đó, bạn có thể sử dụng nó để chọn một loại mạng chập chuyên dụng hơn cho vấn đề cụ thể của bạn. Tìm kiếm điều đó mà không có kiến ​​thức trước về cách nó sẽ thực hiện không phải là phương pháp đúng đắn. Tôi sẽ đề nghị bạn bắt đầu với một mô hình tích chập cơ bản và sau đó làm việc từ đó.


1
Cảm ơn bạn đã phản hồi của bạn (upvote). Vâng, tôi đã tăng dữ liệu trong tâm trí của tôi. Tuy nhiên, phản ứng của bạn khá không rõ ràng. Bạn có ý nghĩa gì khi "có nhãn cho mỗi chiếc đồng hồ"? Bạn có nghĩa là dán nhãn cho mỗi chiếc đồng hồ riêng lẻ hoặc gắn nhãn chúng là một cặp với một chiếc khác tùy thuộc vào việc chúng có giống nhau hay không? (Nếu đó là trước đây thì hãy giải thích lý do tại sao điều này hiệu quả)
Penseur

Đó là gợi ý trước đây, tôi cho rằng bạn đã có một cách tiện dụng để dán nhãn cho tất cả chúng. Đây về cơ bản là giải pháp cơ bản nhất vì vậy nó sẽ không hiệu quả. Đề nghị của tôi là mô hình cơ bản có thể cung cấp cho bạn đủ thông tin để bạn theo đuổi một mô hình chuyên biệt hơn. Nhìn vào một thứ hạng sâu dường như rất hứa hẹn như @Gegenwind nói. Tôi đã cập nhật câu trả lời của mình để làm cho nó rõ ràng hơn một chút.
zimio

Hừm, vâng, bây giờ thì rõ hơn ý của bạn .... Đây chắc chắn là một gợi ý chung tốt: bắt đầu với những điều cơ bản và từng bước chuyển sang những thứ phức tạp hơn ... Cảm ơn trong mọi trường hợp ...
Penseur
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.