私的AI研究会 > NCAppVol2

Neural Compute Application を作る 2

 OpenVINO™ ツールキットの学習済みモデルとサンプルプログラムを参考に Neural Compute Application を製作してみる。

※ 最終更新:2021/09/30 

人物追跡アプリケーション

 機械学習で画像から人物を検出し、人物のフレーム間での一致を調べて、追跡する。
しくみの解説ほかサイトから引用 → https://dev.classmethod.jp/articles/person-reidentification/

  

しくみ

 人物の追跡は、2つのモデルを組み合わせることで動作する。

学習済みモデル

識別情報のデータベース

 識別情報にインデックスを付けて、データベース化する。引用サイトによれば「適用する分野(動画の種類)に応じて、ロジックの変更が必要になる」とある。

  1. 高い類似度
     高い類似度でインデックスが得られた場合は、そのインデックスをそのまま利用すればい良い。
  2. 低い類似度
    低い類似度でインデックスが得られた場合、たまたま画像の類似性が低いだけなのか、それとも、別の人物なのかの判断が必要になる。
    類似性が低いというだけで単純にデータベースに追加してしまうと、同じ人物のインデックスが複数となってしまい、その後の判定に悪影響がある。
    データベースに位置情報を追加し、最後に検出された位置を記録している。類似度が低かった場合、その距離で、同一人物か、別人なのかを判定している。
    別人と判定された場合は、データベースにインデックスが追加される。
  3. データベース更新
    データベースの識別情報の更新にも注意が必要。
    フレームによっては、他の人物と重なっていたりして、その特徴をうまく表現できていない場合もある。
    他の人物と重なりがない場合のみ、その識別情報を更新することにしている。

動作環境

「person-tracking.py」

▼ 入力簡易版
▼「person-tracking.py」

「person-tracking2.py」

