post Image
Google ColaboratoryでLINEスタンプ画像生成に挑戦!

はじめに

今、機械学習の勉強もかねて敵対的生成ネットワーク(GAN)を活用して
LINEスタンプの自動生成を試みようと頑張っています。

LINEスタンプをDeepLearningで自動生成してみる【Part 1】

しかし私が所有しているマシンは貧弱なMacbookAirのみ。
実際にDeep Learningのサンプルコードを実行してみると動作にかかる時間が想像以上でした。
(丸3日かけて、期待した結果が得られないこともしばしば)

そこで、学習高速化のためにAWSやMicrosoft Azureなどのクラウドサービスに課金して、一時的にGPUを積んだインスタンスを利用しようと検討してしました。

機械学習を試すためには課金が必要?

結論から言うと、私がやろうとしている程度のことであれば課金する必要はありませんでした。
Google Colaboratoryを使用すれば、無料で十分高速にDeep Learningのコードを実験することができます。体感で私のノートPCの10倍の速度で学習を進めることができました。いい時代に生まれた!

Google Colaboratoryの導入

Google Colaboratoryの導入は、Googleアカウントを持っていれば誰でも簡単にできます。
以下の記事を参考に進めることで、難なく設定を完了することができた。
Tipsに関しても多くの記事で、簡潔にまとめられています。

【秒速で無料GPUを使う】TensorFlow/Keras/PyTorch/Chainer深層学習環境 on Colaboratory

【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory

PythonやNumply、Tensorflowの環境が始めから備わっているので、特殊なことをしなければ追加でパッケージのインストールも不要です。
ランタイムのタイプはPython3、ハードウェアアクセラレータはGPUに設定してレッツトライ!

Colaboratory上でコードの実行

シェルコマンドの頭に!を付ければ、基本的にローカル環境と同じように動作します。ただ、
ディレクトリ変更だけ例外で、!cdでなく%cdを使用します。

以降は、DCGAN-tensorflowのコードをGoogle Colaboratory上で動作確認した際の手順になります。

GITリポジトリのクローンを作成する。

DCGAN-tensorflowのクローンを作成します。

!git clone https://github.com/carpedm20/DCGAN-tensorflow

[参考]DCGAN-tensorflow
https://github.com/carpedm20/DCGAN-tensorflow

Google Drive上に保存したデータセットを持ってくる

入力画像データのzipを自分のGoogle drive上に保存ておき、Google Driveを/driveフォルダにマウントします。Google Driveへのアクセス許可のためのtoken取得リンクからコードを取得して、認証を行います。

[参考]
【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory

# google-drive-ocamlfuseのインストール
# https://github.com/astrada/google-drive-ocamlfuse
!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse

# Colab用のAuth token作成
from google.colab import auth
auth.authenticate_user()

# Drive FUSE library用のcredential生成
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}

# drive/ を作り、そこにGoogle Driveをマウントする
!mkdir -p drive
!google-drive-ocamlfuse drive

データセットのコピー

マウントしたdrive/配下からデータセットAI-st.zipをコピーしてきて、入力データセット保管用のディレクトリ/data内で解凍します。

!mkdir DCGAN-tensorflow/data
!cp drive/AI-st.zip DCGAN-tensorflow/data/AI-st.zip
%cd DCGAN-tensorflow/data
!unzip -q AI-st.zip

もし、学習のチェックポイントをGoogle Driveからコピーしてきて更新する場合は以下のコマンドを追加で実行します。

!rm -r /content/DCGAN-tensorflow/checkpoint
!cp -r /content/drive/checkpoint DCGAN-tensorflow/checkpoint

コードの実行

準備が整えば、ローカルで実行していたときと同じようにコードを実行します。コードを実行した後に、生成した画像データsamplesとログlogsとチェックポイントcheckpointを、インスタンスがシャットダウンされる前にGoogleDriveに退避させます。


%cd DCGAN-tensorflow
!python main.py --dataset AI-st --batch_size=100 --epoch=25 --input_height=224 --input_width=259 --output_height=128 --output_width=148 --input_fname_pattern="*.png" --train --crop
!cp -r samples /content/drive/samples-on-colab/samples1
!cp -r logs /content/drive/samples-on-colab/logs1
!cp -r checkpoint /content/drive/samples-on-colab/checkpoint1

生成データの確認

Google Colaboratoryの環境で生成したLINEスタンプ画像をGoogle Drive上で確認します。
以前までは、マシンスペックの制約から出力スタンプの画像サイズを小さくしていましたが、学習速度を大幅に上げることができるので、出力画像サイズを少し上げてみました。

test_arange_47.png

無事ローカル環境と同様に、スタンプ画像を生成することが確認できました。

まとめ

Google Colaboratorを使わない手はないです。煩わしい環境構築も必要なし、それでいて個人では購入のハードルが高いNVIDIAのTeslaを存分に(連続12時間という制約はありますが)利用することができます。GPUが無料で自由に使える環境があることがわかったので、今後はいろいろと試したかったことが捗りそうです。同じように、機械学習を入門しようとしている人はぜひ試しに使ってみてください。

おまけ

生成した画像を分割するには、Imagemagickのconvertコマンドでサイズを指定してあげれば簡単にできます。今回は、148×128の画像が10×10の100枚結合されたものが入力になります。

$convert test.png -crop 148x128 stamp_%08d.png

たった一行のコマンドで以下のように画像を分割することができます。

スクリーンショット 2018-07-13 21.29.59.jpg

試しに、LINE Simulator上に生成画像を貼り付けてみました。

スクリーンショット 2018-07-12 9.28.35.jpg

当初と比べると、画質が上がったこともあり違和感が減ってきたように思います。

引き続き、暇な時にでもLINEスタンプ生成取り組んでいきたいです。

続く。


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。