stMind

about Tech, Computer vision and Machine learning

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などのデータセットを使うのが良い気がする。

Andrew Ng教授の論文の読み方における個人的実践方法

Andrew Ng教授が行ったレクチャーの動画。

www.youtube.com

その内容をまとめたMedium記事。

Advice on building a machine learning career and reading research papers by Prof. Andrew Ng

日本語翻訳記事。

アンドリュー・エン教授のアドバイスによる機械学習キャリアの築き方と研究論文の読み方 | AI専門ニュースメディア AINOW

個人的実践方法

  • 読むべき論文リストは、Githubawesome-somethingから拝借
  • 流し読みする20本は、CVPR / ECCV / ICCVの過去3年程度から選ぶ
    • トップカンファレンスで査読を通過した論文であり、分野に対する土地勘が少ない中でも、論理的に読み進めやすい
  • まずはTitle + Abst + Introductionで10本読むことを目指す
    • 知識が少ない中で20本読むのは長い道のり、ただし5本程度だとぼんやりと分かる程度なので、まずは10本まで頑張る。10本から20本までは、0から10本と比べて格段に読みやすくなっているはず。

少ないけど、まずはこのようなところ。

Indie hackersのインタビューで気になった個人開発成功例を5つまとめ(2)

先日のエントリIndie hackersのインタビューで気になった個人開発成功例を5本要約 - stMindの続き。

もう少しインタビュー記事を読んでみた。インタビューとして掲載されているものを、タイトルだけは一通り眺めたことになる。 先行サービスがあったとしても、需要が証明されてると考えて同じようなサービスを作ることから始めると、個人開発としてはハードル低いのかも。

Hacker news books

wallbag.it

Delim.co

Urlbox

Semantria

Indie hackersのインタビューで気になった個人開発成功例を5本要約

家にいることが多いこの時間、何か作りたい!では、何を作るのか?アイデアを得るには先行例を研究するのが一番ということで、こちらで紹介されてた個人開発者へのインタビュー記事サイトIndie hackers interviewsから気になるものを 5本ほどまとめてみた。

Linguix

ScrapingBee

Weather extension

EasyBib

Daily Coding Problem

後書き

論文を書くたびに引用を書くのが面倒だったから、それを代理してくれるサービスを作ったとか、様々なWebサービスを作ってきたら、Webサイトをクロールすることが多かったけど、そのたびに苦労していて既存ソリューションに不満が多かったとか、いつも自分が躓くポイントを解決するというのがアイデア発想の一つの方法になりそうです。

さらにもう少し踏み込んで、それを解決する既存ソリューションがあるけど、necessary featuresだけ欲しいとかlightweightでfastなものが欲しいとか、既存ソリューションが十分ではない部分まで見いだせると、一定のユーザーを獲得する可能性があるのだと思いました。

リモートワークで改めて取り組みたいポモドーロテクニック

リモートワークが基本になった今、家でどう働くかということが大きな課題! どう働くと生産性が上がるかを考えることも重要だけど、どう休むかということも併せて考えないといけないなぁと思っていて、 改めてポモドーロテクニックを使って時間管理をしてる。

自分の場合は、Be Focused Proで35分+5分を1セットにしているが、まあまあうまく実践できていると思う。

Be Focused Pro - Focus Timer

Be Focused Pro - Focus Timer

  • Denys Ievenko
  • 仕事効率化
  • ¥610

台湾のIT担当大臣の方もポモドーロで30分にしているみたいだが、30分〜40分くらいが1セットの長さとしてはベターだと思う。

note.com

1時間連続して続けると、1日が終わりに近づいた頃の疲労が半端ないし、トータルの生産性としては下がっているのではないかと思う。

まあ、単に年齢の問題かもしれないけどw

他の方のリモートワークも参考にしながら、改善してきたい!

リモートワーク・テクニック「紀平式ポモドーロ」の紹介