▲ モデル対応版
  • 実行時に利用できるコマンドオプション
    コマンドオプションデフォールト設定意味
    -h, --help-ヘルプ表示
    -i, --image../../Videos/video003.mp4カメラ(cam)または動画・静止画像ファイル
    -m_dt, --m_detector必須指定IR フォーマットの人物検出モデル
    -m_re, --m_recognition必須指定IR フォーマット人物識別モデル
    -d, --device必須指定デバイス指定 (CPU/MYRIAD)
    --threshold0.5人物検出レベル
    -s, --speedyスピード計測表示 (y/n)
    -o, --outnon処理結果を出力する場合のファイルパス
    $ python3 person-tracking2.py -h
    
    --- Person Tracking 2 ---
    4.5.2-openvino
    OpenVINO inference_engine: 2.1.2021.3.0-2787-60059f2c755-releases/2021/3
    
    usage: person-tracking2.py [-h] [-i IMAGE_FILE] [-m_dt M_DETECTOR]
                               [-m_re M_REIDENTIFICATION] [-d DEVICE]
                               [--threshold FLOAT] [-s SPEED] [-o IMAGE_OUT]
    
    optional arguments:
      -h, --help            show this help message and exit
      -i IMAGE_FILE, --image IMAGE_FILE
                            Absolute path to movie file or cam for camera stream.
      -m_dt M_DETECTOR, --m_detector M_DETECTOR
                            Detector Path to an .xml file with a trained
                            model.Default value is
                            /home/mizutu/model/intel/FP32/person-detection-
                            retail-0013.xml
      -m_re M_REIDENTIFICATION, --m_reidentification M_REIDENTIFICATION
                            Reidentification Path to an .xml file with a trained
                            model.Default value is
                            /home/mizutu/model/intel/FP32/person-reidentification-
                            retail-0287.xml
      -d DEVICE, --device DEVICE
                            Optional. Specify a target device to infer on. CPU,
                            GPU, FPGA, HDDL or MYRIAD is acceptable. The demo will
                            look for a suitable plugin for the device specified.
                            Default value is CPU
      --threshold FLOAT     Threshold for detection.
      -s SPEED, --speed SPEED
                            Speed display flag.(y/n) Default calue is 'y'
      -o IMAGE_OUT, --out IMAGE_OUT
                            Processed image file path. Default value is 'non'
  • 実行結果
    $ python3 person-tracking2.py
    
    --- Person Tracking 2 ---
    4.5.2-openvino
    OpenVINO inference_engine: 2.1.2021.3.0-2787-60059f2c755-releases/2021/3
    
    Person Tracking 2: Starting application...
       - Image File   :  ../../Videos/video003.mp4
       - m_detect     :  /home/mizutu/model/intel/FP32/person-detection-retail-0013.xml
       - m_redient.   :  /home/mizutu/model/intel/FP32/person-reidentification-retail-0287.xml
       - Device       :  CPU
       - Threshold    :  0.8
       - Speed flag   :  y
       - Processed out:  non
    -------------------
    1.0 (239,60)-(272,147)
    1.0 (519,148)-(561,231)
    1.0 (44,107)-(80,192)
    1.0 (333,136)-(364,213)
    1.0 (200,62)-(229,148)
    1.0 (298,188)-(348,316)
    1.0 (337,71)-(365,146)
    0.9 (432,76)-(460,155)
    0.9 (166,84)-(196,163)
    0.9 (309,73)-(340,147)
    0.9 (353,62)-(377,129)
    0.9 (450,141)-(495,247)
    0.8 (295,32)-(320,111)
    0.8 (257,152)-(297,238)
    ====================
    input: 14 DB:14
    persionId:0 0.9999999999999998 distance:0.0
    persionId:1 0.9999999999999996 distance:0.0
    persionId:2 0.9999999999999987 distance:0.0
    persionId:3 0.9999999999999986 distance:0.0
        :
        :
    persionId:6 0.24618593948520365 distance:20.248456731316587
    persionId:13 0.8072376997078758 distance:4.47213595499958
    persionId:0 0.8331106142710226 distance:5.0990195135927845
    persionId:7 0.14242560451747907 distance:14.142135623730951
    persionId:6 0.854265302201669 distance:3.0
    [ 9  7  5 10  2 12 11  4  6 13  0  7  6]
    [ 9  7  5 10  2 12 11  4  6 13  0 -1 -1]
    
    FPS average:       6.50
    
     Finished.
  • その他の実行例
    $ python3 person-tracking2.py -i ~/Videos/video001.mp4
    
    --- Person Tracking 2 ---
    4.5.2-openvino
    OpenVINO inference_engine: 2.1.2021.3.0-2787-60059f2c755-releases/2021/3
    
    Person Tracking 2: Starting application...
       - Image File   :  /home/mizutu/Videos/video001.mp4
       - m_detect     :  /home/mizutu/model/intel/FP32/person-detection-retail-0013.xml
       - m_redient.   :  /home/mizutu/model/intel/FP32/person-reidentification-retail-0287.xml
       - Device       :  CPU
       - Threshold    :  0.8
       - Speed flag   :  y
       - Processed out:  non
    -------------------
    1.0 (93,39)-(174,306)
    1.0 (230,46)-(321,361)
    0.9 (148,67)-(216,336)
    0.9 (209,45)-(268,290)
    ====================
    input: 4 DB:4
    persionId:0 0.9999999999999988 distance:0.0
    persionId:1 0.999999999999998 distance:0.0
    persionId:2 0.9999999999999991 distance:0.0
    persionId:3 0.9999999999999991 distance:0.0
    [0 1 2 3]
    [0 1 2 3]
        :
        :
    persionId:3 0.6374016092300142 distance:13.038404810405298
    persionId:2 0.7930883751295879 distance:6.0
    [0 1 3 2]
    [0 1 3 2]
    
    FPS average:      14.80
    
     Finished.
  • その他のコマンド入力例 (Command Helper)
    $ cd ~/workspace/demo
    ◦ CPU
    $ python3 person-tracking2.py -i ~/Videos/video001.mp4
    $ python3 person-tracking2.py -i ~/Videos/video002.mp4
    $ python3 person-tracking2.py -i cam
    ◦ NCS2(MYRIAD)
    $ python3 person-tracking2.py -m_dt ~/model/intel/FP16/person-detection-retail-0013.xml -m_re ~/model/intel/FP16/person-reidentification-retail-0287.xml -d MYRIAD
    $ python3 person-tracking2.py -i ~/Videos/video001.mp4 -m_dt ~/model/intel/FP16/person-detection-retail-0013.xml -m_re ~/model/intel/FP16/person-reidentification-retail-0287.xml -d MYRIAD
    $ python3 person-tracking2.py -i ~/Videos/video002.mp4 -m_dt ~/model/intel/FP16/person-detection-retail-0013.xml -m_re ~/model/intel/FP16/person-reidentification-retail-0287.xml -d MYRIAD
    $ python3 person-tracking2.py -i cam -m_dt ~/model/intel/FP16/person-detection-retail-0013.xml -m_re ~/model/intel/FP16/person-reidentification-retail-0287.xml -d MYRIAD
▼「person-tracking2.py」
▼「model.py」

更新履歴

 

参考資料

 

Last-modified: 2021-09-30 (木) 20:14:33