ラベル CNN の投稿を表示しています。 すべての投稿を表示
ラベル CNN の投稿を表示しています。 すべての投稿を表示

2020年12月28日月曜日

YOLOバージョン3をWindowsなどのPCで実行する

1. はじめに

(2026.5 動作確認済)
本書の6章で解説した物体検出を行う YOLO バージョン3をWindowsなどのPCで実行する方法を紹介します。 書籍でも触れたように、以下の理由があることから PC の取り扱いに慣れていない方は無理に実行しないことをお勧めします。
  • PC に 20 GB 程度の空き容量が必要であること
  • ツールのインストールにコマンド入力が必要であること
  • プログラムの実行方法が、プログラミングなどに慣れていないとハードルが高いこと
さらに、PCにはカメラ機能が必要です。ノートPCの場合、ディスプレイ上部についているカメラが使えることが多いです。それ以外には、USBで接続するタイプのウェブカメラを用いることができます。 このページでは動作確認したのは、ロジクール社のC270およびC920です。

本ページでは「××社の○○と言うカメラで動くか」という質問や「××社の○○と言うカメラで動くようにして欲しい」という要望には応えることができません。

なお、本ページの内容はWindowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できません。
ただし、最近は「Microsoftアカウント」でユーザーを作成することが多いので、この問題は起こりにくくなっています。 なぜなら、Microsoftアカウントでは登録したメールアドレスの先頭数文字がユーザー名となり、 メールアドレスには日本語文字や半角スペースは含まれないためです。

2. Anacondaのインストール

ここからは、 YOLO バージョン3 を実行するのに必要なアプリケーションやツールをインストールしていきます。

まず、Pythonという言語で機械学習用のプログラムを実行する環境である Anaconda ダウンロードしてインストールしましょう。

Anaconda のダウンロードは、こちらのページで「Skip registration」をクリックすることから始まります。
現れたページの末尾で下図のように「Windows 64-Bit Graphical Installer」をクリックし、インストール用のファイルをダウンロードします。


macOS に対するヒント
macOS 用は、M1/M2 チップなどの系列 (Apple silicon) 用の「64-Bit (Apple silicon) Graphical Installer」をダウンロードすることになります。
Intel 版 macOS を用いている方は、こちらより「Anaconda3-2025.06-1-MacOSX-x86_64.pkg」をダウンロードするのが良いと思います。
ただし、Apple silicon 用の macOS では PoseNet による姿勢推定を実行できませんのでご了承ください。


ダウンロードが完了すると、「ダウンロード」フォルダなどに、下図のようなファイルが現れます。動作確認時のファイルは「Anaconda3-2025.12-2-Windows-x86_64.exe」でしたが、バージョンアップのたびに日付けの部分の数字が更新されていきます。
このファイルをダブルクリックし、Anaconda のインストールを開始しましょう。
基本的には、現れた画面で促されるままに「Next」、「I Agree」、「Next」、「Next」、「Install」、「Next」、「Next」とボタンをクリックして行くだけです。
最後の画面は下図の通りですが、2つの選択肢のチェックを外し「Finish」ボタンを押しましょう。それでインストールが終了します。
なお、チェックを外し忘れると、Anaconda Navigator というアプリケーションが起動してしまいます。ここでは Anaconda Navigator の起動は不要なので 「×」ボタンなどで全て閉じてください。 「Quit Anaconda Navigator?」と聞かれたら「Don't show again」にチェックを入れて「Yes」をクリックします。 さらに、「Do you with to update to Anaconda Navigator x.x.x now?」 のように Anaconda Navigator をアップデートするか?と英語で聞くウインドウも現われることがありますが、 「No, don't show again」をクリックして無視してください。

「アップデートは自分の意志で行う」ものとし、Anaconda 等からアップデートを促されたときは基本的に無視する、という方針です。 これは、アップデートにより、動くべきものが動かなくなるリスクを避けるためです。

