stMind

about Tech, Computer vision and Machine learning

画像からの料理名推定

blog.stratospark.com

2017年なので少し前になりますが、画像から料理名を推定するプロジェクト。

InceptionV3のImageNet pre-trainedのモデルをFine tuningして、Food 101データセットで82.03% @ Top-1の精度が出たようです。

Food 101は、名前の通り101クラスで、各クラス1000画像含まれているので、メモリ上に展開すると80GB程度になるらしい。96GBのメモリを積んだマシンを使ったらしいが、これは富豪アプローチですね...

Data augmentationは、KerasのImageDataGeneratorで、 rotation_range、width_shift_range、height_shift_range、horizontal_flip、zoom_range、channel_shift_rangeあたりが使われてます。

学習は初期トライアルではAdamやAdaGradで試してたが、最終的にはSGDで学習。

ここから精度を上げるのは反復トライアルが必要な難しいタスクになりそうですが、スタート地点のBaselineとして使える気がします。

Baidu researchが作ったテキストからビデオを作成する技術

blog.deeplearning.ai

deeplearning.aiが発行しているnewsletterにあったVidPress。

URLを入力とすると、最初にWebページの内容を解析して、関連する記事も収集(解析には、Ernieというモデルが使われているよう)。 その後、テキストサマリを作成、サマリに関する合成音声を作成するのと、サマリに合う映像クリップを収集して、最後に映像と音声をアラインメントして出力する。

65%のユーザは、VidPressが作成したビデオを最後まで視聴したが、人が作成したビデオは途中で視聴をやめることが多かったという結果が得られたらしい。

これが未来のサッカー観戦か!Zoomでバーチャルスタンド

www.bbc.com

これからの時代のサッカー観戦はこうなるのかもしれない!

デンマークで行われたリーグ戦、当然ながら現地にファンはいないのだけど、スタジアムに設置された巨大スクリーンにはZoomにログインしたファンの姿が!!(動画は下のURLから)

https://www.espn.com/soccer/danish-sas-ligaen/story/4103225/danish-superliga-returns-in-front-of-supporters-on-zoom

40x2.8mのスクリーンに約200人のファンが映し出され、合計で1万人のファンがリアルタイムに観戦したようです。リモートとはいえ、選手はファンのリアクションが感じられるし、ファンも現地にいるような感覚になれるし、とても良い仕組みだと思う。

プレミアリーグも6月17日に再開されるようだし、感染拡大を予防しつつ、新しい体験を提供する仕組みづくりに取り組んでほしいなと思う。

Scene text detection/recognitionのためのTotal text dataset

GitHub - cs-chan/Total-Text-Dataset: Total Text Dataset. It consists of 1555 images with more than 3 different text orientations: Horizontal, Multi-Oriented, and Curved, one of a kind.

coco-textに対して40分の1くらいの画像数ですが、curved textのground truthを含むTotal-Text-Dataset。

アノテーションデータは、ここからダウンロード出来ます。 また、画像はこちらからダウンロード出来ます。

