4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

物体検出のTransfer Learningをpcで学習しjetson nanoにのせる

Last updated at Posted at 2020-09-10

初めに

公式にて紹介されている物体検出(detection)のTransfer Learningを行う際、jetson-nano上で学習を行うと処理時間がかかるためNVIDIA Geforce GTX 1060が搭載されたPCで学習を行って結果のみをjetson-nanoに移動させて画像認識を行いました。その時の方法をメモします。

動作環境

  • jetson nano(jetpack 4.4をインストールした)
  • ubuntu20.04(NVIDIA Geforce GTX 1060が搭載されたPC)
    • pytorch 1.4

NVIDIA Geforce GTX 1060が搭載されたPC上での準備

学習用環境を用意

参考と同様にpython3.6+pytorchの環境を用意する。
ただしpytorch 1.4をインストールする(1.6だとだめでした)

conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch

その他必要なものをインストール

pip install opencv-python
conda install pandas pillow matplotlib

学習用コードの準備

コンピュータのアーキテクチャが異なるため(?)jetson-inferenceをそのままbuildすることができません。しかし学習を行うだけならソースコードだけで十分なのでコードのみ拝借します

git clone --recursive https://github.com/dusty-nv/jetson-inference

モデルなど必要なもののダウンロード

公式通り

download
cd jetson-inference/python/training/detection/ssd
wget https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth -O models/mobilenet-v1-ssd-mp-0_675.pth
pip3 install -v -r requirements.txt

をおこなう。
※ boto3がないと言われたらconda install -c anaconda boto3でインストールする。参考

データの用意

  1. vottでのアノテーションデータの作成を参考にアノテーションを行う。また、Pacal VOC形式でエクスポートする。
  2. できた[任意の名前1]-PascalVOC-exportフォルダをjetson-inference/python/training/detection/ssd/に入れる
  3. クラスごとにファイルが[任意の名前1]-PascalVOC-export/ImageSets/Mainにできているがその中から一つのみ残して各行末の1,-1,と.jpgを削除
  4. 上のファイルを適当に振り分けtest.txt,train.txt,trainval.txt,val.txtとして保存する。(train.val,testの3つに分けtrainvalはtrainとvalの内容を足したものにする)
    参考 PASCAL VOC③(Datasetの確認)|機械学習の有名データセットや評価指標を確認する #3
  5. jetson-inference/python/training/detection/ssd/vision/datasets/voc_dataset.pyの46行目のクラスをつけたtagと同じにする。
    参考 https://github.com/dusty-nv/jetson-inference/issues/674

学習の実行

train
python3 train_ssd.py --dataset-type=voc --batch-size=16 --data=[任意の名前1]-PascalVOC-export --model-dir=models/[任意の名前2]

で学習を行う(--batch-size=16を指定しないとRuntimeError: invalid argument 2: non-empty vector or matrix expected at…というエラーが出ました(理由は解決していません))

jetson-nanoでの準備

jetson-inferenceのインストール

公式通りにjetson-nano上にインストールしていきます。

jetson-inference
sudo apt-get update
sudo apt-get install git cmake libpython3-dev python3-numpy
git clone --recursive https://github.com/dusty-nv/jetson-inference
cd jetson-inference
mkdir build
cd build
cmake ../
make -j$(nproc)
sudo make install
sudo ldconfig

途中でインストールしたいモデルやpytorchのバージョンが聞かれますが、モデルは自分が使いたいモデルを選択しpytorchはpython3.6対応のほうをインストールするようにしてください。

モデルなど必要なもののダウンロード

公式通り

download
cd jetson-inference/python/training/detection/ssd
wget https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth -O models/mobilenet-v1-ssd-mp-0_675.pth
pip3 install -v -r requirements.txt

をおこなう。

onnxファイルの作成

NVIDIA Geforce GTX 1060が搭載されたPCで学習した結果できた[任意の名前2]フォルダをjetson-nanoのjetson-inference/python/training/detection/ssd/modelsにコピペする。
公式通り

python3 onnx_export.py --model-dir=models/[任意の名前2]

を行う。

webカメラからの動画に対して認識を行う

これもまた公式通り。

  1. webカメラをjetson-nanoに接続する。
  2. v4l2の場合、以下を実行する。
detectnet --model=models/[任意の名前2]/ssd-mobilenet.onnx --labels=models/[任意の名前2]/labels.txt \--input-blob=input_0 --output-cvg=scores --output-bbox=boxes /dev/video0

カメラについては公式(カメラについて)を参考にしてください。

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?