OpenCV4.5 に加わった深層学習ベースのtrackingを調査中
OpenCV4.5 のリリースノートによれば、深層学習ベースのtracking が加わっている。
Real-time Single Object Tracking using Deep Learning: #17647
にそのPRがある。
そのtrackingの利用した追跡結果の動画は、PRが述べるように下記のgoogle driveにある。
https://drive.google.com/drive/folders/1k7Z_SHaBWK_4aEQPxJJCGm3P7y2IFCjY?usp=sharing
この追跡動画のうち、カメラの視点が固定していて、対象物以外が動いていないものの方が追跡が成功しやすい。
追跡がさらに難しいのは、カメラ自体も動いている上で、対象物も動いているものだ。しかも、対象物の見え方がフレームとともに変わっていくものは難しい。他にも、追跡中に対象物が他の物体によって部分的に隠れてしまうものも、難しい種類の追跡だ。そういう難しい種類の追跡を行えている。
opencv/samples/dnn$ python siamrpnpp.py -h
usage: siamrpnpp.py [-h] [--input_video INPUT_VIDEO] [--target_net TARGET_NET]
[--search_net SEARCH_NET] [--rpn_head RPN_HEAD]
[--backend {0,1,2,3}] [--target {0,1,2,3}]
Use this script to run SiamRPN++ Visual Tracker
optional arguments:
-h, --help show this help message and exit
--input_video INPUT_VIDEO
Path to input video file. Skip this argument to
capture frames from a camera. (default: None)
--target_net TARGET_NET
Path to part of SiamRPN++ ran on target frame.
(default: target_net.onnx)
--search_net SEARCH_NET
Path to part of SiamRPN++ ran on search frame.
(default: search_net.onnx)
--rpn_head RPN_HEAD Path to RPN Head ONNX model. (default: rpn_head.onnx)
--backend {0,1,2,3} Select a computation backend: 0: automatically (by
default) 1: Halide2: Intel's Deep Learning Inference
Engine (https://software.intel.com/openvino-toolkit)3:
OpenCV Implementation (default: 0)
--target {0,1,2,3} Select a target device: 0: CPU target (by default)1:
OpenCL2: OpenCL FP163: Myriad (default: 0)
pdf SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks
上の図の横軸は追跡処理のfps、縦軸はEAO(Expected Average Overlap)であり、フレーム間の追跡の良さを表す指標らしい。よい追跡アルゴリズムほど、この図の右上に位置する。
このアルゴリズムでは、target_net と search_net の2つのネットワークのモデルを指定する。
(ちなみに, Siamese neural network というのは双子のネットワーク構造をさしているそうだ。)
--target_net TARGET_NET
--search_net SEARCH_NET
この中で引数で指定するモデルファイルは、opencv のリポジトリの中には含まれていない。これらモデルファイルの入手元は、
siamrpnpp.py のスクリプトの中に記載されている。
Link to original paper : https://arxiv.org/abs/1812.11703
Link to original repo : https://github.com/STVIR/pysot
You can download the pre-trained weights of the Tracker Model from https://drive.google.com/file/d/11bwgPFVkps9AH2NOD1zBDdpF_tQghAB-/view?usp=sharing
You can download the target net (target branch of SiamRPN++) from https://drive.google.com/file/d/1dw_Ne3UMcCnFsaD6xkZepwE4GEpqq7U_/view?usp=sharing
You can download the search net (search branch of SiamRPN++) from https://drive.google.com/file/d/1Lt4oE43ZSucJvze3Y-Z87CVDreO-Afwl/view?usp=sharing
You can download the head model (RPN Head) from https://drive.google.com/file/d/1zT1yu12mtj3JQEkkfKFJWiZ71fJ-dQTi/view?usp=sharing
用語集
RPN: Resion Proposal Network
VOT2018: https://www.votchallenge.net/vot2018/dataset.html
試行錯誤中
今のところ、次のようなエラーに出くわしていて、動作を検証できていない。
python siamrpnpp.py --input_video 動画ファイル名 --target_net target_net.onnx --search_net search_net.onnx --rpn_head rpn_head.onnx
Traceback (most recent call last):
File "siamrpnpp.py", line 397, in <module>
main()
File "siamrpnpp.py", line 370, in main
rpn_head = cv.dnn.readNetFromONNX(args.rpn_head)
cv2.error: OpenCV(3.4.11) /tmp/pip-req-build-s_7n4j7p/opencv/modules/dnn/src/onnx/onnx_importer.cpp:261: error: (-204:Requested object was not found) Blob input_1 not found in const blobs in function 'getBlob'
付記
従来の追跡アルゴリズムでは、特定の対象物(例、人・顔、自動車)に限定した追跡アルゴリズムだったりすることがあった。また別の追跡アルゴリズムでは、与えた初期の枠指定に対して特徴の拾い出して、その特徴に近い領域を追跡するものある。
特定の対象物に限定した追跡アルゴリズムでは、その対象物に固有の対象物らしさを元に次のフレームでの位置を求めるものが多い。かつては、追跡アルゴリズムという名で、探索領域を絞り込んだだけの検出アルゴリズムだったことが多い。
初期の枠指定に対して特徴の拾い出すタイプの追跡アルゴリズムでは、テンプレートマッチングを使っているものが多かった。ただ、テンプレートマッチングを使っているものでは、追跡のフレームを経ていくごとに、元の特徴とは似ても似つかぬものになってしまいやすいという欠点があった。
以下のサイトにオリジナルの実装がある。
他にもこの組織のgithub アカウントには興味深いものが公開されている。
ぜひ一読をすすめる。
Author And Source
この問題について(OpenCV4.5 に加わった深層学習ベースのtrackingを調査中), 我々は、より多くの情報をここで見つけました https://qiita.com/nonbiri15/items/1de70e7e0f756a01c719著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .