画像のセグメンテーション手法のひとつであるFCN(Fully Convolutional Networks)をKerasで試してみます。今回はあえてWindows 10 64bit+GPUの環境で試してみました。FCNをCaffeで実現した論文がここにありますので参考にしてみてください。
CUDA Toolkit Archive からCUDA Toolkit 9.0をダウンロードしてインストールします。9.1だとうまく動かず、9.0で試している方が多いようなのでとりあえず9.0で試しました。
cuDNN ArchiveからcuDNN v7.1.2 (Mar 21, 2018), for CUDA 9.0 をダウンロードしてインストールします。
AnacondaからAnaconda 5.1 For Windows Installer(64-Bit Graphical Installer)をダウンロードしてインストールします。
スタートメニューから「Anaconda Prompt」を起動します。以下を実行しTensorFlowをインストールします。CPU版の場合は下記の「tensorflow-gpu」の部分を「tensorflow」としてください。
pip install tensorflow-gpu
cuDNN ArchiveからcuDNN v7.1.2 (Mar 21, 2018), for CUDA 9.0 をダウンロードしてインストールします。
AnacondaからAnaconda 5.1 For Windows Installer(64-Bit Graphical Installer)をダウンロードしてインストールします。
スタートメニューから「Anaconda Prompt」を起動します。以下を実行しTensorFlowをインストールします。CPU版の場合は下記の「tensorflow-gpu」の部分を「tensorflow」としてください。
pip install tensorflow-gpu
以下を実行してKerasをインストールします。
pip install keras
以上でKerasの実行環境構築は完了です。
次に下記にて画像表示用に使うOpenCVをインストールします。
conda install -c menpo opencv
conda install -c menpo opencv
ここから実際のFCNの環境作成です。FCN_via_Kerasからクローンします。
cd C:\src
git clone https://github.com/k3nt0w/FCN_via_keras.git
cd FCN_via_keras
model.pyの下記1文をコメントアウトします。使用しておらず、またKeras2ではサポートされていないためです。
#from keras.utils.layer_utils import layer_from_config
また、バックエンドにTensorFlowを使うのでtrain.pyの下記1文をコメントアウトします。
#os.environ['KERAS_BACKEND'] = 'theano'
#os.environ['KERAS_BACKEND'] = 'theano'
以下URLからVOC2012データセットをダウンロードして解凍します。ここではFCN_via_kerasフォルダの下に展開しました。
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
下記で学習を実行します。
python train.py -tr .\VOCdevkit\VOC2012\JPEGImages\ -ta .\VOCdevkit\VOC2012\SegmentationClass\ -t train.txt
エラーが出るときは、C:\Users\ユーザー名\.keras\keras.jsonの下記2点を確認して、以下と違っていたら同じに変更してみてください。
"backend": "tensorflow",
"image_data_format": "channels_first"
"backend": "tensorflow",
"image_data_format": "channels_first"
モデルが出来たら次は予測を実行します。その前にpredict.pyを少し修正が必要です。以下をコメントアウトします。
#from chainer import serializers
#from chainer import serializers
以下の赤文字部分を修正します。
img_name = args.image_path.split("\\")[-1].split(".")[0]
img_name = args.image_path.split("\\")[-1].split(".")[0]
それでは以下コマンドで予測を実行します。
python predict.py -i .\VOCdevkit\VOC2012\JPEGImages\2011_003255.jpg
outフォルダにpred_2011_003255.pngというファイルが生成されてれば成功です。ただ、以下のようにうまく予測が出来ていないようです...