stMind

about Tech, Computer vision and Machine learning

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

The boring technology behind a one-person Internet companyの話

www.listennotes.com

ListenNoteというポッドキャスト検索エンジンがあるのですね。個人としては、ポッドキャストってあんまり使ってないのだけど、タイトルに惹かれて読んでみた。ちなみに、タイトルにあるboring technologyは退屈なということではなく、慣れ親しんだ技術ということのようです。

  • ListenNotesは、ListenNotes.comAPIを提供している
  • 全てAWS上で動いていて、合計20サーバーで構成(production-something)
  • BackendはDjango / Python3、OSはUbuntu
  • Web FrontendはReact + Redux + Webpack + ES

その他にも、サーバ構成管理や開発ツールなども詳細に紹介されてて、一見の価値ありです。

Tensorflowとpythonで書かれたmusic source separationのためのライブラリSpleeter

deezer.io

github.com

music source separationは、複数の楽器演奏パートの合成音源から個別の演奏パート(trackやstem等と呼ぶ)に分割するタスクのこと。例えば、ボーカル、ベース、ドラム、その他、それぞれの音源に分割するなど。

https://archives.ismir.net/ismir2019/latebreaking/000036.pdf

ISMIR2019(International Symposium on Music Information Retrieval)のextended abstractにあるImplementation detailsは以下の通りです。

  • 12層のU-net
    • 6層のencoder / 6層のdecoder
  • Single GPUで1週間学習
  • musdb18のテストデータセット(3時間27分のaudio)に対して、4つのパートに分割して、wavファイルに出力するまで2分以下
    • Tensorflowのモデルをロードする時間(15秒程度)を含む
    • RTX2080Ti、Intel Xeon Gold 6134 CPU @ 3.20GHz
  • 100秒のaudioであれば、1秒以下で4つのパートに分割できる
  • 公開の既存システムOpen-Unmixと比較して、多くの指標で精度向上

OCR用データセットのcoco-textとSynthTextを可視化

bgshih.github.io

OCR用のデータセットでcoco-textがあります。約6万4千枚のCOCO2014の画像に対して、約24万のテキスト領域のバウンディングボックスがアノテーションデータとして提供される大規模なデータセットの一つです。

www.robots.ox.ac.uk

また、画像にテキストを重畳して作られたSynthTextというデータセットもあります。こちらは、8万枚の画像で、約800万のテキスト領域がある超大規模なデータセットです。ただ、残念ながら、現在はダウンロード出来ないようです。

coco-textの可視化

比較的検出の容易な画像から、矩形の傾きが大きかったり、目視でも認識できないようなサイズのテキスト領域も含む難易度の高いデータセットです。

f:id:satojkovic:20200510202535p:plain

f:id:satojkovic:20200510203028p:plain

f:id:satojkovic:20200510203523p:plain

SynthTextの可視化

SynthTextは、テキスト領域をうまく囲めてないアノテーションが結構あって、縦横比を見て事前処理する等の処理が必要そうです。

f:id:satojkovic:20200510204303p:plain

f:id:satojkovic:20200510204530p:plain

検出器の学習に使うにあたって

pre-trainedのSSDを使ってcoco-textで学習してみたけど、なかなか検出率が上がらなかった。また、SynthTextを追加したが、事前処理をやってなかったのもあって、検出率に変化はあまりなかった。

この二つのデータセットは最初に使うデータセットとしては少し扱いにくいと思われるので、もう少し小さいtotaltextStreet View Text Datasetなどのデータセットを使うのが良い気がする。