AIプロジェクトの進め方について

# AIプロジェクトの進め方について

## 前提
最近MLを利用した画像解析系のAIプロジェクトを受け持つ機会が増えてきました。  
そんな中で私自身がハマったことがいくつかあるので、そこら辺を共有しながらこんな感じでプロジェクトを進めたらいいよ！と言うことを備忘録も兼ねて書いていければと思います。  
この記事がこれから画像解析系のAIプロジェクトを進めていく方の一助になれば幸いです。

## プロジェクトが始まる前に
プロジェクトが始まる前にはまず提案がありますよね。  
大体お客さんから言われる一言目は「今は人が〇〇の業務を行っているんだけど、AIで人がやっている作業を代替したい！できる？」みたいなやつです。まあ、回答に困りますよね。  

なぜなら、これを言われた時にPMないしはコンサルはいくつも疑問が浮かびます。  
「本当にAIを利用する必要があるの？センサーなどの物理的な解決策はダメなの？AIじゃなくて画像解析でもいいのでは？」、「え、AIでやりたいからには学習させる素材ありますよね？」、「あるとしてどれくらいの枚数があるの？」、「**あとあと、そもそもROI的にやる必要があるの？**(これかなり重要)」  
とまあ、結構色々な疑問が浮かびます。ここら辺は手間がかかりますが、一つひとつ丁寧に聞いていきましょう。  

また、最近は減っていると思いますが、「AIを使えば時間はかかるかもしれないけど、最終的にやりたいことはできるんでしょ？」って思っている方がたまにいらっしゃいます。  
この場合、AIは絶対ではないんだよ。と言うことを丁寧に説明しましょう。  

### AIの精度について
そもそもAIって100%の精度が出ないのは当たり前なんです。  
**なぜならAIってそう言うものだから。**  
AIが100%の精度を出せないのは、そもそもAIという技術の特性によるものです。  
AIは膨大なデータからパターンを学習し、それを元に新しいデータを判断します。  
そのため、学習したデータに似たものについては高い精度で判断できる反面、未知のデータや複雑な状況ではどうしても誤判断が生じやすくなります。  

### 人間とAIの判断の違い
人間もまた、似たものを見間違えたり、思い込みで判断ミスをすることがあります。  
AIも同じように、学習したデータに近いものだと判断する傾向があります。  
これはAIがデータのパターンをもとに判断を下すからであり、その範囲から外れたデータには対応が難しいからです。  
つまり、AIが100%の精度に達しないのは、データ依存型の仕組みによる制約があるためです。  
AIも人間と同様に、完璧な判断を下すわけではなく、時に誤りを含む判断を行うという特性を理解することが大切です。

### AIの曖昧さへの対応
もちろんこれにはメリットもあって、曖昧さの中での判断が可能と言うわけです。  
人間が「あいまいに似ているもの」を見つけるのと同様に、AIもある程度の類似性を持つデータに対して判断を下せます。  
例えば、自然言語処理や画像認識の分野では、完全に一致していない表現や画像にも対応可能です。  
この機能があるから学習していない新しい状況環境にも適応できるってわけです。

### プロジェクトが始まる前のまとめ
話が長くなってしまいましたが、プロジェクトが始まる前に確認した方がいい具体項目を箇条書きで並べていきましょうか。 
#### プロジェクトが始まる前に聞いておくこと
1. **プロジェクトの価値と目的の確認**
- **目的**：AI導入による具体的なコスト削減や効率化の見込みを明確にする
- **確認内容**：
    - AI導入による具体的なコスト削減や効率化の見込みを算出し、AI導入の必要性度価値を明確化
    - 顧客の「なぜAIが必要か？」を明確にする
2. **AI導入の必要性と適切な手段の選択**
- **目的**：AIでなければ達成できないのかを検討し、最適な解決策を選択
- **確認内容**
    - 本当にAIを導入する必要があるのか。センサーなどの物理的な解決策はないかの確認、検討
    - 画像解析や既存の自動化手法で達成可能ではないかの確認、検討
