2019年7月26日金曜日

分類学習

分類学習は、実用レベルにちかづいてきている。
たくさんの認識/分類すべき対象が映り込んでいる画像から、正しくそれらを認識することは難しいが、ここ数年で、SSDやらMask RCNNなどの手法が出てきて見通しが明るくなってきているようだ。幾つか実装がGITHUBなどで公開されているが、Mask RCNNはメモリをアホのように喰うので私の環境のみならず、Google Colaboratoryでも動かない。
FacebookのFAIRグループが提供しているPyTorchベースのDetectronだと動くのかもしれないが、まだ手を付けていない。でもFast-RCNNは動いたと思う。
それに対して、若干落ちるSSDは、Caffeをいじって提供されているが、TensorflowやKerasでも実装されており、こちらはどうにかColabでも動作する。が、計算量が半端なくて1週間ほどかかりそうだ。
このような分類学習を突き詰めていくと、実社会では3次元空間の中にどう存在するのかというのまで行かなければならないし、先は長い。でも流石に金が集まっているだけ有って進みは速い。Google、Facebook, Microsoftなどが進んでいるのは流石。

温泉卵

温泉卵は好きだ。
白身が半熟で、黄身がとろっと半固形な感じが好きだ。
ところが、ネットで探すと温泉卵を全く分かっていない連中がいて、どうどうと記事の体で赤恥を晒しているのが見受けられる。
温泉卵は、白身と黄身の固化する温度が異なるところからきた面白い料理法で有り、単なる半熟ゆで卵とは異なるものだ。
温泉卵とは、どこかの温泉の源泉にほおりこんでおいたらできたという物なんだと思うが、箱根のように熱すぎると単なる固ゆで卵になってしまう。高温の雰囲気で半熟ゆで卵を作れば外側の白身がまず固まり、黄身はあとになり、時間を掛けすぎれば全部硬くなってしまう。
お湯にずっとつけておくと、卵全域がお湯と同じ温度になる。その温度が丁度良い70度くらいの時、黄身だけ固まるわけだ。
高温に晒されて、外側からじわじわと温度が高くなり、固まっていくゆで卵過渡製法と、丁度良い温度で全体の温度を一様にしてつくる温泉卵定常製法では、物理的にも全く異なる現象のものだ。
ゆで卵も好きだ。でも区別はしている。

2019年7月8日月曜日

My Painter for Android Released

TensorFlow Liteの習作として、掲題のアプリをリリースした。
これはちまたで有名な深層学習で、「画風」を学習させ、それを他の画像に「画風」を写像させるという、"Neural Style Transfer"技術を応用したものだ。
最初にGatysさんが提唱して後、様々な改良されたアルゴリズム(ネットワーク)が提案されて来ている。最初のアルゴリズムでは、元の「画風」は固定されていたが、今回このアプリで使われているアルゴリズムは、ネットワークの入力として「画風」データと元画像の二つから、リアルタイムに「画風」が加味された画像が出力されるというものだ。
ベースのアルゴリズムはAdaINと呼ばれるものを使った。
これをTensorflow Liteと呼ばれるAndroidなどのMobile Device用の推論専用のライブラリを用いてAndroidに実装した。学習に使うTensorflowと、推論に使うTensorflow Liteではサポートされる演算子が異なっているため、学習する時に注意をしないとLiteで使えないネットワークになってしまう。この二つのライブラリの差異は演算量の大きさからサポートしないと決定されたものと、まだ出来ていないだけのものから起きている。後者は待ってたりお願いしたりすると早まるが、前者は避けなければならない。日夜開発は進んでいるので、nightlyのパッケージを使うと最新のものが利用できる。
さて、今回のアプリはメモリをかなり使う方なので、新しいデバイスでしかサポートしないことにしているが、実際にはかなり古いAndroidでも、解像度が低くても良ければ動作する。

2019年6月27日木曜日

Tensorflow Lite GPU Experimental が動くAndroid Tablet

