Googleは「画像で検索」サイトにどのアルゴリズムを使用していますか?


45

Google画像検索がどのように機能するかを最もよく推測できますか?写真をアップロードして、類似の画像を検索できます。類似の画像を識別するためにどのアルゴリズムを使用しますか?


画像のヒストグラムを保存する場合があります。これは、同じ画像のさまざまなスケールと、圧縮アーチファクトなどの小さな違いに対して機能します。
ヘリウム

1
ヒストグラムは空間情報をキャプチャしません。誤った一致が得られます。
エムレ

ニューラルネットワーク:research.googleblog.com/2015/06/...
endolith

回答:


29

Googleがどのアルゴリズムを使用しているかわかりません。しかし、あなたは最良の推測を望んでいたので、同様のシステムどのように構築できるかについていくつかのアイデアをお聞かせください。

search-image-base-by-imageを扱うフィールド全体は、Content Based Image Retrieval(CBIR)と呼ばれます。アイデアは、何らかの形で、画像コンテンツに関する情報含む画像表現(必ずしも人間が理解できるとは限らない)を構築することです。

2つの基本的なアプローチがあります。

  • 低レベル(ローカル)機能を使用した検索:画像の特定の部分の色、テクスチャ、形状(画像はローカル機能の記述子のコレクションです)
  • 画像が何らかの方法でオブジェクトとそれらの関係のコレクションとして表される意味論的アプローチ

低レベルのローカルアプローチは非常によく研究されています。現在の最良のアプローチでは、ローカルフィーチャを抽出し(ここに含まれるフィーチャ抽出アルゴリズムの選択があります)、そのローカル記述子(再び、記述子の選択)を使用して画像を比較します。

新しい作品では、ローカル記述子が最初にクラスタ化され、次にクラスタが視覚的な単語として扱われます。この手法は、Googleドキュメント検索に非常に似ていますが、文字単語の代わりに視覚的な単語を使用します。

視覚的な単語は、言語の語根に相当するものと考えることができます。たとえば、workworking、workedという語すべて同じ語根に属します。

この種の方法の欠点の1つは、通常、低テクスチャ画像でパフォーマンスが低いことです。

これらのアプローチの詳細については、既に多くの回答を提供しているので、それらの回答へのリンクを提供します。

  • CBIR:12
  • 特徴抽出/説明:1234

セマンティックアプローチは通常、画像全体の階層表現に基づいています。特に一般的な画像タイプでは、これらのアプローチはまだ完成していません。これらの種類の技術を特定の画像ドメインに適用することに成功しました。

私は現在これらのアプローチの研究の最中なので、結論を出すことはできません。さて、そうは言っても、これらのテクニックの背後にある一般的なアイデアをこの回答で説明しました。

繰り返しますが、一般的な考え方は、葉を画像の詳細が含まれるツリー構造で画像を表現することであり、オブジェクトはそのような木の根に近いノードで見つけることができます。次に、何らかの方法でサブツリーを比較して、異なる画像に含まれるオブジェクトを識別します。

さまざまなツリー表現のリファレンスを次に示します。私はそれらすべてを読んだわけではなく、それらのいくつかはCBIRの代わりにセグメンテーションのためにこの種の表現を使用していますが、それでもここにあります:


22

ペネロペの答えに加えて、2つのアプローチがあります。知覚ハッシングと、基本的な機能が簡単に実装され、より高度な領域に進出する前に遊ぶ、または学ぶのに適したバッグオブワードモデルです。

知覚的ハッシュ

知覚的ハッシュアルゴリズムは、暗号化ハッシュとは異なり、スケーリングやJPEG圧縮などによりわずかに歪んだ同一の画像に対して、類似またはほぼ類似のハッシュ値を与えるハッシュを構築することを目的としています。これらは、画像コレクション内の重複の近くを検出するのに役立ちます。

最も基本的な形式では、次のようにこれを実装できます。

  1. 画像をグレースケールに変換する

  2. 画像をゼロ平均にする

  3. [32x32]のように、画像をサムネイルサイズに縮小します
  4. 2次元離散コサイン変換を実行します
  5. 左上[8 x 8]、最も重要な低周波成分を維持
  6. コンポーネントの符号に基づいて、ブロックを二値化します

