takminの書きっぱなし備忘録 @はてなブログ

主にコンピュータビジョンなど技術について、たまに自分自身のことや思いついたことなど

AR探索アドベンチャーのデモ動画

弊社で開発したゲームプラットフォーム「AR探索アドベンチャー」のデモ動画を作成しました。

商店街や観光地の集客/周遊、博物館や美術館などの教育コンテンツや、学校や企業の研修/オリエンテーションなどにご活用いただけます。

www.youtube.com (2024/04/13 追記) 某社から許可がもらえなかったため、動画を差し替えました。

ご興味ある方はぜひこちらのページからお問い合わせください。

www.overlay-world.com

昨年、こちらのプラットフォームを使用して、綱島公園で「妖怪ハンター候補生」というコンテンツのテストプレイを行いました。デモ動画にはこちらのコンテンツを一部使ってます。 takmin.hatenablog.com

今さらNetVLADの日本語解説

というわけで、自分が解説記事を書こうかと思い立ちました。

NetVLADが発表されたのは2016年のCVPRなので[1]、進化の早いAI分野では古めの技術となってしまいますが、画像検索(Image Retrieval)や、撮影場所の推定(Visual Place Recognition)などの論文に未だに現役で出てくる手法なので、この日本語記事が色んな人の役に立ったら良いなと期待してます。

NetVLADは1枚の画像全体を1つの特徴ベクトル(Global Feature)に変換するためのもので、例えば画像検索タスクであれば、クエリー画像から抽出した特徴ベクトルとデータベース内に格納された特徴ベクトルとの距離を計算し、最も短いものを検索結果として取得することができます。

NetVLAD自体は、深層学習の1レイヤーでしかなく、ResNetやVision Transformer等のバックボーンネットワークの最終層に追加するだけで、特徴マップを1つの特徴ベクトルへ変換してくれます。 そのため非常に汎用性が高く、例えば点群などの異なるドメインの問題にも適用されてきました[2]。

VLAD

まずはNetVLADの前にVLADという特徴量について簡単に説明します[3]。 深層学習が登場する前、画像検索のタスクや一般物体認識などのタスクでは、局所特徴量(Local Feature)というものが主に利用されてきました。これは、画像からコーナーなどの顕著性のある点、またはグリッド状に点をサンプリングし、その周辺領域のテクスチャを特徴ベクトルへと変換したもので、代表的なものとしてSIFTがあります。なお、SIFTなどの人間がデザインした画像特徴量表現のことを「ハンドクラフト特徴」と呼び、特徴量自体を学習するニューラルネットワークベースの手法と区別します。

VLADはこの画像から抽出した局所特徴量を、画像全体をあらわす1つの特徴ベクトル(Global Feature)へ集約させるための手法の1つです。

VLADははじめに、学習画像から取得した局所特徴量をk-means等でクラスタリングし、Visual Wordsと呼ばれる辞書を作成します。

VLADはクエリー画像に対しても同様に局所特徴量を抽出し、各局所特徴がどのVisual Wordに属するのかを探索し、以下のような式で画像全体の特徴ベクトル(Global Feature)を記述します。

今、1枚のクエリー画像からN個のD次元局所特徴量を取得し、またVisual Wordsの数をK個とすると、VLAD特徴は以下の式(1)で計算できるK x D次元ベクトルになります。

式(1)

ここで、 \mathbf{x}_iはi番目の局所特徴量をあらわし、 x_i(j)はそのj番目の要素を表すものとします。また c_k(j)はk番目のVisual Wordベクトルのj番目の要素です。

 a_k( \mathbf{x_i})は、局所特徴量 \mathbf{x}_iがk番目のVisual Wordに割り当てられたときは1、そうでないときは0の値を取ります。

この式の意味するところは、以下の図のように各Visual Wordごとに、そこに割り当てられた局所特徴量との差分を取って合計し、それを並べたものをGlobal Featureとする、ということになります。

VLAD特徴

NetVLAD

NetVLADは深層学習ブームの初期に登場した手法で、それまでGlobal Featureの生成に使用していたハンドクラフト特徴を、より強力な深層学習の特徴マップに置き換えよう、という目的で提案されました。

NetVLADはVLADを表す式(1)を学習可能とするために、いくつかの工夫をしています。

