AIで一足お先に紅葉狩り
そろそろ紅葉の季節がやってきましたが、CycleGANという技術を使って一足お先に紅葉を楽しんだので、その作り方を紹介します。
それでは早速説明します。Google Colaboratoryを使います。
1. データを収集する
データは、紅葉じゃない写真と、紅葉の写真です。この2つを集めてCycleGANに学習させると、写真を紅葉にしてくれる『紅葉フィルター』が作れます。
画像データは、icrawlerというフレームワークを使うと簡単です。
キーワードを設定するとネットから画像を集めてくれます。
まずはインストールします。
!pip install icrawler
イチョウの紅葉の画像を集めてみます。『イチョウ 紅葉』で画像検索した結果をautumn2というフォルダに集めてくれます。
from icrawler.builtin import BingImageCrawler
crawler = BingImageCrawler(storage={"root_dir": "autumn2"})
crawler.crawl(keyword="イチョウ 紅葉", max_num=100)
このようにして、イチョウの夏の画像、もみじの夏の画像、紅葉の画像を集めます。
from icrawler.builtin import BingImageCrawler
crawler = BingImageCrawler(storage={"root_dir": "summer2"})
crawler.crawl(keyword="イチョウ 夏", max_num=100)
from icrawler.builtin import BingImageCrawler
crawler = BingImageCrawler(storage={"root_dir": "summer2"})
crawler.crawl(keyword="もみじ 夏", max_num=100)
from icrawler.builtin import BingImageCrawler
crawler = BingImageCrawler(storage={"root_dir": "autumn2"})
crawler.crawl(keyword="もみじ 紅葉", max_num=100)
2. 画像をCygleGANに読み込む
画像をCycleGANに読み込みます。CycleGANをGoogle ColaboratoryやiPhoneアプリ上で動作させる方法は、次の記事に書きましたのでご覧ください。
上の記事のうち、画像読み込みのところを、紅葉のデータセットに差し替えます。
今回は時間の都合で、トレーニング用のデータとテスト用のデータは同じものを使っています。
import tensorflow as tf
// 先程ダウンロードした画像データのディレクトリを指定する
trainAdir = tf.data.Dataset.list_files("./summer2/*.jpg")
trainBdir = tf.data.Dataset.list_files("./autumn2/*.jpg")
testAdir = tf.data.Dataset.list_files("./summer2/*.jpg")
testBdir = tf.data.Dataset.list_files("./autumn2/*.jpg")
// 画像ファイルリストからファイルを取り出し、jpegをデコードする
trainA = trainAdir.map(lambda x: tf.io.decode_jpeg(tf.io.read_file(x)))
trainB = trainBdir.map(lambda x: tf.io.decode_jpeg(tf.io.read_file(x)))
testA = testAdir.map(lambda x: tf.io.decode_jpeg(tf.io.read_file(x)))
testB = testBdir.map(lambda x: tf.io.decode_jpeg(tf.io.read_file(x)))
// CycleGANのトレーニングデータ、テストデータに代入する
// もともとのコードが馬をシマウマに変換するモデルだったので、horses、zebrasという
// 変数名になっているが、そのまま利用している
train_horses, train_zebras = trainA, trainB
test_horses, test_zebras = testA, testB
3. モデルを学習させる
CycleGANのノートブックのセルを実行してモデルを学習させます。
今回はEPOCH数を100程度にしています。
Google Colaboratoryでもいけるかもしれませんが、つきっきりにならないといけないのが大変だったので、学習だけGoogle Cloud Platformのノートブックインスタンスで実行しています。
4. モデルをCoreMLに変換しiOSアプリ上で動作させる
あとはアプリで動作させるだけです。上のQiitaの記事で書いてあることと全く同じです。
仕上がり
こんな感じに仕上がりました。
感想
今回は、学習に1時間程度しか使っていないので、もう少しデータを集めて沢山学習すればもっと質が高い画像が作れたかもしれません。
こちらの記事でも同じことをされている方がいらっしゃいましたが、10時間程度学習していたとのことです。
なお、データセットにもみじとイチョウを使いましたが、このようにすると紅葉しない種類の樹木はちゃんと紅葉しないように変換してくれるようです。
<紅葉しない木をフィルターした例>
また、兼六園や向島百花園のような沢山樹木のある公園をデータセットに使うと質が上がるかもしれないと思って試してみましたが、そうでもなかったです。どうやら、それらの写真が個別の樹木ではなく全景を撮った写真が多かったからのようです。
最後に、若干宣伝ぽくて恐縮ですが、私はフリーランスエンジニアをしております。このような機械学習をiPhoneデバイス上で動作させるといったお仕事もできますので、お気軽にご相談下さい。
連絡先名:TokyoYoshida
連絡先: yoshidaforpublic@gmail.com
この記事が気に入ったらサポートをしてみませんか?