2020年3月 技術メモ
Mitsuba2の微分可能レンダリングの原理・アプリケーションとサンプルコードを動かすまでを書きました。次は偏光レンダリングの話を書く予定です。
— Teppei Kurita (@kuritateppei) 2020年3月31日
最新物理ベースレンダラー Mitsuba2を触ってみる (3) 微分可能レンダリング編 https://t.co/T0mNsiIgR6
普通は偏光を追う場合って、放射(発光)をストークスベクトルで表現して、反射をミューラー行列で表現するんだけど、Mitsuba2では放射も含め全てミューラー行列で表現している。計算に若干冗長性は出るが、APIがシンプルになるメリットの方が大きいから。
— Teppei Kurita (@kuritateppei) 2020年3月30日
Mitsuba2の論文が実装寄り寄りなこともあって難しすぎるのだが(1週間以上読んでる)、初見でこれ全部理解できる人いるのか。レイトレとコアソフトウェアと機械学習の全部が達人レベルじゃなきゃ無理じゃないか。そんな人材、著者達以外いるのか。https://t.co/GWzmuborUV
— Teppei Kurita (@kuritateppei) 2020年3月30日
Mitsuba2は見れば見るほどテンプレートメタプログラミングをこれでもかというくらい使い倒して設計されているのだが、これだけうまく使えているのは、「天才たちが少人数」で「中規模のプログラム」を「明確な目的意識をもって」行っているからな気がしてならない…。凡人が混ざると崩壊する気がする。
— Teppei Kurita (@kuritateppei) 2020年3月29日
1か月もPyTorch使ってないと忘れる
— Teppei Kurita (@kuritateppei) 2020年3月29日
Pytorchでtensorのリサイズ - Pythonいぬ https://t.co/0Hv6rqQ24p
pandasを使うようになってから、自分の中でデータ整理するとき「データを作成・追加するときは行」っていう行動が無意識に統一されたのは、地味にありがたかったりする。
— Teppei Kurita (@kuritateppei) 2020年3月28日
今更ながらpix2pixの論文読み終わったんですが、全章にわたってとてもわかりやすくて無駄な記述がなく良かったです。画像系のNNをやってる人は必読ですね。Introで「我々の技術は特に別に新しいものじゃないよ」と謙遜しているのも流石。まとめはWebに一杯あるのでやめます。https://t.co/6jfBwUzox6
— Teppei Kurita (@kuritateppei) 2020年3月26日
pix2pixのDiscriminatorで最終的なロスを2で除算してるの、なんでかなー、平均してんのかなー、なぜ?と思ってたら、論文中に答え書いてあった。2で割ることで、Generatorに比べて学習の速度を下げるためとのこと。
— Teppei Kurita (@kuritateppei) 2020年3月25日
それってOptimizerやSchedulerの仕事なんじゃないのと少し思ったけど。 pic.twitter.com/jwrxRLZlUh
pix2pixの論文、Introのところとか遊んでて面白いな。
— Teppei Kurita (@kuritateppei) 2020年3月25日
「効果的なロス関数の設計には多くの手作業が必要である、しかしミダース王(ギリシャ神話)のように何を望むかには気を付けなければならない!」
とか。普通の論文だったら何イキってるんだこいつと思われそう。
pix2pixの論文、さらっと色々と重要なこと言ってるな。「セマセグタスクのような曖昧さが少ない単純な予測にはGANは必要ない。L1で十分である」みたいな
— Teppei Kurita (@kuritateppei) 2020年3月24日
本質を言うならGeneratorのUNetが一番かも。
— Teppei Kurita (@kuritateppei) 2020年3月24日
UNet+GAN+L1が大事。
論文中でも頑なにGAN+L1とcGAN+L1の画像の比較を出していない
— Teppei Kurita (@kuritateppei) 2020年3月24日
pix2pixのこの結果見てると、やっぱりAdversarial lossとL1を足し合わせるのが本質で、cGANは味付けくらいの印象。ただ味付けでもどんなタスクでも性能向上するのでデファクト化か。モデルがシンプルで実装も綺麗だし。 pic.twitter.com/pLH3ju7w8t
— Teppei Kurita (@kuritateppei) 2020年3月24日
pix2pixってDropoutそのままでtest時もtrain時と全く同じ構成でGenerator回すのか…
— Teppei Kurita (@kuritateppei) 2020年3月24日
CNNでpixel_by_pixelでL2で最小化するとボケる理由って「ユークリッド距離が、全てのもっともらしい出力の候補を平均化したもので最小化されるから」で結論づけていいのかな
— Teppei Kurita (@kuritateppei) 2020年3月24日
pix2pix最近色々試してて気づいたんだけど、Generatorのlossが
— Teppei Kurita (@kuritateppei) 2020年3月24日
loss=L_GAN+λL1ってGANロスとL1ロスの重みづけになってて、λが100に設定されているんだけど、この重みづけ(ハイパラ)が絶妙で、割とどんななお題でもここ(λ=100)に大体性能のピークがくるんだよな…。なんでだろ…。
Python3.7でdictが順序も保存するようになったのでOrderedDictがいらない子になったんだと思ってたんですが、まだ通常のdictでは順序まで比較はできないようなので、dict同士の順序比較をしたい場合は引き続きOrderedDictがいると、なるほど。https://t.co/pSEM07qfzG
— Teppei Kurita (@kuritateppei) 2020年3月23日
そもそもdefaultDict使いたいときはdefault値を設定したくないケースが多いので、さもありなんか
— Teppei Kurita (@kuritateppei) 2020年3月23日
おじさんなんでこれしばらく使ってないと忘れちゃうんですよね…、デフォルト値設定したいときはlambda使って設定する、と
— Teppei Kurita (@kuritateppei) 2020年3月23日
d = defaultdict(lambda: 0)
defaultdictのコンストラクタは、デフォルト値ではなく、値を生成する関数(正確にはcallableなオブジェクト)を引数に取るhttps://t.co/1VDAb1d9po
— Teppei Kurita (@kuritateppei) 2020年3月23日
今更ながらpix2pixって滅茶苦茶コード綺麗だな、ここのforward, backwardの部分見るだけで大体何やってるか全容がわかる…。PyTorchがすごいのかもしれないけど。https://t.co/cXzQWxbshR pic.twitter.com/kvWrlVeybe
— Teppei Kurita (@kuritateppei) 2020年3月23日
日付時刻とかをデータ解析に投げる時datetime.strptime()滅茶苦茶便利だな…。
— Teppei Kurita (@kuritateppei) 2020年3月22日
NeRFの何がすごいって非ランバーシアンのBRDFのオブジェクトでも全く違和感ないところ、スペキュラ再現がえぐい。テレビが映ってる部屋のシーンの壁側の映り込みに注目。https://t.co/8QiRIxSjyY
— Teppei Kurita (@kuritateppei) 2020年3月22日
Google Colabが最近急にGPU制限かかるようになったので(やりおる…)せっかく米国に住んでいるのでColab Proに入ってみた。
— Teppei Kurita (@kuritateppei) 2020年3月22日
月$10でTesla P100かつメモリ27Gが(ある程度は)使い放題なのはコスパすごい、独特なルールは多いが。ちなみにGCPで同じくらいの構成のVM作ったら月1000ドル超えてた…。 pic.twitter.com/216jks1NyD
メモとして書きました。
— Teppei Kurita (@kuritateppei) 2020年3月21日
Google Colab上でGitHubからCloneして変更をPushするまでのまとめ https://t.co/zIBStNJOE8 #Qiita
Google Colabからgithubにpushする手順。ここら辺日本語であまりまとまっていない気がするので、ある程度わかったらQiitaにでも書くか。
— Teppei Kurita (@kuritateppei) 2020年3月20日
How to Push files into GitHub from google colab ? by Navaneeth Kt https://t.co/s2H2Bl6MzR
ディレクトリ内のファイル一覧を取得するときos.listdir()だと、順番が不定なので、ソートして取得したい場合はsorted(glob.glob(*))などを使う。
— Teppei Kurita (@kuritateppei) 2020年3月20日
マジックコマンドに変数を渡すときは$で良いが、文字列の場合暗に展開されるので更に"$value"のように引用符で囲う必要がある
— Teppei Kurita (@kuritateppei) 2020年3月20日
JupyterやColabのマジックコマンドに対してセル内で定義した変数を引数として与える https://t.co/GfSOUCMD2L #Qiita
ホモグラフィ変換と、カメラ座標変換で考えた時の鳥瞰図変換の関係。
— Teppei Kurita (@kuritateppei) 2020年3月18日
ホモグラフィー行列を用いた鳥瞰変換(Bird's-eye view) - 粗大メモ置き場 https://t.co/O6GWYCzeNA
ファイル移動系のコマンド、Macを含むUNIX系のOSでは上書きされ、Windowsではエラーとなるのかなりのハメポイントだな…
— Teppei Kurita (@kuritateppei) 2020年3月16日
拡張子取ったパス取るやつくらい暗記しといても損ない気がしてきた
— Teppei Kurita (@kuritateppei) 2020年3月16日
os.path.splitext(filepath)[0]
BlenderもColabで動くしなあ
— Teppei Kurita (@kuritateppei) 2020年3月15日
Google Colaboratoryが、3D CGレンダリング用途にも有能すぎた件 https://t.co/qHtq88ndTa #Qiita
360°パノラマ画像→ラフな3D変換の計算手順がPDF1枚で簡潔にまとまっている、今まで見てきた中で一番わかりやすい。鳥瞰図変換のようなビュー変換もこれでできる。https://t.co/cdX1hK3nI9
— Teppei Kurita (@kuritateppei) 2020年3月15日
あまりCV系の人には馴染みないかもだけどDIALuxっていうフリーの建築用途のレンダリング&照明シミュレーションソフトが面白い。自分で部屋のモデリングもできるし、照明も実在する各社の数千もの照明を使って照度シムができるwhttps://t.co/NUrLxcagXWhttps://t.co/QcBIcgi7Yo pic.twitter.com/uXeuXu28UH
— Teppei Kurita (@kuritateppei) 2020年3月14日
Mitsubaで汎用画像ファイル(png, jpg...)の読み書きするクラスがBitmapなのに最初違和感あったけど、「ビット」「マップ」ってThe 汎用な名前だしこれしかないな。由来もそうだし。
— Teppei Kurita (@kuritateppei) 2020年3月14日
(自分だったらImageIOとか命名している…センス皆無…)https://t.co/YFlxoqmEdC
Mitsuba2のテストコードのバグ、再度修正してもらった。仕事速くてありがたい。リリース直後は開発者の方のモチベーションも高いし、気になることはこの時期に聞いた方が良いな(迷惑のかからない範囲で)。https://t.co/flPuvUfJE9
— Teppei Kurita (@kuritateppei) 2020年3月13日
ちょうどNLoS文献漁ってたのでもの凄くありがたい…。そしてサーベイのクオリティが高い。 https://t.co/Y78CqAKBCu
— Teppei Kurita (@kuritateppei) 2020年3月13日
Mitsuba2のテストコードのバグ、Issueで報告したら修正された。貢献+1。https://t.co/flPuvUfJE9
— Teppei Kurita (@kuritateppei) 2020年3月12日
全然知らなかったんだけどpybind11のC++のクラスをPythonでオーバーライドして書けるやつってすごいな。ちなみにMitsuba2もこれ採用しててC++で書かれてるんだけど開発者は必要な機能をPythonで実装できる。https://t.co/mINrGVulJw
— Teppei Kurita (@kuritateppei) 2020年3月11日
みんな大好きDisneyのBRDFだってPhysically-Basedって一応言ってるけど論文読み込めば読み込むほど、物理?何それおいしいの?クリエイターが調整しやすい方が正義でしょ的な思想が見えますよ。
— Teppei Kurita (@kuritateppei) 2020年3月11日
完全に物理無視した現象論モデルでも、それが超高速だったり超簡潔な数式だったりしてCGの発展に一役買うんだったら、重要な技術として認められるし、SIGGRAPHでもその類は沢山採択されてる。
— Teppei Kurita (@kuritateppei) 2020年3月11日
BRDF使ってる時点でCG全てダメやんけ…(計測ベースのBRDF使ってるCGなんてほぼ無い) https://t.co/sGL57PUP7Q
— Teppei Kurita (@kuritateppei) 2020年3月11日
Mitsuba2をPythonから動かす手順を書きました。次回は微分可能レンダリングについて書くつもりです。
— Teppei Kurita (@kuritateppei) 2020年3月11日
最新物理ベースレンダラー Mitsuba2を触ってみる (2) Pythonから動かす編 https://t.co/0Pmd3VWtqC #Qiita
Windowsを嫌いになるのは簡単だ、私は耐えて使い勝手良くする
— Teppei Kurita (@kuritateppei) 2020年3月11日
[Shift]+右クリックメニューに「コマンドウィンドウをここで開く」を復活させる方法https://t.co/BrVWmejq7G
WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更するhttps://t.co/nyHSxdCXrr
…ここまでやって限界が来た
Mitsuba2の実行時のエラーについてIssueに投稿したらJakob先生が即効レスくれて解決した。NVidiaドライバのバージョンが古かったらしい。エラーメッセージに反映してくれるとのこと、なんか少し貢献できたようで嬉しい。https://t.co/U7opobA9y1
— Teppei Kurita (@kuritateppei) 2020年3月10日
Optix6.5.0のlibの名前が違くて、ビルド下手る問題が修正されてたhttps://t.co/Kxifi7kpzj#Mitsuba2
— Teppei Kurita (@kuritateppei) 2020年3月10日
Mitsuba2、Windowsで上手くビルドできない方は下記のIssueが参考になるかもですhttps://t.co/MdIiOJDytK
— Teppei Kurita (@kuritateppei) 2020年3月10日
その2
— Teppei Kurita (@kuritateppei) 2020年3月10日
Free-Form Image Inpainting with Gated Convolutionhttps://t.co/MZHnuCstzF
読もうと思った論文が解説されていることが多い良い時代、その1
— Teppei Kurita (@kuritateppei) 2020年3月10日
【論文読み】Image Inpainting for Irregular Holes Using Partial Convolutions https://t.co/AgnamQkLMk #Qiita
Mitsuba2の微分可能レンダリング含むGPUレンダリングはMacOSでは未対応かつ基本未来永劫対応予定はないとのこと。理由はCUDA前提なのでAppleとNVIDIAが喧嘩している状況ではどうしようもないため。もし対応してほしいならユーザがAppleに今の状況どうにかしろと言えとのこと。https://t.co/7Ae4svDmnX
— Teppei Kurita (@kuritateppei) 2020年3月10日
スイスのベンチャーInivationから低価格帯のDVS(Dynamic Vision Sensors)カメラが発売https://t.co/ylekIdH5nX
— Teppei Kurita (@kuritateppei) 2020年3月9日
販売ページhttps://t.co/9DSee1CtN4
Mitsuba2の微分可能レンダリングでは反射率など単一のスカラー値だけでなく、環境光源マップなどの高次元データも自動最適化できる。
— Teppei Kurita (@kuritateppei) 2020年3月9日
以下は光源を適当に初期化しても真値に収束する例。つまり1つだけ画像例が与えられるだけで、クリエイターが調整しないで同じような適切な光源を自動設定できる。 pic.twitter.com/Vs0KNIvH8a
Mitsuba2のシーンファイルの名前記述は“camelCase”から“underscore_case”になっているのに注意すれば後は大体一緒。https://t.co/rfKXz0IoSJ
— Teppei Kurita (@kuritateppei) 2020年3月9日
Mitsuba2、レンダリングによる形状の自動最適化(幾何微分)はまだ実装されていないようだhttps://t.co/F2J2NI2etF
— Teppei Kurita (@kuritateppei) 2020年3月9日
画像のアフィン変換をEnd-to-Endで学習するSpatial Transformer Networksについて丁寧に論文の中身を解説している。https://t.co/FLnzep85Tz
— Teppei Kurita (@kuritateppei) 2020年3月8日
インストールから、レンダリングテストまでの手順を書きました。偏光レンダリングなどは今度書きます。
— Teppei Kurita (@kuritateppei) 2020年3月8日
最新物理ベースレンダラー Mitsuba2を触ってみる https://t.co/Y6yw9SU3Lp #Qiita
Mitsuba2の微分可能レンダリングの簡単な例。目的となるレンダリング画像への誤差を最小化するようにシーンパラメータ(反射率等)を勾配法(SGD)等で最適化できる。左の壁は赤色が真値なのだが、適当な値で反射率を初期化しても最終的に真値に収束する。PyTorchとの統合可能。https://t.co/xRCyO7hawW pic.twitter.com/rniWlyVuol
— Teppei Kurita (@kuritateppei) 2020年3月8日
レイトレで再現 →「2枚の偏光板をスリット方向90度で重ねると光を通さないのに、その間にもう一枚偏光板を斜めに挟むと光が通る様になる」https://t.co/3TheoaqaWH pic.twitter.com/zba1s70isM
— Teppei Kurita (@kuritateppei) 2020年3月8日
オブジェクト前とカメラ前に直交した偏光板を配置し、カメラ側の偏光板を回転。#Mitsuba2 pic.twitter.com/1aGcoNX1t8
— Teppei Kurita (@kuritateppei) 2020年3月7日
retarder(1/4波長版)も実装されているので典型的な円偏光実験はできると思います。レイトレ中の光線にスカラー値の代わりにストークスベクトル(s0~s3)を使ってて円偏光成分s3が含まれています。BRDFも導体誘電体共に偏光フレネル方程式に従うように実装されています(pBRDF)。https://t.co/nzH4jdg4mt https://t.co/iCxEL8JdmN
— Teppei Kurita (@kuritateppei) 2020年3月7日
Mitsuba2で新しく実装された偏光レンダリングをやってみました。コーネルボックスの中に直線偏光板を奥から0°、45°、90°の順で置いています。0°と90°の偏光板が重なると完全に光は遮断されますが、45°の偏光板が間にあると減衰しますが通過します。https://t.co/2b08zcHM3O pic.twitter.com/MuXDGUE1Jg
— Teppei Kurita (@kuritateppei) 2020年3月7日
MItsuba2のプラグイン現状。
— Teppei Kurita (@kuritateppei) 2020年3月7日
・film:hdrfilmのみ
・sampler:independentのみ
・sensor:perspective(&thin)のみ
ここら辺がキッツくて、あとはまあBSDFやShape、Emitterとかはそれなり。正射影すらないのは痛い(自分でプルリクしろ)。https://t.co/uoEC8UoKMb
全然注視してなかったけど最近のVisualStudioの起動時の画面の作業候補、git cloneが一番上なんですね、時代を感じる… pic.twitter.com/BXbV5fFIP1
— Teppei Kurita (@kuritateppei) 2020年3月7日
2D半導体=二セレン化タングステン層。ニューラルネットと画像そのものは、サブピクセルを相互接続することによって形成。
— Teppei Kurita (@kuritateppei) 2020年3月5日
教師あり・教師なし学習共に実証。チップに光学的に投影される画像を分類、1秒あたり2000万フレームの処理が可能。(通常は100フレ、超高速センサでも1000フレほど)。
pandasのapplyはmapみたいなものと覚えておけば良いか
— Teppei Kurita (@kuritateppei) 2020年3月4日
今までpandas.DataFrameのデータ展開iterrows()で思考停止してやってたけどitertuples()使いやすい。そして速い。https://t.co/hrGfGgNnPW
— Teppei Kurita (@kuritateppei) 2020年3月3日
はじめての鳥瞰図変換。射影変換をforward式からbackward式に変更して、補間をバイリニアにしたら、かなりまともな画になった! pic.twitter.com/DbyIuo3Hum
— Teppei Kurita (@kuritateppei) 2020年3月2日
mitsubaの正射影における投影領域はx,yそれぞれ[-1,1]つまり2x2の正方領域の平面センサのようなイメージ。
— Teppei Kurita (@kuritateppei) 2020年3月1日