Tensorflow Liteはどんどん進化している。バグを申請すればあっという間にパッチが当てられ提供される。そして、知らなかったけど、Android GPUを用いた高速度版も存在する。これは多くのAndroid DeviceでサポートされるOpenGL ESの機能を用いたもので、どうもESL3.1以上が必要。残念ながら私のJ:Comのおまけのタブレットではちゃちすぎて使えない。同様にiPhone Metalにもサポートされていて、MobileNetV1を用いたデモプログラムがiPhone6Sでサクサク動いている。
さて、Android DeviceがESL3.1以上かどうかというのはパッケージには書いてないし、メーカーにも書いていない。OSとの兼ね合いかもしれないけど良くわからない。
そんな中、ベンチマークソフトベンダらしい、GFXBench.comというサイトを見つけた。ベンチマークソフトを提供する代わりにデータをもらってHardware Infoのデータベースを作っているらしい。すばらしい。

2019年5月24日金曜日

Python Spicy.misc.imread is obsoleted, but what the alternative?

とうとうScipyからimreadが消えてしまった。前々からアナウンスされていたらしいが、大して気にしていなかった。ついこないだまで、Google Colaboratoryでも動いていたので。
ところが昨日動かないことが判明し、一体何がどうすべきなのか調べたがガセばっかりだった。
で、結局ちゃんとScipyの1.2.0のドキュメントを読むと、ちゃんと書いてあった。
imageioを使えと。
さて、imageioを見てみるとimreadなどの関数が存在することは確認できたが、どうも引数が異なっている。なんも考えずに壊れた画像ファイルを見つけるスクリプトを動かしたら、全部消されてしまった。
imageio.imreadには、ドキュメントには無い引数がある。そして、Scipy.misc.imreadで使われていた、mode, flatten,はそれぞれ、pilmode, as_grayに変更されている。これらの引数はimageio.imreadのドキュメントには無く、個別の画像フォーマットに追補されるものであるらしい。例えば、PNGフォーマットのpilmodeには、L,P,RGB,RGBA,CMYKその他などがある。だから、
spicy.misc.imread("file.jpg",mode="RGB")
だったら、
image.imread("file.jpg", pilmode="RGB")
となる。

2019年4月29日月曜日

Table Tennis World Championships

日本の選手たちは、中国の壁に阻まれた。中国以前に負けてしまった選手もいたが、その壁は大きい。
いままで、平野や伊藤がするすると優勝していたけど、その後全然勝てなくなってしまう。伊藤のボールの回転を自在にする様を見て、こんなん対応できるの?と思っていたけど、その後の中国の選手との履歴を見ると、対応しているようだ。
この差は思うに、コーチの差だと思う。ここまで追いついてきたのは日本の育成と、それに答えた選手たちの頑張りだったと思う。でも、これ以上引き上げるのは卓球の暗黒時代にいたコーチ陣では無理なのでは。
天才が現れてその対抗策が練られないうちになら勝つことは出来るが、卓球頭脳の粋が対策を練ってしまうと、勝てなくなってしまう。
テニスの錦織はチャンをコーチにして、クレーで強くなったし、4位にまで成った。バドミントンでは、素晴らしいコーチを外から入れて、現在王国となりつつある。そんなことが必要なんじゃ無いだろうか。

2019年4月25日木曜日

Tensorflow Lite

Tensorflowは有名なNeural Net用のTraining/Inferation  フレームワークだ。
名前の通りテンソルの計算をパイプラインのように繋げていくことが簡単にできる。
学習には科学技術計算並の計算が必要で、GPUありきで開発されている。余りCPU/SIMDでは高速には成っていないようだ。GPUだとメモリネックになってしまうが、Google Colaboratoryを使うことで大分解消される。
さて、学習されたあとのネットを使って推論するのはたいした計算量では無いので、Mobile Devicesに使うことを考えるのは自然だし、実際GoogleからもMobileとかLiteとか出ていた。
最近、Liteに集約することに決めた後、開発がすごい勢いで進められてきた。TensorflowとTensorflowliteの間では、使えるオペレーションが異なっていて、単純にTensorflowで学習したネットをtflite_convertすることは出来ないことが多かった。それでもどんどん対応するオペレーションが増え、対応されていない物も元のTensorflowの学習する時のオペレーションをPython Nativeにするとかして対応できるようになった。
今日、Tensorflow Liteのサイトを見たら大分変わっていた。
IT Yearとか言うけど、ホントに速いなあ。