3. **目標精度の現実性の確認**
- **目的**：目標精度と現実性のすり合わせ
- **確認内容**
    - AI技術で実現可能な精度と顧客の期待する精度を調整し、AIの限界の説明
    - 特に100%の精度は困難であること、最終的には人の手による目視確認は一定の割合で必要なことを伝え、現実的なラインでの目標精度を設定
    3. AIの曖昧な判断により生じる可能性やリスク範囲についても説明
4. **学習データの有無と量の確認**
- **目的**：プロジェクト達成に必要なデータの有無と質を確認
- **確認内容**
    - 学習に必要なデータが揃っているのか、その枚数や質がプロジェクトの目標に合致しているか確認
    - データが不足している場合は追加データ収集の計画や予算についても検討
    - 定期的なデータ採りが可能か
        - 一度のプロジェクトで全ての環境に適応できるようなAIモデルの作成は基本不可能なので、汎用性を上げるために継続したデータ採り、学習のサイクルを回す必要があるため
5. **異常検出・判断基準の明確化**
 - **目的**：異常を見なす基準と検出後の対応を定義する
 - **確認内容**
     - 「異常」と見なす状況や判断基準を事前に定義する
     - 「どのような状況が異常か」「どの程度の頻度で検出すべきか」など、異常検出の具体的な基準を顧客と共に設定し、異常と正常の境界が曖昧をなくす
#### ごちゃごちゃ書いたけど
ぶっちゃけ上記に書いたことを提案フェーズで確認するのは理想ですが、実質不可能です。多分顧客に聞いても、場合によっては「知らん。」と一括されることでしょう。
ただ、大事なことは上記のようなことを聞かないと**最終的には行き詰まる**と言うことです！なので、どこのタイミングで聞くかは状況にもよるでしょうが、少なくとも要件定義では確認した方がベターです。

途中だけど投稿！！続きは今度！

続きを書いていきます！(2024/11/19)

# 要件定義の重要性
さて、前回はプロジェクトが始まる前に確認しておくべきポイントについてお話ししましたが、今回は要件定義の重要性について深掘りしていきたいと思います。

## 要件定義で押さえておくべきポイント
要件定義って聞くとちょっと堅苦しい感じがしますが、ここをしっかりやっておかないと後々大変なことになります。私自身、要件定義を甘く見て失敗した経験があります。

### 1. 顧客との認識合わせ
まず一番大事なのは、顧客との認識をしっかり合わせることです。AIが何でもできる魔法のツールだと思っている方も多いので、現実的な話をしっかり伝える必要があります。

#### AIの現実と限界を共有する
AIは万能じゃないんだよ、ということを正直に伝えましょう。特にプロジェクトの初期段階では、モデルの精度が高くないことが多いです。例えば、

> 「最初は精度が50%くらいですが、段階的に改善していきます」

という感じで、長期的な視点での精度向上計画を共有します。また、AIの性能はデータの質と量に大きく依存することも説明しましょう。

#### 期待値のコントロール
過度な期待を抱かせないように、現実的な目標設定を行います。精度向上には時間とデータが必要であることを理解してもらい、段階的な目標（初期は50%、最終的には90%を目指す）を設定しましょう。

### 2. 顧客ニーズの深掘り
顧客が「品質向上」を求めていても、実際のところ「コスト削減」や「作業効率の改善」が目的だったりします。ここをしっかり聞き出して、開発の方向性がブレないようにします。

### 3. 運用環境の前提条件を明確化
次に、運用環境をしっかり理解することが重要です。

#### 現場環境の詳細な理解
点検対象が屋外か屋内か、昼間か夜間か、季節による環境変化はないかなど、細かい条件を確認します。例えば、屋外の場合は天候や照度の変化が大きいので、

> 「照度が100ルクス未満の環境では検出を行わない」

といった対象外の定義を事前に共有しておくと安心です。

#### 対象外条件の明確化
システムが対応できない条件や環境を明確にしておくことで、無理な要求を避けることができます。これも顧客との信頼関係を築く上で大切ですね。

### 4. データ収集と前処理の重要性
AIモデルの性能は、データの質と量に大きく依存します。

#### 高品質なデータの収集
撮影条件やデータ取得方法を統一するために、撮影ガイドラインを作成し、現場で徹底してもらいます。具体的には、撮影距離、角度、照度などをルール化します。