また、インストール中に下記のエラーが出る場合、冒頭で触れた「ユーザー名に問題のある文字が含まれている」場合になります。このまま先に進めてもうまくいきませんので、Windowsでに日本語文字を含まないユーザーを作り直すしかありません。
Error: Due to incompatibility with several Python libraries, 'Destination Folder' cannot contain non-ascii characters (special characters or diacritics). Please choose another location.
ただし、最近は「Microsoftアカウント」でユーザーを作成することが多いので、この問題は起こりにくくなっています。
なぜなら、Microsoftアカウントでは登録したメールアドレスの先頭数文字がユーザー名となり、メールアドレスには日本語文字や半角スペースは含まれないためです。

3. Anaconda へのディープラーニング用ツールのインストール

ここからは、Anaconda 上でディープラーニングを用いたプログラムを実行するためのツールをインストールします。

まず、スタートメニューから Anaconda を起動しましょう。 Windows 11 の場合、スタートメニューの右上にある「すべて」を一度クリックすると、 アルファベット順のアプリケーション一覧が表示されるので、 その「A」の項目から下図の「Anaconda (anaconda3)」という項目 (フォルダ) を見つけましょう。

そして、「Anaconda (anaconda3)」フォルダにある、「Anaconda Prompt」をクリックして実行しましょう。
なお、最新の Windows 11 に更新している場合は、スタートメニューは上図と異なる可能性があります。 その場合、まず下図のように「すべて」の「ビュー」を「一覧」に変更してください。
そうすると、アプリ一覧がアルファベット順で現われるので、下図のように「Anaconda (anaconda3)」フォルダにある、「Anaconda Prompt」実行しましょう。
ただし、 Windows 11 のバージョンによっては、Windows 11 のバグより、スタートメニューの項目がすぐには更新されない問題があります。 その場合、Windows 11 を再起動してからスタートメニューを探すことで、以下のような部分を見つけることができるでしょう。
現れた下記の画面がプロンプトであり、ここでコマンド(命令)を実行することで、各種ツールのインストールを行います。


macOS に対するヒント
macOS では、Anaconda Prompt のかわりに macOS のターミナルを使います。


プロンプトの冒頭には「(base) C:Users\(ユーザー名)」という内容が書かれています。「(ユーザー名)」の部分は人によって異なります。
本ページ冒頭で「Windowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できません」と述べましたが、このユーザー名の部分に日本語文字などを含んではいけない、という意味なのでした。

さて、プロンプト上で下記のコマンドを入力して実行して、「仮想環境」と呼ばれるものを作成します。「仮想環境」とは、Anacondaのデフォルトの環境とは別に、本ページ用の環境を作るために用います。なお、仮想環境に「tf」という名称を付けていますが、これは「TensorFlow と呼ばれるディープラーニング用ツールを利用するための仮想環境」という意味で付けています。なお、仮想環境 tf で用いる Python のバージョンは 3.8 としています。
conda create -n tf python=3.8
なお、以後長いコマンドが続きます。Windows 11 をお使いの方でしたら、ブラウザ上で上のコマンドをコピーし、Ctrl-V によりコマンドをプロンプトに貼り付ければ楽に実行できます。
Windows 10 のプロンプトでは Ctrl-V は効かないはずですので、下図のようにメニューから貼り付けます。


貼り付けが完了した状態が下図で、この状態で「Enter」キーを押すことで、コマンドを楽に実行できるわけです。
なお、処理が進むと「Continue creating environment (y/[n])?」や「Proceed (y/[n])?」などと聞かれますので、どちらの場合もキーボードで「y」をタイプして「Enter」キーを押して作業を進めてください。

macOS に対するヒント
macOS では、先頭に (base) と書かれたターミナルで、
conda create -n tf python=3.8
を実行すればよい。


