FastLabelで学習したモデルをi-PROモジュールカメラで使ってみた

# FastLabelで学習したモデルをi-PROのモジュールカメラで使う

# はじめに

こんにちは、FastLabel Developmentチームの爲西です。

今回は、FastLabelで作成したモデルをi-PROモジュールカメラで使用する方法について紹介をします！

# FastLabelとは

FastLabelは、データセット購入、アノテーションツール、教師データ作成代行、MLOps構築を包括したアノテーションプラットフォームです。教師データの作成と改善を高速かつ正確に行うためのアノテーションツールと、高度人材によるきめ細かいアノテーションサービスにより、高品質な教師データを素早く提供できるのが特徴です。

これまで、建設・インフラ、不動産、製造業、医療、農業、水産業など、既存産業の課題をAIで解決している多くの企業にFastLabelを導入。従来、担当者自身やクラウドソーシングで教師データの作成を行っていた導入企業の担当者からは、「FastLabelの活用により、大幅なアノテーション作業時間短縮と、レビュー・管理コストの削減が実現できた」とご好評いただいています。

## FastLabelの特長

1. 直感的なUIで効率的なアノテーションを実現
端末へのインストール不要で、画像や動画、テキスト、音声などのアノテーションをウェブ上からすぐに開始できます。コピー＆ペーストなどホットキーによる作業効率化の機能が豊富に備わっており、YOLO、COCO、PascalVOC、VoTT、labelme 形式にも標準対応しています

2. 深層学習を使用した自動化でコスト・期間を70%削減
ディープラーニングを使ったアノテーション作業の自動化によって、教師データ作成にかかるコストや期間を大幅に削減できます。人手による作業だけでなく、テクノロジーを活用し効率よく教師データを蓄積することで、AI開発のPDCAを高速に回し、目標精度をより速く達成できます。

3. 国内の開発拠点で高いセキュリティ体制を構築
データ・リソースロケーションは日本国内で、カントリーリスクが低く、アノテーションサービスも国内人材で対応可能です。また、情報セキュリティマネジメントシステム（ISMS）の国際規格である「ISO/IEC 27001:2013 / JIS Q 27001:2014」も取得しています。

