コンテンツにスキップ

ResNet50訓練デプロイガイド

文書情報

本チュートリアルでは、画像分類アルゴリズム ResNet50 のトレーニング、および CSUN RV1126B 基板へのデプロイについて説明します。

項目内容
文書名ResNet50訓練デプロイガイド
会社株式会社日昇テクノロジー
URLhttps://www.dragonwake.com
E-mailinfo@dragonwake.com
作成日2026/06/02
バージョンVer1.0
修正内容新規作成

1. ResNet50概要

ResNet50ネットワークは、Microsoft ResearchのHe Kaiming氏により2015年に提案され、ILSVRC 2015画像分類コンペティションで1位を獲得しました。ResNet以前の従来型CNNは、畳み込み層とプーリング層を積み重ねる構成でしたが、ネットワークが一定以上深くなると劣化問題が発生しました。残差ネットワークは最適化しやすく、十分な深さを追加することで精度を向上できます。内部の残差ブロックではスキップ接続を使用し、深層ニューラルネットワークを深くした際に発生しやすい勾配消失問題を緩和します。

本チュートリアルでは、画像分類アルゴリズムResNet50のトレーニングおよびCSUN RV1126B基板へのデプロイについて説明します。

ResNet50訓練およびデプロイの全体フロー

図1-1 ResNet50訓練およびデプロイの全体フロー

2. 資料ダウンロード

本マニュアルに必要な資料およびソースコードは、以下のリンクからダウンロードしてください。

https://dl.dragonwake.com/download/rv1126b/AI/demo/Resnet50/AIDemo_ResNet50_All.zip

解凍後のディレクトリ構成は次のとおりです。

|-- 01-data データセット
|-- 02-training トレーニング用のソース
|-- 03-model_convert AIモデル変換用のソース
|-- 04-AI_deploy AIモデルデプロイ用のソース

AIDemo ResNet50解凍後のディレクトリ構成

図2-1 AIDemo_ResNet50_All.zip解凍後のディレクトリ構成

3. データセットの準備

本チュートリアルでは、車両分類アルゴリズムを例として使用します。データセットの構成は次のとおりです。

  • trainフォルダ:訓練用のデータセット
  • valフォルダ:検証用のデータセット

trainおよびvalデータセットフォルダ

図3-1 trainおよびvalデータセットフォルダ

データセットを開くと、10種類の車両カテゴリを確認できます。

車両分類データセットのカテゴリフォルダ

図3-2 車両分類データセットのカテゴリフォルダ

カテゴリ名およびカテゴリインデックス番号の対応関係は次のとおりです。

カテゴリ名カテゴリインデックス番号
SUV0
BUS1
family sedan2
fire engine3
heavy truck4
jeep5
mini bus6
racing car7
taxi8
truck9

4. ResNet50画像分類のトレーニング

4.1. トレーニング用ソースコード

トレーニング用ソースコードのディレクトリは次の図のようになります。

ResNet50トレーニング用ソースコードディレクトリ

図4-1 ResNet50トレーニング用ソースコードディレクトリ

データセットを現在のディレクトリへコピーします。

トレーニングディレクトリへコピーしたデータセット

図4-2 データセットをトレーニングディレクトリへコピー

4.2. モデルのトレーニング

本ガイドでは、CSUN RV1126BのDocker開発環境にPyTorchなどをインストールし、トレーニング環境として使用します。

pipコマンドがない場合は、以下を実行してインストールしてください。

Terminal window
sudo apt update
sudo apt install pip

Docker環境内でCUDAを使用する場合は、ホスト側にnvidia-container-toolkitが必要です。

ホスト側で以下のコマンドを実行し、NVIDIA Container Toolkitをインストールします。

