AIアルゴリズム開発フロー
AIアルゴリズムの開発は、主に以下の流れで進めます。
| Step | 工程 | 内容 |
|---|---|---|
| 1 | 概要 | AIアルゴリズム開発全体の流れを把握します。 |
| 2 | 要件分析 | 実現したい機能を整理し、必要なサブアルゴリズムを明確にします。 |
| 3 | データ準備 | 学習に必要な多様なデータを収集し、適切に標注・前処理します。 |
| 4 | モデル選定 | 精度、速度、用途に応じて適切なモデル構造を選びます。 |
| 5 | モデル学習 | TensorFlow、PyTorch、Caffeなどのフレームワークでモデルを学習します。 |
| 6 | モデル変換 | 学習済みモデルをrknn形式へ変換し、量子化・プリコンパイルします。 |
1. 概要
AIアルゴリズム開発は、単一の作業ではなく、要件の整理、データの準備、モデルの選定、学習、そして実行環境向けのモデル変換までを含む一連のプロセスです。
各工程を適切に設計することで、実際の利用シーンに合った精度と処理速度を両立したAIモデルを開発できます。
2. 要件分析
アルゴリズムの機能は、「顔認識」「ドライバー行動検知」「商業施設における顧客行動分析」など、短い言葉で表現されることが多くあります。
しかし、実際には複数のサブアルゴリズムが順序立てて動作することで、最終的な機能が実現されます。これは、各サブアルゴリズムのニューラルネットワーク構造が異なり、それぞれの機能に適した形で最適化されているためです。
| モデル分類 | 機能 |
|---|---|
| 物体検出モデル | 画像内に対象物が存在するかを検出し、その対象物の具体的な座標を出力します。分類機能を同時に提供することもできます。 |
| キーポイント検出モデル | 画像内の特定対象を検出し、骨格点や顔の器官位置などのキーポイントを出力します。 |
| 類似度比較モデル | 2つの異なる個体の類似度を比較します。顔認識、豚の顔認識、商品認識などで使用されます。 |
| セグメンテーションモデル | 画像内の物体を検出し、輪郭などの基準に従って不規則なピクセル領域として分割します。分類機能を同時に持つ場合もあります。 |
| OCRモデル | 文字を認識します。 |
以下に、複数のサブアルゴリズムで構成される例を示します。
例 A:顔認識アルゴリズム
顔認識アルゴリズムは、以下のようなサブアルゴリズムで構成されます。
- 顔検出モデル(検出モデル)
- 顔姿勢補正モデル(キーポイント検出モデル)
- 顔比較モデル(類似度比較モデル)
例 B:ドライバー行動検知アルゴリズム
ドライバー行動検知アルゴリズムは、以下のようなサブアルゴリズムで構成されます。
- 顔認識アルゴリズム
- 喫煙、スマートフォン操作などの危険行動認識(検出モデル)
- 居眠り運転検知(キーポイント検出モデル)
- 車線逸脱検知(検出モデル)
例 C:商業施設分析
商業施設分析は、以下のようなサブアルゴリズムで構成されます。
- 顔認識アルゴリズム
- 人体追跡アルゴリズム(検出モデル + 類似度比較モデル)
具体的な要件を実現するために必要な工程を明確にして初めて、目的に沿ったデータ収集、モデル最適化、学習を行うことができます。
3. データ準備
データ準備は、多くの人にとって単調で繰り返しの多い作業に見えます。しかし、この工程には注意すべき重要なポイントが数多くあります。
データサンプルの多様性
データサンプルには十分な多様性が必要です。サンプルの多様性は、アルゴリズムの汎化性能を保証するための基礎になります。
たとえば、農産物を認識する機能を開発する場合、赤いリンゴの画像だけを収集して学習させると、緑色のリンゴを正確に認識することが難しくなります。
また、十分な負例データも必要です。農産物の画像だけをニューラルネットワークに与えた場合、学習済みネットワークが本物のリンゴとプラスチック製のリンゴを有効に区別できるとは期待しにくくなります。
アルゴリズムの信頼性を高めるためには、実際の利用シーンで発生し得る特殊な状況を十分に考慮し、それらのデータを訓練データに追加する必要があります。
データサンプルの圧縮可能性
単一サンプルデータのサイズは、ネットワークモデルの実行効率に大きく影響します。
効果を維持できる範囲では、画像サイズをできるだけ圧縮することで、処理効率を向上させるべきです。たとえば、112×112ピクセルの画像は、同一環境下では224×224ピクセルの画像に比べて、処理速度が約4倍速くなる可能性があります。
一方で、画像情報の欠落を避けるために、完全な画像が必要となる場面もあります。たとえば山火事検知では、高い再現率が求められるため、過度な画像圧縮によって再現率が低下し、アルゴリズムの性能が悪化する可能性があります。
適切なアノテーションと前処理
データには、適切かつ正確なアノテーションと前処理が必要です。
データアノテーションは、学習結果が到達できる性能の上限を大きく左右します。誤ったラベルが多すぎると、有効な学習結果を得ることが難しくなります。
データ前処理とは、機械がデータを理解しやすくするために、あらかじめ一定の処理を行うことです。
たとえば、農産物が画像内のどこにあるかを表す場合、「左から200番目のピクセルに中心点がある」という表現は直感的で正確です。しかし、画像サイズが変わるとピクセル位置の差が大きくなり、学習が難しくなる可能性があります。
そのため、「画像幅の左から40%の位置に中心点がある」といった形で距離を正規化する必要があります。
音声データの前処理はさらに多様です。分かち書きの方法やフーリエ変換など、処理方法の違いが学習結果に影響します。
データ準備は開発全体を通じて継続する
データ準備は、必ずしも最初から完全である必要はありません。
モデル学習後に一定の効果が得られたものの、一部に欠陥が残っている場合は、訓練データの追加や最適化を行い、既存モデルを再学習して修正することができます。
後期段階の最適化であっても、適切な画像を追加することが、最も効果的な改善手段になることがよくあります。
そのため、データに関する検討と最適化は、開発プロセス全体を通じて継続的に行うべきです。開発初期だけでデータサンプルの問題に注目するのでは不十分です。
4. モデル選定
通常、同じ機能を実現する場合でも、複数のモデル候補が存在します。それぞれのモデルは、精度や計算速度において異なる特徴を持っています。
モデルは、主に学術研究や企業間の公開コンペティションなどを通じて発見・改良されます。そのため、開発者はAIの新しいモデルに関する論文や記事を継続的に確認する必要があります。
同時に、既存モデルの蓄積と分析も非常に重要です。以下に、各機能において比較的優れたモデル構造の例を示します。
| モデルタイプ | モデル名 | 効果 | 速度 |
|---|---|---|---|
| 検出モデル | yolov5 | 精度が高い | 中程度 |
| 検出モデル | ssd | 精度は中程度。小さな物体の認識は一般的 | 高速 |
| キーポイント検出モデル | mtcnn | 精度は一般的で、検出できるキーポイントは少ない | 高速 |
| キーポイント検出モデル | openpose | 精度が高く、検出できるキーポイントが多い | 中程度 |
| 類似度比較モデル | resnet18 | 精度が高い | 高速 |
| 類似度比較モデル | resnet50 | 精度が高く、ロバスト性が強く、外乱に対する耐性が高い | 中程度 |
| セグメンテーションモデル | mask-rcnn | 精度は中程度。画像内の不規則な物体領域を分割できる | 低速 |
5. モデル学習
AI開発経験のある開発者であれば、TensorFlow、PyTorch、Caffeなど、自分が使い慣れた一般的なフレームワークを用いてモデルを学習できます。
当社の開発キットでは、これらのフレームワークで学習したモデルを、EASY EAI Nano-TB専用モデルへ変換できます。
6. モデル変換
TensorFlow、PyTorch、Caffeなどで独自モデルを開発した後は、まずモデルをRKNNモデルへ変換する必要があります。
また、通常はモデルの量子化と事前コンパイルを行い、実行効率を向上させます。