3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CNNでJPEGノイズ除去〜AR-CNN〜

Last updated at Posted at 2020-04-03

参考文献

本記事は以下のページ、論文を参考にしています。

概要

左:JPEG圧縮画像、右:AR-CNNによる処理画像 論文より引用

背景

  • 非可逆圧縮(Lossy compression)によってブロックノイズやリンギングノイズなどの複雑なノイズが発生する
  • 既存の圧縮ノイズ除去手法は以下のどちらかであった
    • ブロックノイズは除去するが画像がボケる
    • シャープな画像を生成するがリンギングノイズが残る

内容

  • 超解像の分野で成功を収めたSuper-Resolution Convolutional Neural Network(SRCNN)という手法をもとに
    圧縮ノイズ除去手法、Artifacts Reduction Convolutional Neural Network(AR-CNN)を提案する
  • 実応用の際には処理速度が求められるため、2点の工夫によりAR-CNNを高速化する(Fast AR-CNN)
    • Layer decomposition
    • stride > 1のconv層とdeconv層を組み合わせて使用
  • Fast AR-CNNAR-CNNと比較して画質の劣化なしに7.5倍の速度向上を達成
  • さらに実験では以下のことを示す
    • 深いモデルを学習する場合は浅いモデルで学習した特徴を使用することでより効率が上がる
    • ”easy to hard"という考えはモデルの浅い -> 深いの転移に限らず、有効である

AR-CNN

AR-CNNの概観

構造

| layer | name | in ch | out ch | kernel size | stride | activ fn |
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|1|Feature extraction| 1|64|9|1|PReLU|
|2|Feature enhancement| 64|32|7|1|PReLU|
|3|Mapping|32|16|1|1|PReLU|
|4|Reconstruction|16|1|5|1|-|

Fast AR-CNN

AR-CNNの各layerにおけるパラメータ数

| layer | name | in ch | out ch | kernel size | stride | activ fn |Number of Parameters|Percentage|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|1|Feature extraction| 1|64|9|1|PReLU|5184|4.87%|
|2|Feature enhancement|64|32|7|1|PReLU|100,352|94.27%|
|3|Mapping|32|16|1|1|PReLU|512|0.48%|
|4|Reconstruction|16|1|5|1|-|400|0.38%|
|total|-|-|-|-|-|-|106,448|100%|

Feature enhancement layerがパラメータ全体の95%を占めている
Feature enhancement layerのパラメータ数を減らせば良い

特徴マップの大きさ(縦×横)も計算コストに影響が大きい
超解像など従来のlow-level visionタスクでは、中間特徴マップの空間的なサイズは入力画像と同じに保つ必要があった
一方で、認識などhigh-level visionタスクではその必要がない
一般的に、理にかなったサイズの大きなストライドは多少精度は劣化するが畳み込み演算を顕著に速くできる
ストライドのサイズが計算速度を向上させる上で重要な要因である

対策①:Layer decomposition (直訳:層の分解)

Feature enhancement layerは2つの役割を担っている

  • 大きなフィルタで入力特徴マップのノイズを除去
  • 高次元特徴を比較的低次元特徴への変換

それぞれの役割を担う連結した2つのlayerに置き換える

| layer | name | in ch | out ch | kernel size | stride | activ fn |Number of Parameters|Percentage|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|2|Feature enhancement|64|32|7|1|PReLU|100,352|94.27%|

| layer | name | in ch | out ch | kernel size | stride | activ fn |Number of Parameters|Percentage|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|2-1|shrinking|64|32|1|1|PReLU|2048|-|
|2-2|enhancement|32|32|7|1|PReLU|50176|-|
|total|-|-|-|-|-|-|52224|-|

  • Layer decompositionによりFeature enhancement layerのパラメータ数は半減
  • モデル全体で見ても約46%規模を削減

対策②:stride > 1のconv層とdeconv層

1st layerのストライドをstride > 1にすることで高速化を図る
AR-CNNの1st layerは特徴抽出を担う
認識などhigh-level visionにおける1st layerも同様の役割を担うため、strideを1から2に変更してみる価値はある

ただし、stride > 1により特徴マップが小さくなるため、end-to-endの学習ができなくなる
last layerをdeconv層にすることで対応する
 stride > 1の場合、conv層はsub-sampling、deconv層はup-samplingを行う。

また、処理時間は短縮されるが、復元後の画質が劣化する可能性がある
mapping layerを追加する、deconv層のフィルタサイズを大きくして対応する

完成形Fast AR-CNN

Fast AR-CNN の概観

| layer | name | in ch | out ch | kernel size | stride | activ fn |Number of Parameters|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|1|Feature extraction|1|64|9|2|PReLU|5184|
|2|Shrinking|64|32|1|1|PReLU|2048|
|3|Enhancement|32|32|7|1|PReLU|50176|
|4|Mapping|32|64|1|1|PReLU|2048|
|5|Reconstruction|64|1|9|2|-|5184|
|total|-|-|-|-|-|-|64640|

モデルの層パラメータ数$N$の計算は以下の式で求める。
$d$:層
$n$:特徴マップ数(フィルタ枚数)
$f$:フィルタサイズ

N=\sum_{i=1}^{d} n_{i-1} \cdot n_i \cdot f_i^2

論文ではFast AR-CNNの総パラメータ数は56496という記載があるため、
どこか計算を間違えているかもしれない点はご容赦ください。

以上

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?