仮想環境の作成が完了したら、下記のコマンドを実行して作成した仮想環境「tf」に入ります。
conda activate tf
その結果、下図の状態になります。プロンプトの行頭が「(base)」から「(tf)」に変化しており、環境が「base」から「tf」に変わったことがわかります。
そのままの状態で、下記のコマンドを実行して、本書に必要なツールをインストールしましょう。このコマンドは特に長いので、注意してコピーして実行しましょう。先ほどと同様、 「Proceed (y/[n])?」と聞かれたときはキーボードで「y」をタイプして「Enter」キーを押して作業を進めてください。
conda install pillow matplotlib py-opencv tensorflow keras numpy=1.24.3 spyder=5.5.1 console_shortcut toml
最後に「done」と表示されれば、この作業は成功です。

macOS に対するヒント
macOS (Apple silicon) では、下記のコマンドを用いてください。Intel 版の macOS では上記のコマンドままで構いません。
conda install pillow matplotlib py-opencv tensorflow keras numpy=1.24.3 spyder=5.5.1 toml


引き続き、同じプロンプトで下記を実行し、追加パッケージをインストールしましょう。
pip install opencv-contrib-python==4.10.0.84


macOS に対するヒント
macOS では、代わりに下記のコマンドにしてください。
pip install opencv-contrib-python==4.5.5.64


以上のインストールが完了すると、スタートメニューの「Anaconda (anaconda3)」の項目には下図のように「Spyder (tf)」や「Anaconda Prompt (tf)」が追加されています。ここで「Spyder (tf)」をクリックし、Spyder を起動しましょう。
ただし、Windows 11 のバージョンによっては、Windows 11 のバグより、スタートメニューの項目がすぐには更新されない問題があります。 その場合、Windows 11 を再起動してからスタートメニューを探すことで、以下のような部分を見つけることができるでしょう。 ここで「Spyder (tf)」をクリックし、Spyder を起動しましょう。
Spyderの起動時に、「Kite をインストール (Insall Kite)」とか「Start Tour」などという画面が現れたら、「無視 (Dismiss)」 を選択してください。
さらに、「Spyder x.x.x が利用可能です!」などというメッセージが出たら(英語の場合もあり得ます)、下図のように「起動時に更新をチェック」のチェックを外し、「いいえ」をクリックしてください。
Anaconda と同様、Spyder も更新しない方針だからです。
なお、仮想環境 tf 用のSpyder が起動して、インターフェースが日本語ではなかった場合、メニューから「Tools」→「Preferences」を選択し、現れたウインドウで「Application」→「Advanced settings」を選択してLanguageを日本語に設定してください。その際、再起動を促されますのでそれに従えばインターフェースが日本語になります。


4. YOLO バージョン 3 用のプログラムのダウンロードと設定

次に、YOLO バージョン 3 用のプログラムをダウンロードし、必要な設定を行います。こちらは、cedrickchee 氏が作成したプログラムに、カメラ映像に対する物体検出機能を筆者が追加したものです。
下図のようなページが開きますので、図にあるように「Code」ボタン→「Download ZIP」とたどり、プログラムの圧縮ファイルをダウンロードします。


ダウンロードされるのが下図(A)のtensorflow2-yolo-v3-master.zipです。このファイルを下図(B)のようにマウスで右クリックして「すべて展開」を選択します。現れたウインドウで「展開」ボタンをクリックし、圧縮ファイルを展開してください。圧縮ファイルのままでは本ページの演習を実行できません。
なお、右クリックメニューに「すべて展開」という項目がない場合、「展開」や「解凍」というキーワードを含む項目を選ぶと展開が進むことが多いでしょう。



次に、YOLO バージョン 3 用のパラメータ(重みやバイアス)が記されたファイルをダウンロードします。 下記の二つのファイルを、先ほど圧縮ファイルを展開することで現れた「tensorflow2-yolo-v3-master」フォルダ内の「data」フォルダに保存してください。
なお、多くの場合「tensorflow2-yolo-v3-master」フォルダ内の中にさらに「tensorflow2-yolo-v3-master」フォルダがあり、その中に「data」フォルダがありますが、その「data」フォルダで問題ありません。

