Pythonで画像処理してみたいです。
このような要望にお応えします。
今回は、CycleGANの学習済みモデルを用いた画像のスタイル変換をします。
下記のサイトを参考にさせていただきました。
- https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
- https://github.com/junyanz/CycleGAN
- https://blog.negativemind.com/2020/03/30/cyclegan-image-to-image-translation-by-learning-some-relationship-between-the-domains/
- https://ainow.ai/2018/08/21/143977/
- https://arxiv.org/pdf/1703.10593.pdf
CycleGANの前に
CycleGANの前にGANについて整理します。
GANは生成モデルの一種であり、データから特徴を学習することで、実在しないデータを生成したり、存在するデータの特徴に沿って変換することができます。
GANモデルの生成プロセスは、以下の例がわかりやすいと思います。
1.見本のお札を用意する。
2.偽造者のAIがそれを参考に偽札を作成する。
3.警察のAIがそのお札の真贋を判断する。
2, 3を繰り返し、より精巧な偽札を作り出すように生成できるようになる。
このように、GANは2つのネットワークを競わせながら学習させるモデル構造として提案されており、このような構造により、従来モデルより鮮明な画像生成が可能になっています。具体的には、GANはGenerator, Discriminatorと呼ばれる2つのニューラルネットワークで構成され、Generatorは生成データのランダムノイズzに基づき、見本となるデータに近似するように生成します。
Discriminatorは、Generatorが生成した偽物のデータと本物のデータが与えられ、その真偽を判定します。この2つのネットワークを交互に競合させ、学習を進めることで、Generatorは本物のデータに近い偽物データを生成できるようになります。そして、Generatorの生成データと本物のデータの区別ができなくなったときに学習が収束し、Generatorが本物のデータの分布を学習したと判断します。
CycleGANについて
CycleGANは、異なる画像スタイルの領域を変換することができGAN(Generative Adversarial Network)の一種です。 CycleGANのモデル、学習方法については、以下の記事がわかりやすいと思いました。
- https://blog.negativemind.com/2020/03/30/cyclegan-image-to-image-translation-by-learning-some-relationship-between-the-domains/
- https://ainow.ai/2018/08/21/143977/
今回は、下記で公開されている学習済みCycleGANモデルを用いて画像のスタイル変換をします。
- https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
Google Colaboratoryの準備
・Googleのアカウントを作成します。
・Googleドライブにアクセスし、「新規」→「その他」から「Google Colaboratory」の順でクリックします。そうすると、Colaboratoryが起動します。
・Colaboratoryが起動したら、以下のコマンドをCoalboratoryのセルに入力し実行します。
そうすることで、Googleドライブをマウントします。
1 2 |
from google.colab import drive drive.mount('/content/drive') |
・実行後、認証コードの入力が促されます。このとき、「Go to this URL in a browser」が指しているURLにアクセスしgoogleアカウントを選択すると、認証コードが表示されますので、それをコピーしenterを押します。これでGoogleドライブのマウントが完了します。
CycleGAN学習済みモデルの準備
Google Colaboratoryの「ランタイム」→「ランタイムのタイプ変更」でGPUを選択します。
ツールをダウンロードする場所に移動します。 本記事では、マイドライブにツールをダウンロードします。
1 |
cd /content/drive/My Drive |
gitからツールをダウンロードします。
1 |
!git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix |
ダウンロードしたフォルダまで移動します。
1 |
cd pytorch-CycleGAN-and-pix2pix |
ツール実行に必要なライブラリをインストールします。
1 |
!pip install -r requirements.txt |
CycleGAN学習済みモデルをダウンロードします。
1 2 3 4 |
!bash ./scripts/download_cyclegan_model.sh style_ukiyoe !bash ./scripts/download_cyclegan_model.sh style_monet !bash ./scripts/download_cyclegan_model.sh style_cezanne !bash ./scripts/download_cyclegan_model.sh style_vangogh |
これで準備完了です。 test.pyを実行することで 、入力画像を浮世絵風、モネ風、ゴッホ風、セザンヌ風のスタイルに画像を変換することができます。入力画像は、datasets/tests/testAに保存しています。画像のスタイル変換結果は、results/に保存されます。
1 2 3 4 5 |
!python test.py --dataroot datasets/tests/testA --name style_ukiyoe_pretrained --model test --no_dropout !python test.py --dataroot datasets/tests/testA --name style_monet_pretrained --model test --no_dropout !python test.py --dataroot datasets/tests/testA --name style_cezanne_pretrained --model test --no_dropout !python test.py --dataroot datasets/tests/testA --name style_vangogh_pretrained --model test --no_dropout |
出力結果
出力結果は、以下になります。
画像1
画像2
画像3
画像4
画像5
どうでしょうか? 様々な要素が混じる複雑な画像に対して実施してみるのもいいかもしれません。