Posts by makino

【Curious Vehicle 第14回 勉強会ネタ】

『Solrを利用した画像検索について』 Part2

また2週間ほど空いてしまいました。お疲れ様です.makino です。

* 今回は先日の第11回 Solr勉強会でお話しさせていただいた『Solrを用いた画像検索システム』について継続して共有をさせていただきます。

* 今回は特徴情報をSolrのIndexデータとしてまとめる部分についてご説明いたします!

【解説】Solrで画像を検索するための3ステップ Part2
Solrによる画像検索-2 001

・Part1で行った画像データの特徴情報化だけでは情報量が多くまた計算量も増えてしまうため、『特徴情報のクラスタリングによるWORD化』を行います。

クラスタリングアルゴリズム:K平均法クラスタリング(K-means)

  • クラスタリングアルゴリズムとしてK平均法クラスタリングを簡単にご紹介します
  • K-means は 入力データを k個のクラスタに分類する単純な分類機アルゴリズムです
  • ランダムに振り分けたクラスタから各クラスタの重心を測定し、重心に近い座標で 再度重心計算とクラスタリングを繰り返すクラスタリング手法です

Solrによる画像検索-2 002

  • 上記の図はクラスタリング数を2として 重心計算を20回繰り返した結果を示しています

K平均法クラスタリングによるクラスタリング処理の流れ

  • 前回の復習も含め どのように動くか流れを見てみます!
    1. 解析用の画像を準備します

    Solrによる画像検索-2 003

      今回は画像の特徴量情報を検索軸として利用するため、色情報をカットします

    Solrによる画像検索-2 004

      SIFT特徴量アルゴリズムを実施し、特徴が検出された地点にプロットしています

    Solrによる画像検索-2 005

      K平均法クラスタリングを利用し画像の特徴情報のクラスタリングを行います

    Solrによる画像検索-2 006

      クラスタリング結果をヒストグラム化し、SolrのWORD情報として切り出します

    Solrによる画像検索-2 007

* これらのクラスタリング処理も検索画像すべてに実施します
* 勉強会の際はクラスタリング数を全画像100固定でクラスタリングを行っています
* この状態でやっとSolrに投入できる状態のデータが出来上がりましたので、『Solrによる画像情報の検索』へ進みたいと思います

Tips:Solr勉強会以降の進展について

その1:特徴量とクラスタリングの数のチューニングについて

  • 前回、特徴量の数に比例させk-meansによるクラスタ数を変化させるようなチューニングでは検索精度の向上という部分とは紐づかなかったと書かせていただきました
  • こちらの改善として精度向上が見られた点を共有したいと思います
  • Part1でのTipsにも書きましたが、検索精度が低い画像は総じて特徴情報の量が少ない傾向がありました。
  • 情報量が少ない画像は画像加工処理を追加し画像を回転させて再度特徴情報を取得することである程度安定した特徴量の抽出が行え、検索精度の高い向上が見られました
  • Sift特徴量のアルゴリズムでは、特徴が発生した座標やアングル情報を持っていますが今回の画像検索では汎用性という意味でこちらの情報を利用せず特徴情報のみで類似検出を行っているためこのような結果につながっていると思います
  • 用途が絞られるような画像検索であればもっとピンキーなチューニングにより精度向上が狙えると思うのですが、汎用性を踏まえ検証したところでは上記のようなチューニングで高い効果の確認ができました
  • 作業量の多そうな検証を省いたわけでなありません!たぶん!
【Curious Vehicle 第14回 勉強会ネタ】

『Solrを利用した画像検索について』

みなさまご無沙汰しております。makino です。

* 今回は先日の第11回 Solr勉強会でお話しさせていただいた『Solrを用いた画像検索システム』についてこちらで発表させていただきます!

* テキストデータの検索ツールであるSolrで画像検索も行えたら今までとは違うインターフェースやサービスを作れるのでは!?
* Solr勉強会で話をさせていただいた時よりも改善を加えていますのでお付き合いいただければと思います!

【解説】Solrで画像を検索するための3ステップ
Solrによる画像検索 001

・画像情報はそのままでは検索が行えないので、Solrが得意なテキスト形式に画像データを加工していきます。
・そのファーストステップとして、『画像の特徴情報の抽出』を行います。

特徴点抽出アルゴリズム:SIFT特徴点解析

  • まず特徴点抽出アルゴリズムとしてSIFTの概要をご紹介します
  • SIFTアルゴリズムは画像内の特徴点の検出を行い、座標やスケールなどの情報を応答として抽出します
  • SIFTでは各特徴点毎に以下の情報が取得できます
    1. x座標
      y座標
      スケール
      回転角度
      対応する128の記述子

SIFT特徴点解析による特徴点抽出の流れ

  • どのように動くか流れを見てみます!
  • Solr勉強会の際は、著作権的にNGな画像を多量に使ってしまいましたが、今回は弊社のロゴで許してください
    1. 解析用の画像を準備します

    Solrによる画像検索 002

      今回は画像の特徴量情報を検索軸として利用するため、色情報をカットします

    Solrによる画像検索 003

      SIFT特徴量アルゴリズムを実施し、特徴が検出された地点にプロットしています

    Solrによる画像検索 004

      特徴のベクトルをサークルの大きさで表示しています

    Solrによる画像検索 005

      実際は各特徴点ごとに以下のような情報が数値化されて取得できます

    Solrによる画像検索 006