結果は、イメージの低周波数成分に基づいているため、復元力のある64ビットハッシュです。このテーマの変形は、各画像を64個のサブブロックに分割し、グローバル画像の平均をローカルサブブロックの平均と比較し、それに応じて1または0を書き出すことです。

知覚ハッシュは、たとえばphashによって実装されます

バッグオブワードモデル

bag-of-wordsモデルは、画像、たとえば犬が写っているすべての画像を意味的に識別することを目的としています。これは、特定の単語の出現に基づいてテキスト文書を分類するのと同じ精神で、特定の画像パッチを使用することによりこれを行います。「dog」と「dogs」などの単語を分類し、それらを「dog」カテゴリが「dog」または「dogs」を含むすべてのドキュメントを指す反転ファイルに識別子として格納できます。

最も単純な形式では、次のように画像を使用してこれを行うことができます。

  1. たとえば、優れたvlfeatライブラリを使用して、いわゆるSIFT機能を展開します。これにより、SIFT機能ポイントとポイントごとのSIFT記述子が検出されます。この記述子は基本的に、その特徴点を囲む画像パッチのスマートに構築されたテンプレートです。これらの記述子は、あなたの生の言葉です。
  2. 関連するすべての画像のSIFT記述子を収集する

これで、SIFT記述子の膨大なコレクションができました。問題は、ほぼ同一の画像からであっても、記述子間に多少の不一致があることです。いくつかの単語を「犬」と「犬」として同一のものとして扱うように、同じものを多かれ少なかれ一緒にグループ化し、エラーを補正する必要があります。ここで、クラスタリングが機能します。

  1. すべてのSIFT記述子を取得し、たとえばk-meansなどのアルゴリズムでクラスター化します。これにより、記述子データに重心を持つクラスターの事前に決定された数が見つかります。これらの重心は、新しい視覚的な言葉です。
  2. これで、イメージとその元の検出された記述子ごとに、これらの記述子が割り当てられたクラスターを確認できます。これから、重心または視覚的な言葉が画像に「属している」ことがわかります。これらの重心または視覚的な単語は、画像の新しいセマンティック記述子になり、反転ファイルに保存できます。

次に、クエリ画像に似た画像を見つけるなどの画像クエリは、次のように解決されます。

  1. クエリイメージでSIFTポイントとその記述子を見つける
  2. 登録フェーズで以前に見つけた重心にクエリ記述子を割り当てます。これで、クエリ画像に関連する重心または視覚的な単語のセットができました。
  3. クエリのビジュアルワードを反転ファイル内のビジュアルワードに一致させ、一致する画像を返します

1
バッグオブワードアプローチは、基本的に「ローカルアプローチ」へのリンクがもたらすものです:) 実際にはセマンティックではありませんが、1つの機能で1匹の犬を表すことはありません。犬のような異なる犬のスパイス。しかし、知覚的ハッシュは素晴らしいものであり、それについては知りませんでした。説明がいいです。これは私に考えさせられました...あなたはそのテクニックを非矩形領域に適用する方法を提案しますか?または、記事への参照を提供して、少し読むこともできます。質問が理にかなっている場合は、別の質問として開きます。
ペネロペ

1
@penelope実際に数年前に記事で読​​んだことがあります。著者は、画像を任意の三角形に分割しました。また、知覚ハッシュの基礎としても使用されているトレース変換があります。返信します。
マウリッツ

これについて尋ねたいことはすべてこの質問の範囲をはるかに超えているので、新しい答えを開きました。基本的な手法についての情報/参照は、この回答でもそのいずれでも素晴らしいでしょう。楽しみにして:)
ペネロペ

2

上記の回答で無視されていると思われる他の興味深いアプローチは、Deep Convolutional Neural Networksです。Googleは現在、画像検索エンジン翻訳サービスにこれを使用しているようです。CNNは、類似性の検出などの認知タスクにおいて非常に強力です。CNNは、ネットワーク層を通じて埋め込まれたBag-of-Worldsの同様の手順を実行しているようです。この手法の欠点は、学習することができず、トレーニング用の巨大なデータセットが必要であり、もちろんトレーニング段階での計算コストが高いことです。

この点に関する推奨論文:

およびオープンソースの深層学習画像検索の実装(後の論文):https : //github.com/paucarre/tiefvision

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.