ailia-models
ailia-models copied to clipboard
Implement Deepsort vehicle
https://github.com/axinc-ai/ailia-models/issues/534
DETRACデータセットでのいくつかの評価

こちらの動画を処理してみようとしたのですが、featuresが0に落ちるのか、下記のエラーが発生しました。-e 0でCPUモードモードでも同様です。 https://pixabay.com/ja/videos/%E3%82%A2%E3%82%B8%E3%82%A2-%E3%82%BF%E3%82%A4-%E3%83%90%E3%83%B3%E3%82%B3%E3%82%AF-%E4%BA%A4%E9%80%9A-23712/
INFO deepsort_vehicle.py (137) : Start Inference...
print(features)
[[ 0.05745667 -0.12649673 -0.0398131 ... -0.10394365 -0.06650859
0.0497472 ]
[ 0. -0. -0. ... -0. -0.
0. ]
[ 0. -0. -0. ... -0. -0.
0. ]
...
[ 0. -0. -0. ... -0. -0.
0. ]
[ 0. -0. -0. ... -0. -0.
0. ]
[ 0. -0. -0. ... -0. -0.
0. ]]
[[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
...
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]]
[[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
...
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]]
[[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
...
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]
[ 0. -0. -0. ... -0. -0. 0.]]
Traceback (most recent call last):
File "deepsort_vehicle.py", line 367, in <module>
main()
File "deepsort_vehicle.py", line 363, in main
recognize_from_video(detector, extractor)
File "deepsort_vehicle.py", line 203, in recognize_from_video
tracker.update(detections)
File "../deepsort/sort/tracker.py", line 67, in update
self._match(detections)
File "../deepsort/sort/tracker.py", line 113, in _match
self.tracks, detections, confirmed_tracks)
File "../deepsort/sort/linear_assignment.py", line 138, in matching_cascade
track_indices_l, unmatched_detections)
File "../deepsort/sort/linear_assignment.py", line 58, in min_cost_matching
row_indices, col_indices = linear_assignment(cost_matrix)
File "/usr/local/lib/python3.7/site-packages/scipy/optimize/_lsap.py", line 93, in linear_sum_assignment
raise ValueError("matrix contains invalid numeric entries")
ValueError: matrix contains invalid numeric entries
自分のローカル環境(Windows)とgtune-titanマシン(192.168.51.142)にて実行しましたが、再現できませんでした。 (ailia v1.2.8)
scipy内部でのエラーのようですが、scipyをバージョンアップして解決しないでしょうか? (scipy 1.2.0 とscipy 1.4.1 で動作を確認)
SORTの処理内でのエラーで、ちょっと手におえそうにありません。
sort/liner_assignment.py https://github.com/axinc-ai/ailia-models/blob/master/object_tracking/deepsort/sort/linear_assignment.py#L54-L58
cost_matrix = distance_metric(
tracks, detections, track_indices, detection_indices)
cost_matrix[cost_matrix > max_distance] = max_distance + 1e-5
row_indices, col_indices = linear_assignment(cost_matrix)
で計算しているcost_matrixが np.any(np.isneginf(cost_matrix) | np.isnan(cost_matrix)) の条件に引っかかってエラーとなっているようですが、そのような問題が起こりえる箇所を特定できませんでした。
distance_metric() はsort/tracker.pyの gated_metric() が適用されています。 https://github.com/axinc-ai/ailia-models/blob/master/object_tracking/deepsort/sort/tracker.py#L93-L101
gated_metric() から呼び出しているself.metric.distance() は、 sort/nn_matching.pyの distance() となっていて、 https://github.com/axinc-ai/ailia-models/blob/master/object_tracking/deepsort/sort/nn_matching.py#L171-L174
こちらの self._metric() は、_nn_euclidean_distance() となっています。 https://github.com/axinc-ai/ailia-models/blob/master/object_tracking/deepsort/sort/nn_matching.py#L56-L74
gated_metric() から呼び出しているgate_cost_matrix() は、 https://github.com/axinc-ai/ailia-models/blob/master/object_tracking/deepsort/sort/linear_assignment.py#L181-L190 です。
計算過程で値がinfになったり、nanになったりするような箇所は見つかりませんでした。
print(features)をすると、features extractorの出力がNaNになっていることがエラーの原因のようです。-e 0を指定すると発生しないため、macOSのMPSのFP16の演算精度が不足していそうな印象です。
[array([ 0., -0., -0., -0., 0., -0., 0., -0., 0., -0., 0., 0., -0.,
0., 0., -0., -0., -0., 0., 0., -0., 0., -0., -0., -0., -0.,
-0., -0., 0., -0., -0., 0., -0., -0., 0., 0., -0., -0., 0.,
-0., -0., 0., 0., 0., -0., 0., -0., 0., -0., 0., -0., 0.,
-0., 0., 0., -0., 0., -0., -0., -0., -0., 0., 0., 0., 0.,
-0., -0., -0., 0., -0., -0., -0., -0., -0., 0., -0., nan, -0.,
-0., -0., 0., -0., -0., -0., -0., -0., -0., -0., 0., 0., -0.,
0., -0., 0., -0., 0., 0., -0., -0., 0., 0., 0., -0., 0.,
0., -0., -0., -0., -0., -0., 0., -0., -0., 0., -0., -0., 0.,
0., -0., 0., 0., -0., -0., 0., 0., -0., -0., 0.],
CUDAでも-eでFP16のbackendを指定すると発生するかもしれません。
ailia SDK 1.3.0でもFP16だと問題が発生する。 FP32が必要なモデルの模様。