Tìm ảnh giống nhau bằng Resnet-18

Bài toán tìm ảnh giống nhau bằng Resnet-18 ứng dụng vào việc tìm sản phẩm/hàng hóa tương tự. Ứng dụng của siêu thị là khi hàng hóa mất nhãn có thể tìm lại được sản phẩm giống nhất giữa hàng vạn sản phẩm.

Nguyên lý và các bước thực hiện

Mỗi ảnh có 1 vector đặc trưng riêng, dựa vào khoảng cách vector của các ảnh với nhau có thể tìm ảnh tương tự.

Bước 1: resize ảnh thành 224 x 224px

Bước 2: get feature vector của từng ảnh bằng mạng Resnet-18

Bước 3: tìm ảnh giống nhau bằng cách tìm cos (cosin) của 2 vector

Bước 4: lấy ra 5 kết quả giống nhất & loại trừ bản thân, sau đó hiển thị kết quả

Môi trường làm việc

  • Windows 10
  • GPU: NVIDIA RTX 2060 6GB VRAM (không bắt buộc)
  • CUDA 11.3, cuDNN 8.2.1
  • Pytorch 0.13.1

Chuẩn bị ảnh input

Để thuật toán cho kết quả tốt các bạn cần lưu ý các vấn đề

  • Ảnh có 3 kênh màu RGB
  • Ảnh nên có background trắng
  • Ảnh không cần quá lớn, cỡ 500px trở lại là được

Ảnh có tỷ lệ 3:4 hay 16:9 đều được, không nhất thiết phải hình vuông.

Cách sử dụng

Bước 1: cài đặt Python 3.7.3 và các package bằng lệnh:
pip install -r requirements.txt

Bước 2: cài đặt Visual Studio code và extension Jupyter Notebook để chạy file SimilarImages.ipynb

Bước 3: chạy tất cả block code sẽ cho ra kết quả giống vide ở trên

Các lưu ý

Để tiết kiệm thời gian tìm ảnh, các bạn nên lưu feature vector vào disk. Mỗi khi tìm kiếm nếu thấy file vector thì load lên để tiết kiệm thời gian. File save theo định dạng *.npy

Source code

https://github.com/thigiacmaytinh/FindSimilarImage

Tham khảo: https://towardsdatascience.com/effortlessly-recommending-similar-images-b65aff6aabfb