Terminal window
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor --yes -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [arch=amd64 signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sed 's#$(ARCH)#amd64#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
apt-cache policy nvidia-container-toolkit
sudo apt-get install -y nvidia-container-toolkit

ホスト側で以下のコマンドを実行し、DockerコンテナからGPUを認識できることを確認します。

Terminal window
docker run --rm --gpus all nvidia/cuda:11.8.0-runtime-ubuntu22.04 nvidia-smi

Docker GPU確認結果

図4-3 DockerコンテナからGPUを認識できることを確認

以下の内容でrequirements.txtを作成し、Docker開発環境でpip install -r requirements.txtを実行します。

# GPU environment for NVIDIA GeForce GTX 1070 Ti
# GPU: Pascal architecture, Compute Capability 6.1
# Recommended: PyTorch 2.5.1 + CUDA 11.8 wheel
#
# Install:
# pip install -r requirements.txt
#
# Verify:
# python -c "import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'none')"
--index-url https://download.pytorch.org/whl/cu118
--extra-index-url https://pypi.org/simple
torch==2.5.1
torchvision==0.20.1
numpy
matplotlib
Pillow
opencv-python
onnx

トレーニング完了後、matplotlibを使用して精度などのグラフを描画します。ただし、matplotlibはデフォルトでGTKグラフィカルインターフェースバックエンドを使用する場合があります。必要に応じて、以下の依存パッケージをインストールしてください。

Terminal window
sudo apt install -y libcanberra-gtk-module libcanberra-gtk3-module librsvg2-common

トレーニングソースコードディレクトリで次のコマンドを実行し、トレーニングを開始します。

Terminal window
python train.py

実行結果の例を次に示します。

ResNet50トレーニング実行結果

図4-4 ResNet50トレーニング実行結果

トレーニング終了後のtest loss結果は次のとおりです。

ResNet50 test loss曲線

図4-5 ResNet50 test loss結果

トレーニング終了後のtest accuracy結果は次のとおりです。

ResNet50 test accuracy曲線

図4-6 ResNet50 test accuracy結果

生成された最良モデルは次のとおりです。

生成された最良モデルファイル

図4-7 生成された最良モデルファイル

4.3. PC側でモデルをテスト

トレーニングソースコードディレクトリで次のコマンドを実行し、モデルをテストします。生成されたモデル名が異なる場合は、predict.pyソースコード内のモデル名も修正してください。

全体パッケージをダウンロードして解凍した後のパスは次のとおりです。

/data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial/Resnet50/02-training/image_classification
Terminal window
python predict.py

predict.py実行結果

図4-8 predict.py実行結果

結果のカテゴリインデックス番号は1、つまりBUSです。テスト結果が正しいことを確認できます。

BUSカテゴリとして認識されたテスト画像

図4-9 BUSカテゴリとして認識されたテスト画像

4.4. pthモデルをONNXモデルへ変換

生成されたモデル名を確認します。

pth_to_onnx.pyで指定するモデルファイル名

図4-10 pth_to_onnx.pyで指定するモデルファイル名

次のコマンドを実行し、PyTorchのpthモデルをONNXモデルへ変換します。

Terminal window
python pth_to_onnx.py

pthモデルからONNXモデルへの変換実行結果

図4-11 pthモデルからONNXモデルへの変換実行結果

生成されたONNXモデルは次のとおりです。

生成されたONNXモデルファイル

図4-12 生成されたONNXモデルファイル

5. rknn-toolkitモデル変換

5.1. rknn-toolkitモデル変換環境構築

ONNXモデルをRV1126B基板で実行するには、RKNNモデルへ変換する必要があります。そのため、事前にrknn-toolkitモデル変換ツール環境を構築します。TensorFlow、TensorFlow Lite、Caffe、Darknetなどのモデルも同様の方法で変換できます。本チュートリアルではONNXモデルを例として説明します。

5.1.1. 概要

モデル変換環境の構築手順は次のとおりです。

モデル変換ツール環境構築フロー

図5-1 モデル変換ツール環境構築フロー

5.1.2. モデル変換ツールのダウンロード

本節は「AIモデル変換環境構築ガイド」を参考にしてください。

モデル変換ツールを正常に実行するため、以下のDockerイメージファイルをダウンロードしてください。

https://dl.dragonwake.com/download/rv1126b/AI/images/rknn-toolkit2-v2.3.2-cp38-docker.tar.gz

5.1.3. ツールをUbuntu 20.04へ移動

ダウンロード完了後のDockerイメージは次の図のようになります。

rknn-toolkit2 Dockerイメージファイル

図5-2 rknn-toolkit2 Dockerイメージファイル

5.1.4. モデル変換ツール環境の起動

次のコマンドを実行し、モデル変換ツールのDockerイメージを読み込みます。

Terminal window
cd /data/project/sales/csun/rv1126b/jp/AI/images
docker load --input rknn-toolkit2-v2.3.2-cp38-docker.tar.gz

次のコマンドを実行し、イメージのbash環境に入ります。

Terminal window
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial:/test rknn-toolkit2:2.3.2-cp38 /bin/bash

実行結果の例を次に示します。

rknn-toolkit2 Docker bash環境

図5-3 rknn-toolkit2 Docker bash環境

pythonを入力してPython環境を起動し、rknnライブラリを読み込めることを確認します。環境テストに成功した例を次に示します。

rknnライブラリの読み込み確認

図5-4 rknnライブラリの読み込み確認

以上で、モデル変換ツール環境の構築は完了です。

5.2. モデルをRKNNへ変換

CSUN RV1126Bは、拡張子.rknnのモデルの評価と実行をサポートしています。一般的なTensorFlow、TensorFlow Lite、Caffe、Darknet、ONNX、およびPyTorchモデルは、提供されているツールキットを使用してRKNNモデルに変換できます。その他のフレームワークでトレーニングされたモデルは、まずONNXモデルに変換してからRKNNモデルに変換できます。モデル変換プロセスは次の図のとおりです。

RKNNモデル変換プロセス

図5-5 RKNNモデル変換プロセス

5.2.1. モデル変換ツールのDocker環境に入る

次のコマンドを実行し、作業領域をDockerイメージへマウントします。/data/project/sales/csun/rv1126b/jp/AI/demo/Tutorialを作業領域として使用し、コンテナ内の/testへマッピングします。また、/dev/bus/usb:/dev/bus/usbによりUSBデバイスをDockerイメージへマウントします。

Terminal window
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial:/test rknn-toolkit2:2.3.2-cp38 /bin/bash

実行に成功すると、次の図のように表示されます。

モデル変換用Docker環境へのログイン

図5-6 モデル変換用Docker環境へのログイン

5.2.2. モデル変換Demoディレクトリの説明

モデル変換テストDemoは、resnet50_model_convertquant_datasetで構成されます。resnet50_model_convertには変換用スクリプト、quant_datasetには量子化モデルに必要なデータが格納されています。

Terminal window
tar -jxvf resnet50_model_convert.tar.bz2
unzip quant_dataset.zip

モデル変換Demoの展開後ディレクトリ

図5-7 モデル変換Demoの展開後ディレクトリ

resnet50_model_convertフォルダには、次の内容が格納されています。

  • 10class_ResNet50.onnx:テスト用のモデルファイル
  • gen_list.py:量子化画像ファイルリストを生成するPythonスクリプト
  • rknn_convert.py:モデル変換用のPythonスクリプト

resnet50_model_convertフォルダの内容

図5-8 resnet50_model_convertフォルダの内容

5.2.3. 量子化画像リストの生成

Docker環境に切り替え、モデル変換作業ディレクトリへ移動します。

Terminal window
cd /test/Resnet50/03-model_convert/resnet50_model_convert

モデル変換作業ディレクトリ

図5-9 モデル変換作業ディレクトリ

gen_list.pyを実行し、量子化画像リストを生成します。

Terminal window
python gen_list.py

量子化画像リスト生成コマンド

図5-10 量子化画像リスト生成コマンド

生成された量子化画像リストは次のフォルダに格納されます。

生成された量子化画像リスト

図5-11 生成された量子化画像リスト

5.2.4. ONNXモデルをRKNNモデルへ変換

rknn_convert.pyはデフォルトでINT8量子化を行います。スクリプト例は次のとおりです。

import os
import urllib
import traceback
import time
import sys
import numpy as np
import cv2
from rknn.api import RKNN
ONNX_MODEL = '10class_ResNet50.onnx'
RKNN_MODEL = './10class_ResNet50_rv1126b.rknn'
DATASET = './pic_path.txt'
QUANTIZE_ON = True
if __name__ == '__main__':
# Create RKNN object
rknn = RKNN(verbose=False)
if not os.path.exists(ONNX_MODEL):
print('model not exist')
exit(-1)
# pre-process config
print('--> Config model')
rknn.config(
mean_values=[[123.67, 116.28, 103.53]],
std_values=[[58.395, 57.12, 57.375]],
target_platform='rv1126b'
)
print('done')
# Load ONNX model
print('--> Loading model')
ret = rknn.load_onnx(model=ONNX_MODEL)
if ret != 0:
print('Load failed!')
exit(ret)
print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)
if ret != 0:
print('Build resnet failed!')
exit(ret)
print('done')
# Export RKNN model
print('--> Export RKNN model')
ret = rknn.export_rknn(RKNN_MODEL)
if ret != 0:
print('Export resnet failed!')
exit(ret)
print('done')
rknn.release()

