AI(Image Style Transfer(CNNベース))による画像スタイル変換と呼ばれる画像処理

python

Pythonで画像処理してみたいです。

このような要望にお応えします。

以下を参考にさせていただきました。

  • https://github.com/anishathalye/neural-style
  • Image Style Transfer Using Convolutional Neural Networks( https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf )

今回は、CNN(Convolutional Neural Network)を用いた画像スタイル変換を行います。
コンテンツ画像(入力画像)にスタイル画像を転写することをスタイル変換といいます。

Image Style Transfer(CNNベース)について

画像のスタイル変換の本質は、画像のコンテンツとスタイル表現の分離です。
Gatysさん達は、CNNから得られる特徴空間を利用することで該当の分離を実現しています。
以下、論文からの引用です。

下段の各layerごとの画像を確認すると、これらの画像は各layerにおいてコンテンツ画像を復元したものです。a, b, cまでは元のコンテンツ画像と変わらないように見えますが、d, eではlayerが深くなるに従い詳細な情報が落ちているように見えます。
この図のニューラルモデルは学習済みのVGGを使用しています。このモデルは、画像分類用に学習されたものです。

VGGは、画像分類を行う目的で学習されており、深いlayerであるほど分類に寄与する重要な要素が残り、分類に関係のない情報は排除されると考えられます。これに基づき、画像のコンテンツとスタイルを分離する手法が提案されています。

このように、VGGの中間層の特徴量を使用することでスタイル画像のスタイル表現をコンテンツ画像に転写し、画像のコンテンツ表現を保持しつつ、スタイル表現を変換することができます。

コンテンツ情報を保持し、スタイルを他の画像のスタイル表現に近似するために、コンテンツの損失+スタイルの損失を最小化するような損失関数が定義されています。損失関数の計算の流れとしては、以下のように定義されています。

コンテンツの損失は、VGGのconv4_2のlayerの特徴量を用いて、コンテンツ画像と生成画像を比較することにより計算します。

スタイルの損失は、VGGのconv1_1, conv2_1, conv3_1, conv4_1, conv5_1を使用して計算されています。

提案モデルの詳細情報は、論文を参照ください。

  • Image Style Transfer Using Convolutional Neural Networks( https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf )

ざっくりと提案モデルのソースコードを確認しました。

モデルとして、VGG19を使用しています。

画像スタイル変換ネットワークモデル定義は、以下になります。
VGG19の学習済みパラメータを使用しています。

画像スタイル変換は、以下で実施されています。

コンテンツ損失およびスタイル損失などを含めた損失関数は、以下のように計算されています。

最適化アルゴリズムはAdamを使用されています。

それでは、画像のスタイル変換を行います。

Google Colaboratoryの準備

・Googleのアカウントを作成します。
・Googleドライブにアクセスし、「新規」→「その他」から「Google Colaboratory」の順でクリックします。そうすると、Colaboratoryが起動します。

・Colaboratoryが起動したら、以下のコマンドをCoalboratoryのセルに入力し実行します。
そうすることで、Googleドライブをマウントします。

・実行後、認証コードの入力が促されます。このとき、「Go to this URL in a browser」が指しているURLにアクセスしgoogleアカウントを選択すると、認証コードが表示されますので、それをコピーしenterを押します。これでGoogleドライブのマウントが完了します。

Neural Image Style Transferツールの準備

Google Colaboratoryの「ランタイム」→「ランタイムのタイプ変更」でGPUを選択します。

ツールをダウンロードする場所に移動します。 本記事では、マイドライブにツールをダウンロードします。

gitからツールをダウンロードします。

ダウンロードしたフォルダまで移動します。

ツール使用時に必要なライブラリをインストールします。

VGG19の学習済みパラメータをダウンロードします。

下記のコマンドを実行することで、コンテンツ画像data.jpgを2-style2.jpgのスタイルに変換することができます。

出力結果

出力結果は、以下になります。

いかがでしょうか?
コンテンツとスタイル画像の組み合わせを変えてみると多様な結果が得られると思いますので、確認してみてはいかがでしょうか。

タイトルとURLをコピーしました