A Day in the Life

2021年4月9日

夕食はズボラに foodpanda の50%オフクーポンで注文した subway。foodpanda なのに Uber Eats のボックスの人がやってきて面白かった。配達員としては、仕事としてはほぼ同じなので、その時の諸条件を元に受注したい仕事がどちらのサービスなのかで決めたいというのも解る(会社のレギュレーションとして、他社のボックスで配達してよいのかは知らないけど)。

昨晩の夜ふかしのため、一日中眠かった日。そのため19時過ぎには就寝する。


機械学習学習日記 - 67日目

日本語OCRについて興味が出て調べてみる。精度の高い日本語OCRを実現する技術 LINE BRAIN OCRのパイプラインを解説やPyTorchで実装されているhttps://github.com/tanreinama/OCR_Japaneaseを眺める。

紙をスキャンしたようなデータに対してのOCRはまだしも、写真のような文字以外のデータが色々混ざったものに対してのOCRは難しいのだなぁ。

撮影機材E-M1 Mark III/LEICA DG SUMMILUX 25/F1.4 II

2021年4月8日

外でフリスビーをしたが、風が吹くとフリスビーをうまく飛ばせず残念。良い天気だったけど、風がちょっと寒い。


朝食は昨日買ったロシアの黒パンのサーモンチーズ。素朴な味わいの黒パンはライ麦で作ってるのか。


夜はM氏、I氏とみんなで顔を合わせるのは4-5年ぶりのビデオチャット。昔話も弾み、すぐ寝てしまう自分としては珍しく日が変わるぐらいまで話し込んでいた。気心の知れた、久しぶりの人と話すのはやはり楽しいなぁ。


機械学習学習日記 - 66日目

物体検出を試したくなり、YOLOv5を試す。アノテーションツールを使って画像にラベル付けし、yolo の学習済みモデルを用いて転移学習して物体検出、の一連の流れを非常に簡単にできた。

コマンドラインツールも良く出来てるし、いわゆるDRYの原則に乗っ取り、適当なディレクトリへデータの入出力が勝手にされるので細かな設定がいらなくて楽だ。設定ファイルも YAML で書け、ハイパーパラメータの調整も YAML で行える。Dockerfile はもちろんのこと、GAEやAWSでのインスタンスで動かすための設定もあり、いわゆるML Opsを前提とした実装(学習済みパラメータを特定ディレクトリに放り込んで再起動とか)も諸々ある。この辺のツールチェイン・エコシステムが非常に高いレベルで作られていて関心する。機械学習全然知らなくても扱える感じ。

モデルの実装も読みやすい。YOLOはベースはCNNなのだけど、そのレイヤーとパラメータも yaml で定義して、作るモデルの学習パラメータの多さごとによって別けている。スモールモデルは精度はそこまで高くないけど、速さは抜群、とか。

撮影機材Galaxy S20/E-M1 Mark III/LEICA DG SUMMILUX 25/F1.4 II

2021年4月7日

近くの公園の藤棚、枯れているような藤の木で、咲かないのだろうなぁと思っていたら小規模ながらも咲いていた。きれいな藤棚、というわけではないけど風情があって良い。


先日見たテレビでボルシチを作っていて、なんだかボルシチを食べたくなり、ロシア料理点のミーフ・バーへ。ロシア料理はぜんぜん食べ慣れてないので、どれもこれもちょっと違った風味で美味しい。ロールキャベツはロシアのイメージ無かったのだけど、голубцы(ガルプツィ)というあちらでもよく食べられる料理のようで。脂の旨みたっぷり。黒いパンもバルト三国でよく食べたな~、懐かしい、と家で食べる用に購入する。

店から出てこの辺あまり来ないし、ぶらぶら散歩を、と思ってたのだけど突然体調が悪くなり、歩いておられず座っても良くならず、久しぶりにタクシーを捕まえ家に帰りちょっと寝込む。寝たらまぁまぁ良くなった。


機械学習学習日記 - 65日目

