Jetson Nano + Pytorchでゴルフ場が衛星画像に写っているかを識別してみる


Jetson NanoのようなGPUを積んだシングルボードコンピュータで画像を識別する機械学習のトレーニングをやってみます。

元ネタはTellusの「学習済みモデルを利用して手軽にゴルフ場が写っているかを判定できる機械学習モデルを作成する」です。

同様のチュートリアルはSIGNATE Questにもあるようです。

転移学習の実習という位置付け。GoogleのColabを使うことが想定されているようですがJetson Nano でも実行できます。

Githubにコードとデータが準備されています。ローカル環境でのトレーニングの項をやってみます。

Jetson Nano(4GB)の環境はJetson Nano + NVIDIA Docker で Pytorch の環境構築をしてみるで作成したコンテナ(my_env)です。

データは256 x 256のpositive画像(3695枚)+  negative画像(566枚)。

 

Githubに公開されているので、ダウンロードして以下のような作業フォルダー(work)を作って格納しておきます。

ディレクトリ構造

0->negative(ゴルフ場が写っていない画像)

1->positive(ゴルフ場が写っている画像)

container側にもworkフォルダーを作っておきます。

 

Dockerコマンドでhostからcontainerへデータをコピーします。

まず、CONTAINER_IDを調べておきます。

host側で作業ディレクトリへ移動して一気にコピー(4000枚くらいの数ですが、たいして時間はかかりません)。

これ以降、モデルの作成はコンテナーでの作業になります。

コンテナでのみ実行する場合は、wgetでファイルを取得後、unzipで解凍

ファイルの場所は、https://github.com/sorabatake/article_15199_golf/archive/master.zip

 

 

my_envという名前のコンテナを起動

 


以下のライブラリをインストールしておきます。

jupyterlabを起動

アドレスをコピーして、ブラウザーでjupyterにアクセスしてNotebookを開きます。

また、実行をモニターしたいので、SSHでJetson-stats(jtop)も開いておきます。

 

以降はTellusの内容に沿って実行するだけです。


モデル構築と学習(GPU環境)

ライブラリーをインポート

画像を読み込む

正しくラベル付けがされているか確認

{‘0’: 0, ‘1’: 1}

学習用と評価用のデータに分割する

モデル作成

resnet18という学習済みモデル(Pre-trained Model)が使われています。

モデルを学習 

こんな感じで進捗します。

jetson-statsを見てみると、GPUとCPUが交互にフル稼働しているのが分かります。

 

Jetson Nano(4GB)の場合、トレーニングは2時間ちょっとで終了します。

最後にモデルのファイルを出力しておきます(モデルを再利用する際に使います)。

予測

モデルを評価モードに変更して、テスト用の画像読み込みをして、モデルに渡せる形式にします。

train-positive.png を予測してみて、ネットワークから出力される結果を見てみます。

train-negative.png を予測してみて、ネットワークから出力される結果を見てみます。

 

0~1の範囲で [negativeの可能性, positiveの可能性] という形式で出力されるので、このような形でtrain-positive.pngが右側、train-negative.pngが左側の数値が大きくなっているのでちゃんと予測できているっぽいです……だそうです。

ピンクの部分でWarningが出ています。Torchvisionでtransforms.Scaleは非推奨になったようです。問題は無いのですが、気になる場合はtransforms.Resizeに変更してください。引数などはそのままです。

 


保存済みのモデルファイル(./golf-model.pth)を読み込んで再利用してみる

ipynbファイルは削除するか移動しておきます。

jupyterlabを再起動

ブラウザでNotebookを開いておきます。

以下を実行

画像(./new_image.png)を読み込んで予測実行

 


Next1

Tellusの内容の後半はTellusOSを使った画像の取得と予測になっています。

衛星画像の取得はこのぺージでやったように産総研のLandbrowserを使ってもダウンロードできます。この画像が使えるかどうかテストしてみます。

TellusOSは使わずにローカル環境でまかなってみます。

Jetson Nano + Pytorch で衛星画像識別モデルを検証してみる

 


Next2

もう一個、Jetson Nanoレベルのシングルボードコンピュータで使えるニューラルネットワークでトレーニングしてみます。画像分類です。こういうのをいくつかやると、Pytorchで画像を扱う場合の調理法の理解が進むんじゃないでしょうか。

 


Next3

モデルファイルを再利用するコードを使ってアプリ化してみます。

FlaskやらTkinterやらを使ってみます。

 


Appendix

フルコード

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*