ケーブル嫌いのためのデスク周りをスッキリさせるテクニック|Go Ando / PREDUCTS / THE GUILD|note

ケーブル1本だけの生産性最高なデスク環境をDIYなしで作った話|柿元 崇利 / U-NEXT|note

自己流リモートワー筋 - uzullaがブログ

約二年やってみてわかった、リモートワークのホントのところ。 | Books&Apps

SSDとCRNNで簡易OCR

画像から文字列を認識するOCRシステムを、SSDとCRNNで。

github.com

最初に、SSDで文字列領域を矩形として抽出、矩形領域に対してCRNNで文字列を出力する構成です。

SSDはTensorflow Object Detection APIで、COCOだけでは十分な精度が出なかったので、SynthTextとCOCOを使って自前学習、CRNNはPytorchで実装されているモデルを利用しました。(学習は、EC2のP2インスタンスで約1.5日かかりました)

検出のSSDモデルは傾きとスケール変化には弱かったり、CRNNはアルファベットのみの学習モデルで記号は認識できない等の制約がありますが、簡易的なOCRであれば簡単に作れそうです。

論文紹介 : Composing Text and Image for Image Retrieval

CVPR2019で発表された、元画像と元画像をターゲット画像に変換するためのクエリ文を組み合わせた画像検索方式。以下、論文について簡単にまとめてみます。

目的

f:id:satojkovic:20191104162223p:plain

これは図を見ると理解しやすいと思います。エッフェル塔の画像と「人が写ってない、夜間」というクエリ文を組み合わせて検索すると、塔がズームされた夜のエッフェル塔画像が結果として得られるようにする。

こういった検索をしたいケースというのは、結構あるように思います。新しいコートを買おうとして検索、画像検索結果を眺めていると良さそうな物を見つける。色は良いけど丈がもう少し短ければなぁと思って「丈短め」と検索、みたいなことが出来ると望んだ結果を得ることが容易になりそうです。

提案方式

f:id:satojkovic:20191104183546p:plain

これも図を見て全体像を把握するとわかりやすいと思います。まず最初に、ResNet-17を用いてクエリ画像(参照画像)の特徴マップ \phi _ {x} \in \mathbb{R} ^ {W \times H \times C}を得ます。また、クエリ文もLSTMを用いて特徴ベクトル \phi _ {t} \in \mathbb{R} ^ {d}に変換します。そして、この二つを統合した特徴を用いてターゲット画像を検索するのですが、ここでTIRGという新しい統合方式を提案しています。

TIRG(Text Image Residual Gating)

特徴ベクトルの統合は、以下のように計算されます。


\begin{eqnarray}
\phi _ {xt} ^ {rg} = w _ {g} f _ {gate} ( \phi _ {x}, \phi _ {t} ) + w _ {r} f _ {res} ( \phi _ {x}, \phi _ {t} )
\end{eqnarray}

 f _ {gate} f _ {res}は図中のgated featureとresidual featureに対応していて、 w _ {g} w _ {r}は学習により得られるパラメータです。

この数式の直感的な理解には、ResNetのResidual Blockを考えると良いようです。求めたいクエリ画像に対する変換結果(ResBlockで言う H (x)に相当)は、クエリ画像に基づいた特徴マップ f _ {gate}(Identity mappingの xに相当)をReferenceとして、クエリ文に基づいた特徴マップ f _ {res} (残差の F(x) に相当)で補正することで得られるというのが提案方式のアイデアです。

