一様分布と正規分布
一様分布と正規分布を画像とそのヒストグラムで表します。
pythonのコードは以下の通り。
%matplotlib inline import matplotlib.pyplot as plt import numpy as np # 一様分布 im = np.random.rand(32,32) plt.gray() plt.subplot(2,2,1) plt.imshow(im) plt.subplot(2,2,2) plt.hist(im.flatten()) # 正規分布 im = np.random.randn(32,32) plt.subplot(2,2,3) plt.imshow(im) plt.subplot(2,2,4) plt.hist(im.flatten()) plt.show()
結果は次の通り。
大した内容ではないですが、コードについて簡単に解説します。
%matplotlib inline
jupyterで実行する際、結果をインライン表示するためのマジックコマンドです。
import numpy as np # 一様分布 im = np.random.rand(32,32) # 正規分布 im = np.random.randn(32,32)
numpyの乱数生成関数で32×32画素の画像を作っています。
randが一様分布の乱数生成、randnが正規分布の乱数生成です。
numpy.randomには他にもたくさんの乱数生成関数が存在するようです。
import matplotlib.pyplot as plt plt.gray() plt.subplot(2,2,1) plt.imshow(im)
matplotlib.pyplotを使って、
画像をグレースケールで2×2に分割された領域の1つ目に表示します。
plt.subplot(2,2,2) plt.hist(im.flatten())
matplotlib.pyplotを使って、
画像のヒストグラムをグレースケールで2×2に分割された領域の2つ目に表示します。
matplotlibのマジックコマンド:"inline"と"notebook"
jupyterでmatplotlibを使う際、憶えておくべきマジックコマンドは次の二つ。
- %matplotlib inline
- %matplotlib notebook
inline
%matplotlib inline import matplotlib.pyplot as plt import numpy as np im = np.random.randn(10,10) plt.gray() plt.imshow(im) plt.show()
たくさん画像を表示したりする場合はこれ。
notebook
%matplotlib notebook import matplotlib.pyplot as plt import numpy as np im = np.random.randn(10,10) plt.gray() plt.imshow(im) plt.show()
こちらは少しだけインタラクティブな操作ができる。
Noise2Noiseを理解する(2)
論文"Noise2Noise: Learning Image Restoration without Clean Data"を読みます。
前回、"1. Introduction"を読みました。
gyokan.hatenablog.com
今回は"2. Theoretical Background"です。ちょっと長くなったので目次を載せます。
"2. Theoretical Background(理論的背景)"を読む
未知の真値を推定する一般的な戦略:ML推定
室温の測定値の信頼できないセット(, , ...)があると仮定します。
真の未知の温度を推定するための一般的な戦略は、いくつかの損失関数に従って、測定値から最小の平均偏差を持つ、数を見つけることです。
損失の場合、この最小値は観測値の算術平均で求められます。
L2損失関数と算術平均
同じものを測定したデータが複数あるとき、それがばらついているなら平均をとろう、というのはごく当たり前の話です。ここでは、それを少し詳細に考察しています。
まず、真値を得るための損失関数を一般化してLとし、最小化問題を解こう、としているのが式2です。具体的な損失関数を「差の二乗」とすると、結局算術平均に落ち着くことを示しているのが式3です。
は、全てのyについての関数f(y)の値の平均値を表しています。つまり、yをからまでのN個の値をとすると、
となります。これを用いて、損失関数が損失である場合の式2から式3を導出する過程を以下に示します。まず式2を書き換えます。
zの最小値を求めるためには、次のようにzについて微分したものをゼロとして解けばよいです。
これで式3が示せました。
L1損失関数と中央値
損失である絶対偏差の合計の場合は、観測値の中央値でその最適値が得られます。
同じように損失関数が損失である場合の式2を変形してみます。
zの最小値を求めるために、zについて微分し、ゼロとなる方程式を解きます。
ここでN個ののうち、M個のがzより小さいと仮定すると、次のようになります。
つまり、N個ののうち、M=N/2個、つまり半分のがzより小さいとき、この方程式は成り立ちます。
これは、zがの中央値であることを意味します。
一般的なクラスの偏差最小化推定量は、M-estimatorとして知られています(Huber、1964)。統計的観点から、これらの共通損失関数を使用した要約推定(summary estimation)は、損失関数を負の対数尤度として解釈することにより、ML推定(最尤推定)と見なすことができます。
ML推定(最尤推定)とは、「与えられたデータから、データが従う確率分布の母数を、点推定する方法」です。
ここでは、与えられたデータ「室温の測定値の信頼できないセット(, , ...)」から、データが従う確率分布の母数(平均値)を、点推定しているので、確かにML推定(最尤推定)と見なすことができます。
だから何だ、という話ですが、続きます。
点推定手順の一般化
ニューラルネットワークリグレッサ(regressors)の訓練は、この点推定手順の一般化です。入力とターゲットのペアのセットに対する、典型的なトレーニングタスクの形式を観察しましょう。ここで、次式のネットワーク関数は、によってパラメーター化されています。
式(4)はつまり、式(2)のzを一般化し、に置き換えたものです。
室温を例に、この式(4)は、入力xが外気温、を外気温xのときの室温、yを温度計での測定値と考えてみます。ここでパラメータθは例えば部屋の断熱性能であり、最小化問題により求める対象です。
確かに、入力データへの依存性を取り除き、単に学習済みスカラーを出力する単純なを使用すると、式(4)は式(2)になります。
例えるなら、断熱性θが凄すぎて、入力である外気温xに室温zが依存しないときの話ですね。入力xもパラメータθも式から無くなってしまいます。
逆に、完全なトレーニングタスクは、すべてのトレーニングサンプルにおいて、同じ最小化問題に分解されます。簡単な操作は、式(4)が次式と等価であることを示します。
式(4)と式(5)が等価であることを示す式変形は良く分からないです・・・。ただ、感覚的には、式(4)がx、yを両方に関する平均値を求めるもの、式(5)はあるxという条件のとき、yに関する平均値を求め、それをさらに全てのxについて平均するというもので、やっていることは同じですが、手順の違いを強調した表現でしょうか。
室温を例に具体的に考えると、
- 式(4):様々なタイミングで外気温xと室温測定値yのペアを取得してその誤差の平均値を求める。
- 式(5):ある外気温xにおいてばらつきのある測定値yを複数取得して誤差の平均を求める。それを様々な外気温xに関して行って平均する。
ということだと理解します。
ネットワークは、理論的には、入力サンプルごとに別々に点推定問題を解くことによってこの損失を最小化できます。したがって、根本的な損失の特性は、ニューラルネットワークのトレーニングによって継承されます。
式(4)を式(5)に変形することで、入力xとターゲットyをペアで考えなくても、入力xごとに別々に考えれば良いことが分かります。
気温の例では、様々なタイミングの外気温xと測定値yのペアを取得するより、ある外気温xのときにまとめて複数の測定値yを取得する方が手間がかからず大量のデータを取得できるでしょう。
そうやって入力サンプルごとに点推定を解いても「根本的な損失の特性」なるものはちゃんと得られる、というのがニューラルネットワークのトレーニングの能力である、と論文は述べているのだと思います(たぶん)。
式(1)の隠している微妙な点
有限数の入力とターゲットのペアを用いた式1による、リグレッサーをトレーニングする通常のプロセスは、微妙な点を隠しています。すなわち、入力とターゲットの間の1:1マッピングであるとプロセスによって(偽って)ほのめかされていますが、正しくはマッピングは多値です。
例えば、すべての自然画像に対する超解像タスク(Ledig et al., 2017)では、低解像度画像xは多くの異なる高解像度画像yで説明できます、エッジとテクスチャの正確な位置と方向に関する知識は間引きによって失われているので。言い換えれば、p(y|x)は、低解像度xと一致する自然画像の非常に複雑な分布です。
ところどころ英語の意味が分かりませんが、具体例をイメージすると分かりやすいです。超解像タスクにおいて、低解像度画像xを超解像度画像yにしようとしても、xに対し正解のyは1つではなく複数あるということを言っており、リグレッサーはこれに目を瞑っています。
L2損失を用いて、低解像度画像と高解像度画像のトレーニングペアでニューラルネットワークのレグレッサーをトレーニングすると、ネットワークはすべてのもっともらしい説明(たとえば、異なる量だけシフトしたエッジ)の平均を出力することを学習し、結果として、ネットワークの推論には空間的なぼけが生じます。
そして複数ある高解像度画像yを用いてニューラルネットワークを学習することが(式5)で表されています。さらに、誤差関数をL2損失とするなら、得られる高解像度画像は、複数あるyの平均値であり、このことが(式3)で表されています。
複数ある高解像度画像yはそれぞれが高解像度でも、平均をとるとぼけ画像になってしまいます。とすると、超解像タスクでは結局ぼけ画像しか得られません。
このよく知られた傾向に対抗するために、かなりの量の研究が行われてきています。例えば、学習済み識別関数を損失として使用する(Ledig et al., 2017; Isola et al., 2017)ことよって。
- [Ledig et al., 2017]: Isola, Phillip, Zhu, Jun-Yan, Zhou, Tinghui, and Efros, Alexei A. Image-to-image translation with conditional adversarial networks. In Proc. CVPR 2017, 2017.
- [Isola et al., 2017]: Ledig, Christian, Theis, Lucas, Huszar, Ferenc, Caballero, Jose, Aitken, Andrew P., Tejani, Alykhan, Totz, Johannes, Wang, Zehan, and Shi, Wenzhe. Photo-realistic single image super-resolution using a generative adversarial network. In Proc. CVPR, pp. 105–114, 2017.
以上のことはもちろん一般によく知られていてたくさんの研究があります。(なんだか、解決しそうにない問題に思えるのですが・・・。)
L2損失のもたらす予期しない利益
我々の観察は、ある問題にとってはこの傾向が予期しない利益をもたらす、というものです。
些細で、そして一見役に立たないL2最小化の性質は、もし予想をターゲットと一致させる乱数でターゲットを置き換えても、予想に反して、見積もりは変わらない、というものです。
ここに書かれていることがNoise2Noiseにおいて、最も重要な原理なのだと思います。
これまで見てきた通り、例えば超解像タスクでは、低解像度画像xを超解像度変換する関数を求めたいのですが、低解像度画像xに対応する高解像度画像yは複数存在するため、L2最小化を誤差関数として機械学習を行うと、関数はyの平均値を出力するような学習が進んでしまい、結局ぼかし処理を生成してしまいます。
この性質にはがっかりなのですが、結局yの平均値を出力するような関数が得られると分かっているなら、その関数が得られる条件内でyを置き換えても良い。結局得られる関数は変わらないのだから。
これは直感的には( ゚Д゚)ハァ?なのですが、式を見ると確かにそのようです。
これは簡単に理解できます。すなわち、yの集合がどんな特定の分布から引き出されたとしても、式(3)は成り立ちます。
その結果、入力条件付き目標分布p(y|x)が同じ条件付き期待値を有する任意の分布に置き換えられても、式(5)の最適ネットワークパラメータθも変化しないままである。
入力低解像度画像xにおける目標の高解像度画像yをどう置き換えても、ぼかした結果を出力する超解像度処理fθが生成される、ということは変わりません。
結論
これは、原理的には、ニューラルネットワークのトレーニングターゲットを、ゼロ平均ノイズで破損させても、ニューラルネットワークが学習するものは変わらないことを意味しています。
これを式1からの破損入力と組み合わせると、経験的リスク(empirical risk)最小化タスクが残ります。
この式は、式1のターゲットを、ノイズ画像に置き換えた式です。
式1では問題を解くにはノイズのないデータが必要でしたが、式6では不要になってしまいました。
ここで、入力とターゲットの両方は、破損した分布(必ずしも同じ必要はない)から引き出されます。のような、観測されていないクリーンなターゲットが根底にあることを条件に。
無限のデータが与えられると、解は(1)の解と同じになります。
有限データの場合、分散はターゲット内の破損の平均分散をトレーニングサンプルの数で割ったものです(付録を参照)。
とはいえ、条件はあるようです。
興味深いことに、上記のどれも破損の尤度モデルにも、根本的なクリーン画像多様体(clean image manifold)に対する密度モデル(事前)(density model (prior) )にも依存していない。
つまり、明示的なp(noisy|clean)またはp(clean)は必要ありません。データがそれらに従って分散されている限り。
条件はあっても、クリーンなデータの分布や、その分布におけるノイズの分布といったものが必要ないことが強味なのだと思います。
ノイズのあるデータ事態の収集は容易ですが、そのデータからノイズの分布を求めるのは容易ではありません。本手法を使うと、それを求めることなく、データを収集することでノイズ低減処理ができるようになる、と。
多くの画像復元タスクにおいて、破損した入力データが期待しているのは、クリーンなターゲットであり、我々は復元を目指しています。
暗い場所での写真撮影はその一例です。この例では、長時間のノイズのない露光は、短時間の独立したノイズの多い露光の平均です。
これを念頭に置くと、上記は、高価または困難な可能性のある長時間露光なしに、ノイズのある画像ペアのみを与えられて、光子ノイズを除去することを学習できる可能性を示唆しています。
暗所撮影写真の例では、入手するのが難しいノイズ除去の学習には長時間露光画像が一見必要に思えますが、実は入手が容易な短時間露光画像からでもノイズ除去の学習ができます。
他の損失関数についても同様の観察が可能です。
例えば、L1損失はターゲットの中央値を回復します。これは、次のことを意味しています。すなわち、ニューラルネットワークは、重要な(上位50%まで)異常値の内容を含む画像を修復するように訓練することができ、やはりそのような破損した画像の対へのアクセスのみを必要とすることを意味します。
良く分からないですが・・・、L2損失は平均値でしたが、L1損失は中央値を求める処理になります。この場合も、例えばクリーンな画像をターゲットとしてクリーンな画像の中央値を求めるのも、ノイズ画像をターゲットとしてノイズ画像の中央値を求めるのみ、得られる中央値は変わらない、ということでしょうか。
次のセクションでは、これらの理論的能力も実際には効率的に実現可能であることを実証する、多種多様な例を紹介します。
以上、理論のお話でした。なんとなく分かったような分からないような・・・。
まとめ
"Noise2Noise: Learning Image Restoration without Clean Data"の"2. Theoretical Background(理論的背景)"を読みました。次は"3. Practical Experiments(実技実験)"を読みます。
論文"Objects as Points"を読む(6)
の続きです。
5. Implementation details
4つのアーキテクチャ(ResNet-18、 ResNet101 [55]、 DLA-34 [58]、 and Hourglass-104 [30])で実験します。
ResNetsとDLA-34に関しては、「変形可能な畳み込み層[12]」を用いて修正し、Hourglassネットワークはそのまま使用します。
ここから実装の話です。本論文はバウンディングボックスを、それぞれキーポイント、オフセット、サイズを表す画像形式に変換して用いるというものなので、画像形式を出力とするネットワークがそのまま使えます。
Hourglass
stacked Hourglassネットワーク[30、40]は、入力を4倍ダウンサンプリングし、2つの連続 hourglass モジュールを続けます。各 hourglass 計モジュールは、スキップ接続を持つ対称5層のダウンおよびアップコンボリューションネットワークです。このネットワークは非常に大規模ですが、一般的に最高のキーポイント推定パフォーマンスが得られます。
[30] H. Law and J. Deng. Cornernet: Detecting objects as paired keypoints. In ECCV, 2018.
[40] A. Newell, K. Yang, and J. Deng. Stacked hourglass networks for human pose estimation. In ECCV, 2016.
一つ目のネットワークが Hourglass (砂時計)というもの。まずは、大規模で性能が高いモデルということのようです。
ResNet
Xiao et al. [55]は、より高い解像度の出力(出力ストライド4)を可能にするために、3つのアップコンボリューションネットワークで標準残差ネットワーク[22]を拡張します。我々はまず、計算量を節約するために、3つのアップサンプリングレイヤのチャネルをそれぞれ256、128、64に変更します。そして、チャネル256、128、64とのそれぞれのアップコンボリューションの前に、1つの3×3変形可能コンボリューションレイヤを追加します。アップコンボリューションカーネルはバイリニア補間として初期化されます。詳細なアーキテクチャ図については補足を参照してください。
[55] B. Xiao, H. Wu, and Y. Wei. Simple baselines for human pose estimation and tracking. In ECCV, 2018.
[22] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016.
二つ目がRezNetを高解像度にするために拡張したもの。計算量も節約しています。
DLA
Deep Layer Aggregation(DLA)[58]は、階層的スキップ接続を持つ画像分類ネットワークです。 我々は密な予測のためにDLAの完全畳み込みアップサンプリングバージョンを利用します。これは特徴マップの解像度を対称的に増加させるために、反復的なディープアグリゲーション(iterative deep aggregation)を使用する。我々は、下位層から出力への変形可能な畳み込み[63]で、スキップ接続を強化します。具体的には、アップサンプリング層ごとに、元の畳み込みを3×3変形可能畳み込みに置き換えます。詳細なアーキテクチャ図については補足を参照してください。我々は、各出力ヘッドの前に、256チャネルを有する1つの3×3畳み込み層を追加します。そして最後の1×1の畳み込み演算によって、希望する出力が得られます。我々は補足資料で詳細を説明します。[58] F. Yu, D. Wang, E. Shelhamer, and T. Darrell. Deep layer aggregation. In CVPR, 2018.
[63] X. Zhu, H. Hu, S. Lin, and J. Dai. Deformable convnets v2: More deformable, better results. arXiv preprint arXiv:1811.11168, 2018.
三つ目がDeep Layer Aggregation(DLA)というもの。簡単に「こういうもの」という説明がないため、どういうものかを知りたければ、関連文献を調べる必要があります。
文献[58]の概要を引用します。
Visual recognition には、低から高までのスパンレベル、小から大までのスケール、および細かいものから粗いものまでの解像度といった、「豊富な表現」が必要です。たたみ込みネットワークの特徴の深さがあってさえ、単独の層では十分ではありません。すなわち、これらの表現を合成して集約することで、何をどこで推論するかが向上します。
アーキテクチャに関する取り組みでは、ネットワークバックボーンのためのさまざまな側面を探求し、より深いまたはより広いアーキテクチャを設計しています。しかし、ネットワーク全体でレイヤとブロックを最適に集約する方法にはさらに注意が必要です。
スキップ結合は層を結合するために組み込まれていますが、これらの結合はそれ自体「浅い」ものであり、そして単純なワンステップ操作によってのみ融合する。レイヤ間の情報の融合を強化するために、より高度な集約によって標準アーキテクチャを強化します。
当社のディープレイヤアグリゲーション構造は、特徴階層を反復的かつ階層的にマージして、より良い精度と少ないパラメータでネットワークを構築します。
アーキテクチャとタスクにわたる実験では、ディープレイヤアグリゲーションは既存の分岐およびマージ方式と比較して認識と解決を向上させることがわかりました。
スパンレベルはよくわかりませんが、様々なスケール、解像度といった「豊富な表現」を可能とするために、ネットワークアーキテクチャには、「より深くより広く」とは異なる「集約(Aggregation)」が必要とのこと。文献[58]のDeep Layer Aggregation(DLA)では、「特徴階層を反復的かつ階層的にマージ」するもので、高精度と少パラメータを両立を実現するとのことです。
まとめ
論文"Objects as Points"の5章を読み始めました。まず実験に用いるネットワークアーキテクチャが紹介されています。
最尤推定とは
最尤推定(さいゆうすい)が未だに理解できていないので調べます。
最尤推定
Wikipedia(2019/06/23)から引用すると、
最尤推定(さいゆうすいてい、英: maximum likelihood estimation、略してMLEともいう)や最尤法(さいゆうほう、英: method of maximum likelihood)とは、統計学において、与えられたデータからそれが従う確率分布の母数を点推定する方法である。この方法はロナルド・フィッシャーが1912年から1922年にかけて開発した。
つまり、確率分布の「母数」なるものを「点推定」するのが「最尤推定」である、と。
で、次は「母数」とは何かが分からないので調べます。
母数
Wikipedia(2019/06/23)から引用すると、
母数(ぼすう)、パラメータは確率論および統計学において、確率分布を特徴付ける数をいう。
「そうなんだー」、というより、「あれ? 私の知ってる母数とは違う」と思ってしまったのでGoogle検索すると、次のような記事が見つかりました。
「分母」「サンプルサイズ」と誤用されることがあるそうです。で、私は「サンプルサイズ」と誤用してました。(この勘違いのせいで、これまでかなり損してきた気がする・・・。)
さらにWikipediaを読み進めると、
ふたたび最尤推定
つまり、推定対象の確率分布がポアソン分布であれば、平均λを「点推定」し、正規分布であれば平均 μ および分散 を「点推定」する、ことを「最尤推定」と呼ぶ。・・・という理解でいいですかね?
Wikipediaを更に読み進めると、続いて「基本的理論」が書いてあります。
(略)データが分布Dによることはわかっていても、母数θ の値はわからないかもしれない。(略)n 個の標本 があれば、この標本からθの値を見積もることができる。最尤法は母数θの一番尤もらしい値を探す(略)方法である。
「最尤推定」という名前からは「最も尤もらしいものを推定する」ということは分かります。「では何を推定するのか」を、私は分かっていなかったのだで理解しました。というより、「母数を推定する」のだ、と言われて「ああサンプルサイズを推定するのね」と勘違いしていてたのだとようやく分かりました。
点推定とは
論文を読んでいて、「点推定(point estimation)」という言葉が出てきたが、恥ずかしながら分からなかったので調べてみました。
点推定の定義
Wikipedia(2019/6/22現在)には、こう記載されています。
点推定(てんすいてい、英: point estimation)とは、推計統計学において観測データに基づいて未知量に対する良好な推定(推定量)と見なせる値(統計量)を計算する手法とその結果を言う。平均値・中央値・最頻値などが用いられる。尤度関数の最頻値で推定する場合、事前分布がない場合を最尤推定、事前分布がある場合を最大事後確率推定という。
・・・ちょっと何書いてるのか分からないですね。
点推定(てんすいてい、英: point estimation)
分野:推計統計学
定義:観測データに基づいて未知量に対する良好な推定(推定量)と見なせる値(統計量)を計算する手法とその結果
例1:平均値・中央値・最頻値などが用いられる。
例2:尤度関数の最頻値で推定する場合、事前分布がない場合を最尤推定という。
例3:尤度関数の最頻値で推定する場合、事前分布がある場合を最大事後確率推定という。
疑問
点推定とは、観測データを用いて未知量を推定するひとつの方法で、例えば平均値などであるくらいの理解で良いとは思うのですが、何か腑に落ちない。
で、なぜ腑に落ちないかを考えると、では「点推定ではないものは何なのか」が以上からはわからないからだ、と気づきました。
論文"Objects as Points"を読む(5)
gyokan.hatenablog.com
の続きです。
From points to bounding boxes (ポイントからバウンディングボックスまで)
推論時は、最初にヒートマップの各カテゴリのピークを個別に抽出します。我々は値が8連結近傍以上であるすべての応答を検出し、上位100のピークを維持します。
を、クラスcのn個の検出された中心点の集合としましょう。各キーポイント位置は整数座標によって与えられます。我々はキーポイント値を検出信頼度の尺度として使用し、次の場所に境界ボックスを作成します。
ここで、はオフセット予測、はサイズ予測です。
IoUに基づく非最大値抑制(NMS)または他の後処理を必要とせず、すべての出力がキーポイント推定から直接生成されます。
ピークキーポイント抽出は、十分なNMS代替案として役立ち、3×3最大プール操作を用いるデバイス上で効率的に実施することができる。
推論において、中心点、オフセット、サイズが出力されるニューラルネットワークから、所望の出力形式であるバウンディングボックスを生成する方法について記載されています。
出力であるC+4枚の画像について、まずヒートマップからピーク位置を検出し、そのピーク位置(座標)について、オフセット画像、サイズ画像からそれぞれの値を取得することで、示されている式に基づいてバウンディングボックスを作成できます。
難しい内容ではないですね。
まとめ
論文"Objects as Points"の4章を読み進めました。4章はこの後、"4.1. 3D detection"、"4.2. Human pose estimation"と続くのですが、これらのタスク別の詳細にはあまり興味がないので飛ばして、次は"5. Implementation details"を読もうと思います。