以下では、この『「tensorflow2-yolo-v3-master」フォルダの中の「tensorflow2-yolo-v3-master」フォルダ』のことを『「tensorflow2-yolo-v3-master」フォルダ』と記しますのでご注意ください。

保存後の「data」フォルダの内容を示したのが下図です。このように、yolov3.weights と yolov3-tiny.weights がこの位置にないと YOLO バージョン 3 は実行できませんので注意してください。


5. YOLO バージョン 3 用の重みの変換

次に、重みの変換という作業を行います。ダウンロードした重みは、YOLO バージョン 3 の公式なファイルで、darknet というツールで用いるためのものです。ここでは、それを TensorFlow と呼ばれるツール用に変換します。

冒頭でインストールした Anaconda でインストールしたツール群を用います。既に解説した方法でスタートメニューから「Spyder (tf)」を選択して tf 環境の Spyder を起動しましょう。「(tf)」がついた Spyder でないと実行に失敗しますので注意してください。

macOS に対するヒント
macOS では、ターミナルで
conda activate tf
を実行してから
spyder
とコマンドで実行してください。


そして、メニューの「ファイル」→「開く」を選択し、「tensorflow2-yolo-v3-master」フォルダ内の「convert.py」というファイルを開きましょう。下図のようになります。


そして、メニューから「実行」→「実行」を選択します。少し時間がかかりますが、しばらくすると右下の領域に下図のように「weights saved」と表示されて変換が完了します。


上で実行したのは、YOLO バージョン 3 用の重みの変換でしたが、もう一つYOLO バージョン 3 の簡易版の重みも変換しておきましょう。簡易版は通常の YOLO よりも高速に動作するというメリットがあります。

先ほどのSpyderを閉じずにそのままメニューから「実行」→「ファイルごとの設定」を選択します。


現れた画面で下図のように「コマンドラインオプション」にチェックし、
--weights ./data/yolov3-tiny.weights --output ./checkpoints/yolov3-tiny.tf --tiny
と記述し、「OK」ボタンをクリックしてウインドウを閉じます。なお、下図では全体を表示するためにウインドウサイズを大きくしています。


そして、簡易版用の重みの変換を実行したいのですが、実行中のSpyderで二度目の「convert.py」を実行するためには、カーネルの再起動をする必要があります。下図のように、「カーネルの再起動」を選択してください。


すると、下図の確認画面が出るので「はい」をクリックしてください。


数秒待つと、下図のようにカーネルの再起動が成功します。


そして、もう一度メニューから「実行」→「実行」を選択します。少し時間がかかりますが、しばらくすると右下の領域に下図のように「weights saved」と表示されて変換が完了します。実行後にエラーが出る場合、Spyderを一度再起動したから再実行すればエラーが出なくなると思います。
先ほどのコマドラインオプションの記述は、プログラム「convert.py」を、YOLO の簡易版用のオプションを付けて実行することの指定だったのです。


以上が正しく実行されると、「tensorflow2-yolo-v3-master」フォルダ内の「checkpoints」フォルダに存在するファイルは以下のようになっているはずです。この状況になったら先に進むことができます。



5. カメラからの映像に対して YOLO を実行する

以上で準備が整いましたので、最後にカメラからの映像に対して YOLO を実行してみましょう。先ほどと同様、tf 環境用の Spyder でメニューの「ファイル」→「開く」を選択し、「tensorflow2-yolo-v3-master」フォルダ内の「detect.py」というファイルを開きましょう。

そして、そのままメニューから「実行」→「ファイルごとの設定」を選択し、開いたウインドウで下図の2点の設定をします。すなわち、
  • 「外部システムターミナルで実行」をチェック
  • 「コマンドラインオプション」にチェックし、
    --webcam
    
    と記述
です。設定が終わったら「OK」ボタンをクリックしてウインドウを閉じます。