colab の TPU が使えるおかげで、24時間という制限はあれど高速なTPUリソースで学習できるようになったので、2日間ほどかけてwaifu2xのupconv_7で学習させる。なおFP16のデータで、GTX3090のGPU利用率が100%の時に1epochが12秒ぐらいの処理が、colab TPUでは23秒ぐらいで終わる。colab TPU はまだ最適化できてるとは言い難いし利用率もわからないので、最適化でもっと速くできる気もする。なおcolab GPU のTesla P100だと100秒ぐらい(こちらは前処理の画像切り出しのCPUがボトルネックになって、コアがフルで使えてな気もするけど)。

tensorboard

こんな感じで学習が進んで、学習率を上げるという意味ではまだ行けそうだけど、この辺で画質を学習・validateに使っていたデータ以外で2倍に超解像してチェックする。

なお今回学習させたデータは、適当なPDF10個ぐらいからPopperで作った、DPIが150と300の5000枚ぐらいのpngから随時ランダムクロップしたもの。なので、フォントレンダリングのアップサンプリングは大本の学習データより綺麗にできるようになるんじゃないか、という実験。

bicubicでの拡大 / waifu2x付属のscale2xモデルデータ / 今回学習させたモデルデータ

sec.resize_bicubic.258x296 sec.orig_model_scale2x.258x296 sec.best_model_tpu.258x296

実際の画像を見てみると、bicubicのボヤっと感はさておき、今回学習させたデータはwaifu2x付属モデルに比べてぱっと視認できるほど悪い。赤っぽさが出てる(loss関数の問題?)し、学習データに引っ張られて直線が直線でなくなり(「悪」とかね)過学習を伺わせる。

コンバート元のPDFの総数が少なくて(とりわけ埋め込みフォントでない物は、フォントが使い回されるしね)、またほぼグレースケールだったこともあり、学習させるデータの作り方が悪いのだろうなぁ。色々と学びになった。

撮影機材α7C

2021年4月6日

散歩中、コスモワールドの動物の乗り物の外観が新しくなっていたことに妻が目ざとく気づく。まったく気づかなかった。中身は引き続き昔のものなのだけど、外側はピカピカに。まだ廃棄にならず、遊んでもらえそうで良かった。


以前住んでいたところの、懇意にしていた喫茶店のおかみさんから電話があり、その時は出れなかったので何事か、ご高齢なので何かあったのか、店を畳むのか、とか嫌な考えがよぎったのだけど、あらためて電話をして話してみると、以前のお礼の連絡だった。わざわざありがたい。

電話をかけることが激減した今、電話があると良くも悪くも何かあったのではと思ってしまいがちなのだけど、何気ない会話の電話も親しい人となら良いものだなぁ。


昼食はオーブン焼き。ラム肉はいつ食べてもラム、という独特の臭みの味で美味しい。


機械学習学習日記 - 64日目

学習されたモデルが果たしてどれぐらい良いものなのか、と画質の評価手法を調べる。waifu2x の標準での損失関数は RGB に重みをおいた weighted huber loss で行っているのだけど、他に一般的なものでMSE, PSNR, SSIMなど。MSE/PSNR vs SSIM の比較画像紹介 では、損失関数をだます(人の目から見ると明らかにどちらの画像のほうが悪いか歴然だが、スコアは同じ)ものの例が面白かった。また、Learning a No-Reference Quality Metric for Single-Image Super-Resolution では、これらの関数ではなく、人の視覚がどちらが良いかを判断する方法のスコアに近くなる手法を述べている(雰囲気でしか読んでないけど、ちゃんと読んでもまだ理解できる感じがしない…)。

今回は学習時の損失関数として使っている weighted hurber loss の他、一般的なMSE,PNSR,SSIMでスコアを出してみたけど、どれもtfの関数に実装してあるので適用するだけで楽だった。

撮影機材α7C/E-M1 Mark III/XR RIKENON 50mm F2/LEICA DG SUMMILUX 25/F1.4 II

2021年4月5日

