類似画像検索をたった2つのAPIで作る
画像を登録して類似のものを検索する方法として、下記のアプローチがある。
画像データの登録
画像をベクトル化(画像の特徴を表現する数字のリスト)する
ベクトル化したものをベクトルDBと呼ばれるものに保存
画像データの検索
検索に使いたい画像をベクトル化
ベクトルDBにそのベクトルを与えて検索させる
これ自体は特に目新しい考えではないが、実装するにあたって悩んだのは1.であった。ぼくは機械学習のことをあまりわかっておらず、APIが用意されていれば使えるが、いろいろ調べても単純にAPIを呼ぶだけでは使えなさそうな気がしていて、やはりちゃんと勉強する必要があるのかなと思っていた。
しかし、いろいろとググっていくなかで、こういうものを見つけた。
Replicateは、ぼくの理解ではChatGPTのようなLLMを呼び出す時の方法を利用者が追加して使えるようにするサービスで、その中に、「画像をベクトル化するAPI」が存在していた。
使ってみたところ、画像からベクトルを抽出することが確かにできた。パラメータや精度など、実際に運用するとなるといろいろ考えることは出てくると思うが、まずは変換できるだけで道が開ける。
2.については、すでにいくつか実装があり、その中からQdrantというものを選んだ。
Docker imageもあり、初期設定もほぼ不要なことから立ち上げて使い始めるための敷居は低かった。
Qdrantでは、RDBのテーブルに対応する概念としてCollection、レコードに対応する概念としてPointがある。PointはID、ベクトルのほか、payloadと呼ばれる追加情報を保持することができる。
この部分も特に難しくはないが、Collectionにベクトル化の次元を設定しておかないとデータが登録できず、少しはまった。
これで、画像のベクトル化、ベクトルのDBへの登録、のピースが埋まり、画像検索ができるようになった。
精度やパフォーマンスの評価はこれからだが、ツールがわかっていれば通しで作ってみるような実装は一日でできた。自分でも驚きである。
この記事が気に入ったらサポートをしてみませんか?