そして、メニューから「実行」→「実行」を選択します。PCに接続されたカメラ(ディスプレイ上部のカメラかUSB接続のカメラ)から映像が取得され、物体検出した結果が上書きして表示されます。


このプログラムを終了するには、上図の映像の上で、キーボードの「q」キーをタイプします。

以上が YOLO バージョン 3 の動作です。YOLO は計算量が多いため、高速ではない PC では映像が滑らかに変化しなかったかもしれません。その場合、YOLO の簡易版 (YOLO v3 Tiny) も試してみると良いでしょう。 再び「実行」→「ファイルごとの設定」を選択し、開いたウインドウで下図の設定をします。先ほどとの違いは下記の通りです。
  • 「コマンドラインオプション」の内容が、
    --weights ./checkpoints/yolov3-tiny.tf --tiny --webcam
    
設定が終わったら「OK」ボタンをクリックしてウインドウを閉じます。


そして、再びメニューから「実行」→「実行」を選択します。簡易版のコマンドラインオプションを付けたことにより YOLO の簡易版が動作し、先ほどよりも滑らかに映像が変化するはずです。ただし、そのぶん認識率は悪くなっています。YOLO の通常版では手に持った物体も検出できましたが、簡易版では手に持った物体はなかなか検出されませんでした。そのため、下図では物体を机に置いた状態を表示しました。

このプログラムを終了するには、先ほどと同様に映像の上でキーボードの「q」キーをタイプします。


なお、通常版と簡易版のYOLOのどちらを用いるにせよ、PCに接続した複数のカメラをどちらか一方を指定したい場合があります。例えばノートPCにUSB接続のウェブカメラを接続した場合、「ディスプレイの上のカメラ」と「USB接続のカメラ」の2つの選択肢があります。 カメラを指定するには、Spyder で開かれた「detect.py」の下記の部分(57行目付近)に着目します。


「cap = cv2.VideoCapture(0)」の中の数字「0」はカメラのIDに相当します。ノートPCの場合、多くの場合「ディスプレイの上のカメラ」が数字「0」に対応します。「USB接続のカメラ」を利用したい場合、ここを数字「1」に変更してください。入力の際、日本語入力モードはオフにしておくよう注意しましょう。そして「detect.py」を上書き保存しプログラムを実行すると、「USB接続のカメラ」での実行となるはずです。

6. おわりに

以上の演習が終わった方のために、もう一つ、姿勢推定を行う演習も用意しました。余力のある方はトライしてみてください。


また、以上でインストールしたツールは、約 20 GB 程度のストレージを使用しています。Anaconda をもう利用しないという場合、下図のようにコントロールパネルから削除してしまうのが良いでしょう。 さらに、ダウンロードした圧縮ファイル「Tensorflow-YOLOv3-master.zip」および展開したフォルダ「Tensorflow-YOLOv3-master」も削除して構いません。


以上、お疲れさまでした。

2020年4月23日木曜日

姿勢推定を行うPoseNetをWindowsなどのPCで実行する

1. はじめに

(2026.5 動作確認済)
「YOLOバージョン3をWindowsなどのPCで実行する」 では、Windows などの PC に Anaconda というディープラーニング実行用の環境をインストールし、物体検出を行う YOLO の動作を確認して頂きました。

Anaconda のインストールにはそれなりに手間がかかりましたので、YOLOだけの実行では物足りないと感じる方もいるかもしれません。そこで、本ページでは追加の演習として、姿勢推定を行う PoseNet を Anaconda 上で実行する方法を紹介します。余力のある方は試してみてください。

姿勢推定とは、下図のように映像から人間の目、鼻、関節などの位置を推定する技術のことを言います。なお、通常では、姿勢推定は人間が映った映像を対象とします。下図ではプライバシーに配慮して絵に対する認識結果の表示としましたのでご了承ください。


2. TensorFlow Lite 用の環境 tflite の作成

