私的AI研究会 > PyTorch2

PyTorch ではじめる AI開発 2

 「使用シーンが限定される AI」を PyTorch を使って作成し機械学習の手順を実行してみる。

※ 最終更新:2021/10/20 

CHAPTER 02 定点カメラの映像を認識する

 PC に接続したカメラデバイスを定点カメラとして運用して、カメラの視界に人物が写っているかを判定する AI を作成する。
 ニューラルネットワークのトレーニング(学習)と、作成したニューラルネットワーク(学習済みモデル)を使用してカメラからの映像をリアルタイムで認識するプログラムを作成する。

SECTION-004 学習データを準備する

サンプルのデータセットの準備

 下記の場所からダウンロードできる。

● Kaggle からダウンロードするには、Kaggle のアカウントを作成する必要がある。
https://www.kaggle.com/ にアクセスしてアカウント登録後上記サイトにアクセスする。

forest-path-movie-dataset (GitHubより)

 このデータセットについて

データセットの展開と配置

学習データの作成手順

著者の用意したデータセットを利用することで、下記の時間のかかる作業を省略した。

  1. カメラを設置して録画
    ・定点カメラを設置する予定の場所に、カメラを設置して動画を撮影する。
    ・録画には実際に認識したい物体(人物など)が写っているシーンが含まれている必要がある。
    ・屋外設置のカメラの場合は気象条件など撮影条件の変化の影響を受けるのでできるだけ長い時間で時間帯などを変えながら複数の撮影を行う。

  2. シーンを動画に分割
    ・動画内の目的の物体が写っているシーンを一続きの部分として時間を指定して切り出す。
    ・物体の写っていないシーンも連続して写っていない短い動画として切り出す。
    (例)シーン動画「movie1.mp4」30秒時点から40秒時点までの10秒間をを「scene001.mp4」として切り出す場合
    $ ffmpeg -ss 30 -i movie1.mp4 -t 10 scene001.mp4

  3. 動画から画像を抽出 ・シーンごとごとにディレクトリを作成し シーン動画内すべてのフレームを jpeg ファイルとしてそのディレクトリに書き出す。
    (例)シーン動画「scene001.mp4」のフレームをディレクトリ「scene-001」下に保存する場合
    $ mkdir scene-001
    $ ffmpeg -i scene001.mp4 -f image2 scene-001/%03d.jpg

  4. 撮影した動画内のすべてのシーンに対して上記の処理をする。
    ・全シーンに対応するディレクトリを作成したら「scenes」ディレクトリ内に保存する。

  5. データのタグ付け ・各シーン内のファイルに対する正解データ「all_file.csv」を作成する。
    ・データフィールドは「画像ファイル名」「シーンの名称」「物体が写っているか(0 or 1)」「撮影時間帯」
    ・撮影時間帯は明るさによる認識率の違いを判定するために使用し、日中・夕方・夜間の時間帯に対応して「daytime」「twilight」「midnight」とする。
    $ vi all_file.csv
    file,scene,person,when
    scenes/scene-001/000.jpg,scene-001,0,daytime
    scenes/scene-001/001.jpg,scene-001,0,daytime
    scenes/scene-001/002.jpg,scene-001,0,daytime
    scenes/scene-001/003.jpg,scene-001,0,daytime
        :

使用するデータセット

SECTION-005 PyTorch による学習

学習プログラムの作成

※ 畳み込みニューラルネットワークの全結合層は、使用するモデルによって入力数や変数の名前が異なる。
 モデルの入力数や名前は TorchVision のソースコード を参照のこと。

学習プログラムの実行

SECTION-006 認識用プログラムの作成

認識用プログラムの作成

認識用プログラムの実行

(py37) mizutu@ubuntu-vbox:~/workspace_py37/chapter02$ python3 chapt02_2a.py 
[W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware.
Exception in Tkinter callback
Traceback (most recent call last):
  File "/home/mizutu/anaconda3/envs/py37/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "/home/mizutu/anaconda3/envs/py37/lib/python3.7/tkinter/__init__.py", line 749, in callit
    func(*args)
  File "chapt02_2a.py", line 68, in updateFrame
    frame = frame[:,:,::-1]
TypeError: 'NoneType' object is not subscriptable

認識用プログラムを作り直す

OpenVINO™ を利用する

 以下の手順で変換した学習モデルはうまく動作していない。2021/09/05
 正常に動作する手順は → OpenVINO™ を利用する(ONNXモデルコンバート検証)

Pytorch の学習済みモデルを ONNX フォーマットに変換

ONNX フォーマットを IR フォーマットに変換

OpenVINO™ で認識プログラムを実行

更新履歴

参考資料

 

Last-modified: 2021-10-20 (水) 19:45:08