1つは \mathbf{x}_iクラスタkに属するかどうかで1か0の二値を取っていた a_k (Hard Assignment)を、以下のように0から1までの連続値を取るように変更します(Soft Assignment)。

式(2)

ここで \mathbf{c}_kはk番目のクラスタ中心(セントロイド)で、 \alphaはセントロイドからの距離に応じて減衰を調整するパラメータです。なお \alpha \rightarrow \inftyの時、通常のVLADと同じになります。

さて、 -\alpha ||\mathbf{x}_i - \mathbf{c}_k||^2を展開すると、 e^{-\alpha \mathbf{x}_i^2} が分母と分子でキャンセルされるので、 \mathbf{w}_k = 2 \alpha \mathbf{c}_k b_k = -\alpha \mathbf{c}^2とすると以下式(3)のように書けます。

式(3)

まとめると、NetVLAD特徴は以下の式(4)で算出されます。

式(4)

NetVLADでは、この \mathbf{w}_k b_k \mathbf{c}_kをそれぞれ独立したパラメータとして、学習により求めます。 (式展開の時に \mathbf{w}_k b_k \mathbf{c}_kが含まれていましたが、無視して独立したパラメータとして扱います)

これらのパラメータを教師あり学習で計算すると、VLADと比べて下の図のような利点があります。

学習の利点

この緑と赤の点が異なる画像から取得した局所特徴量の場合、k-means等のUnsupervisedな方法で求めたVisual Word (×)よりも、より識別に有利なVisual Word (★)を学習することが可能になります。

さて、NetVLADはD次元の特徴ベクトル \mathbf{x}_iを可変サイズ個入力すると、1つのK x D次元ベクトル \mathbf{V}を出力してくれます。

このD次元ベクトル \mathbf{x}_iは、VLADでは1枚の画像から抽出した疎な局所特徴量群でしたが、NetVLADではこれが特徴マップ全体になります。

従って、NetVLADは特徴マップを生成するバックボーンネットワークの最終層に追加する形で使用されます。

全体アーキテクチャ

Paper with CodeのVisual Place Recognitionタスクにおいて、本稿執筆時点でMapillary val、Oxford RobotCar Dataset、Baidu Mall等のデータセットで1位を取っているAnyLocは[4]、基盤モデルであるDINOv2上にNetVLADレイヤーをつけています。

ただし、なぜかSoft Assignment使うよりもHard Assignmentを使う方が性能が良かったそうです。(あれ?)

まとめ

というわけで、NetVLADについて簡単に解説しました。僕は深層学習前からコンピュータビジョンをやっているオジサンなので、VLADというハンドクラフト特徴を、自然な形で深層学習用に移行させたのが美しいなあと思っています。

他にも、特徴マップをGlobal Featureへ変換する方法としてGeM Pooling[5]なども有名で、Image RetrievalではGlobal Features are All you needという論文[6]がこのGeM Poolingを組み合わせてROxford等でSoTAをとっています。他にも深層学習用のGlobal Featureは色々あるみたいですが、必要が出たら調べてみます。

参考文献

[1] Arandjelovic, R., Gronat, P., Torii, A., Pajdla, T., & Sivic, J. (2016). NetVLAD: CNN Architecture for Weakly Supervised Place Recognition. IEEE Conference on Computer Vision and Pattern Recognition.

[2] Uy, M. A., & Lee, G. H. (2018). PointNetVLAD: Deep Point Cloud Based Retrieval for Large-Scale Place Recognition. Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR)

[3] Jegou, H., Douze, M., Schmid, C., & Perez, P. (2010). Aggregating local descriptors into a compact image representation. IEEE Conference on Computer Vision and Pattern Recognition,

[4] Keetha, N., Mishra, A., Karhade, J., Jatavallabhula, K. M., Scherer, S., Krishna, M., & Garg, S. (2024). AnyLoc: Towards Universal Visual Place Recognition. IEEE Robotics and Automation Letters

[5] Radenovic, F., Tolias, G., & Chum, O. (2019). Fine-Tuning CNN Image Retrieval with No Human Annotation. IEEE Transactions on Pattern Analysis and Machine Intelligence

