各画像の内容を説明するメタデータを持たない、数十万から数百万の画像のデータ コレクションがあることを想像してください。ユーザーの検索クエリに最もよく答える画像のサブセットを見つけられるシステムを構築するにはどうすればよいでしょうか?
基本的に必要なのは、画像結果が検索クエリにどの程度対応しているかを考慮して画像結果をランク付けできる検索エンジンです。検索クエリは自然言語または別のクエリ画像で表現できます。
この投稿で問題を解決する方法は、入力画像とテキストの固定長表現 (または埋め込み) を学習し、ペアが text- image または image-image は「似ている」です。
十分な大きさの検索結果ランキングのデータセットは見つかりませんでしたが、電子商取引商品の画像をリンクするデータセット http://jmcauley.ucsd.edu/data/amazon/ を取得できました。タイトルと説明。このメタデータを監視ソースとして使用して、意味のある結合されたテキストと画像の表現を学習します。計算とストレージのコストを管理するために、実験はファッション (衣類、靴、ジュエリー) アイテムと 500,000 枚の画像に限定されました。
私たちが持っているデータセットは、各画像を自然言語で書かれた説明とリンクさせています。そこで、各画像表現がその説明の表現に近づくように、画像とテキストの結合された固定長表現を学習するタスクを定義します。
モデルは 3 つの入力を受け取ります: 画像 (アンカー)、画像のタイトルと説明 (正の例)、そして 3 番目の入力はランダムにサンプリングされたテキスト (負の例) です。
次に、2 つのサブモデルを定義します。
画像サブモデルはアンカー **E_a ** の埋め込みを生成し、テキスト サブモデルはポジティブなタイトル + 説明E_pの埋め込みとネガティブ テキストE_nの埋め込みを出力します。
次に、次の三重項損失を最適化してトレーニングします。
L = max( d(E_a, E_p)-d(E_a, E_n)+alpha, 0)
この実験では、d はユークリッド距離、alpha は 0.4 に等しいハイパー パラメーターです。
基本的に、この損失によってできることは、**d(E_a, E_p) を小さくし、d(E_a, E_n) **を大きくすることです。その結果、各画像の埋め込みはその説明の埋め込みに近くなり、説明の埋め込みからは遠くなります。ランダムなテキスト。
画像埋め込みモデルとテキスト埋め込みモデルを学習したら、 tsne (https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html) を使用してそれらを 2 次元に投影することで視覚化できます。
テスト画像とそれに対応するテキストの説明は緑色の線でリンクされています
プロットから、一般に、埋め込み空間では、画像とそれに対応する説明が近いことがわかります。使用されたトレーニング損失を考慮すると、これは予想されることです。
ここでは、テキスト クエリの例をいくつか使用して、70,000 枚の画像セットから最も一致するものを検索します。クエリのテキスト埋め込みを計算してから、コレクション内の各画像の埋め込みを計算します。最後に、埋め込み空間でクエリに最も近い上位 9 枚の画像を選択します。
これらの例は、埋め込みモデルが画像の有用な表現と単純な単語の構成の埋め込みを学習できることを示しています。
ここでは、画像をクエリとして使用し、70,000 枚の画像のデータベースからその画像に最も類似した例を検索します。ランク付けは、ユークリッド距離を使用して埋め込み空間内で画像の各ペアがどれだけ近いかによって決定されます。
この結果は、生成されたエンベディングが、方向、照明、または局所的な些細な詳細に過度に影響されることなく、明示的にトレーニングされていなくても、表現されたオブジェクトの最も重要な特徴を捉えた高レベルの画像表現であることを示しています。
このプロジェクトでは、画像のコレクションに適用されるキーワードと画像ベースの検索エンジンを構築できる機械学習ブロックに取り組みました。基本的なアイデアは、テキストと画像の意味のある結合された埋め込み関数を学習し、埋め込み空間内のアイテム間の距離を使用して検索結果をランク付けすることです。
参考文献: