SIGNATEのオフロード・セグメンテーションのチュートリアルをやってみる


オフロード画像のセグメンテーションチャレンジのチュートリアルをやってみます。

学習はクラウド、推論はエッジデバイスを使ってみます。

:コンペは2021/02/11でクローズされています。


学習(トレーニング)にはGoogle ColabとGoogle Driveを使います。

推論実行はJetson Nano を使います。

 

画像データはColabにアップしておくと12時間ルールで消去されてしまうので、Googleドライブにアップしておき、実行時にマウントして使用します。

モデルを改良しながら学習すると、12時間ではすまないと思われるので、こうしておきます。

Google Drive は15GBまでは無償で利用できます。

Google Claob の環境はどんな感じでしょう。

CPU

vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU @ 2.20GHz
stepping : 0
microcode : 0x1
cpu MHz : 2199.998
cache size : 56320 KB

GPU

いろいろなGPUが優先度付きながらランダムに割り当てられるようです。k80とかp100とか。

今回はT4が割り当てられています。

その他

Python、ライブラリなど

OS:Ubuntu 18.04,5 LTS
言語: Python==3,6,9
ライブラリ:
numpy==1.19.5
pandas== 1.1.5
matplotlib==3.2.2
torch==1.7.0+cu101
torchvision==0.8.1+cu101

 

 

 

Google Drive にSIGNATEから降ろしてきたoff_roadデータをアップロードしておきます。だいたい7GBちょっとです。

:Google DriveにアップしたSIGNATEのデータはルールに基づくとコンペ終了後は削除しておきましょう。

 

Colabにアクセスして以下を実行

1:Notebookを新規作成

2:ランタイムー>ランタイムのタイプを変更ー>GPUを選んで保存。

3:Google Driveをマウントしておきます。

4:カレントドライブを変更してoff_roadデータを読めるようします。

5:コードをコピペしてトレーニング実行開始

 

実行時間

ColabとDriveはネットワーク経由でデータをやり取りする場合、データ読み込みは2か所あってそれぞれで1時間ちょっとかかります。

トレーニングの実行は5epochで7時間弱、1epoch あたり1時間20~30分といったところ。

終了後トレーニン済みモデルがpickle化されてGoogle Driveに保存されます。

 

 

 


推論実行のエッジデバイスとしてJetson Nano を使います。

トレーニング済みのモデルデータ(tutorial_model.pkl)をJetson に転送しておきます。

 

コンテナを作成してそこで推論を実行します。

推論に必要なファイルを置いておくディレクトリをホストに作っておきます。

work-offroadに以下のファイルを置いておきます。
画像データはprecision_test_imagesフォルダーとtrain_annotations_Aフォルダーからコピー

tutorial_model.pkl
precision_test_image_0000.png
train_annotation_A0000.png

NVIDIAが用意している、Pytorchがインストールされたイメージを引っ張ってきます。

my_offroadという名前でコンテナー作成
sudo docker create -it --gpus all --name=my_offroad --network host -v "/home/jetson/work-offroad":"/work" nvcr.io/nvidia/l4t-pytorch:r32.4.4-pth1.6-py3

コンテナで作業

アップデート&アップグレードしておきます。

イメージには以下のライブラリが無いので追加

 

環境

OS:Ubuntu 18.04,5 LTS
言語: Python==3,6,9
ライブラリ:
numpy==1.19.2
pandas== 1.1.5
matplotlib==3.2.4
torch==1.6.0
torchvision==0.7.0a0+78ed10c

 

 

Jupyterlabをインストール

ディレクトリを移動しておきます。

Jupyterlabを起動

ブラウザーからJupyter Notebook を開きます。
以下は例です。tokenはJupyterlabを起動した際に表示されます。


http://127.0.0.1:8888/lab?token=449b13bce5bc9d0e6c27b8abdd5745c85dd39f599d9fb781

ライブラリを読み込んで、配列を作っておきます。

 

# 学習済みモデルの読み込み

# 前処理クラスの定義

推論実行

画像データの読み込みのパスは適宜変更してください。

Jetson Nano だと、フツーに推論すると1分くらいかかります。jetson_clocksでCPU・CPUに実行を最大化しておけば5秒くらいです。

 

 


Next

推論に時間がかかりすぎですね。

NVIDIAのTensotRT が使えないか検討してみます。

 


Appendix

学習データのディレクトリ構成

フルコード

 


 

 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*