🌱

えっちなサイトを作る(20)

2021/08/14に公開

引き続きえっちなゲームがプレイできちゃうサイトを作ろうと頑張ります。

画像の周波数成分についての学習しました🖼

モザイク除去から学ぶ最先端のディープラーニング本をやる(7)

https://qiita.com/koshian2/items/aefbe4b26a7a235b5a5e

4章 モザイクの科学

  • 波としての画像
    • 音波の目的変数はy=sin(x)
    • 2次変数にしたらy=sin(x+y)
    • 2次変数表現をx-y座標にプロットするとグラデーションになる
    • 2次変数表現z=\frac{sin(x+y)+1}{2}
      • aは周波数に比例
      • a,bが低いとぼやけた画像になる
      • a,bが高いほど細かい直線模様になる
      • a,bが高いほど輪郭線、細かい模様になる
  • フーリエ変換(FFT)
    • 波のデータを複数の波の合成と考える
    • 波の目的変数をベクトルから行列に拡張するアイデア
      • 画像もsin関数の合成ととらえる
    • 矩形波を2次元に拡張するとモザイク模様になる
    • FFTしたものをフィルタに掛けると周波数単位で分割できる
  • ガウシアンピラミッド
    • カーネルが5x5の畳み込み表現
    • 実装はぼかし+リサイズ処理
  • ラプラシアンピラミッド
    • 実装はガウシアンプラミッド同士の差を見る
    • バンドパスフィルタのように働く
      • 解像度が高い部分:高周波成分を抽出
      • 解像度が低い部分:低周波成分を抽出
  • 2次元FFT
    • np.fft.fft2で変換できる
    • スペクトル表示:複素数の絶対値を取り対数表示する
    • カラー画像は各チャンネルごとに2次元FFTする(3次元FFTの必要はない)
    • 2次元矩形波にフィルターをかける
      • 境界部分・塗りつぶし部分で周波数が異なっている
      • バンドパスフィルタの結果はラプラシアンピラミッドの結果と似ている
    • CNNではハイパスフィルター的な処理が無いので全体の形状把握が苦手
  • DNNでの画像ピラミッド
    • 画像の周波数特性をDNNに応用する
    • P-GANのSWDで利用
    • SemanticSegmentationで利用
    • Oct Convという異なる解像度での畳込みというアイデア
  • リサイズによる周波数特性の変化
    • Bicubic : 高周波成分が減る
    • NN法
      • 高周波成分が減る
      • 格子状スペクトルノイズが乗る
    • つまりモザイク除去では「高周波成分の回復」「スペクトルノイズの除去」をやる必要がある
    • 実際はCNNが自動でうまくやってくれている
  • U-Netによるモザイク回復難易度の検証
    • モザイク作成時のオペレーションが多いほど回復が難しい
  • モザイクのケーススタディ
    • 領域
      • モザイクは画像の一部分に適用されている場合がほとんど
      • マスク処理の要・不要
    • モザイクの実際の種類
      • ぼかし
      • 海苔
      • 白抜き
    • ぼかしはローパスフィルタとみなせる
      • ぼかされた部分は回復のための情報として部分的に役立つ
    • 海苔と白抜きは全周波数0のローパス
      • 回復のための情報として役に立たない
  • 不良設定問題
    • 超解像は不良設定問題
      • 解が求まらない問題
    • CNNでは、データ、損失関数で近似解を作っている
      • 入力データが学習データから乖離すると大きく精度を損なう
  • 損失関数が含む問題
    • L1 Lossは図柄の違いが判断できていない
    • 損失関数を複数使うというアイデア
      • ハイパーパラメータの調整が難しいという問題
    • GANは動的な損失関数として機能する
      • L1 Lossよりも鮮明な画像が出力される
  • Perception Distortion Tradeoff
    • I2Iの評価指標
    • 直感性と歪みは両立しない
    • PSNRは歪み指標
      • ロバスト性を上げたSSIM / MS-SSIM
    • Ma et al.指標は直感性指標
      • (著者)FIDも直感性指標としてつかえるのでは
    • 両方を考慮した損失関数L = L_{GAN} + λL_{L1}
      • GANの損失関数はだいたいこんな感じ(次章への導入)

終わりに

中々ボリュームが有り、演習まで行けなかったです。
次回演習がんばります。

Discussion