#### データの多様性を確保
異常状態のパターンが偏らないよう、様々な条件下でのデータを収集します。初期段階では収集可能な範囲でデータを集め、モデルの精度向上に伴いデータの多様性を広げていきます。

#### データ前処理と品質チェック
ピンぼけや過剰露出などの不適切なデータを除外し、データの品質を一定に保つために前処理を行います。データが不足している場合は、 **データ拡張（オーグメンテーション）** を活用してデータ量を増やします。

### 5. データラベリング（アノテーション）の重要性
ここで、データの中でも特に重要なのが **データラベリング（アノテーション）** です。

#### アノテーションとは何か
アノテーションとは、データに対して正解ラベルを付ける作業のことです。具体的には、画像データに対して検出したい対象物の位置や種類を指定するために、

- バウンディングボックスの描画
- セグメンテーションマスクの作成

などを行います。これにより、モデルは何を学習すべきかを理解できます。

#### アノテーション作業の大変さ
アノテーション作業は一見地味ですが、実はかなり時間と労力がかかります。大量のデータに対して正確なラベル付けを行う必要があり、ミスが許されません。特に以下の点が大変です：

1. 膨大な作業量
   - 例：数千から数万枚の画像に対してアノテーションを行う
   - 単純作業の繰り返しで、集中力が必要
   - 時間がかかる（一枚あたり数分でも、全体では膨大な時間になります）

2. 専門知識が必要
   - 例：微細な欠陥の検出や特殊な部品の判別
   - 詳しくないと正確なラベル付けができない
   - 専門家の協力が必要な場合もある

3. 品質管理が大変
   - アノテーションの品質がモデルの性能に直結します
   - ダブルチェックやレビューが必要
   - 一人でやるのは限界があるため、チームでの協力が必要

#### アノテーションが不十分だと起こる問題
アノテーションがいい加減だと、モデルは誤った学習をしてしまいます。その結果、以下のような問題が発生します。

1. 誤検出や未検出の増加
   - 正しくないラベルで学習したモデルは、実際のデータでも誤った判断を下します
   - 現場での信頼性を損なうことになります

2. 学習効率の低下
   - ノイズの多いデータで学習すると、モデルの収束が遅くなります
   - 最適なパラメータを見つけにくくなります

#### だからこれだけの労力をかける必要があるのか
アノテーションはモデルの基盤を作る超重要なステップです。ここを手を抜くと、後々のモデル改善に莫大な時間とコストがかかります。最初からしっかりとアノテーションを行うことで：

- 高精度なモデルの実現
  - 正確なデータで学習したモデルは、高い精度と安定性を持ちます

- 開発期間の短縮
  - データ品質が高いと、モデルのチューニングや再学習の手間が省けます

- 顧客満足度の向上
  - 最終的に高性能なシステムを提供できるので、顧客の信頼を得られます

### 6. リスク管理と障害への対処
性能の良いモデルを作るためには、潜在的なリスクや障害を事前に洗い出し、対策を講じることが重要です。

#### データ不足や偏りへの対応
データが不足していたり、特定の条件に偏っていると、モデルの性能が低下します。データ収集計画を立て、必要に応じて追加のデータ収集やデータ拡張を行いましょう。

#### モデルの過学習や汎化性能のチェック
モデルが学習データに過剰に適応してしまい、新しいデータに対して性能が出ない場合があります。適切な検証データセットを用いてモデルの汎化性能を評価し、過学習を早期に発見・対処します。

#### 技術的な限界や不確実性の明確化
現在の技術では解決が難しい課題や、不確実な要素については事前に顧客と共有します。例えば、

> 「夜間の低照度環境では検出精度が低下する可能性があります」

といったリスクを説明し、許容範囲を確認します。

## まとめ
要件定義の段階でしっかりとこれらのポイントを押さえておくことで、プロジェクトの方向性が明確になり、関係者全員が共通のゴールに向かって進むことができます。特にデータ収集やアノテーションの重要性を理解してもらうことで、データ作成の段階から質の高いモデル開発につなげることができます。

また、顧客との認識合わせや運用環境の理解、リスク管理など、初期段階での丁寧な対応がプロジェクトの成功につながります。

次回は、実際にモデルを選定したり、学習プロセスを進めていく際のポイントについてお話ししたいと思います。お楽しみに！