nvnnghia / multi-people-tracking

Multi people tracking using deep features
9 stars 1 forks source link

Version TF #1

Closed hongson23 closed 3 years ago

hongson23 commented 6 years ago

Hi Nghia,

Cho mình hỏi project này có chạy được trên TF 1.8 ?

hongson23 commented 6 years ago

Hi, i have one more question: How we can reuse libFeatureGetter.so and libtensorflow_framework.so ? I run make.sh in root folder source code and it seem to be compiled with TF which is installed on my local...

nvnnghia commented 6 years ago

libtensorflow_framework.so được tạo ra sau khi build tensorflow. libFeatureGetter.so được tạo ra sau khi run ./getFeature/make.sh. Mình đã thử dùng tensorflow1.3, 1.4. Các version khác mình không rõ. Ban xem them o day: https://github.com/oylz/DS

hongson23 commented 6 years ago

Chào bạn,

Ý mình muốn hỏi là có thể dùng được file thư viện .so mà bạn đã build để build application ko? Mình đang dùng TF 1.8 thì khi build featureGetter bị lỗi

nvnnghia commented 6 years ago

mình chưa thử.

hongson23 commented 6 years ago

Cảm ơn bạn, mình sẽ thử build lại dùng TF 1.4. Mình có thêm câu hỏi là fps khi runtime video là bao nhiêu?

nvnnghia commented 6 years ago

ờ. mình dùng Jetson TX2. Tốc độ phụ thuộc vào số lượng người trong video. Video cỡ 7 -10 người thì chạy được cỡ 7 -8 FPS. Nếu chạy trên PC thường thì sẽ nhanh hơn. Code đây chỉ có tracking thôi, phần detection mình chạy riêng rồi lấy kết quả lưu vào file trước rồi.

hongson23 commented 6 years ago

Ok, project của bạn đang chỉ tracking với data detection lấy từ MOT. Mình đã dùng yolo để detection và kết quả khá tốt (bắt được người với độ chính xác cao, fps=12 trên nvidia quadro 4000) nhưng mình đang gặp vấn đề về tracking.

Mình có tìm hiểu thì thấy có deep_sort dùng CNN training trên tập dữ liệu Market1501 and MARS datasets với cosine metric learning approach

Mình đọc code của bạn cũng thấy dùng cách tiếp cận này nhưng có thêm kcf tracker, bạn có thể nói thêm về cái này được không?

Additional infos: Mình dùng kcf thuần để tracking thì gặp vấn đề occlusion, dùng kalman filter thì gặp vấn đề về assignment lại giá trị id của object dẫn tới bị nhầm lẫn các object khi tracking (dùng giải thuật Hungarian). Mình thấy cách tiếp cận dùng CNN như của deep_sort để tracking khá hay và đang tiến hành training lại .pb file trên tập dữ liệu của mình.

Cảm ơn và trông đợi câu trả lời từ bạn!

nvnnghia commented 6 years ago

À, cái KCF mình chỉ để test thử thôi. Mình không nhớ chính xác nữa. Tại cái đây mình làm cũng khá lâu rồi. Mình đã làm rất nhiều version khác nhau. KCF nhanh hơn nhiều so với dùng CNN nên mình dùng kcf khi ko có occlusion và số lượng objects ở mức cho phép. CNN features chỉ dùng để hỗ trợ cho KCF khi các objects bị overlap lên nhau. Mình dùng code deep sort (python) thấy cũng khá ổn. Mình đã kết hợp cả detect và track dùng python tốc độ cũng ổn cỡ 10 fps trên jetson tx2. Một lưu ý khi dùng CNN features là phải chọn được features tốt và bỏ qua các features không tốt. Khi một người bị người khác (vật khác) che khuất thì features khi extract ra dễ gây nhiễu và làm id bị switch.

hongson23 commented 6 years ago

Cảm ơn bạn nhiều 👍 Mình có thêm mấy cấu hỏi mong được bạn trả lời

  1. Mình có run thử cái YOLO+deep_sort deep_sort_yolov3 thì kết quả tracking cũng không được tốt (giống như kết quả của 1 issue bên deep_sort), fps =5 (nvidia quadro 4000) hiện tại mình vẫn dùng file tt1.pb được train sẵn. ==> Bạn nói rằng "Mình đã kết hợp cả detect và track dùng python tốc độ cũng ổn cỡ 10 fps trên jetson tx2.", vậy bạn có thể cho biết bạn đã dùng cách tiếp cận nào ko?

  2. Bạn có lưu ý: "Một lưu ý khi dùng CNN features là phải chọn được features tốt và bỏ qua các features không tốt. Khi một người bị người khác (vật khác) che khuất thì features khi extract ra dễ gây nhiễu và làm id bị switch." mình hiểu cái này phải được lưu ý trong quá trình cosine metric learning ?

Cảm ơn và mong bạn hồi âm!

nvnnghia commented 6 years ago
  1. Mình dùng mobilenet SSD for detection. Cái này dùng split model into 2 parts. Phần nặng về tính toán (CNN) mình chạy trên GPU, phần nhẹ hơn mình chạy trên CPU. Mình dùng threading chạy song song. Mìn còn dùng kết hợp thêm KCF để hổ trợ cho detection (mình chỉ detect every n frame, các frame còn lại mình dùng KCF để tăng tốc độ). Ngoài mình còn dùng threading để xử lí song song giữa Detect và track.
  2. Theo mình hiểu, trong khi track thì mỗi đối tượng sẽ có một loạt các features đặc trưng, mỗi frame sẽ tạo ra 1 feature vector (1x128). Để xác định ID cho các đối tượng ở frame tiếp theo người ta sẽ dùng model được trained sẵn để trích vector đặc trưng A (1x128) và dùng min cosine distance với loạt các feature vectors của các đối tượng đã có để quyết định. Vậy nếu trong loạt các feature vectors này chỉ cần có một vector bị nhiễu mà vector này lại gần vector A thì sẽ xảy ra ID switch ngay (cái này xảy ra khá thường xuyên khi 2 người đi chéo qua lại nhau). Mình nghĩ có thể chọn các feature tốt dựa vào confidence score của detection hoặc cosine distance với loạt các vector đã có hoặc dựa vào độ overlap với các đối tượng trong cùng frame.

mình không còn làm về cái này nữa nhưng vẫn rất quan tâm. Bạn thử rồi update kết quả mình biết với nha.

hongson23 commented 6 years ago

Cảm ơn bạn 👍 ,

Mình sẽ thử và thông báo lại kết quả!