全10173文字
PR

Linuxはサーバーによく使われているのに加え、Windowsのようにパソコン用OSとしても利用できる。過去に挑戦して断念したことがある人も無理なく学べるように、ステップアップ式でLinuxを解説する。

Step 43 AIを使って人の顔を正確に検出する方法

 AI(人工知能)を使った顔検出の方法は数多く、主には(1)特徴量を人間が設計する手法、(2)特徴量を大量のデータからディープラーニングで学習する手法の二つがあります。「特徴量」とは、AIの分野では予測の手がかりとなる重要な数字のことです。例えば顔検出のような画像処理の分野では、「縦のシマが多い」「特定の色が多い」といった情報が特徴量となります。今回は、上記の二つの手法を実際に試して比較してみましょう。

 顔検出に使う特徴量として有名な「ハールライク(Haar-like)特徴量」を使った手法を紹介します。ハールライク特徴量は、画像の明暗差を特徴として抽出する特徴量です。具体的には図1のようなパターンを用いて明暗差を抽出します。

図1 ハールライク特徴量の抽出に使われるパターン
図1 ハールライク特徴量の抽出に使われるパターン
引用元:「第3回 オブジェクト検出してみよう」(https://gihyo.jp/dev/feature/01/opencv/0003、皆川 卓也、技術評論社)
[画像のクリックで拡大表示]

 ディープラーニングでの顔検出手法は、ニューラルネットワークを使って図2のように大量の顔データを学習することで実現します。特徴量は人が設計するのでなく、ニューラルネットワークの学習により教師データから自然に獲得されます。

図2 ニューラルネットワークの学習方法
図2 ニューラルネットワークの学習方法
引用元:「からあげ先生のとにかく楽しいAI自作教室」(からあげ、日経BP)
[画像のクリックで拡大表示]

 実際にAI顔検出の環境を構築して試してみましょう。PCに接続したUSBカメラの映像からリアルタイムに顔検出を実行します。環境構築の手順は読者限定サイトに資料を用意しました。ダウンロードして参照してください。

※「https://nkbp.jp/nlinux」で2023年3月号のページを開き、「●読者限定サイトと訂正・補足は<こちら>」からアクセス。IDは「linux」、パスワードは「download」。

 環境を構築できたら、次に示すコマンドで二つの手法を実行し、顔検出を体感してみましょう。

[画像のクリックで拡大表示]

 筆者の環境では両方とも50ミリ秒以下で推論できました。画像のリサイズなどの条件が異なり、正確に比較しているわけではないため、ここでは手法による速度差は重視しないでください。

 試しに宇宙人の仮面を被って顔検出性能を比較してみました。ハールライク特徴量では全く検出できませんでした(図3)が、ディープラーニングでは正しく検出できました(図4)。宇宙人の顔が検出できたからといって顔検出の性能が良いとは限りませんが、手法によって顔検出できるケースとできないケースが大きく違うことが理解できるでしょう。

図3 ハールライク特徴量で顔検出している映像
図3 ハールライク特徴量で顔検出している映像
[画像のクリックで拡大表示]
図4 ディープラーニングを使って顔検出している映像
図4 ディープラーニングを使って顔検出している映像
[画像のクリックで拡大表示]

 実際にUSBカメラを使い、顔を横に向けたり、一部を隠してみたりすると、より性能の違いを実感できて面白いと思います。