* これらの解析処理を検索画像すべてに実施します
* この状態ではまだSolrのword情報(Term)としては少し情報が荒いため、『特徴情報のクラスタリングによるWord化』へ進みたいと思います
* 勉強会の際にお見せしたデモサイトも近いうちに公開したいと思います。よろしくお願いします!

Tips:Solr勉強会で質問いただいた点について
質問1:特徴量とクラスタリングの数のチューニングについて

  • 今回はクラスタリング数をを100固定としてしまいましたが、今回の検索精度を上げるための1番のチューニングポイントだったのでまず検証を進めました
  • 結果からとなりますが、特徴量の数に比例させk-meansによるクラスタ数を変化させましたが、検索精度の向上という部分とは紐づきませんでした
  • ただこちらを調べているうちに特徴点の数が画像によりだいぶ検出数が異なっていることを確認しこちらを改善することで検索精度の大きな向上が見られました
  • k-meansは計算量を減らすためのアプローチとして利用していますが、検索精度という意味でのアプローチではないため、DeepLearningや教師有り的なアルゴリズムへ次はチャレンジしようと思います

質問2:tf-idfにより画像の特徴がロストしてしまわないか

  • 画像の特徴から作り出したTerm情報の頻度分布を見てみましたが、小さい特徴の塊が6~7割の割合を占め大きな特徴情報がうまくロングテールとなり検索精度の向上に繋がっているように見られました

※ 質問いただいた方とは、先日のトレジャーデータさんの懇親会でまたお会いしました。まさかトレジャーの方だったとは

【Curious Vehicle 第12回 勉強会ネタ】

『遺伝的アルゴリズムについて』

みなさま初めまして。makino です。

それでは今回のネタですが、『アルゴリズム』として『遺伝的アルゴリズム』を取り扱います。

そうアルゴリズム!魅惑の響きですね。最近まったくそういった響きとは離れた作業ばかりしていますが、面白い技術を広く書き連ねていきたいと思ってます!

【解説】遺伝的アルゴリズムについて

  • 遺伝的アルゴリズムは、生物の進化をプログラムで表現するAIアルゴリズムの1種です
  • 生物の進化は世代交代を繰り返すごとに染色体の情報をクロスオーバし、環境などに適用するよう常に進化します
  • この動きをアルゴリズムとして表現したものが遺伝的アルゴリズムとなります

遺伝的アルゴリズム 001

  • ある一定の確率で突然変異を発生させるアルゴリズムも必要です
  • 突然変異の必要性は後半にあるサンプルを確認してみてください

遺伝的アルゴリズム 001

  • アルゴリズムフローは 以下の2~3を繰り返し進化を行います

遺伝的アルゴリズム 001

    1. 第1世代の作成 (初期化)
    2. 適応性の評価
    3. エリートの選択
    4. 進化 (新世代の作成)
  • 世代交代を繰り返すことで徐々に徐々にこちらが求める水準まで各ゲノムが進化していきます!

【サンプル】 遺伝的アルゴリズムサンプル

  • では非常に見ずらく申し訳ないのですがSampleでもご覧ください
  • このサンプルは、以下の表にある条件で繰り返し実行します
  • サンプルなので、各染色体の値が1となる(合計50となる)ゲノムが優秀として評価する単純な評価で進めます

遺伝的アルゴリズム sample 004

1. 第1世代作成 (初期化)

    • 初期化として、第1世代となるゲノム因子をランダムにて作成します
    • 適応値についても20前後の低い値のゲノムが揃っています

遺伝的アルゴリズム sample 001

2. いきなりですが、80世代目まで経過しました

    • 適応性も 20前後だったのが、40台まで成長しています
    • ココで注目していただきたいのは、赤でくくられた 全世代が “0” の の染色体があります
    • 通常のクロスオーバでは、この染色体はいつまでたっても、“0” のままですが ...。

遺伝的アルゴリズム sample 001

3. またまた飛びますが 100世代目

    • 親が “0” の因子しかもっていなかった要素に “1” を持つゲノムが発生しています
    • 突然変異(1%) により、絶対生まれてこない条件で必要な”1″の因子が発生しているのがわかります
    • 今回では約 100世代 目で 必要な 50の適正値を持つゲノムが発生しました

遺伝的アルゴリズム sample 003

【まとめ】 遺伝的アルゴリズムとは

  • 統計アルゴリズムではありますが、AI的なアルゴリズム
  • 問題の予測が難しい場合 などに有用 (サンプルは単純すぎますが...。)
  • EC系でも、ロングテイルではなく優良顧客に特化した情報パターンを検出したい場合などに有用
  • ゲノムごとに分散が可能なので、MapReduceなどとも相性がよさそうです
こんなところで今回はまとめとさせていただきます!!