ONNXモデル10class_ResNet50.onnxresnet50_model_convertディレクトリへ配置し、rknn_convert.pyでモデル変換を行います。

Terminal window
python rknn_convert.py

rknn_convert.py実行結果

図5-12 rknn_convert.py実行結果

生成されたモデルを次の図に示します。このモデルはrknn-toolkit環境およびRV1126B基板で実行できます。

生成されたRKNNモデルファイル

図5-13 生成されたRKNNモデルファイル

6. ResNet50画像分類デプロイ

6.1. モデルデプロイ例の説明

本節では、ResNet50モデルをRV1126B基板へデプロイする手順を説明します。本サンプル用モデルは簡単なトレーニングのみを行ったものであり、モデル精度は保証しません。

6.2. 準備作業

6.2.1. ハードウェア準備

RV1126B基板、Type-Cデータケーブル、LANケーブルを用意し、MobaXtermからSSHでRV1126B基板にログインします。詳細は入門ガイドを参照してください。

LANケーブルで接続します。

RV1126B LAN接続

図6-1 RV1126B LAN接続

シリアルケーブル(Type-C)で接続します。

RV1126B Type-Cシリアル接続

図6-2 RV1126B Type-Cシリアル接続

6.2.2. 開発環境の準備

本書を初めて読む場合は、『入門ガイド』を参照し、記載された手順に従ってコンパイル環境を構築してください。