天気予報は曇りだったので、どこかに出かけようかと思っていたのだけど、昼間は普通に雨になってしまった。雨上がりの散歩をちょっとする。クローバーに溜まる水滴は雨上がりならではの風景。


機械学習学習日記 - 63日目

colab の環境を整えて、colab 上でも学習を回せるように。そういえば TPU なんてもんも使えたよな、と調べてサンプルを実行してみるとめちゃ速いじゃないですか。colab で使えるのは前の世代のTPUらしいけどとても速い。

というわけでwaifu2xの学習もそちらで回せるようにと設定する。GCSからtf.data.records形式で読み込めるようにしたり、結果をGDriveに書いたり、再度学習途中から再開したり。

撮影機材RICOH GR III

2021年4月4日

雲に覆われる直前の一瞬の晴れ。夜はしっかり雨が振り、残っていた桜もほとんど散ってしまうのだろうなぁ。


ビットコインマイニングが大流行中だけど、果たしてどれぐらい稼げるのだろう、とRTX3090で採掘スピードを見ると、今日のレートで約2,700円/日。RTX3080を6枚ならざっくり一日で12,000円ぐらい稼げることになり、昔のRTX3080が10万円で売っていたときなら50日で3080原価分ぐらい稼げるのか。RTXが高値の今でも100日ぐらいでトントンに。

実際は電気代の運用コストがかかるからそんなに儲けられるわけではないが、今までには無い形の不労所得だし、色んな人が飛びつくのも理解できるし(電気の無駄遣いだからやめてくれとは思うが)、ビットコイン市場が暴落したら価値が激減してビデオボード市場に物が溢れそうなのもわかった。今の相場なら2,700円/日でも、1年前の相場なら300円/日だからなぁ。


Colab Proを契約したので、24時間まるまる使って実行したいタスクのセッションが切れないように、raspiにVNCでつないでそこのブラウザ経由で使えるべく設定する。が、raspi いじるの久しぶりすぎて見事にハマる。ディスプレイの設定がHDMIに接続しないでやるのが面倒くさいのであった、昔もハマったことをすっかり忘れていた…。

Colab (Pro)は24時間で必ずインスタンスが落ちて、揮発性の環境で開発が強制されるのだけど、Google Drive をマウントすれば(という制約はあれど)、わりと Jupyter Notebook を使った開発全般は普通にできる。将来は開発でも手元のコンピュータリソースは必要なく、全てクラウドリソースに任せる、みたいなものもわかりやす見えるプロダクトで面白い。

クラウド側の開発といえばVisual Studio Codespacesもある(いまは GitHub Codespacesか)けど、あれはあちら側に Linux がある、という意識が出てしまうからなぁ。Colab も Linux で自由度も高い(! つければすぐにコマンド発行できる)のだけど、揮発性と相まって不思議とあんまりサーバのことは意識しない。


お便りコーナー

配偶者の呼び方難しいよねえ。私はよく「相方」って言うけど、それだと「同性の仲の良い友達」と捉える人も多いらしい。 英語圏だとパートナーなんだろうか? --ろごすけ

久しぶりのお便りコーナーです。聞き慣れてない/認知されてないと誤解されがちだよねぇ。英語圏だと、たしかにどうなのだろう。日本語だと「パートナー」で、妻帯者なら妻のことを思い浮かべるだろうし、そうでなければ恋人の事を指すことが多いだろうから、パートナーと言えば角が立たない気もしてきたなぁ。


機械学習学習日記 - 62日目

昨晩から回していた学習結果を見て、10時間回し続けていても、まだスコアは1時間ごとぐらいに上がっていっていた。が、一度中断して、オプティマイザオプションを変えてまた回して変化を見る。パラメータ変えたら収束速度が全然違うわ~。

TensorBoard

学習中は他の重い処理、例えば Lightroom で画像編集とかするとメインメモリ(32GB)が枯渇して重い、ということが何度かあったので、同じメモリを追加で32GB発注。デスクトップPCは気軽に増やせて良い。

撮影機材Galaxy S20

2021年4月3日