また、 f _ {gate} f _ {res}は次のように計算されます。

 
\begin{aligned}
f _ {gate} ( \phi _ {x}, \phi _ {t} ) &= \sigma (W _ {g2} \ast RELU (W _ {g1} \ast [ \phi _ {x}, \phi _ {t} ]) ) \odot \phi _ {x} \\
f _ {res} ( \phi _ {x}, \phi _ {t} ) &= W _ {r2} \ast RELU ( W _ {r1} \ast ( [ \phi _ {x}, \phi _ {t} ] ) 
\end{aligned}

 \sigmaシグモイド関数 \odotはelement wiseの積、 \astは2d convolutionとbatch normalizationを表し、 W3x3のconv filterです。 f _ {gate}の方は、クエリ画像の特徴マップを変換するのではなく、シグモイド関数のゲートで元画像の情報をどの程度保持するかを制御するようになっています(0に近いと元画像の特徴マップをほとんど残さないが、1だとそのまま)。

学習

TIRGを使って求めた特徴ベクトルとターゲット画像の特徴ベクトルを近づけ、非類似画像の特徴ベクトルから遠ざけるように学習する。学習に用いるのは、Softmax Cross-Entropy Loss。


\begin{eqnarray}
L = \frac{-1}{MB} \sum _ {i=1} ^ {B} \sum _ {m=1} ^ {M} log \{ \frac{exp \{ \kappa (\psi _ {i}, \phi _ {i} ^ {+})  \} }{ \sum _ { \phi _ {j} \in \mathcal{N} _ {i} ^ {m} } exp \{ \kappa (\psi _ {i}, \phi _ {j} ) \} }  \}
\end{eqnarray}

 Bはmini batchのサイズで、 Mは少しわかりにくいですが、mini batchの中で1つのpositiveなサンプル \phi _ {i} ^ {+} K-1個のnegativeなサンプル \phi _ {1} ^ {-}, \cdots , \phi _ {K-1} ^ {-}を持つ集合 \mathcal{N} _ {i}を作成するプロセスの繰り返し回数となっています。あと、類似度カーネル \kappaですが、内積とnegative L2ノルムを使ったそうです。

Experiments

3つのデータセットを使った評価が行われています。メインの評価指標はrecall at rank k(R@K)。R@Kは、こちらのPDFを見るとわかりやすいです。

https://ils.unc.edu/courses/2013_spring/inls509_001/lectures/10-EvaluationMetrics.pdf

数値比較の詳細は論文を参照。

Fashion200k

画像につけられたdescription文が、1語違いになっているペアをクエリ画像とターゲット画像とし、異なる1語をクエリ文とする。

method R@1 R@10 R@50
TIRG 14.1 42.5 63.8

既存手法と比べて、R@1で8pt近く向上。TIRG以外の統合方式に対して比較した場合でもR@1、R@10、R@50のいずれにおいてもBestな結果となった。結果画像の一部は以下の通り。

f:id:satojkovic:20191117195031p:plain

MIT-States

60k枚の画像と、"red tomato"や"new camera"のような物体に対する名詞と形容詞のラベルがついたデータセット。Image retrievalのタスクにおける評価では、同じ物体ラベルで異なる形容詞を持つペアをクエリ画像とターゲット画像とし、ターゲット画像の形容詞をクエリ文として評価。

method R@1 R@10 R@50
TIRG 12.2 31.9 43.1

R@1ではBestではなかったが、R@10とR@50ではTIRG以外の統合方式の中でBestな値となった。

f:id:satojkovic:20191117200710p:plain

CSS

この論文で新しく導入されたデータセット。既存データセットにはない、複雑な修正クエリ文を含む。ちなみに、データセットはコードと併せて公開する予定だそう。

method 3D to 3D 2D to 3D
TIRG 73.7 46.6

f:id:satojkovic:20191117202103p:plain

最後に

実際に検索システムに導入されると、ユーザーが本当に検索したい情報に辿り着く可能性が高まる、面白いアイデアだと思いました。クエリ画像とクエリ文からターゲット画像を検索するというものですが、例えば洋服を探しているときは、最初に「グレーのコート」などと検索して、その結果を見ながら、修正クエリ文を入れるというステップになると思うので、一連の検索のコンテキストや、「ボタンは黒」みたいな空間的な修正対象の位置なども使えるとより良い結果が得られるかもしれません。(空間的な情報の有無は論文内でもAblation studyで論じられてます)