姿勢推定を行う PoseNet は、公式ページでブラウザ上でのデモが紹介されているほか、TensorFlow Lite というツール上で実行可能です。

TensorFlow Liteとは、モバイルデバイス向けにディープラーニングによる推論の機能を提供するものです。主に Android、iOS、Raspberry Pi など用に(正確には ARM プロセッサ用に)最適化されています。それをここでは Windows などの PCで実行しようというわけです。ただし、TensorFlow Lite は PC 向けには最適化されていないようで、動作は高速ではありません。その点はご了承ください(参考)。

「YOLOバージョン3をWindowsなどのPCで実行する」では、TensorFlow バージョン2用に Anaconda 上で tf という環境を作成して演習を実行しました。ここでは新たに TensorFlow Lite 用に tflite という環境を作成し、そこで TensorFlow Lite をインストールしてから演習を実行するという流れになります。

「YOLOバージョン3をWindowsなどのPCで実行する」の演習を済ませ、Anaconda のインストールが済んだ状態で以下の解説に進んでください。

それでは、TensorFlow Lite のインストールを行いましょう。まず、お使いの PC に合わせて、下記のファイルをダウンロードします。なお macOS は Intel 版のみの対応で、M1/M2チップ系 (Apple silicon) には対応しておりませんのでご了承ください。
以下では、Windows 版 を用いて解説しますのでご了承ください。

上でダウンロードしたファイルは、通常は「ダウンロード」フォルダなどに保存されます。 このファイルを、Windows のエクスプローラを用いて「C:\Users\(ユーザー名)」というフォルダに移動しましょう。

「C:\Users\(ユーザー名)」とは、Anaconda Prompt において下図の赤線部に示されている内容です。図ではユーザー名は「neura」ですが、もちろん皆さんの環境では異なります。皆さんも Anaconda Prompt を起動して「C:\Users\(ユーザー名)」が自分の環境ではどうなっているか把握しましょう。


では、Windowsでは「C:\Users\(ユーザー名)」にどうやってたどり着けるでしょうか。それを示したのが下図です。まず、エクスプローラーで左の階層構造から「PC」を選択して展開し、その中にある「C:」という文字を含む項目をクリックします。図では「Windows (C:)」と書かれていますが、「Windows」という文字の部分は人により異なるので「C:」を手掛かりにするのです。これを「Cドライブ」と言います。


上図(左)のように「ユーザー」というフォルダが見つかるはずですので、ダブルクリックして開きます。

すると、上図(右)のように先ほど確認したユーザー名のフォルダが見つかります(図では「neura」)。それをさらにダブルクリックして開きましょう。

その結果、下図のように「ダウンロード」、「デスクトップ」、「ドキュメント」…などがあるフォルダにたどり着きます。 ここが、「C:\Users\(ユーザー名)」という場所になります。

ここに、先ほどダウンロードした tflite_runtime-2.....whl という長い名前のファイルを移動してください。下図のようになります。


さて、以上でダウンロードして場所を移動したファイルをインストールする作業に入りましょう。 まず、スタートメニューの「Anaconda (anaconda3)」から「Anaconda Prompt」を選択して起動し、以下の4つの命令を一つずつ順に実行していきます。

これは、「YOLOバージョン3をWindowsなどのPCで実行する」で実行した内容と似ていますが、今回は TensorFlow Lite 用の環境 tflite を新たに作成している点が異なります。
「YOLOバージョン3をWindowsなどのPCで実行する」で学んだ「命令のコピーと、Anaconda Prompt への貼り付け」を思い出し、命令を一つずつ確実に実行してください。
conda create -n tflite python=3.8

conda activate tflite

conda install py-opencv pip spyder=5.5.1 console_shortcut toml

