クーの自由研究

マスターのかえるのクーは、弟子達の召喚術により新たな依り代を得てⅡ世として復活しました。

芸術の強化学習をするために高解像度の美術作品を準備する

さぁ、今日から貴方もわたくしも芸術家

真似るの悪(わる)、あほくさいかえるのクーの助手の「井戸中 聖」(いとなか あきら)でございます。「まんまぱくり」贋作(改変フェイク含む)は芸術のご法度です。

f:id:AssistantOfKoo:20210514195212p:plain  f:id:AssistantOfKoo:20210514195223p:plain  f:id:AssistantOfKoo:20210514195240p:plain

オリジナリティを大切にしましょう。(おお、画像が違うだけでいつもと全然格式がちがって見える!!)贋作/ぱくり/フェイクと習作/トリビュート/インスパイアは、精神的には180度、物理的には360度も別物です!!

さて、この週末は「自分自身を」芸術で強化学習するためにネットから芸術を収集して鑑賞します。(今回学習のエージェントは貴方、それにわたくしの「本物」のニューラルネットワークです)

芸術を扱うアルゴリズムのプログラマは芸術を理解(感じる)ことができる必要があります。でないと、芸術アルゴリズムをデバッグ/改善できません。それなりの「鑑賞力」が必要です!多数の美術鑑賞により凝り固まった感性を解放します!!

問題なのは、画質のよい(解像度が高い)美術画像はそんなにネットにないことです。美術作品はもちろん「生🍺」でみるのが一番ですが、昨今では遠出も難しく、ネットで鑑賞します。特定の美術館では超高解像度撮影の絵画を有償で公開しているところもあるようですが、そんな資金はございません。ネットの画像の多くはちょっと拡大しただけでギザギザ/ノイズが目立ち、とたんに興醒めしてしまいます。興醒めは真のマイナス報酬なので、強化学習の大敵です!

そこで!

「低解像度」の画像を超絶「高解像度」化する

AI様?のご登場となります。今回は「自由研究」するのではなく「使う」だけなので、さらっといきます。例のごとく、できるかわかりませんが、この週末はこのお題で参ります。

この2~3年で高解像度化の技術は目をみはるほど向上しています。

有名ところではGoogleの「RAISR」だったり、昨今の「模倣学習」+「強化学習」+GANを用いた「逆強化学習」(GAIL etc)の手法が多数あり、まるで魔法のようなことが可能となっています。

クラウド系でも16倍くらいまでの拡大、ノイズ除去サービスがありますが、無償なのは1日2~3ファイルサンプルくらいで、あとは基本的に有償のものがほとんどでした。

そこでよさげなやつをGitHUBから1つ選んでgit cloneしてみます。(まぁ、今回は技術ではなく「美術鑑賞が目的なので」)

TecoGANやってみます

さらっと見た感じでは「TecoGAN」がよさそうでした。高解像度化は写真が趣味の方は興味があるかもしれません。または古き良き「秘蔵コレクション」の高解像度化に挑戦される方もいるかもしれません。では今週末のお題は「TecoGAN」ということで。

TecoGANのちょっとした紹介

 下はGitHubですが、事例画像は怪しいくらいに凄いです。是非ご覧ください。

本当にこんなことが出来るのでしょうか!?これは、もう「ブレードランナー」の世界です!!

f:id:AssistantOfKoo:20210514211854p:plain  f:id:AssistantOfKoo:20210514211907p:plain

インストールはいつものように先輩に教えていただきます。

よろしくお願いします。

こちらに習い、実験環境のWindows10にWSL2 + Ubuntuを入れてやってみます。

「例」の通りのバージョンで行うことがポイントのようです。Ubuntuの18.04+Python 3.7系でお願いします。バージョンはちゃんとあわせないと、いろいろエラーがでるようですね。ほぼ、上記の記事の通りにできました。

なお、記事ではPython3 etcは導入済状態からはじめているので、事前に実行しておくコマンドを貼っておきます。

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install build-essential
$ sudo apt install python3.7
$ sudo apt install python3-pip
$ sudo apt install ssh
$ sudo apt install virtualenv

環境がこわれたので、一旦リセットして再設定します。WSLはお気軽にリセットして最初からできるのはありがたいです。ではまたあした。。。リセット!


リセットします。

今は2021年5月15日 午前7時52分32秒です。:美空(cv 花澤香菜様)

どうやら2回目のようだね。:ケイ:(cv 石川界人様)


