Google画像検索がどのように機能するかを最もよく推測できますか?写真をアップロードして、類似の画像を検索できます。類似の画像を識別するためにどのアルゴリズムを使用しますか?
Google画像検索がどのように機能するかを最もよく推測できますか?写真をアップロードして、類似の画像を検索できます。類似の画像を識別するためにどのアルゴリズムを使用しますか?
回答:
Googleがどのアルゴリズムを使用しているかわかりません。しかし、あなたは最良の推測を望んでいたので、同様のシステムをどのように構築できるかについていくつかのアイデアをお聞かせください。
search-image-base-by-imageを扱うフィールド全体は、Content Based Image Retrieval(CBIR)と呼ばれます。アイデアは、何らかの形で、画像コンテンツに関する情報を含む画像表現(必ずしも人間が理解できるとは限らない)を構築することです。
2つの基本的なアプローチがあります。
低レベルのローカルアプローチは非常によく研究されています。現在の最良のアプローチでは、ローカルフィーチャを抽出し(ここに含まれるフィーチャ抽出アルゴリズムの選択があります)、そのローカル記述子(再び、記述子の選択)を使用して画像を比較します。
新しい作品では、ローカル記述子が最初にクラスタ化され、次にクラスタが視覚的な単語として扱われます。この手法は、Googleドキュメント検索に非常に似ていますが、文字単語の代わりに視覚的な単語を使用します。
視覚的な単語は、言語の語根に相当するものと考えることができます。たとえば、work:working、workedという語はすべて同じ語根に属します。
この種の方法の欠点の1つは、通常、低テクスチャ画像でパフォーマンスが低いことです。
これらのアプローチの詳細については、既に多くの回答を提供しているので、それらの回答へのリンクを提供します。
セマンティックアプローチは通常、画像全体の階層表現に基づいています。特に一般的な画像タイプでは、これらのアプローチはまだ完成していません。これらの種類の技術を特定の画像ドメインに適用することに成功しました。
私は現在これらのアプローチの研究の最中なので、結論を出すことはできません。さて、そうは言っても、これらのテクニックの背後にある一般的なアイデアをこの回答で説明しました。
繰り返しますが、一般的な考え方は、葉を画像の詳細が含まれるツリー構造で画像を表現することであり、オブジェクトはそのような木の根に近いノードで見つけることができます。次に、何らかの方法でサブツリーを比較して、異なる画像に含まれるオブジェクトを識別します。
さまざまなツリー表現のリファレンスを次に示します。私はそれらすべてを読んだわけではなく、それらのいくつかはCBIRの代わりにセグメンテーションのためにこの種の表現を使用していますが、それでもここにあります:
ペネロペの答えに加えて、2つのアプローチがあります。知覚ハッシングと、基本的な機能が簡単に実装され、より高度な領域に進出する前に遊ぶ、または学ぶのに適したバッグオブワードモデルです。
知覚的ハッシュ
知覚的ハッシュアルゴリズムは、暗号化ハッシュとは異なり、スケーリングやJPEG圧縮などによりわずかに歪んだ同一の画像に対して、類似またはほぼ類似のハッシュ値を与えるハッシュを構築することを目的としています。これらは、画像コレクション内の重複の近くを検出するのに役立ちます。
最も基本的な形式では、次のようにこれを実装できます。
画像をグレースケールに変換する
画像をゼロ平均にする
結果は、イメージの低周波数成分に基づいているため、復元力のある64ビットハッシュです。このテーマの変形は、各画像を64個のサブブロックに分割し、グローバル画像の平均をローカルサブブロックの平均と比較し、それに応じて1または0を書き出すことです。
バッグオブワードモデル
bag-of-wordsモデルは、画像、たとえば犬が写っているすべての画像を意味的に識別することを目的としています。これは、特定の単語の出現に基づいてテキスト文書を分類するのと同じ精神で、特定の画像パッチを使用することによりこれを行います。「dog」と「dogs」などの単語を分類し、それらを「dog」カテゴリが「dog」または「dogs」を含むすべてのドキュメントを指す反転ファイルに識別子として格納できます。
最も単純な形式では、次のように画像を使用してこれを行うことができます。
これで、SIFT記述子の膨大なコレクションができました。問題は、ほぼ同一の画像からであっても、記述子間に多少の不一致があることです。いくつかの単語を「犬」と「犬」として同一のものとして扱うように、同じものを多かれ少なかれ一緒にグループ化し、エラーを補正する必要があります。ここで、クラスタリングが機能します。
次に、クエリ画像に似た画像を見つけるなどの画像クエリは、次のように解決されます。
上記の回答で無視されていると思われる他の興味深いアプローチは、Deep Convolutional Neural Networksです。Googleは現在、画像検索エンジンと翻訳サービスにこれを使用しているようです。CNNは、類似性の検出などの認知タスクにおいて非常に強力です。CNNは、ネットワーク層を通じて埋め込まれたBag-of-Worldsの同様の手順を実行しているようです。この手法の欠点は、学習することができず、トレーニング用の巨大なデータセットが必要であり、もちろんトレーニング段階での計算コストが高いことです。
この点に関する推奨論文:
およびオープンソースの深層学習画像検索の実装(後の論文):https : //github.com/paucarre/tiefvision