pip install tflite_runtime-2.5.0-cp38-cp38-win_amd64.whl
1つ目と3つ目の実行時には「Proceed ([y]/n)?」と確認を求められますが、「キーボードで y を入力して Enter」または「キーボードでEnter」により処理が進みます。
2つ目の命令を実行すると、プロンプトの先頭が「(tflite) C:\Users\neura>」のように「(tflite)」に変化しますので確認しましょう。tflite という環境に入ったことを意味します。
4つ目の命令が正しく成功すると「Successfully installed tflite_runtime-2.5.0」と表示されます。

macOS に対するヒント
macOS の場合、4つ目の命令は
pip install tflite_runtime-2.5.0-cp38-cp38-macosx_10_15_x86_64.whl
のように適切に読み替える必要があります。


すべて終わったら Anaconda の環境 tflite への TensorFlow Lite のインストールが完了しました。Anaconda Prompt は閉じて構いません。 さらに、先ほど「C:\Users\(ユーザー名)」という場所にエクスプローラーで移動した tflite_runtime-2.....whl というファイルは削除して構いません。

3. 姿勢推定を行う PoseNet の準備と実行

姿勢推定のプログラムを圧縮したファイル「project-posenet-master.zip」を こちらのページ にあるボタンを「Code」→「Download ZIP」とたどることでダウンロードしてください。

ダウンロードする場所はどこでも構いません。プログラムを置きたい場所を自分で選んでください。

ダウンロードした「project-posenet-master.zip」を右クリックして「すべて展開」を選択し、「展開」ボタンをクリックすることで、 圧縮ファイルを展開します。以上で準備は完了です。

展開したファイルを実行するため、スタートメニューの「Anaconda (anaconda3)」から「Spyder (tflite)」をクリックして起動します。必ず「(tflite)」と記されたものを選択するようにしましょう。TensorFlow Lite をインストールした tflite 環境で動作する Spyder を起動するわけです。

起動した Spyder (tflite) のメニューの「ファイル」→「開く」より、先ほど展開したフォルダをたどって 「project-posenet-master」→「pose_camera_cpu_cv.py」を開きます。似たような名前のファイルがたくさんあるので、間違わずに選択しましょう。

そして、メニューの「実行」→「ファイルごとの設定」で 「コンソール」を「外部システムターミナルで実行」に変更します。さらに「一般設定」で「コマンドラインオプション」にチェックし、
--res 480x360
を記入して「OK」ボタンを押します。

最後に、「実行」→「実行」で実行します。本ページ冒頭に示したように映像中の人物に骨格が上書き表示された画面が開くはずです。

macOS に対するヒント
macOS の場合、「--res 1280x720」でしか正常動作しませんでした


冒頭で述べたように Windows用の TensorFlow Lite が遅いため、480x360 という低解像度の画像で認識を行い、 結果を 640x480 の画像に書き出しています。プログラムを終了するには、映像上でキーボードの q をタイプしてください。

なお、「コマンドラインオプション」に記す内容を、下記のように「--mirror」を追加したものに変更すると、現れる映像が鏡のように左右反転され、直感的に理解しやすい映像となりますのでお好みでご利用ください。
--res 480x360 --mirror 


4. PoseNet の出力の解説

最後に、PoseNet が人間の姿勢を推定する方法の概略を解説します。

PoseNet では、人間の姿勢(Pose)が下図の17個のキーポイント(keypoint)で構成されていると考えます。それぞれのキーポイントが、画像中のどの場所に存在するかを考えるわけです。


そのために、各キーポイントに対して下図のようなヒートマップ(heatmap)を考えます。本書6章で解説した YOLO のように、ヒートマップは画像をグリッドに区切ったものです。グリッドは横方向にNx個、縦方向にNy個あるものとします。例えば、640x480の画像に対しては Nx=41、Ny=31 という値が用いられます。

このヒートマップの各グリッドに対し、対応するキーポイントが存在するときに高い値をとる「スコア」という数値を割当てます。それにより、例えば「鼻(nose)のヒートマップのスコアが最大値をとるグリッドの位置に鼻がある」とみなせるようになります。


