2020年12月28日月曜日

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

1. はじめに

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

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

なお、本ページの内容はWindowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できません。 ユーザー名に問題のある文字が含まれているかどうかはわかりにくいので、ページの途中で示す確認方法で確認してください。 この問題を回避するには、Windowsで名前がアルファベットと記号のみのユーザーを作り直すしかありませんのでご了承下さい。

2. Anacondaのインストール

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

まず、Pythonという言語で機械学習用のプログラムを実行する環境である Anaconda ダウンロードしてインストールしましょう。下記のリンクをクリックして Anaconda のダウンロード用ページにアクセスしてください。
ページを下にスクロールすると、下記のような内容が現れます。


64ビット版 Windows をご利用の場合、Python 3.9 用の「64-Bit Graphical Installer」をクリックします。なお、上図には macOS や Linux 用のリンクも見えます。ですから、それらの OS でも本ページの内容は実行可能なはずです。本ページの以下では Windows を例に実行方法の解説を行いますのでご了承ください。

ダウンロードが完了すると、「ダウンロード」フォルダなどに、下図のようなファイルが現れます。執筆時点で「Anaconda3-2022.05-Windows-x86_64.exe」でしたが、バージョンアップのたびに日付けの部分の数字が更新されていきます。ダブルクリックし、Anaconda のインストールを開始しましょう。


Anaconda のインストール用が画面が開きます。ここからは、「Next」ボタン1回、 「I Agree」ボタン1回、 「Next」ボタン2回、 「Install」ボタン1回、 「Next」ボタン2回、の順でボタンをクリックすることでインストールが完了します。途中で選択肢などを変更する必要はありません。


以下の画面が現れたら、「Finish」ボタンをクリックしてインストールを完了しましょう。


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


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

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

Anaconda のインストールが終わったら、スタートメニューの「A」の項目に下図のように「Anaconda3 (64bit)」という項目が増えています。
なお、Windows 11 の場合、このアルファベット順のアプリケーション一覧を表示するには、スタートメニュー上で「すべてのアプリ」を一度クリックする必要があります。
このうち「Anaconda Prompt (Anaconda3)」を選択して実行してください。


現れた下記の画面がプロンプトであり、ここでコマンド(命令)を実行することで、各種ツールのインストールを行います。プロンプトの冒頭は「(base) C:Users\(ユーザー名)」という内容が書かれています。「(ユーザー名)」の部分は人によって異なります。
本ページ冒頭で「Windowsのユーザー名に日本語文字や半角スペースなどが含まれていると実行できません」と述べましたが、このユーザー名の部分に日本語文字などを含んではいけない、という意味です。
日本語文字などを含んだまま先に進めてもうまくいきませんので、Windowsでに日本語文字を含まないユーザーを作り直すしかありません。 「Microsoftアカウント」でユーザーを作成すれば、登録したメールアドレスの先頭数文字がユーザー名となるため安全だと思います(メールアドレスには日本語文字は含まれないため)。



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


さて、プロンプト上で下記のコマンドを入力して実行して、「仮想環境」と呼ばれるものを作成します。「仮想環境」とは、Anacondaのデフォルトの環境とは別に、本ページ用の環境を作るために用います。なお、仮想環境に「tf2」という名称を付けていますが、これは「TensorFlow と呼ばれるディープラーニング用ツールのバージョン2を利用するための仮想環境」という意味で付けています。なお、仮想環境 tf2 で用いる Python のバージョンは 3.9 ではなく 3.8 としています。3.9 ではバージョンが新しすぎるため、トラブルがあるかもしれないと考えたためです。
conda create -n tf2 python=3.8
なお、以後長いコマンドが続きます。ブラウザ上で上のコマンドをコピーし、下図のようにプロンプトの左上のアイコンをクリックして現れるメニューから「貼り付け」を選択すればコマンドを楽に実行できます。


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



macOS に対するヒント
私の macOS 10.15 / 12.4 (Intel) で試したところ、下記のように python バージョン 3.7 を用いなければ、後のインストールがうまく行きませんでした。macOS の他のバージョンでは未確認です。

conda create -n tf2 python=3.7