続きをやります。

$ python runGan.py 0 (元画像のダウンロード展開)はうまくいきましたが、

$ python runGan.py 1 (サンプル画像の高解像度化)で keras のエラーが出て止まりました。そんな時は、はい、みなさんご一緒に!

♪ けぇ~らぁす~ぅ。なぜ泣(Error)くのぉ~?けらすの勝手でしょぉぉぉ♪

1回目ではできていた設定を漏らしたようです。 

WARNING:tensorflow:

The TensorFlow contrib module will not be included in TensorFlow 2.0.

...

Traceback (most recent call last):
File "/home/mariel/venv37/lib/python3.7/site-packages/keras/__init__.py", line 3, in <module>
from tensorflow.keras.layers.experimental.preprocessing import RandomRotation
ModuleNotFoundError: No module named 'tensorflow.keras.layers.experimental.preprocessing'

 でした。(こういう情報のほうが後に(またリセットしたときなど)大切なこともあるので貼っておきます。)

Kerasのバージョンが指定したTensorflowと合致せず新しすぎるので、例にならったバージョンにします。例ではKeras==2.3.1でした。

$ pip uninstall Keras

$ pip install Keras==2.3.1

 で例のとおりのバージョンとなりました。次やるときは、展開されたTecoGANフォルダのrequirements.txt のKeras>=2.1.2 の部分を Keras==2.3.1 に書き換えておけばよいですね。

$ python runGan.py 1 でまたエラー発生しました。1回目は勢いでやったので、何をやったのか覚えていません。(サンプル画像の高解像度化までを一度成功しています)

numpy==1.17.4 にしてうまくいきました!今後も各モジュールの改版があっていろいろ動かなくなると思うので、現在のpip freeze貼っておきます。(結局この記事の要はこのpip情報です。長いですがご容赦ください。)

(venv37) mariel@XXXXXX:~/TecoGAN$ pip freeze

absl-py==0.12.0
astor==0.8.1
backcall==0.2.0
cached-property==1.5.2
cycler==0.10.0
decorator==4.4.2
gast==0.2.2
google-pasta==0.2.0
grpcio==1.37.1
h5py==3.2.1
imageio==2.9.0
importlib-metadata==4.0.1
ipython==7.23.1
ipython-genutils==0.2.0
jedi==0.18.0
Keras==2.3.1
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.2
kiwisolver==1.3.1
Markdown==3.3.4
matplotlib==3.4.2
matplotlib-inline==0.1.2
networkx==2.5.1
numpy==1.17.4
opencv-python==4.5.2.52
opt-einsum==3.3.0
pandas==1.2.4
parso==0.8.2
pexpect==4.8.0
pickleshare==0.7.5
Pillow==8.2.0
pkg-resources==0.0.0
prompt-toolkit==3.0.18
protobuf==3.17.0
ptyprocess==0.7.0
Pygments==2.9.0
pyparsing==2.4.7
python-dateutil==2.8.1
pytz==2021.1
PyWavelets==1.1.1
PyYAML==5.4.1
scikit-image==0.18.1
scipy==1.6.3
six==1.16.0
tensorboard==1.15.0
tensorflow-estimator==1.15.1
tensorflow-gpu==1.15.0
termcolor==1.1.0
tifffile==2021.4.8
torch==1.8.1
torchvision==0.9.1
traitlets==5.0.5
typing-extensions==3.10.0.0
wcwidth==0.2.5
Werkzeug==2.0.0
wrapt==1.12.1
zipp==3.4.1

 

 

将来的にやってみられる方でうまくいかないときはエラー内容をもとに該当モジュールバージョンをpip しなおしてください。

では本題の手持ち/入手画像の高解像度化をやってみます。

ここでは小さなサンプルを変換させてみます。

なお、Windows10から WSL ubuntu側のフォルダ参照は

\\wsl$\Ubuntu-18.04

などで可能です。

なお、現在わかっている課題は

・該当画像についての複数入力(同一解像度:微妙に異なる位置での画像)がないと高解像度推定があまりうまくいかなげ(動画撮影をフレーム分解して多数の入力にすることを想定している)フォルダ内には同じ対象物に対する画像が必要。

でも逆にいえば、動画であれば、手間はかかりますが、かなりいい感じになるかもです。

フォルダ内に画像が1枚だけであれば、うまく動作してくれませんでしたが、複数枚(4~10枚同じ画像ファイルを入れておけば動作させられました。)

