Re-identification　という名前の追跡手法

他の人が書いてくださっている参照記事の方が丁寧に有意義な記事になっています。

---
## 物体検出と物体追跡は、動画処理において対で必要になる技術です。

### 検出ができていても、フレーム間での関連付けが必要
どんなに理想的な物体検出があっても、フレームの前後で、対象物がどう関連付けられるのかという点で、物体の追跡技術は必要です。
（実際には、物体検出技術は全フレーム処理をするには重くなりがちで、処理を減らすためにも追跡を使うのが推奨されている。）

### 古い時代の対応付けは、とても簡単なものだった。
直前のフレームの枠と、今のフレームの枠との検出枠の重なり(IoU = Intersection over Unit) が大きい対応関係の方が、もっともらしいとする。
直前のフレームの枠と、今のフレームの枠との輝度ヒストグラムが似ている側の対応関係の方が、もっともらしいとする。
　いずれにしても、フレームの前後のでの検出枠の対応付けについては、従来はとても簡単なルールが用いられていることが多かったものでした。

### 追跡技術として、検出手法とは別の方法で、次のフレームでの枠を決定する手法
追跡技術が必要になる理由の１つは、一般に検出手法が、CPUパワーを使うものになりがちなので、それよりは少ない計算量で、次の枠の位置を決定しようとするものです。テンプレートマッチングを利用した追跡などは、その1例です。
　なにかの検出手法で検出した検出結果を追跡の開始位置として、テンプレートマッチングなどによって追跡するものです。


現在では、OpenCVのcontributeに多数の追跡の実装([multitracker.py](https://github.com/opencv/opencv_contrib/blob/master/modules/tracking/samples/multitracker.py))があるので、それらが使われることが増えています。

### 追跡対象の種類を限定したアルゴリズム
追跡アルゴリズムでは、対象物を特定しない追跡が大半ですが、中には対象物の種類を絞り込んだ追跡アルゴリズムがあります。
対象物の種類を特定することで、追跡後のフレームでの枠座標の精度が上がるようなものになっています。

ただ、それだけで、同一のカテゴリに対する対象物が複数あるときには、対応関係が正しくいくとは限りません。
#### 理由

- 実際のユースケースでは、対象物どうしの重なり、対象物の部分的な隠れなどが生じます。
- 実際のユースケースでは、追跡対象が、画面からフレームアウトしたあとに再び入ってくる。
- 実際のユースケースでは、人の場合、姿勢の変動や、向きによって着衣の見える部分の違い（表側と裏側での色の違いが大きい場合がある）

こういった理由のために、追跡が安定しない状況を生じやすいこ。


Re-identification　という手法では、
同一のカテゴリに属する複数の対象物があったときに、それぞれを区別して再度、同定しようとするものです。

[Person Re-Identificationとは](https://qiita.com/TodayInsane/items/818af421a224fa463c84#person-re-identification%E3%81%A8%E3%81%AF)　によく簡潔にされています。


Youtube [(23) OpenVINO™ toolkit -- Pedestrian tracking demo](https://www.youtube.com/watch?v=OKH57mvO9k0)

OpenVino [Pedestrian Tracker Demo ] (https://docs.openvinotoolkit.org/2018_R5/_samples_pedestrian_tracker_demo_README.html)

OpenVino [person-reidentification-retail-0079](http://docs.openvinotoolkit.org/2018_R5/_docs_Retail_object_reidentification_pedestrian_rmnet_based_0079_caffe_desc_person_reidentification_retail_0079.html)

github https://github.com/opencv/open_model_zoo/blob/master/demos/pedestrian_tracker_demo/main.cpp

上記のデモプログラムのmain.cpp です。
とても簡潔に書かれていることがわかります。
C++の最近の流儀の　std::unique_ptr　などが使われています。



---
顔の検出やre-identification に使用しているモデル

face-detection-retail-0004 
face-detection-adas-0001
face-reidentification-retail-0095.xml


https://github.com/opencv/open_model_zoo/blob/master/demos/python_demos/face_recognition_demo/README.md

Re-identification が必要な理由
顔照合技術は、服装や髪型に影響されない顔自体の特徴に基づいて人物を特定しようとする技術です。しかし、警備用のカメラで人の動きを複数のカメラにわたって追跡しようとする場合、顔照合技術では限界があります。
- 人の見え方によっては、そもそも顔が写っていないことがあり、顔照合技術ではどうしようもない。
- そのため、顔以外の部分の情報をもとに、人の同一性を判別しようとするものです。
- 服装は、連続した時間の中では同一の服装である可能性が高く、服装の色などをもとに同一性を判断することが求められます。
- 複数のカメラ間では、カメラの特性の違いのために、同じ人物の同じ服装であっても、カメラ上の色が違って見えることがあります。
- 色の類似性は、RGBの色座標系ではうまく扱いきれず、他の色座標系を使った方がいい場合があります。
- 色の類似性を論ずるにも、本当に人の着衣の部分の色を用いるのであって、背景部分の色に引きづられないことが大事になります。



参照記事：
[OpenVINO で Face re-identification (顔再識別)]
(https://qiita.com/kodamap/items/f47f53467d18b6d68e84)

[OpenVINO の Person-reidentification（人再認識）モデルを使って人を追跡する](https://qiita.com/kodamap/items/0fc97a541ab9128e109b)

[Person Re-Identificationで人物を追跡してみました](https://dev.classmethod.jp/articles/person-reidentification/)


[Face Re-Identificationで顔を追跡してみました](https://dev.classmethod.jp/articles/face-re-identification/)

[CVPR2019でPerson Re-Identificationの話をしている論文全てに1人で目を通す(加筆修正中)](https://qiita.com/TodayInsane/items/818af421a224fa463c84)