なお、一度作ってしまった tf2 環境を削除してやり直したい場合、先頭が (base) のターミナルで下記を実行してください。

conda remove -n tf2 --all


仮想環境の作成が完了したら、下記のコマンドを実行して作成した仮想環境「tf2」に入ります。
conda activate tf2
その結果、下図の状態になります。プロンプトの行頭が「(base)」から「(tf2)」に変化しており、環境が「base」から「tf2」に変わったことがわかります。


そのままの状態で、下記のコマンドを実行して、本書に必要なツールをインストールしましょう。このコマンドは特に長いので、注意してコピーして実行しましょう。先ほどと同様、 「Proceed (y/[n])?」と聞かれたときはキーボードで「y」をタイプして「Enter」キーを押して作業を進めてください。
conda install pillow matplotlib py-opencv tensorflow keras numpy=1.19 spyder console_shortcut toml
最後に「done」と表示されれば、インストールは終了です。
なお、終了時に下記のようなデバッグメッセージが現れた場合も、最後に「done」と表示されていまsので、インストールは問題なく完了しています。
- DEBUG menuinst_win32:__init__(199): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\neura\anaconda3\envs\tf2', env_name: 'tf2', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(323): Shortcut cmd is %windir%\System32\cmd.exe, args are ['"/K"', 'C:\\Users\\neura\\anaconda3\\Scripts\\activate.bat', 'C:\\Users\\neura\\anaconda3\\envs\\tf2']
\ DEBUG menuinst_win32:__init__(199): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\neura\anaconda3\envs\tf2', env_name: 'tf2', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(323): Shortcut cmd is C:\Users\neura\anaconda3\pythonw.exe, args are ['C:\\Users\\neura\\anaconda3\\cwp.py', 'C:\\Users\\neura\\anaconda3\\envs\\tf2', 'C:\\Users\\neura\\anaconda3\\envs\\tf2\\pythonw.exe', 'C:\\Users\\neura\\anaconda3\\envs\\tf2\\Scripts\\spyder-script.py']
DEBUG menuinst_win32:create(323): Shortcut cmd is C:\Users\neura\anaconda3\python.exe, args are ['C:\\Users\\neura\\anaconda3\\cwp.py', 'C:\\Users\\neura\\anaconda3\\envs\\tf2', 'C:\\Users\\neura\\anaconda3\\envs\\tf2\\python.exe', 'C:\\Users\\neura\\anaconda3\\envs\\tf2\\Scripts\\spyder-script.py', '--reset']
done
インストールが完了すると、スタートメニューの「Anaconda3 (64bit)」の項目には下図のように「Anaconda Prompt (tf2)」や「Spyder (tf2)」が追加されています。 アイコンのデザインはインストール時期により異なります。
どちらも、仮想環境 tf2 で必要なツールです。「Anaconda Prompt (tf2)」は仮想環境 tf2 へツールをインストールしたいときに、「Spyder (tf2)」は仮想環境 tf2 でPythonプログラムを実行するときに用います。


以上で Anacondaのインストールと設定が終わりました。Anaconda Promptは右上の×ボタンで閉じて構いません。

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 でインストールしたツール群を用います。スタートメニューから、「Anaconda3 (64-bit)」→「Spyder (tf2)」を選択して tf2 環境の Spyder を起動しましょう。「(tf2)」がついた Spyder でないと実行に失敗しますので注意してください。なお、Spyderの初回起動時に「Kite」のインストールを促された場合、「無視 (Dismiss)」で構いません。

なお、Spyder (tf2) の初回の起動では、メニューなどが英語になっているかもしれません。その場合、 メニューから「Tools」→「Preferences」を選択し、現れたウインドウで「General (またはApplication)」→「Advanced settings」を選択してLanguageを日本語に設定してください。その際、再起動を促されますのでそれに従えばインターフェースが日本語になります。

macOS に対するヒント
macOS で tf2 環境の Spyder を実行するには、Anaconda Navigator で「Applications on」の部分で「tf2」を選択し、Spyder の Launch ボタンをクリックします。 または、ターミナルで
conda activate tf2
を実行してから
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 を実行してみましょう。先ほどと同様、tf2 環境用の 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. おわりに

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


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


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

0 件のコメント:

コメントを投稿