朝食は久しぶりに海辺の公園で、コンビーフサンドイッチ。朝でも厚手のパーカーで寒くない気温になってきた。


昼食は、ベランダ菜園でモリモリ生えてきたパセリを使ったパセリカレー。パセリの味はほぼせず、代わりに面白い風味が出て美味しい。


午後は近所の公園へ椅子を持っていって読書、といういつものパターン。すごく人が多い。桜は遅咲きのところでは、まだ幾分か残っていた。

そのへんに咲いているシャクナゲは見事で、いつも見入ってしまう。


機械学習学習日記 - 61日目

waifu2d の学習済みモデルパラメータを使った upconv_7 の変換はTF2でうまくいくようになった。ので、続いて train 周りの実装を見る。評価指標は標準では huber loss にRGBチャネルのウェイトを適用したものを使ってるのかー。

TF2 で train をするための実装をする。tf.data を使ったパイプラインで良い感じに書けた。TFが出てから5年以上立つけど、その間にインターフェイス同士の連携がやりやすくなっていて、直接的な機能じゃないけど、間接的な部分でNN実装がしやすくなっているのを感じる。昔は大変そうだ…。超解像は高解像度の画像があれば良いので、学習データもニンゲンの手を入れる必要がなく作りやすい。ざっくり書けたので早速 trainer で学習を回し始める。

撮影機材α7C/E-M1 Mark II/Galaxy S20/Voigtlander NOKTON Vintage Line 50mm F1.5 Aspherical II VM SC/OLYMPUS M.45mm F1.8

2021年4月2日

最寄りのオーケーストアは、フロアが3Fから見渡せて、棚に積まれたダンボールの山が見えて楽しい。夕食はここの3Fにあるはま寿司。エヴァフェアをやっていて、エヴァの名前がついた寿司(クリアファイルがもらえる)とか、注文の声が三石琴乃とか。

夜は家でヤクルトVS巨人戦を見る(妻がヤクルトファン)。小川の好投や村上の本塁打。村上はいままでヒットはなくて、すべてホームランで、23打数ヒット0ホームラン3(ヒットはホームランを含むのでは、というのはあるが)、というおもしろ成績。昨日もヤクルト戦を見ていて、連日のテレビ野球観戦。久しぶりに見ると面白いね。近くにベイスターズ球場もあるし、久しぶりに観戦しに行きたい、と早速観戦の予約をする。


機械学習学習日記 - 60日目

昨日やっていた処理が、学習しなければ必要ないことに気づく。まだ理解が足りてないなー。

撮影機材α7C/Voigtlander NOKTON Vintage Line 50mm F1.5 Aspherical II VM SC

2021年4月1日

今まで関わっていたベンチャーのプロダクトが、組織の方向性をITではない別軸に置くために3月末でクローズ。思い入れもあって残念ではあるけど、色々やった上で別軸へ進む腹落ちができたようで、それはそれで喜ばしい。組織作り含めて、実験的かつ面白いことにトライできたと思う。

4月、というか今日からは新しい機械学習のプロジェクトにジョインする。2月辺りから勉強し始めて、面白くなってきた所で、たまたま自分のスキルでも参加OK(ありがたい)なプロジェクトに出会えたので参加させてもらう。機械学習はまぁ初心者の部類なのだけど、他のエンジニアリングスキルとソフトスキルでカバーしつつ、足を引っ張らないようにせねば。

写真はベランダで生い茂るハーブ、の一部。


機械学習学習日記 - 59日目

この機械学習学習日記の立ち位置も、仕事で機械学習をすると微妙な感じもする。当初の目的は「ソフトウェアエンジニアのたしなみとして最低限の理解をしないとまずいよなー、ということで、できる限り毎日少しでも学習して日記に記す」だったので、仕事でほぼ毎日触れるとすると、はからずしも目的は達成できてしまうが、まぁせっかくなので続けてみる。仕事のメインは多分NNではないから、機会学習学習日記では主にNN系のことをやろうかな。

