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でも、解像度が低くても良ければ動作する。