[6] Shao, S., Chen, K., Karpur, A., Cui, Q., Araujo, A., & Cao, B. (2023). Global Features are All You Need for Image Retrieval and Reranking. IEEE International Conference on Computer Vision. https://doi.org/10.1109/iccv51070.2023.01013

第12回全日本コンピュータビジョン勉強会「データセット関連読み会」資料まとめ

本日第12回全日本コンピュータビジョン勉強会(JapanCV)を「データセット関連読み会」をPRMU/IBISML/CVIM研究会との共催で広島大学東広島キャンパスにてハイブリッド開催いたしました。

以下、例によって資料やリンク等のまとめておきます。

登録サイト

kantocv.connpass.com

Togetter

togetter.com

YouTube

youtube.com

PRMU/IBISML/CVIM研究会開催プログラム

ken.ieice.org

コンピュータビジョン勉強会@関東

sites.google.com

資料まとめ

発表者 発表内容 資料
takmin Machine Learning Operations (MLOps): Overview, Definition, and Architecture https://speakerdeck.com/takmin/di-12hui-japancvfa-biao-zi-liao-machine-learning-operations-mlops-overview-definition-and-architecture
kzykmyzw "Segment Anything","Recognize Anything: A Strong Image Tagging Model","Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data","The All-Seeing Project: Towards Panoptic Visual Recognition and Understanding of the Open World"のデータセット構築解説 https://speakerdeck.com/kzykmyzw/x-anything-detanoguan-dian-kara
ryo-nakamura Pre-training Vision Transformers with Very Limited Synthesized Images
alfredplpl 画像/動画データセットの紹介と作り方(LAION-5B、CommonCanvas、DALL-E 3、Sora、Lumiere、Genie、Panda-70M) https://www.docswell.com/s/alfredplpl/KEN3MQ-2024-03-03-170253
ttyszk Full or Weak annotations? An adaptive strategy for budget-constrained annotation campaigns https://speakerdeck.com/x_ttyszk/di-12hui-japancvfa-biao-zi-liao-full-or-weak-annotations-an-adaptive-strategy-for-budget-constrained-annotation-campaigns
caprest 車載データセット構築におけるレアケースマイニング https://docs.google.com/presentation/d/1b4JzUrE1Dr5l03BWbXNbZo5jTuNQnYbcdz4yfxLyd-Y/
nao_okamo Learning Transferable Visual Models From Natural Language Supervision (ICML2021)
DINOv2: Learning Robust Visual Features without Supervision (arXiv2023)
The Effectiveness of MAE Pre-Pretraining for Billion-Scale Pretraining (ICCV2023)
https://speakerdeck.com/naok615/di-12hui-quan-ri-ben-konpiyutabiziyonmian-qiang-hui-hua-xiang-nozi-ji-jiao-shi-arixue-xi-niokeruda-gui-mo-detasetuto

私の発表資料

"Machine Learning Operations (MLOps): Overview, Definition, and Architecture"を読みました

speakerdeck.com

2023年の振り返りと2024年の抱負

新年あけましておめでとうございます。

昨年の振り返りをまとめていたら年が明けてしまいました。

多分、ブログで1年を振り返る、なんて記事を書くのは今回が初めてですが、2024年は色々と踏ん張らなくてはいけない年になりそうなので、整理のためにまとめておきます。

2023年の振り返り

コンピュータビジョン勉強会

コロナ禍後、2022年10月に久しぶりのオンサイト(ハイブリッド)開催をPRMU研究会との共催で行いましたが、それ以降2023年になってもオンサイトで3回(前後編も合わせると4回)の勉強会を開催することができました。

第58回コンピュータビジョン勉強会@関東「深層学習+3D論文読み会」資料まとめ - takminの書きっぱなし備忘録 @はてなブログ

第59回コンピュータビジョン勉強会@関東「CVPR2023読み会(前編)」 - takminの書きっぱなし備忘録 @はてなブログ

第59回コンピュータビジョン勉強会@関東「CVPR2023読み会(後編)」 - takminの書きっぱなし備忘録 @はてなブログ

第60回コンピュータビジョン勉強会@関東「ICCV2023読み会」 - takminの書きっぱなし備忘録 @はてなブログ