waifu2d のNN以外の処理をすすめる。画像拡大→画像分割→パッディング→NN→パディング削除→統合、という処理をTFで書いて8割ぐらい終わる。tf.imageでNNに必要とされそうな画像前処理はほぼできるのね。

撮影機材E-M1 Mark III/LEICA DG SUMMILUX 25/F1.4 II

RTX3090を買った / 2021年3月31日

懐かしの GoTo eat のポイント期限が3月末まででポイント利用のためには食べログ予約必須だったので、対応しているワールドポーターズのハンバーガー屋へ。高い価格帯のハンバーグ、という味のよくある系だったので、まぁ次はいいかな。

赤レンガ倉庫とワールドポーターズの間の公園の花畑が、いい感じにばらけながら植わっていて景色が良い。ちょこちょこ花が顔を出すのが可愛らしい。最近は連日暖かいなぁ。


RTX3090を購入した。ビットコインの値上がりで、マイニング需要が急拡大し、この1.5ヶ月でRTX3070~のモデルはやたら高騰していて、RTX3090は高値だけど市場にある状態(電力に対する費用対効果がマイニングでは良くないため)。GTX10XXやRTX20XXといった2~4年前も当時の新品価格並で再流通したりして、本当にRTX3070~シリーズの在庫が無い。

楽観的に見ればすぐに在庫が復活する、ビットコインが値下がりして中古市場にRTXシリーズが安価に放出される、などなど考えられるのだけど、RTX3080,90欲しいなと最近は毎日のようにフリマアプリや価格調査をしており、マインドシェアがそちらに取られていて、それならいっそ買ってしまえ、と勢いに任せ注文してしまった。今後は値段チェックしないぞー(すぐに値下がりしたら悲しいから)。

早速取り付け、の時に今までのグラボを外すのにPCIeのロックが固定されてしまい苦戦する。PCIeのロックは、ロックを外してからスロットから抜けばすんなりはずせるのだけど、数年に一度の行事のため毎回ロックを外すのを忘れてしまう。すると、無理やり引っ張って抜こうとするため、ロックが変に固定されめちゃくちゃ固くなってしまうという。怪我しないように軍手をして、ハードウェアを傷つけないよう割り箸で思いっきり指して、割り箸を変えたり折ったりすること20分、やっとロック解除ができた。大変だった…。

やっとのことで差し込んだ後起動させ、手元のCNNの学習を軽く流すとGTX1080の二倍以上の速度。メモリ容量もバンド幅も大きいので、ネットワーク構造やバッチサイズをいじると更に学習が速くなる。うおー速いぞ。安定性はどんなもんだろう、とOCCTで電力のストレステストすると、CPU(3900X)とRTX3090で、140Wと450Wほど、この2つで合計約600W。今の電源が760Wの80 Plus Platinum(電源効率が100%負荷時に89%で676W)なので、電源買い換えないと無理かもな、と思っていたけど今の所死なずに動いている。夏はちょっと怖いけど、落ちるようになったら買い換えを検討しよう。


機械学習学習日記 - 58日目

waifu2x の UpCov7(RGB) モデルをTF2で書いてみる、続き。mac でうまく動いたのは、そもそもうまく動かない挙動が正しかったのだけど、オーバーフローの挙動の違いで誤ってうまく動いてしまっていた、という。ちゃんとオーバフローしないように意図的に丸め込んだらうまく動くように。

その他、waifu2x周辺を読む。waifu2x、二年前にCUnetという新しいモデルが入り、UpCov7 よりもさらに綺麗に超解像できるようになっていた。また、Windows で動くwaifu2x-caffeは、ちゃんとCUDA対応のパッケージを作っていて偉い。NNのツールがwin/macなどのツールとしてそんなに広まらないの、モデルを含むとサイズも大きくなりがちだし、CUDAのバージョンを簡単に固定できるdocker以外じゃGPUで動く環境をちゃんと作るのが大変、ということも考えられるなぁ。

撮影機材α7C/Voigtlander NOKTON Vintage Line 50mm F1.5 Aspherical II VM SC