しかし、ヒートマップのグリッドは例えば 640x480 の画像に対して 41×31 個しかないのですから、 そのままでは推定されたキーポイントの位置は精度の低い粗いものとなってしまいます。

そこで、キーポイントの位置を補正して精度を上げるため、下図のようなオフセットベクトル(offset vector)が定義されます。下図のように、各グリッドの位置は飛びとびの粗いものですが、各グリッドから本当のキーポイント(図では鼻)の位置へのベクトル (x, y) を割当てるのです。


そのようなベクトルを各キーポイントの各グリッドに割り当てると下記のようになります。ベクトルには x 成分と y 成分の 2 つがありますから、オフセットベクトルの数値は Nx×Ny×17×2 個になります。


ここまでをまとめると、以下の個数の数値が必要となります。
  • ヒートマップ : Nx×Ny×17 個
  • オフセットベクトル : Nx×Ny×17×2 個
この個数の数値を、出力層のニューロンに出力させます。YOLO と同様に、この出力層を畳み込みニューラルネットワーク(CNN)の出力部に接続するのです。

もし画像中に人間が一人しかいなかったら、「キーポイントごとにヒートマップが最大値をとるグリッドをみつけ、オフセットベクトルで補正する」という操作により、すべてのキーポイントが得られ、姿勢(Pose)が確定します。これを Single-Pose Estimation Algorithm (一つの姿勢を推定するアルゴリズム)といいます。

一方、画像中に複数の人間がいる場合は少し複雑で、Multi-Pose Estimation Algorithm(複数の姿勢を推定するアルゴリズム)が必要になります。その最初の方針は Single-Pose Estimation Algorithumと変わらず、各キーポイントごとのヒートマップを調べ、値が大きなグリッドの位置をキーポイントの候補と見なします。問題は、各キーポイントのヒートマップごとに候補位置が複数見つかり、それを一人一人の人間ごと(Pose ごと)にまとめるのが難しいことです。例えば「A さんの鼻と B さんの目をつなぐ」ということが起こり得ます。

この問題を解決するため、変位ベクトル(displacement vector)という考え方が利用されます。

まず、下図のように各キーポイントを結ぶ 16 本の線分を考えます。これらをエッジと言います。エッジは、認識画像に表示される黄色の線分とは異なり、変位ベクトル用に特別なつなぎ方を考えます。

そして、各エッジに2つの方向の矢印(ベクトル)を考えます。2つのベクトルを区別するために、鼻(nose)から遠ざかる方向を前向き(forward)、鼻に近づく方向を後ろ向き(backward)と呼ぶことにします。これらが変位ベクトル(displacement vector)です。


そして、一つのベクトルを見たときに、その始点をソースキーポイント、終点をターゲットキーポイントと呼びます。


以上の準備のもと、複数人のキーポイントの候補から、一人の人間のキーポイントの候補をまとめる方法は以下のようになります。

まず、ヒートマップが大きな値をとるグリッドをもとに、一つキーポイントの位置を決めます。そのキーポイントを上図のソースキーポイントと考えたときに、 変位ベクトルをたどってターゲットキーポイントの位置を得ます。これを、16本のエッジを前向きと後向きの両方向にたどることで、 一つのキーポイントの位置から17個のキーポイントの位置を数珠つなぎ状に得ることができます。これを Fast Greedy Decoding (高速で欲張りなデコード)といいます。

ヒートマップが大きい一つのキーポイントから出発して残り16個のキーポイントの位置を一気に得てしまうことから Greedy (欲張り)と言われます。 また、ニューロンの出力から人間の姿勢(Pose)を得ることをデコードと言います。

以上を実現する変位ベクトルは、下図のように Nx×Ny×16×2×2 個の数値から構成されます。これらの数値も、出力層のニューロンから出力されます。


以上、PoseNet がどのような出力をもち、そこから人間の姿勢をどのように再構成するかの概略を解説しました。より詳しく知りたい方は、英語ですが 以下を参照してください。