色々なところで話しているとおり僕が勉強会を続けているのは、とにかく自分が勉強したいからです。なので毎回発表者になるつもりではいるのですが、一応幹事なので発表者が十分にいる場合は他に譲るようにして、自分は運営に集中するようにしています。

嬉しいことに毎回多くの発表者が集まってくれるので、2023年の発表はCVPR2023読み会(前編)の1回きりでした。

MobileNeRF(第59回CV勉強会@関東発表資料) - Speaker Deck

ただ、「深層学習+3D論文読み会」の時は、テーマ的にとても発表したかったので、後日資料だけ作ってこのブログにアップしました。

点群SegmentationのためのTransformerサーベイ - takminの書きっぱなし備忘録 @はてなブログ

それと、やはりオンサイト開催となったことで、懇親会が復活したのはとても嬉しいです。参加者の皆さんから色々な話を聞くのは勉強会のもう一つの楽しみなので。

気付くともう60回やってるんですね。コロナ禍はJapanCVとして名古屋、関西と合同でオンラインで開催していたので、それもカウントすると70回に達します。

ここまで続けてこれたのは、幹事の皆さんや発表者/参加者の皆さん、会場を提供していただいた企業/大学の皆様のお陰です。

次回はJapanCVとして名古屋、関西の勉強会と合同で広島で行う予定です。

お仕事のこと

2023年の仕事で一番大きな出来事は「妖怪ハンター候補生」というARゲームのテストプレイを綱島公園で開催したことです。

AR探索アドベンチャー「妖怪ハンター候補生」 - takminの書きっぱなし備忘録 @はてなブログ

また、このゲームのことを横浜日吉新聞様に取材していただきました。

綱島公園で「妖怪ハンター」ゲーム、慶應理工で学んだ起業家がチャレンジ呼び掛け | 横浜日吉新聞

多少のトラブルはあったものの、お陰様で参加者の皆さんからは好評をいただき、手ごたえをつかむことができました。

期間中毎日綱島公園に通ってユーザの様子を見ていたのですが、子供たちが喜んでくれているのが一番の励みになりました。

このテストプレイにこぎつけるまでには実は色々な紆余曲折がありまして、とても学びの多い1年でした。

もともとサーバーサイドとWebクライアントは外注する予定だったのですが、外注先が納期を遅れに遅れた後、まったく連絡が取れなくなり、手付金を丸損した上に一から自分で開発する羽目になりました。おかげで当初は3月上旬に完成予定だったシステムが、大幅に遅れてしまいました。

私がWeb系の技術開発していたのは15年近く昔のことなのですっかりその当時とは技術も変わってしまい、開発には四苦八苦しましたが、ChatGPTの助けもあってどうにか形にすることができました。

その時にはまったWebフロントの問題が以下の記事です。

javascriptでカメラの解像度を取得するとOSやブラウザで振る舞いが異なる - takminの書きっぱなし備忘録 @はてなブログ

大変でしたが、お陰様で自分が納得いくものが作れましたし、フルスタックエンジニアにもなれました(笑)

他にも特許の取得や、ゲームというB2Cサービスの開発過程、知名度のない零細企業が地元の協力を取り付ける困難さ、社会の闇など、このサービス開発を通じて多くの学びを得ることができました。

2024年の抱負

ARゲームについては、引き続きまずは実績を積み重ねていくことと、黒字化を目指してTry&Errorをしながら、機能追加をしていきたいと思います。 こういったゲームに興味のあるイベント会社、商店街、観光地、テーマパーク等はぜひお問合せ下さい。

www.overlay-world.com

また引き続きコンピュータビジョンに関するコンサルティングや研究、開発、プロジェクトマネジメントなどの受託も続けていきます。 せっかくARゲームの開発でサーバーサイドからクライアントサイドまで一通り経験したので、それらも含めたトータルソリューション開発やプロジェクトマネジメントなどにも、より力を入れていこうと思っています。お仕事の依頼はこちらまで

もちろんコンピュータビジョンについても引き続きスキルアップを続けていきます。勉強会だけでなくこのブログでも学んだことをアウトプットしていければと思います。今年は論文の紹介だけでなく、もう少し実装寄りの話もアップしていきたいと思ってます。

それでは本年もよろしくお願いいたします。