PNG画像をエンコードするための予測子としてのニューラルネットワーク

記事「 Neural Network As Imageor For Image Coding(PNG)」の翻訳に注目してください。 著者のブログはこちらです。

研究テーマ


この作業の主な理由は、既存の事前フィルターを改善することでした。 人工ニューラルネットワークを使用して最高の予測を行い、ファイル圧縮の向上につながる新しいフィルターを作成します。

圧縮


従来、PNG圧縮は2つのステップに分けられます。

  1. 事前フィルタリング(予測子を使用);
  2. 圧縮(DEFLATEを使用)。

この記事では、最初のステップのみが重要です。 次の図では、現在存在するプレフィルターと、実際のピクセルと予測されたピクセルの違いをどのように保持するかを確認できます。

予測ジョブ
現在存在するフィルター+新しいソリューション:
種類フィルター機能リカバリー機能
0なしフィルト(x)=元(x)偵察(x)=フィルト(x)
1サブFilt(x)= Orig(x)-Orig(a)Recon(x)= Filt(x)+ Recon(a)
2上へFilt(x)= Orig(x)-Orig(b)Recon(x)= Filt(x)+ Recon(b)
3平均Filt(x)= Orig(x)-floor((Orig(a)-Orig(b)/ 2))Recon(x)= Filt(x)+ floor((Recon(a)-Recon(b)/ 2))
4ペースFilt(x)= Orig(x)-PaethPredictor(Orig(a)、Orig(b)、Orig(d))Recon(x)= Filt(x)+ PaethPredictor(Recon(a)、Recon(b)、Recon(d))
5ニューラルネットワークFilt(x)= Orig(x)-NN(ArrayOfInputPixels)Recon(x)= Filt(x)+ NN(ArrayOfInputPixels)

予測子としてのニューラルネットワーク


最後のフィルターは、この記事の著者の新しい実装です。 入力ピクセルの配列を持つニューラルネットワークを内部的に使用します。 結果として、予測されたピクセル変数を返します。 他のフィルターと同様に、元の値と予測値の差は保持されます。 しかし、これらの入力値は何ですか? 次の図では、著者は入力値のニューラルネットワークをより明確に送信するプロセスを説明しようとしました。 まず、画像には3つの異なる部分があります。

  1. コピー可能(REDで表示);
  2. ニューラルネットワークの入力ピクセル(GREENとマーク);
  3. 予測されたピクセル(青で示されます)。

画像エリア

コピーされたピクセル

ニューロフィルターを開始するには初期データが必要なので、赤い領域全体が1対1でコピーされます。 それがそのような画像フレームをコピーする理由です。 ネットワーク構成は次のとおりです。


したがって、1番目から28番目までのすべてのピクセルがコピーされます。

入力ピクセル

フィルターによって処理される最初のピクセルは位置(5,4)にあります。 このピクセルは、残りの28ピクセルとニューラルネットワークを使用して予測できます。 これは上の図からわかります。

予測ピクセル

緑のピクセルはすべて、ニューラルネットワークが処理する入力ピクセルであり、青ピクセルの予測値になります。

コンポーネント


このセクションでは、作成者が開発および使用するコンポーネントについて説明します。 すべてのコードはJAVAで記述されています。
最初の段階では、ニューラルネットワークをトレーニングする必要があります。 このステップをもう少し速く完了するために、著者は、JavaNNSツールのトレーニングシーケンスを作成するパターンエクスポーターを開発しました。 わかりやすくするために、この手順を次の図で説明します。

画像

ニューラルネットワークのトレーニングを完了した後、エンコーダー/エンコーダーで使用する必要があります。 説明した段階の詳細な説明を下図に示します。

画像

  1. 入力画像:ニューラルネットワークを圧縮する単純な画像。
  2. PNGエンコーダー/デコーダー:ニューラルネットワークの予測子を使用して画像をエンコードおよびデコードします。
  3. Neural Netwrok:JAVAプログラミング言語で開発されたニューラルネットワーク。
  4. JNNSParser
  5. 出力画像:出力として、圧縮されたものよりも小さい画像を取得する必要があります。

エンコードとデコードのために、著者はpngjライブラリを使用しました。 ここで彼女を見つけることができます。

結果


ニューラルネットワーク構成を選択する方法は多数あります。

画像

ニューラルネットワーク構成を選択する可能な方法:


以下は、著者によって評価されたニューラルネットワークの設計のための最適なオプションの一部です。 基本的に、彼は画像のいくつかのサンプルで単純にチェックすることでそれらを評価し、次にニューラルネットワークのBPP(ピクセルあたりのビット)を計算し、最適なパラメーターを決定しました。 これにより、次の結果が得られました。

画像

推定ニューラルネットワーク構成:


他のPNG予測子との比較

次の段階で、著者は自分のニューラルフィルターを現在使用されている他のPNGフィルターと比較しました。 テストはいくつかの画像で行われました。

画像

ニューラルネットワークは、PaethフィルターとAverageフィルターよりもやや劣った画像圧縮に対応していることがわかりますが、SubおよびUpよりもはるかに優れています。 この検証の後、別の画像が実行され、より多くの画像(111)が含まれ、その上に自然がキャプチャされました。 フィルターが最もよく処理するイメージと、より悪いイメージを見つける必要がありました。以下は、他のすべてのフィルターよりもニューラルネットワークがはるかにうまく処理したイメージです。

画像

これらの写真の共通点はわかりませんでした。 さて、たくさんの花があります。 したがって、おそらく私のニューラルネットワークは花が本当に好きです。 しかし、私はその説明にあまり満足していませんでした。

したがって、画像に以下が含まれている場合、ニューラルネットワークの使用が適切であると結論付けることができます。


次のステップで、著者は休暇中に撮影した写真を調べて、上記の条件を満たすものを見つけ、これを見つけました:

画像

その結果、6つのフィルターについて次のBPP値が計算されました。
種類BPP
0なし7.289
1サブ6.681
2上へ6.667
3平均6.433
4ペース6.486
5Nn6.368

このように、ニューロフィルターを使用したより良い圧縮のための画像特徴の理論が確認されました。

自然のイメージと人間が作成したイメージの比較


著者は、画像内のオブジェクトの原点が圧縮にどのように影響するかを調べるために、別のテストを実施しました。 次の結果が得られました。

画像

おわりに



プロジェクトはGITハブにあります。 誰が気にします、あなたは見ることができます

Source: https://habr.com/ru/post/J303842/


All Articles