よく読むと、基本的にはtecoGANは動画の高解像度化の手法のようで、静止画には不向きとの話もありました。

・大きな画像でさらに高解像度にしようとすると、allocエラーとなってしまいます。これは残念。この程度の画像(幅が1024⇒4096)でこれがでるのは、かなりな演算量のためのようです。結局はGPUのメモリのようなので、もっともっと高性能/高容量のGPUが欲しくなります。

・現在は縦横各4倍で16倍固定なので、それ以外の設定方法があるのか、確認が必要。

・とうとうソースの中をみはじめてしまいました。そして自分もこんなソフトを作ってみたくなりました。とてもいけない傾向です。(使うだけのはずが。。。)

・自分の声がお気に入りの声優にモーフィングされるソフトはもう作成されてしまったので、わたくしは自分の安いギターが数十万円の一流ギターの音にかわるのをやってみたくなっています。そう、tecoGANの「音」版です。おっと、いけない、いけない。。。

とりあえずは、小さな画像の変換をはってみます。もとの画像解像度ではるとほぼ同じに見えてしまうので、少しおおきくして比較します。ルノワールは難しいと思います。ほぼいいのですが、あえてだめだった例を貼ります。(そもそもこんな画像は学習していないとおもうので責められません)上は元の画像を拡大下は変換後の画像を縮小して貼っています。クリックで本来の大きさが表示されます。

f:id:np2LKoo:20210515135513p:plain ⇒ f:id:np2LKoo:20210515135633p:plain

 上が元の画像、下が変換(高解像度化)後の画像です。

犬の毛のや帽子飾りの立体感はすごく増していますが、女性の肌のなめらかな質感と衣類の高級感?が損なわれています。まぁ、画像拡大はビット化によって失われたであろう情報を学習内容に基づき推測/想像/創造して描いているので、責められませんが。

マネの絵画のほうはこんな感じでした。もっと酷いことになってしまいました。

f:id:np2LKoo:20210515141259p:plain ⇒ 

f:id:np2LKoo:20210515142010p:plain

もともとのブロック化ノイズが強調されるとともに、こちらも肌の質感に違和感がでてしまっています。

おそらく、美術作品の高解像度化は「学習」をその画家の作品、およびそのモチーフに特化して学習しないと、作風が変に微妙に変化してしまう感じがします。(これは大きな欠点)だけど、そんな学習に手間/時間をかけるくらいなら、「高いけど」美術画集を買ったほうがよい(オワタ)。

・tecoGANで美術作品を拡大するのは2~2.5倍(面積で4倍~が6倍程度に抑えたほうがよさそうです。(16倍にしても縮小してそれくらいで表示)

・そもそもタッチやオリジナル作風にこだわるなら、AIなんて使ってはいけない。でも、こだわってなくても「気になる~」

(家庭菜園は暑いので、ただいまサボり中。。。)

あ、北斎だけ変換しないのもおこられそうなのでやります、やります。

f:id:np2LKoo:20210515143817p:plain ⇒

f:id:np2LKoo:20210515143942p:plain

北斎はなかなかよいんではないでしょうか。動きと迫力が増した感じがします。

というわけで、わたくしの「ネットの画像でお手学に芸術の能力を高める」作戦は挫折してしまいました。

わたくの頭の中の「ニューラルネットワークの」芸術面の強化学習は書籍にたよることにしました。

よさげな本の候補です。(結局買うんかい!:自分へのつっこみ)

あとは、幼少のころ刷り込まれた(家になぜか画集があった)ルノワールと、中学校のときに「ルネ・マグリット」展へいきましたが、これまた刷り込みがあったようで、好きです。

あと、ダ・ヴィンチの若いころ書いたといわれる絵(大きな絵全体は合作)の左下側の天使の絵の部分が好きです。これはもう人智を超越しています。天使の視線が恐ろしく、ずっとみれいられないほどです。(え?皆さんも怖いですよね!?)

f:id:np2LKoo:20210515193922j:plain

こう書くと、美術好き・芸術好き風かもしれませんが、まったくの鈍感そのものです。

では、芸術プログラマとして開眼するため、研鑽します。

期待外れですみません

たぶん、画像学習かサウンド学習はそのうちやると思うので許してください。

※本日のアクセス数より「芸術はまったくウケない」ことを学習しました。(少ないアクセスがさらに半減以下)でも、もちろん我が道をいきます。(基本ウケないことや滑り芸が好きなのです)