[FastLabelを使ってみる](https://app.fastlabel.ai/)
[FastLabelについてのドキュメント](https://docs.fastlabel.ai/docs)

# モデルを作成する

FastLabelで、人物検出モデルを作成をしていきます。

## 1. アノテーションの準備をする

プロジェクトを作成します。今回は物体検出のモデルを作成していくので、画像 - 矩形のプロジェクトを作成します。

そして、画像をアップロードします。サイドバーより「タスク」を選択します。「タスクを作成」のボタンを押し、画像をアップロードするとタスクを作成ができます。タスクというのは、FastLabelで画像とアノテーションを管理するための一つの単位です。

最後に、アノテーションについての設定をするとアノテーションの準備が完了です。サイドバーの「アノテーションクラス」を選択、「アノテーションクラスを作成」ボタンを押します。今回は、personクラスの作成をしていきます。

![プロジェクト作成ータスク作成ークラス作成.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1369844/3b309c91-9e61-dde9-0f6c-f528140c27b5.gif)


## 2. アノテーションを開始する

アノテーションをしていきましょう。

サイドバーの「ダッシュボード」を選択肢、「アノテーションを開始」ボタンを押します。

以下動画のように、右のサイドバーより作成をしたいアノテーションクラスを選択肢、画像のアノテーションをしたい位置を選択していきます。


![アノテーションを開始.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1369844/a866dd8b-f96a-d0b2-c57f-5895b9addaba.gif)


## 3. モデルを作成

i-PROのカメラモジュールで使用するモデルを作成します。

　
![画面収録 2023-03-22 9.46.19.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1369844/f0bc1ba4-0683-25c6-133e-3d45a8ddf42e.gif)


学習が終了するとモデルをダウンロードすることができます。

![モデルダウンロード２.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1369844/3f78424d-577b-6a03-bf28-e63f3045fd06.gif)


# i-PROカメラモジュールでモデルを動かす

i-PROのカメラモジュールでFastLabelで作成したモデルを動かしてみましょう。

カメラモジュールについては「[AIスターターキット i-PRO モジュールカメラ【camera kit/python/c++ / Ambarella SoC / OV2732】研究開発用 (MK-DVASTNP01)](https://www.amazon.co.jp/AI%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%AD%E3%83%83%E3%83%88-%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%AB%E3%83%A1%E3%83%A9%E3%80%90camera-Ambarella-OV2732%E3%80%91%E7%A0%94%E7%A9%B6%E9%96%8B%E7%99%BA%E7%94%A8-MK-DVASTNP01/dp/B0B1F16V49)」を使用しております。

ここからは、i-PROのカメラモジュールについて簡単に説明をしていきます。

詳しくは、[こちら](https://moduca.i-pro.com/space/MCT/768776207/AI%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%92%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF)のリンクをご参照ください。

## i-PROカメラモジュールへ搭載するための準備

### 1. SDK・ConverterTool・開発者ライセンスを入手する

moducaカメラポータルサイトより、サインイン・ログインをしてSDK・ConverterTool・開発者ライセンスを入手します。（ConverterTool、開発者ライセンスについてはサポートに問い合わせが必要）

### 2.ConverterToolを用いて、FastLabelでエクスポートしたモデルをバイナリ形式に変換

ConverterToolのreadme.mdに沿って、FastLabelでエクスポートしたYOLO形式の物体検出モデルをバイナリ形式に変換します。

<aside>
💡 YOLO形式をバイナリ形式に変換する際にONNX形式に一度変換する必要があります。

</aside>

以下のコマンドでdockerのコンテナを作成・起動し、必要なモジュールをインポートします。

```bash
cat cvtool_v1.16-001.tar.bz2 | sudo docker import - adam-app-cvtool_v1.16
docker run -d -it --name adam-app-cvtool_v1.16-container adam-app-cvtool_v1.16 /bin/bash
sudo docker exec -it -u cvtool adam-app-cvtool_v1.16-container /bin/bash

sudo apt-get update
sudo apt-get install apt-transport-https 
sudo apt-get install ca-certificates 
sudo apt-get install curl 
sudo apt-get install gnupg-agent 
sudo apt-get install software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io 

cd /home/cvtool
source setup_env.sh

cd conversion/onnx/yolov5

```

次に、dockerコンテナの中にモデルファイルを配置し、ONNX形式に変換します。

```bash
cd conversion/onnx/yolov5

// YOLOのgithubをクローンする
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
git reset --hard 702c4fa53eeaecfa5563c1441cb4a0c4aa8e908e
cd ..

// モデルファイルをdockerに配置
docker cp ローカルのパス adam-app-cvtool_v1.16-container:/home/cvtool/conversion/onnx/yolov5/yolov5/yolov5s.pt

python3 ./models/export.py --weights yolov5s.pt --img-size 416 --batch 1
mv yolov5/yolov5s.onnx sample/yolov5/models/
```

<aside>
💡 YOLO形式からONNX形式への変換がうまくできない場合は、ローカルで最新のYOLOのレポジトリをクローンして、以下のコマンドで実行することができます。

```bash
python [export.py](http://export.py/) --img 416 --weights yolov5s.pt --include onnx --opset 11 --batch 1
```

</aside>

<aside>
💡 また、ONNX形式のモデルの出力層が「onxx::」で始まる場合、出力層の名前を変更する必要があります。出力層の名前の確認は、Netronというアプリケーションで行います。（別途インストールが必要）名前の変更については[こちらの記事](https://zenn.dev/akiya_souken/articles/directly-edit-onnx-file-in-text-format)を参照ください。

</aside>

そして、ONNX形式のモデルをカメラのアプリケーションに載せるためのバイナリ形式に変換します。

```bash
cd /home/cvtool/conversion/onnx/yolov5/sample/yolov5/models
ls
// sample/yolov5/models/の配下にONNX形式のモデルが配置されているかを確認する。

cd /home/cvtool/conversion/onnx/yolov5
./onnx_conversion.sh /home/cvtool/conversion/onnx/yolov5/setting.conf

// ↑のコマンドの処理はかなり時間がかかる場合があります
// 実行の際はsetting.confの中身をモデルに合わせて変更する必要があります。
// （入力画像のサイズや出力層の名前など）
docker cp adam-app-cvtool_v1.16-container:/home/cvtool/conversion/onnx/yolov5/out/yolov5/MIX/yolov5s.onnx/yolov5_cavalry.bin　ローカルのパス
```

### 3. SDKを用いて、バイナリ形式のモデル・開発者ライセンスを含めたアプリケーションをビルドする

VirtualBoxでUbuntuの環境を立ち上げます。こちらの操作はVirtualBoxのUbuntu環境で行います。

```bash
sudo apt purge 'virtualbox-guest-*'
sudo apt update
sudo apt install -y dkms

sudo apt-get update
sudo apt-get install -y g++
sudo apt-get install -y g++-multilib
sudo apt-get install -y libjpeg-turbo8-dev
sudo dpkg --add-architecture i386 
sudo apt-get update 
sudo apt-get install -y libc6:i386 libncurses5:i386 libstdc++6:i386
sudo apt-get install -y multiarch-support
sudo apt-get install -y -y python3
```

Ubuntu環境のデスクトップにSDKを配置し、AdamAppSDKに含まれるAmbarella_Toolchain_Linaro_2018.08をインストールする。

`<AdamAppSDK’s Installation Directry>/conf/development.key` の箇所にmoducaポータルサイトより申請・ダウンロードしたキーを配置する。

```bash
sudo chmod +x ubuntuToolChain-201808
./ubuntuToolChain-201808
```

以下のコマンドを実行してビルドをします。（個別にアプリケーションをビルドすることも可能です。）

```bash
cd /home/｛ホームディレクトリ｝/デスクトップ/iPRO_CAMERA_SDK_V1_62

//　使いたいアプリケーションにモデルを配置する(私の場合はyuv_yolov5_appを使用)
source setup_env.sh ipro-ambaCV2X
cd src/adamapp
make
```

### 4. Googleの拡張機能より、カメラにアプリケーションをアップロードをする

ここからはVirtualBoxのUbuntu環境ではなく、ローカルのPCで行います。

拡張機能についてはSDKに添付をされているものを使います。SDK配下のtoolディレクトリのAdamControlExtensionをインストールします。

以下の画面が表示できれば、インストールに成功をしています。カメラのIPアドレスを入力して`Connect` を押し、`Application List` の箇所よりアプリをアップロードします。

![スクリーンショット 2023-03-31 12.05.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1369844/56c4086a-9f1d-8c6d-151e-2c95c0f805f9.png)

## 推論結果の表示

カメラのIPアドレスを叩いて、推論結果を確認するとこんな感じです！

![スクリーンショット 2023-04-17 9.04.20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1369844/9b49257e-da52-98c1-e7a4-bbd64c2ebac5.jpeg)
![スクリーンショット 2023-04-17 9.03.59.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1369844/87fa109f-e0ca-9fc9-1c69-eff212da066c.jpeg)





今回はモデルをI-PROカメラに搭載して動かすことにピンを置いているため、精度にばらつきがございます。ご了承ください。

# 最後に

本記事では、FastLabelを使用して人物検出モデルを作成し、i-PROカメラーモジュールで実際に試しみました。意外と簡単にモデルをモジュールに搭載することができるので、一度試していただけると良いと思いました。