目的
深層学習を用いた欠損画像の補完に関する論文("Image Inpainting for Irregular Holes Using Partial Convolutions", https://arxiv.org/abs/1804.07723)の動作確認の方法を以下に示します。
具体的には Github に公開されている上記論文の実装サンプルのレポジトリ( https://github.com/chuangtc/PConv-Keras )の Jupyter Notebook である Step3 - UNet Architecture.ipynb というソースコードを Google Colaboratory 上で動作させる手順 を示します。
環境
基本的に Google Colaboratory 上に用意されている下記の深層学習およびGPU環境にて動作確認をしました。Google Colaboratory を利用するメリットとしては下記2点です。
-
メリット
- 深層学習&GPU環境構築の手間が不要
- GPU環境が12時間限定で無料で利用可能)
-
動作環境(Google Colaboratory )
- ソフトウェア
- Python 3.6
- Keras 2.2.0
- Tensorflow 1.8
- ハードウェア
- -memory description: System memory physical id: 0 size: 12GiB
- -cpu product: Intel(R) Xeon(R) CPU @ 2.30GHz vendor: Intel Corp. physical id: 1 bus info: cpu@0 width: 64 bits
- -display description: 3D controller product: GK210GL [Tesla K80]
- ソフトウェア
手順
1. Google Colaboratory ログイン
Google Colaboratory を開いて、Colaboratory にログインします。
Colaboratory 画面左上のファイル > ノートブックをアップロード を選択し、別途ローカルにダウンロードした Step3 - UNet Architecture.ipynb というソースコードをアップロードします。
2. GPU 利用設定
Colaboratory 画面上のランタイム > ランタイムのタイプを変更を選択します。
ノートブックの設定 > ハードウェア アクセラレータを "GPU" に設定し、OK を押します。
3. Google Drive にライブラリのアップロード
Colaboratory からファイルアクセスするために画像補完論文の実装レポジトリ( https://github.com/chuangtc/PConv-Keras )のライブラリ等一式を Google Drive にアップロードします。
libs フォルダが画像補完ライブラリ、data フォルダが画像データ等が格納されています。
4. Jupyter Notebook の追記修正および実行
1.でアップロードした Jupyter Notebook Step3 - UNet Architecture.ipynb の最初に下記を追記します。
追記理由としては Colaboratory から Google Drive 上に置いたライブラリ、画像データへのアクセスのためです。
!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
from google.colab import auth
auth.authenticate_user()
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}
!cp -f ~/.gdfuse/default/config config
!sed -i -e "s/^root_folder=$/root_folder=17MgrYRO39sXs16fqU5V1qgyUI17KEW2l/" config
!mkdir -p drive
!google-drive-ocamlfuse -config ./config -cc drive
追記後、Shift + Enter にて Step3 - UNet Architecture.ipynb の1セル目の計算を実行します。
そのまま、2セル目も同様に実行し、3セル目のソースコードを下記2行を追記・修正します。
img = cv2.imread('drive/data/sample_image.jpg')
img = cv2.resize(img, (256, 256)) / 255
それ以外はそのまま上から順に実行していくと、最後のセルにてオリジナルと画像補完画像の結果を比較した図が得られます。
注目すべきポイントとしては上記の計算時間で、620 sec とあり、およそ 10分程度で学習および推論の計算が実施されています。こちら GPU を利用しない場合は 約3時間程度かかるため、GPU 利用することでおよそ 18倍程度の高速化がなされているということが分かります。
5. 実行結果
上記の実行結果データについては下記よりアクセスできます(計算実行済みのもの)。
実行結果
https://colab.research.google.com/drive/1C1J_j7uFaQa7Mm_mM8pm4Yay_XQSpW4p