こんにちは、AITCでデータサイエンティストをしている小川です。普段は、様々な企業様から預かったデータの統計的な分析や、AIモデル構築をする業務に携わっています。
画像認識の1つである物体検出において、AIをビジネス適用する際の流れを題材に、以下を解説していきます。
- AIモデルで物体検出ができるか検証するまでにどのようなステップがあるのか
- 各ステップにおいてどんなことに気を付ける必要があるのか
想定読者
ビジネス上でAIを使って物体検出をしたいという社会人の方
物体検出の大変なところ、成功させるためにどんなことを意識しておく必要があるのかを知っていただければ幸いです。
データサイエンティストに興味のある学生/社会人の方
この記事は物体検出の内容となりますが、他のAI事例にも当てはまることも多いため、AIをビジネス利用する際にデータサイエンティストがどんなことを考えているのかを感じていただければ幸いです。
物体検出AIとは
そもそも物体検出とは、画像中に存在する物体の位置、種類、個数などを認識する技術です。 医療、製造業など幅広い分野で活用されています。 皆さんが持っているスマホのカメラに搭載されている顔検知機能も物体検出のひとつです。
物体検出AIに一般的な定義はないですが、この記事ではCNN(Convolutional Neural Network)などの深層学習モデルを使用して物体を検出するAIを、物体検出AIとします。
物体検出AIのビジネス利用に向けた手順
一般的に、物体検出AIは、以下の図のような4つのステップで構築されます。
- 画像収集:検出したい物体が写った画像を収集
- アノテーション:検出したい物体が写る場所に目印を付与
- AIモデル学習:物体が写る画像と目印を入力して物体が写るときの特徴をAIに学習
- AIモデル検証:物体の特徴を正しくとらえているのか検証
上記4ステップでAIモデル構築を進めていきますが、AIモデル検証をした結果、画像収集からやり直すこともあります。
4つのステップを1つずつ順番に解説していきます。
画像収集
人や犬、車など、一般的な物体を検出するAIモデルは、すでに学習されたモデルが公開されていたり、Azureなどのコグニティブサービスで簡単に利用可能であるなど、改めて画像の収集が必要になることはほとんどありません。 しかし、例えばある企業の特定の製品を物体検出したいなどのケースでは、そのような物体を検出するために学習されたAIモデルが存在しないため、画像を収集してAIモデルを学習させる必要があります。
画像を収集する際に気を付けるべき点が2つあります。 それは画像の量と質です。
画像の量
様々な状況下である程度の検出精度を出すには、1種類の物体に対して画像枚数で1500枚以上、写る物体の個数で10000個以上の画像データが必要があると言われています[1]。もちろん絶対に必要というわけではなく、あくまでも目安です。 例えば、画像1枚あたり5個検出したい物体が写っている場合、2000枚の画像があると、写る物体の個数が2000×5=10000個となり、上記の条件を満たす画像データが準備できます。 では、画像1枚あたり10000個検出したい物体が写っている場合、画像1枚でいいのかというとそうではありません。画像の枚数もある程度必要になります。なぜかというと、次に示すように検出したい物体の写り方のパターンを考える必要があるためです。
本質的に重要なのは、画像の枚数や物体の個数ではなく、検出したい物体の写り方のパターンをどれだけ網羅できているかです。 例えば以下図のように、物体の向きが異なると、それは異なるパターンとして画像を準備する必要があります。 向き以外にも例えば、背景や明るさなどのパターンも考慮する必要があります。 画像枚数が少ないと、いくら物体が多く写っていても背景や明るさなどのパターンが少なくなります。 また、写る物体の個数が少ないと、物体の向きなどのパターンが少なくなります。 つまり、画像の枚数と物体の個数のどちらかが極端に少ないと、物体の写り方のパターンを網羅できないため、画像の枚数及び物体の個数どちらも一定以上の数は必要になります。 データの多様性についてのこちらの記事も参考にしてみてください。 aitc.hatenablog.com
画像の質
画像の量がいくら多くても、画質が悪い画像であれば物体検出AIモデルは正しく学習できません。 少なくとも、人間の目で見て物体検出ができる画質でないと、検出はかなり難しくなります。 物体の大きさによるため、どれくらいという目安はないですが、物体が小さい場合、カメラはできるだけ性能のよいものを準備しておく必要があります。 カメラで撮影したものをネットワーク経由でクラウドなどにアップロードする場合は、ネットワーク環境も整備する必要があります。 カメラ自体の画質は良いが、ネットワーク帯域の問題で、画質が劣化してしまっては元も子もありません。 少なくとも動画の場合HD品質が求められます。
アノテーション
画像を収集した後は、アノテーションを行います。 アノテーションとは、以下のように画像中の検出したい物体に目印を付けることです。 物体を四角の枠で囲み、それが何の物体なのかを記録します。
画像1枚あたり10秒かかり画像が10000枚あるとすると、アノテーションに約27時間かかります。 1日8時間ずっとアノテーションをしても、3日以上かかります。 それくらいアノテーションは大変な作業です。
正しくないアノテーションを付けられた画像を使用すると、AIモデルは間違った学習を行ってしまうため、アノテーションが正しく付けられているか確認する必要があります。 作業者が複数いて、相互確認するとさらに多くの時間を要します。
正しくないアノテーションとは例えば以下の例があります。
- 物体が写っているがアノテーションが付けられていない
- 物体が写っている箇所と囲った四角に隙間がある
- 物体が囲った四角からはみ出ている
- そもそも間違ったラベルが付けられている(ネコなのにイヌとラベル付けされた)
AIモデル学習
アノテーションが終了したら、ようやくAIモデルの学習を行えます。 物体が写っている場合、画像に形や色などにこういう法則があるんだなというのを、AIモデルに学習させます。 複雑な計算が必要なため、モデルの学習には数時間必要なことが多いです。 画像の枚数が多く、複雑なモデルを用いた場合は、数十時間必要なこともあります。
モデル選択
AIモデルと一口にいっても様々な種類があります。
- 大きい物体の検出は得意だが、小さい物体の検出は苦手なモデル
- 小さい物体や物体同士が近い場合でも検知しやすいモデル
重要な要素の一つとして、モデルのパラメータ数があります。 パラメータ数は、人間で例えるならば脳の神経細胞の数です。 一般的に赤ちゃんよりも大人のほうが脳の神経細胞の数が多く、複雑な処理ができることでしょう。 AIモデルでも同じでパラメータ数が多いほど、複雑な処理ができるため物体検出精度が高いです。 しかし、複雑な処理をするため計算時間がかかります。 検出にリアルタイム性が求められる場合は注意が必要です。 物体検出精度を高めるためにパラメータ数が多いAIモデルを使用すると、精度と引き換えに計算時間がかかります。 ビジネス要件に応じて、適切なパラメータ数のモデルを選択する必要があります。
AIモデル検証
AIモデル学習に使用していない画像を使用して、AIモデルがどれくらいの精度で物体検出できるか検証します。 より具体的には、物体が写っていると判定するために正しい法則を学習できたか確認します。
検証する際に使用する画像のパターンを、なるべく多く用意します。 パターンとは、例えば写る物体の向きなどが当てはまります。つまり、左向き、正面、右向きなど想定される様々なパターンの画像で検証しましょうということです。 なぜ画像のパターンを多く用意するかというと、ある特定のパターン(例えば物体が右向き)でのみ精度が高いモデルになっていないか確認するためです。 ある特定のパターンでのみ精度が高く、他のパターンで精度が劣化する場合は画像を追加で収集するなどの対策が必要になります。
解釈性
AIモデルの検証をする際に重要な概念が1つあります。 それはAIモデルの解釈性です。 一般的にAIモデルは何か画像を入力すれば、ここに何々という物体がありますと出力をするだけで、どのように判断してその結果に至ったのか教えてくれません。 そこで頼りになるのが解釈性です。 例えば、以下のように画像のこの部分を見て、ここに何々という物体がありますと判断したことを知ることができます。
この図で赤くハイライトされた箇所が、AIモデルが物体検出した際に注目した箇所です。 猫を正しく注目していることがわかります。 どのように赤くハイライトするかは解釈性を表示するモデルにより細かいところは異なりますが、簡単に言うとAIモデルのパラメータ(人間で言うところの脳の神経細胞)が活性化している箇所をハイライトしています。
解釈性を見る必要性
解釈性を見ることで、AIモデルが変な誤解をして学習していないか確認して、問題があればどのようなデータの見直しをする必要があるかのヒントを得ることができます。 以下は、解釈性を見ることで、データの偏りによってAIモデルが変な誤解をして学習していることがわかる一例です。
図の例は、画像からdoctorかnurseを分類する画像分類というタスクを、AIモデルで実際した結果と解釈性を表しています。 (物体検出ではないですが、本質的なところは物体検出でも変わらないです。) 上段はnurseの画像、下段はdoctorの画像であり、左から入力画像、間違った学習をしたAIモデルが注目していた箇所、正しく学習したAIモデルが注目していた箇所を表しています。
真ん中の列の結果は、間違った学習をさせるために、あえて学習データにdoctorの画像として男性が写る画像を多く使用して、nurseの画像として女性が写る画像を多く使用しています。 すると、doctorかnurseかを判定する際に、AIモデルが変な誤解をして、doctorの特徴は男性、nurseの特徴は女性といったように性別を重要視します。 実際に赤くハイライトされている場所は人の顔や髪であり、女性という特徴があるためnurseと予測しています。
この結果から、doctorの特徴は男性、nurseの特徴は女性といった変な誤解を解消するためには、学習データに性別の偏りがないように、画像収集から工夫をすればよいという次の方針を決めることができます。 実際に画像の性別の偏りをなくすと、図の右列のように正しく分類がされdoctorと判定するために聴診器と白衣を見て、nurseと判定するために半袖を見ていることがわかります。 (ちなみに診察・処置の邪魔になるため半袖にしているらしいです)
最後に
この記事では画像データに対するAI、特に物体検出AIを利用する際の手順を4ステップで解説しました。 あくまでも筆者の経験則であるため、すべてを網羅しているわけではありませんが、大枠は捉えていると思っております。 データサイエンティストの仕事の雰囲気を感じてとっていただければと思います。 少しでも記事を読んでくださったみなさんの参考になれば幸いです。
参考文献
[1] Tips for Best Training Results · ultralytics/yolov5 Wiki · GitHub
[2] Ramprasaath R. Selvaraju et.al., Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization, IJCV 2019.
執筆
AIコンサルティンググループ
小川 裕也