これは、MIT ADE20Kシーンの解析データセット(http://sceneparsing.csail.mit.edu/)のセマンティックセグメンテーションモデルのPytorch実装です。
ADE20Kは、MITコンピュータービジョンチームによってリリースされたセマンティックセグメンテーションとシーン解析の最大のオープンソースデータセットです。以下のリンクをフォローして、データセットのリポジトリとCaffeとTorch7の実装を見つけてください:https://github.com/csailvision/sceneparsing
単にデモで再生したい場合は、このリンクをお試しください:http://scenesegmentation.csail.mit.edu独自の写真をアップロードして解析できます!
また、このコラブノートブックの遊び場を使用して、画像をセグメント化するためのコードをいじくり回すこともできます。
すべての前のモデルは、http://sceneparsing.csail.mit.edu/model/pytorchにあります


セマンティックカテゴリの色エンコーディングは、https://docs.google.com/spreadsheets/d/1se8yetb2dets7oupe86fxgyd269pmycawe2mtkuj28/edit?usp = sharingにあります。
config/defaults.pyで詳しく説明されています。このモジュールは、トレーニング中にすべてのデバイスにわたって平均と標準控除を計算します。合理的な大きなバッチサイズがセグメンテーションに重要であることが経験的にわかります。彼の親切な貢献についてJiayuan Maoに感謝します。詳細については、Synchronized-BatchNorm-Pytorchを参照してください。
実装は次のように使いやすいです
セマンティックセグメンテーションのタスクについては、トレーニング中に画像のアスペクト比を維持することは良いことです。したがって、 DataParallelアレルモジュールを再実装し、Python Dictの複数のGPUへのデータの分散をサポートして、各GPUが異なるサイズの画像を処理できるようにします。同時に、Dataloaderも異なって動作します。
これで、Dataloaderのバッチサイズは常にGPUの数に等しく、各要素はGPUに送信されます。また、マルチプロセスと互換性があります。マルチプローシングデータローダーのファイルインデックスはマスタープロセスに保存されていることに注意してください。これは、各ワーカーが独自のファイルリストを維持しているという目標とは矛盾しています。したがって、マスタープロセスは依然としてdataloaderに__getitem__関数のインデックスを提供するが、そのようなリクエストを無視してランダムバッチDICTを送信するトリックを使用します。また、 Dataloaderによって分岐した複数の労働者はすべて同じ種を持っているので、上記のトリックを直接使用すると、複数の労働者がまったく同じデータを生成することがわかります。したがって、Dataloaderで複数のワーカーをアクティブにする前に、 numpy.randomのDefaut Seedを設定するコードの1行を追加します。
モデルをエンコーダーとデコーダーに分割します。エンコーダーは通常、分類ネットワークから直接変更され、デコーダーは最終的な畳み込みとアップサンプリングで構成されます。 configフォルダーに事前に構成されたモデルをいくつか提供しました。
エンコーダー:
デコーダ:
重要:リポジトリのベースレストネットはカスタマイズされています(TorchVisionのものとは異なります)。ベースモデルは、必要に応じて自動的にダウンロードされます。
| 建築 | マルチスケールテスト | 平均iou | ピクセル精度(%) | 全体的なスコア | 推論速度(FPS) |
|---|---|---|---|---|---|
| mobilenetv2dilated + c1_deepsup | いいえ | 34.84 | 75.75 | 54.07 | 17.2 |
| はい | 33.84 | 76.80 | 55.32 | 10.3 | |
| mobilenetv2dilated + ppm_deepsup | いいえ | 35.76 | 77.77 | 56.27 | 14.9 |
| はい | 36.28 | 78.26 | 57.27 | 6.7 | |
| resnet18dilated + c1_deepsup | いいえ | 33.82 | 76.05 | 54.94 | 13.9 |
| はい | 35.34 | 77.41 | 56.38 | 5.8 | |
| resnet18dilated + ppm_deepsup | いいえ | 38.00 | 78.64 | 58.32 | 11.7 |
| はい | 38.81 | 79.29 | 59.05 | 4.2 | |
| Resnet50dilated + ppm_deepsup | いいえ | 41.26 | 79.73 | 60.50 | 8.3 |
| はい | 42.14 | 80.13 | 61.14 | 2.6 | |
| resnet101dilated + ppm_deepsup | いいえ | 42.19 | 80.59 | 61.39 | 6.8 |
| はい | 42.53 | 80.91 | 61.72 | 2.0 | |
| upernet50 | いいえ | 40.44 | 79.80 | 60.12 | 8.4 |
| はい | 41.55 | 80.23 | 60.89 | 2.9 | |
| upernet101 | いいえ | 42.00 | 80.79 | 61.40 | 7.8 |
| はい | 42.66 | 81.01 | 61.84 | 2.3 | |
| HRNETV2 | いいえ | 42.03 | 80.77 | 61.40 | 5.8 |
| はい | 43.20 | 81.47 | 62.34 | 1.9 |
トレーニングは、8 NVIDIA Pascal Titan XP GPU(12GB GPUメモリ)を備えたサーバーでベンチマークされており、推論速度は視覚化なしで単一のNVIDIA Pascal Titan XP GPUをベンチマークしています。
コードは、次の構成の下で開発されます。
[--gpus GPUS]それに応じて)chmod +x demo_test.sh
./demo_test.shこのスクリプトは、訓練されたモデル(ResNet50dilated + PPM_Deepsup)とテスト画像をダウンロードし、テストスクリプトを実行し、予測されたセグメンテーション(.PNG)をワーキングディレクトリに保存します。
$PATH_IMG )でテストするには、次のことを実行できます。 python3 -u test.py --imgs $PATH_IMG --gpu $GPU --cfg $CFG
chmod +x download_ADE20K.sh
./download_ADE20K.sh$GPUS )と構成ファイル( $CFG )を選択してモデルをトレーニングします。トレーニング中、デフォルトでチェックポイントがフォルダーckptに保存されます。 python3 train.py --gpus $GPUS --cfg $CFG --gpus 0-7 、または--gpus 0,2,4,6いずれかを選択できます。たとえば、提供された構成から始めることができます。
python3 train.py --gpus GPUS --cfg config/ade20k-mobilenetv2dilated-c1_deepsup.yamlpython3 train.py --gpus GPUS --cfg config/ade20k-resnet50dilated-ppm_deepsup.yamlpython3 train.py --gpus GPUS --cfg config/ade20k-resnet101-upernet.yamlpython3 train.py TRAIN.num_epoch 10など、コマンドラインのオプションをオーバーライドすることもできます。 VAL.visualize True output Visualizations。例えば:
python3 eval_multipro.py --gpus GPUS --cfg config/ade20k-mobilenetv2dilated-c1_deepsup.yamlpython3 eval_multipro.py --gpus GPUS --cfg config/ade20k-resnet50dilated-ppm_deepsup.yamlpython3 eval_multipro.py --gpus GPUS --cfg config/ade20k-resnet101-upernet.yamlこのライブラリはpipでインストールして、別のコードベースと簡単に統合できます
pip install git+https://github.com/CSAILVision/semantic-segmentation-pytorch.git@masterこれで、このライブラリはプログラムで簡単に消費できます。例えば
from mit_semseg . config import cfg
from mit_semseg . dataset import TestDataset
from mit_semseg . models import ModelBuilder , SegmentationModule コードまたは事前に訓練されたモデルが有用であることがわかった場合は、次の論文を引用してください。
ADE20Kデータセットを介したシーンの意味的理解。 B. Zhou、H。Zhao、X。Puig、T。Xiao、S。Fidler、A。Barriuso、A。Torralba。 International Journal on Computer Vision(IJCV)、2018(https://arxiv.org/pdf/1608.05442.pdf)
@article{zhou2018semantic,
title={Semantic understanding of scenes through the ade20k dataset},
author={Zhou, Bolei and Zhao, Hang and Puig, Xavier and Xiao, Tete and Fidler, Sanja and Barriuso, Adela and Torralba, Antonio},
journal={International Journal on Computer Vision},
year={2018}
}
ADE20Kデータセットを介したシーンの解析。 B. Zhou、H。Zhao、X。Puig、S。Fidler、A。Barriuso、A。Torralba。コンピュータービジョンとパターン認識(CVPR)、2017年(http://people.csail.mit.edu/bzhou/publication/scene-parse-camera-edead.pdf)
@inproceedings{zhou2017scene,
title={Scene Parsing through ADE20K Dataset},
author={Zhou, Bolei and Zhao, Hang and Puig, Xavier and Fidler, Sanja and Barriuso, Adela and Torralba, Antonio},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2017}
}