Semantic Segmentation の最近の動向をあまり追っていなかったのですが、
つくりながら学ぶ!PyTorchによる発展ディープラーニング という本を買い、
PSPNet というものがあることを知りました。
実装までしっかり書いてあってめちゃくちゃわかりやすいのでおすすめです。
自分は今までTensorFlow を主に使っていましたが、Pytorch の使い方を学びながら新しい技術についても学べます。
上述の本でPSPNetを実装している際に、FastFCNという最新のネットワークの存在を知ったので、
実際に動かしてみました。
論文の要点が以下の記事にまとまっています。
自分はまだ論文を読んでいないので、この記事を参考に読み進めていこうと思っています。
https://qiita.com/kamata1729/items/1b495658a63d76904ac3
その記事の中で、このレポジトリにリンクがはられていました。
https://github.com/wuhuikai/FastFCN
今回の記事では、このレポジトリのコードを実際に動かす手順を書いていこうと思います。
ちょこちょこハマるところもあったので悲
環境
host
メモリ 32GB
GPU GTX1080Ti
docker
Dockerfile は、以下に置きました。
もしかしたら、ちょこちょこ追加したpackage があるかもしれません。
追って、検証していきたいと思います。
https://gist.github.com/gorogoroyasu/47d5ab6bd3b97b016ca1c8cca8435c6a
git clone
レポジトリをcloneします。
README.md に色々書いてありますが、GPU1台で実行する場合下記のコード変更を先に行う必要があります。
環境に依存するコードの変更
今回一番言いたかったことはこれです。
https://github.com/wuhuikai/FastFCN/issues/12
何箇所かコードを変更する必要があります。
encoding/models/encnet.py
https://github.com/wuhuikai/FastFCN/blob/097e7130f77a15eeca12f37a0afcf2f8f7f90439/encoding/models/encnet.py#L53
ここを、 nn.BatchNorm1d(ncodes),
に変更します。
experiments/segmentation/train.py
https://github.com/wuhuikai/FastFCN/blob/097e7130f77a15eeca12f37a0afcf2f8f7f90439/experiments/segmentation/train.py#L54
ここを se_loss = args.se_loss, norm_layer = torch.nn.BatchNorm2d
に変更します。
https://github.com/wuhuikai/FastFCN/blob/097e7130f77a15eeca12f37a0afcf2f8f7f90439/experiments/segmentation/train.py#L111
ここを loss = self.criterion(*outputs, target)
に変更します。
インストール
この変更を行ったあと、
sh
PATH=.:$PATH
python setup.py install
を実行します。
データのダウンロード
あとは README.mdに従ってデータをダウンロードして学習を実行すればよいです。
自分は、ADE20K
をダウンロードしました。
python scripts/prepare_ade20k.py
結構時間がかかるので、寝る前にここまで完成させて、実行して寝ましょうw
データのダウンロードが完了したら、
cd experiments/segmentation
CUDA_VISIBLE_DEVICES=0 python train.py --dataset ade20k --model encnet --jpu --aux --se-loss --backbone resnet50 --checkname encnet_res50_ade20k_train
を実行すればトレーニングが開始されます。
ちなみに、自分のGPUでは、デフォルトのバッチサイズが大きすぎたので、
--batch-size 2
を追加しました。
たぶん、デフォルトは4だと思います。
とてつもなく時間がかかりそうで怖いですが、家に帰ってきた頃には数epoch 学習が進んでいると思うので、
その結果を見て一喜一憂しようと思います。
終わりに
SOTA だと信じて疑わなかったFastFCN ですが、
この記事を書いている途中にSOTA が更新されていることに気が付きました悲
https://paperswithcode.com/paper/high-resolution-representations-for-labeling
high-resolution-representations-for-labeling
についても調べていこうと思います。