🌱

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

2021/08/13に公開

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

今回はU-Net(Dilated Conv + sc-SE + pixel Shuffle)を実装し、
実際に2次元画像(表情)のモザイクの回復を試みました。
出力結果が出るのは非常に楽しい😎

モザイクの回復

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

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

3章 U-Netによるモザイク除去

  • Image to image translation
    • I2Iとも表記する
    • 入力画像を条件として、画像を出力すること
  • I2Iが解決する問題
    • ノイズ軽減
    • 超解像
    • 条件なし画像生成
    • モダリティーの変換
  • 機械学習でよく書かれている処理の模式図について
    • テンソルの状態と変換方法を表現してるっぽい
    • 読める…読めるぞ!
  • U-NetのSkip-Connectionの働き
    • 画像を使いまわしているとみなすことができる
    • Res-NetのResidualBlockの長い版
    • ロス収束が早い
    • 消費メモリが多い(結合オペレーションにCiooncatenate使うから)
    • 深い層の学習が進まないかも
  • CNNの特徴
    • 位置普遍性と畳込みカーネルより、局所的な特徴量に着目しがち
    • 背景が強いハードサンプルではロスが生じやすい
  • 全体の特徴を見るという考え
    • 高周波の情報を保ちつつ、広範囲を参照することで実現する
    • Squeeze and Excitation, Dilated Conv
  • Squeeze and Excitation(SE Blockモジュール)
    • 全体の特徴を見るように組まれたCNNのモジュール
    • チャンネル方向の情報を圧縮する
  • sc-SE Block
    • SE Blockの派生
    • チャンネル方向・空間方向の両方の情報を圧縮
  • Dilated Conv
    • カーネルの参照範囲を拡大させるアイデア
  • Kaggle API
    • ユーザー登録してClab上でデータセットを利用する

演習3

  • TF2.5.0
  • TPUで実行
  • Kaggle APIと連携
  • 前処理
    • データセットを訓練データに変換
      • Anime Face Dataset
      • 63565枚!
      • 64x64x3ch numpy配列 uint8に変換
      • 規定サイズ以下は無視
    • モザイクデータ作成
      • モザイク処理(NN法1/4->GaussianBlur(1.5)->NN法x4)
    • 訓練データとテストデータ分割
    • データセット形式に変換(float32,スケール0-1,バッチサイズ256)
  • モデルの実装
    • se-SEモジュールの実装
    • Pixcel Shuffleの実装(アップサンプリング用)
    • 通常の畳込み層
    • U-Netの実装
      • 35層!
      • エンコーダー層:13
      • 中間層 : 6
      • デコーダー層:16
      • 損失関数 : L1 loss
      • 評価関数 : psnr
  • モデルの訓練
    • TPUで分散処理
    • 実行時間37分!
    • val_psnr = 19.88990020751953
      • 20dBいかなかった…
  • テストデータの出力
    • オリジナル - モザイク化 - 回復した画像の並び

並べて表示

  • 考察

    • 普通にイイ感じ!
    • 眼帯キャラの回復できてるのがすごい
    • 左右の目の形状が全然違くなってしまっている場合がある
    • こまかなディテールの回復はやはり難しい。服の襟とか。
    • 元々、2次元画像の見栄え的に鼻の表現を弱くしているせいか、回復画像では完全に鼻が消える場合が多い
  • 自習

    • DeepCreamPyとの性能比較
    • 訓練したモデルを使って、いらすとやのアワビにモザイクをかけたものを回復
    • 全然駄目だった…
      • 訓練データと入力データの傾向がぜんぜん違うせいだと思う

あわび

その他

参考書の演習問題で引っかかる点を、参考書のGitHub issuesで解決してくれてる人がいて非常に助かった…。
これが輪読パワー!

終わりに

目に見える成果物があるとやる気が回復します。
次回は参考書の4章を進めます。

Discussion