アノテーションはmatファイルで、下記のフォーマットで提供されています。

  • Column 1-2 = X-coordinate
  • Column 3-4 = Y-coordinate
  • Column 5 = Text
  • Column 6 = Orientation (c=curve; h=horizontal; m=multi-oriented; #=dont care)

画像に表示して確認してみました。下記のコードをipythonなどで実行すれば、別の画像にも同じように出来るはずです。

In [1]: import cv2

In [2]: import scipy.io as sio

In [3]: import numpy as np

In [4]: data = sio.loadmat('gt_img13.mat')

In [5]: img = cv2.imread('img13.jpg')

In [6]: for i in range(data['gt'].shape[0]):
   ...:     points = np.array([(x, y) for x, y in zip(data['gt'][i][1][0], data['gt'][i][3][0])], dtype=np.int32)
   ...:     cv2.polylines(img, [points], isClosed=True, color=(0, 255, 0), thickness=3)
   ...:     

In [7]: cv2.imshow('TEST', img)

In [8]: cv2.waitKey(0)

In [9]: cv2.destroyAllWindows()

f:id:satojkovic:20200528221125j:plain

ICCV2017の論文、Revisiting IM2GPS in the Deep Learning Era

論文を読むのがそれなりの速度で行えるようになってきた。せっかくなので、読んでいるものをこのブログにまとめていこうと思う。 といっても、詳細に入るのではなく、主にAbstractとIntroduction、代表図面のあたりのまとめで、従来手法の課題や著者のアプローチの概要を把握した内容にする。

まずは、タイトルに有るように、画像から地理位置情報を推定するタスクに関する論文。

Introduction

メタデータの付与されてない一枚の画像から位置を推定するのは、相当難しい。 そこで、クエリ画像に対してGPS座標を推定するタスクと考える。 GPS座標であれば、アプリケーションにも依るが、ある閾値以内で推定成功と判定する事ができる。

このとき考えられる手法の一つは、データベースに含まれる位置の既知な画像の中から、クエリ画像と一致する画像を局所特徴マッチングで検索するアプローチ。 ただし、このアプローチが機能するのは、

  1. データベースに含まれる画像とクエリ画像が、比較的近い見え方であること
  2. クエリ画像にランドマークとなるようなコンテンツが含まれていて、局所特徴マッチングしやすい が条件。

とはいえ、これらが成り立つことは想定できないことが多いので、局所特徴マッチングに頼らないアプローチが必要。

従来手法と課題

Im2GPSでは、Instance recognitionとScene recognitionの論文で使わたHand-craftedな特徴量を導入して、instance levelなマッチング(「ギリシャアテネにある建物」というレベル)による方法を提案した。

PlaNetでは、地球表面を細分化して、細分化したクラスの分類問題として定式化。画像からクラスの確率分布を出力するCNN(細分化した各クラスのメタデータがついた画像を用いた学習)を使うことで、大きな精度向上を果たした。

PlaNetの方法の課題は

  1. 得られる位置精度が粗い(もっと細かい位置を本当は知りたい)
  2. CNNで直接クラス分類するのは難しいタスク

アプローチ

この論文では、上記二つを併用して性能向上を目指した。実際に、PlaNetに対して+10%以上の性能向上が出来て、Deep featureの利用とこの特徴量による画像検索の構成にしたことによるものと考察してる。

f:id:satojkovic:20200527213001p:plain

Reference

Revisiting IM2GPS in the Deep Learning Era: https://arxiv.org/pdf/1705.04838.pdf

Wavenetを用いた疑似エフェクターの実現

teddykoker.com

ギターのエフェクターをWavenetで生成してやろうという試み。

モデルは24層のWavenetをベースにして、モデルサイズ削減と推論高速化のために出力を単一値(1x1フィルタで256→1に)にして、正解と予測値の差を最小化するように学習しているようです(Adamで1500エポック、RTX2070で2時間ほど)。

リンク先では両方の音源を聴き比べることが出来るのですが、どちらが生成したもので、どちらが実際に弾いたものか分からない。すごい!

コミット履歴として可視化するBERTとその派生手法

amitness.com

コミット履歴では追加されたコード(+)と削除されたコードが(-)が差分として可視化されますが、Githubに論文がプッシュされて、その後の論文が改善点をコミットしていけば、論文は重要な差分だけに圧縮されて把握しやすくなるのでは?というアイデアTwitterにポストされていたみたいで、BERTとその派生手法をPoCとしてやってみたよ、という内容。(自動生成ではなく手動で作ったのだと思われる)

論文のContributionsがコミット履歴として可視化されたイメージですね。コミットメッセージは、なぜそのようなアイデアを考えたのか、どのように実現したのか、結果はどうなったのかが記述されていれば論文を読んだり、検証したりしやすくなりそうですね。