はじめに
会社でアドベントカレンダーをやることになったのでQiitaに初投稿します。私の勤めているセーフィー株式会社は、ネットワークカメラの映像をクラウドに録画するサービスを提供している会社です。クラウド上に長時間(1カメラあたり1週間~1年)の動画が保存されているという特徴があります。
多数のカメラ・長時間録画データからユーザが自身の興味関心のある映像に効率的にアクセスするには、検索する仕組みが必要不可欠と考えています。今のところ、「映像の動き(背景差分)」、「人物の映り込み(物体検出)」、「音の大きさ」をもとに、興味のある時点にアクセスする仕組みがありますが、さらにいろいろなアクセス方法が提供できると面白そうだと思っています。
今回は、画像をクエリにして類似する映像を検索する方法を考えてみました。まだ自由研究程度のレベルなので、つっこみお待ちしています。
セーフィーのサービスおよび開発業務では、お客様の映像データにお客様の許可なくアクセスすることはありません。
やったこと
以下の方針で考えてみます。
- なんらかの方法で特徴量空間にエンコードする
- 特徴量空間で近傍探索する
特徴量空間にエンコードする方法としては、
- 表現学習済みのニューラルネットワークを使う
- 特徴量を自分で設計する
のどちらから検討しようか考えました。表現学習済みのニューラルネットを使った場合、意味(semantic)の抽出は優れているかもしれませんが、画像選択の根拠の説明が難しいかもしれないと思いました。また、表現学習の仕方によって特徴量が変わってくるのも難しそうです。ということで、まずは自分で特徴量を設計してみることにしました。
似たような色の映像が抽出できたら役に立つかも?しれないので、色相とトーンで50パレット(=特徴量)を作ってみます。
特徴量がうまく機能するのか確認するために、k-meansで3カテゴリにクラスタリングし、PCAで2次元に埋め込んで可視化してみます。(写真は私が適当に撮影したものです)
目論見どおり、うまく緑系、青系、茶系の3種類に分類されています。緑に分類されているmountain_path.pngですが、空(=青色)が多いため青に近い場所に位置しているのも良さそうです。
一方で、青色の少なそうなrobot.png(=地平ジュンこ)ですが、無彩色のパレットが不足しているため、グレーが青に分類されてしまっています。
まとめ
画像検索のお試しとして、色をベースに特徴量を作り、クラスタリングしてうまく動作しているか確認をしてみました。筋は悪くなさそうだとは思いましたが、いくつか改善したい点もでてきました。
- 無彩色系の色のパレットも必要
- Perceptual uniformなカラーパレットのサンプリングが必要
- 特徴量同士の距離の取り方。cosine 類似度 ($ = \phi \cdot \phi $ ) は類似するカラーパレットの類似度が考慮されないので、色空間の距離を重みに入れた方が良さそう
他の手法も色々と試してみたいですね。