PC側のUbuntuシステムでrun.shスクリプトを実行し、RV1126Bコンパイル環境に入ります。手順は次のとおりです。

Terminal window
cd ~/develop_environment
./run.sh 2204

RV1126B Docker開発環境の起動

図6-3 RV1126B Docker開発環境の起動

6.3. サンプルプログラムのビルド

ダウンロードしたパッケージをRV1126B Docker開発環境へ移動した後、次のコマンドを実行して展開します。

Terminal window
tar -xvf resnet50_classification_C_demo.tar.bz2

展開後のディレクトリは次の図のようになります。

ResNet50デプロイDemo展開後ディレクトリ

図6-4 ResNet50デプロイDemo展開後ディレクトリ

RV1126B Docker開発環境上でサンプルプログラムの展開後ディレクトリに入り、ビルドを実行します。具体的なコマンドは次のとおりです。

Terminal window
sudo mount -t nfs -o vers=3,proto=tcp,mountproto=tcp,nolock,retrans=5,timeo=5 192.168.11.85:/ /mnt
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/Resnet50/04-AI_deploy/resnet50_classification_C_demo/
./build.sh

ResNet50デモプログラムのビルド結果

図6-5 ResNet50デモプログラムのビルド結果

コンパイルに成功した後、実行プログラムディレクトリresnet_classification_demo_release/をRV1126B基板の/userdataディレクトリへコピーします。

Terminal window
cp resnet_classification_demo_release/ /mnt/userdata/ -rf

6.4. 開発ボードでResNet50画像分類を実行

シリアルデバッグまたはSSHデバッグによりボード側シェルへ入り、サンプルプログラムのデプロイ先へ移動します。

Terminal window
cd /userdata/resnet_classification_demo_release

開発ボード上のResNet50デモディレクトリ

図6-6 開発ボード上のResNet50デモディレクトリ

サンプルプログラムの実行コマンドは次のとおりです。

Terminal window
chmod 777 resnet_classification_demo
./resnet_classification_demo

実行結果を次の図に示します。アルゴリズム実行時間は約18 msです。

ResNet50デモ実行結果

図6-7 ResNet50デモ実行結果

以上で、ResNet50画像分類サンプルはボード上で正常に実行されました。