{"id":487327,"date":"2026-07-15T06:00:02","date_gmt":"2026-07-15T06:00:02","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=487327"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=487327","title":{"rendered":"\u041f\u0435\u0440\u0435\u043d\u0451\u0441 ByteTrack \u043d\u0430 GPU \u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u043b \u043c\u0443\u043b\u044c\u0442\u0438-\u043a\u0430\u043c\u0435\u0440\u043d\u044b\u0439 \u0442\u0440\u0435\u043a\u0438\u043d\u0433 \u0432 6 \u0440\u0430\u0437"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u041a\u0430\u043a \u044f \u0432\u0437\u044f\u043b \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0442\u0440\u0435\u043a\u0438\u043d\u0433-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b \u0435\u0433\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u0432\u0441\u0435\u0445 \u043a\u0430\u043c\u0435\u0440 \u043e\u0434\u043d\u0438\u043c GPU-\u0431\u0430\u0442\u0447\u0435\u043c \u2014 \u0438 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435 \u0442\u0440\u0438\u0436\u0434\u044b \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b \u043d\u0430 \u0433\u0440\u0430\u0431\u043b\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u043c\u0443, \u043a\u0442\u043e \u043f\u0438\u0448\u0435\u0442 real-time \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b \u043d\u0430 PyTorch.<\/em><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/1f4\/c13\/b8f\/1f4c13b8f89277dffa26dc99821dd5cf.png\" alt=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 vs \u0431\u0430\u0442\u0447\u0435\u0432\u044b\u0439\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/1f4\/c13\/b8f\/1f4c13b8f89277dffa26dc99821dd5cf.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/1f4\/c13\/b8f\/1f4c13b8f89277dffa26dc99821dd5cf.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 vs \u0431\u0430\u0442\u0447\u0435\u0432\u044b\u0439<\/figcaption><\/div>\n<\/figure>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: N \u043a\u0430\u043c\u0435\u0440 = N \u0442\u0440\u0435\u043a\u0435\u0440\u043e\u0432 = \u0433\u0440\u0443\u0441\u0442\u043d\u044b\u0439 CPU<\/h3>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u0438\u0434\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438: \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 GPU, \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 8\u201332 RTSP-\u043f\u043e\u0442\u043e\u043a\u0430, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 YOLO \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043b\u044e\u0434\u0435\u0439\/\u043c\u0430\u0448\u0438\u043d\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u0435\u043d \u0442\u0440\u0435\u043a\u0438\u043d\u0433 \u2014 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 ID \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043e\u0442 \u043a\u0430\u0434\u0440\u0430 \u043a \u043a\u0430\u0434\u0440\u0443.<\/p>\n<p>\u0421 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0435\u0439 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e: YOLO \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0431\u0430\u0442\u0447\u0438\u0442\u0441\u044f, 16 \u043a\u0430\u0434\u0440\u043e\u0432 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u043e\u043c. \u0410 \u0432\u043e\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u0412\u0441\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 Python-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430 \u2014 BoxMOT, Norfair, roboflow\/trackers, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0442\u0440\u0435\u043a\u0435\u0440 ultralytics \u2014 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e: <strong>\u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0432\u0438\u0434\u0435\u043e, \u0432\u0441\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043d\u0430 CPU<\/strong>. \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0446\u0435\u043f\u0442 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u043c\u0435\u0440 \u2014 \u00ab\u0437\u0430\u0432\u0435\u0440\u043d\u0438\u0442\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u0430\u043c\u0435\u0440\u0443 \u0432 \u0441\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a\/\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u00bb.<\/p>\n<p>\u041d\u0430 2\u20134 \u043a\u0430\u043c\u0435\u0440\u0430\u0445 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430 16 \u2014 \u0444\u0438\u043b\u044c\u0442\u0440 \u041a\u0430\u043b\u044c\u043c\u0430\u043d\u0430, IoU-\u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u043a\u0430\u043c\u0438 \u0441\u044a\u0435\u0434\u0430\u044e\u0442 \u044f\u0434\u0440\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c YOLO \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: \u0432 \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 16 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 ByteTrack \u043d\u0430 CPU \u0441\u0442\u043e\u044f\u0442 <strong>104 \u043c\u0441 \u043d\u0430 \u043a\u0430\u0434\u0440<\/strong> \u2014 \u043f\u0440\u043e\u0442\u0438\u0432 6 \u043c\u0441 \u043d\u0430 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044e. \u0422\u0440\u0435\u043a\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u043b\u0435\u0433\u0447\u0435 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0430\u00bb, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u044b\u043c \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e\u043c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043a\u0440\u043e\u0441\u0441-\u043a\u0430\u043c\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0442\u0447\u0438\u043d\u0433\u043e\u043c \u2014 NVIDIA DeepStream (nvtracker). \u041d\u043e \u044d\u0442\u043e GStreamer-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d, C+\u00b1\u043f\u043b\u0430\u0433\u0438\u043d\u044b, YAML-\u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0435 \u044f\u0434\u0440\u043e \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u2014 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0432\u0435\u0441\u043e\u0432\u0430\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f, \u0435\u0441\u043b\u0438 \u0432\u0435\u0441\u044c \u0432\u0430\u0448 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u043d\u0430 Python. (\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u2014 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.)<\/p>\n<p>\u0417\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: <strong>\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c DeepStream, \u043d\u043e <\/strong><code><strong>pip install<\/strong><\/code><strong> \u0438 \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 PyTorch<\/strong>. \u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <a href=\"https:\/\/github.com\/sweetlhare\/BatchGpuByteTrack\" rel=\"noopener noreferrer nofollow\">BatchGpuByteTrack<\/a>.<\/p>\n<h3>\u0418\u0434\u0435\u044f: \u0442\u0440\u0435\u043a\u0435\u0440 \u043a\u0430\u043a \u0431\u0430\u0442\u0447\u0435\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435: \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 ByteTrack \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0431\u0430\u0442\u0447\u0438\u0442\u0441\u044f \u043d\u0435 \u0445\u0443\u0436\u0435 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438.<\/p>\n<ul>\n<li>\n<p><strong>Kalman predict\/update<\/strong> \u2014 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043c\u0430\u0442\u0440\u0438\u0446 (8\u00d78). \u0422\u044b\u0441\u044f\u0447\u0430 \u0442\u0440\u0435\u043a\u043e\u0432 \u2014 \u044d\u0442\u043e \u0442\u0435\u043d\u0437\u043e\u0440 <code>[1000, 8, 8]<\/code>, \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 <code>torch.einsum<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u044b\u0441\u044f\u0447\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 numpy.<\/p>\n<\/li>\n<li>\n<p><strong>IoU cost-\u043c\u0430\u0442\u0440\u0438\u0446\u044b<\/strong> \u2014 \u043f\u043e\u043f\u0430\u0440\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043a\u0441\u043e\u0432. \u0412\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u0430\u043a\u0443\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d padded-\u0442\u0435\u043d\u0437\u043e\u0440 <code>[S, M_max, N_max]<\/code> \u2014 \u043e\u0434\u043d\u043e \u044f\u0434\u0440\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>ReID-\u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438<\/strong> \u2014 \u043a\u0440\u043e\u043f\u044b \u0432\u0441\u0435\u0445 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0439 \u0432\u0441\u0435\u0445 \u043a\u0430\u043c\u0435\u0440 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0431\u0430\u0442\u0447 \u0434\u043b\u044f OSNet.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 CPU \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0430 CPU: \u0432\u0435\u043d\u0433\u0435\u0440\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c (<code>lap.lapjv<\/code> \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u0445 \u00ab\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00d7\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00bb \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u2014 GPU-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 LAP \u043e\u043a\u0443\u043f\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043d\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0435) \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0442\u0440\u0435\u043a\u043e\u0432.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440: \u043e\u0434\u043d\u0430 \u0431\u0430\u0442\u0447\u0435\u0432\u0430\u044f GPU-\u0444\u0430\u0437\u0430 (predict + IoU + OSNet) \u2192 \u043e\u0434\u043d\u0430 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 CPU \u2192 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c \u2192 \u043e\u0434\u043d\u0430 \u0431\u0430\u0442\u0447\u0435\u0432\u0430\u044f GPU-\u0444\u0430\u0437\u0430 (update). \u0412\u0435\u0441\u044c \u0442\u0440\u0430\u0444\u0438\u043a CPU\u2194GPU \u2014 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e bulk-\u043a\u043e\u043f\u0438\u0439 \u043d\u0430 \u043a\u0430\u0434\u0440, \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0435\u0435 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u043a\u0430\u043c\u0435\u0440.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u2014 \u0447\u0435\u0441\u0442\u043d\u044b\u0439 ByteTrack: \u0442\u0440\u0438 \u0441\u0442\u0430\u0434\u0438\u0438 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0444\u0438\u0440\u043c\u0435\u043d\u043d\u043e\u0435 \u00abBYTE\u00bb-\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043d\u0438\u0437\u043a\u043e\u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0441\u043d\u044b\u043c \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044f\u043c), \u0441\u0442\u0430\u0434\u0438\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0442\u0440\u0435\u043a\u043e\u0432, \u0442\u0435 \u0436\u0435 \u043f\u043e\u0440\u043e\u0433\u0438. \u041f\u0430\u0440\u0438\u0442\u0435\u0442 \u0441 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d \u0442\u0435\u0441\u0442\u0430\u043c\u0438.<\/p>\n<h3>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0430\u043b\u0438\u0441\u044c \u0433\u0440\u0430\u0431\u043b\u0438<\/h3>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043d\u043e \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435: \u043d\u0430 16 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 GPU-\u0432\u0435\u0440\u0441\u0438\u044f \u043e\u0431\u0433\u043e\u043d\u044f\u043b\u0430 CPU \u0432\u0441\u0435\u0433\u043e \u0432 1.2 \u0440\u0430\u0437\u0430. \u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u043e\u043b\u0451\u0442\u043e\u0432 \u0432\u044b\u043b\u0438\u043b\u0441\u044f \u0432 \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.<\/p>\n<h4>\u0413\u0440\u0430\u0431\u043b\u0438 \u21161: \u00ab\u0431\u0430\u0442\u0447\u0435\u0432\u044b\u0439\u00bb \u043a\u043e\u0434 \u0441 \u0446\u0438\u043a\u043b\u043e\u043c \u043f\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c<\/h4>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 \u0436\u0430\u043d\u0440\u0430. Kalman <em>predict<\/em> \u0431\u044b\u043b \u0443\u0436\u0435 \u0431\u0430\u0442\u0447\u0435\u0432\u044b\u043c \u2014 \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u043a\u043e\u0432 \u0432\u0441\u0435\u0445 \u043a\u0430\u043c\u0435\u0440. \u0410 Kalman <em>update<\/em> \u2014 \u043d\u0435\u0442:<\/p>\n<pre><code class=\"python\"># \u0434\u043e: \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u2014 \u0441\u0432\u043e\u0439 upload, kernel \u0438 downloadfor stream_id in range(num_streams):    means, covs, meas = collect_matched(stream_id)          # CPU    means_t = torch.from_numpy(means).to(device)            # upload \u00d716    upd_means, upd_covs = kalman.batch_update(means_t, ...) # kernel \u00d716    results[stream_id] = upd_means.cpu().numpy()            # download \u00d716<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>16 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u2014 48 \u043c\u0435\u043b\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 GPU \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440. \u041a\u0430\u0436\u0434\u0430\u044f \u2014 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445: \u0437\u0430\u043f\u0443\u0441\u043a \u044f\u0434\u0440\u0430, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f, PCIe-\u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f.<\/p>\n<p>\u041b\u0435\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043c\u0430\u0442\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u044b <strong>\u0432\u0441\u0435\u0445<\/strong> \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d \u0442\u0435\u043d\u0437\u043e\u0440:<\/p>\n<pre><code class=\"python\"># \u043f\u043e\u0441\u043b\u0435: \u043e\u0434\u0438\u043d upload, \u043e\u0434\u0438\u043d kernel, \u043e\u0434\u0438\u043d download \u2014 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432entries, means, covs, meas = collect_matched_all_streams()upd_means, upd_covs = kalman.batch_update(stack(means), stack(covs), stack(meas))scatter_back(entries, upd_means.cpu().numpy())<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u0430\u043f \u0443\u043f\u0430\u043b \u0441 <strong>11.8 \u043c\u0441 \u0434\u043e 1.6 \u043c\u0441<\/strong>. \u0422\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0451\u043c \u0434\u043b\u044f IoU-\u043c\u0430\u0442\u0440\u0438\u0446 (padded-\u0431\u0430\u0442\u0447 <code>[S, M_max, N_max]<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0438\u043a\u043b\u0430) \u0441\u043d\u044f\u043b \u0435\u0449\u0451 5 \u043c\u0441:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/de2\/7e3\/013\/de27e3013b1eb9a1f8815048a1bd6636.png\" alt=\"\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/de2\/7e3\/013\/de27e3013b1eb9a1f8815048a1bd6636.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/de2\/7e3\/013\/de27e3013b1eb9a1f8815048a1bd6636.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/d59\/f28\/c2c\/d59f28c2cf3934d21ca08ce35e2c1d4d.png\" alt=\"\u0422\u0440\u0438 \u0448\u0430\u0433\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/d59\/f28\/c2c\/d59f28c2cf3934d21ca08ce35e2c1d4d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/d59\/f28\/c2c\/d59f28c2cf3934d21ca08ce35e2c1d4d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0440\u0438 \u0448\u0430\u0433\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u043e\u0440\u0430\u043b\u044c: \u0435\u0441\u043b\u0438 \u0432 \u00abGPU-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u043c\u00bb \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c <code>for<\/code> \u043f\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\/\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0441 <code>.to(device)<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u2014 \u044d\u0442\u043e \u043d\u0435 GPU-\u043a\u043e\u0434, \u044d\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0432\u0435\u0440\u0445\u0435\u0434\u0430.<\/p>\n<h4>\u0413\u0440\u0430\u0431\u043b\u0438 \u21162: \u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u043d\u0430 1.6 \u0413\u0411\/\u0441 \u043f\u0440\u0438 \u0448\u0438\u043d\u0435 \u0432 25<\/h4>\n<p>\u0414\u043b\u044f ReID \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0434\u0440\u044b \u043d\u0430 GPU. \u041c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e: \u0437\u0430\u043b\u0438\u0432\u043a\u0430 16 \u043a\u0430\u0434\u0440\u043e\u0432 720p (44 \u041c\u0411) \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 <strong>26.7 \u043c\u0441<\/strong> \u2014 \u044d\u0442\u043e 1.6 \u0413\u0411\/\u0441 \u043f\u0440\u0438 PCIe 4.0, \u0443\u043c\u0435\u044e\u0449\u0435\u0439 ~25.<\/p>\n<p>\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 pageable-\u043f\u0430\u043c\u044f\u0442\u044c: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <code>torch.from_numpy(arr).to('cuda')<\/code> \u0438\u0437 numpy-\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 staging-\u0431\u0443\u0444\u0435\u0440 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. \u041b\u0435\u0447\u0435\u043d\u0438\u0435 \u2014 \u0441\u0432\u043e\u0439 \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0439 pinned-\u0431\u0443\u0444\u0435\u0440:<\/p>\n<pre><code class=\"python\">buf = torch.empty(F, H, W, 3, dtype=torch.uint8, pin_memory=True)  # \u043e\u0434\u0438\u043d \u0440\u0430\u0437...for i, frame in enumerate(frames):                       # \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440    buf[i].copy_(torch.from_numpy(frame))                # memcpy \u0432 pinnedimgs = buf.to(device, non_blocking=True)                 # DMA \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043e\u0434\u043d\u043e \u043a\u0440\u043e\u043f\u044b \u0432\u0441\u0435\u0445 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0439 \u0441\u0442\u0430\u043b\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0435\u0441\u0430\u0439\u0437\u0438\u0442\u044c\u0441\u044f <strong>\u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <\/strong><code><strong>torchvision.ops.roi_align<\/strong><\/code> \u043f\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u043a\u0430\u0434\u0440\u0430\u043c \u2014 \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0438\u043a\u043b\u0430 \u00ab\u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438 \u043a\u0440\u043e\u043f \u2192 \u0437\u0430\u043b\u0438\u043b\u0438 \u2192 \u043e\u0442\u0440\u0435\u0441\u0430\u0439\u0437\u0438\u043b\u0438\u00bb \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044e (\u0442\u043e\u0442 \u0436\u0435 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u0447\u0442\u043e \u0432 \u0433\u0440\u0430\u0431\u043b\u044f\u0445 \u21161, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438).<\/p>\n<h4>\u0413\u0440\u0430\u0431\u043b\u0438 \u21163: FP16 \u0438 300 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430<\/h4>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043a\u043e\u0432\u0430\u0440\u043d\u043e\u0435. \u0412\u043a\u043b\u044e\u0447\u0438\u043b\u0438 FP16-\u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 OSNet (\u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u00d72) \u2014 \u0438 \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c\u044b\u0435 \u0444\u0440\u0438\u0437\u044b: \u043c\u0435\u0434\u0438\u0430\u043d\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0444\u0438\u0447 14 \u043c\u0441, \u043d\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043a\u0430\u0434\u0440\u044b \u043f\u043e 300 \u043c\u0441.<\/p>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c: <strong>cuDNN \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442 \u044f\u0434\u0440\u0430 \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0432\u0445\u043e\u0434\u0430, \u0438 \u043f\u043e\u0434 FP16 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0431\u043e\u0440 \u0441\u0442\u043e\u0438\u0442 ~300 \u043c\u0441 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u041d\u041e\u0412\u042b\u0419 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430<\/strong>. \u0410 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430 \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0439 \u0432 \u043a\u0430\u0434\u0440\u0435, \u043e\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440: 48 \u043a\u0440\u043e\u043f\u043e\u0432, 52, 47, 61\u2026 \u041a\u0430\u0436\u0434\u043e\u0435 \u043d\u043e\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u2014 \u043d\u043e\u0432\u044b\u0439 \u0444\u0440\u0438\u0437. \u041d\u0430 FP32 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u0441\u0442\u043e\u0438\u0442 ~40 \u043c\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043c \u043d\u0438\u043a\u0442\u043e \u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442.<\/p>\n<p>\u041b\u0435\u0447\u0435\u043d\u0438\u0435 \u2014 \u0431\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u043f\u0430\u0434\u0434\u0438\u043c \u0431\u0430\u0442\u0447 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0434\u043e \u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e 32 (\u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435). \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f 3\u20134 \u043d\u0430 \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0433\u043e\u043d, \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u2014 \u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/ff7\/25a\/558\/ff725a558547cce4c47a38725c8f4e0f.png\" alt=\"FP16-\u0441\u043f\u0430\u0439\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0431\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/ff7\/25a\/558\/ff725a558547cce4c47a38725c8f4e0f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/ff7\/25a\/558\/ff725a558547cce4c47a38725c8f4e0f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>FP16-\u0441\u043f\u0430\u0439\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0431\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u043f\u0440\u043e\u0434\u0435 PyTorch-\u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u0434 autocast \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0432\u043e\u0438 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 p99. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u043f\u043b\u0430\u0442\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043d\u0430\u043b\u043e\u0433 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441.<\/p>\n<h3>\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c: \u0446\u0438\u0444\u0440\u044b<\/h3>\n<p>\u0412\u0441\u0451 \u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435. \u0421\u0442\u0435\u043d\u0434: RTX 4090, PyTorch 2.13, 200 \u043a\u0430\u0434\u0440\u043e\u0432, \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 30 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0439\/\u043f\u043e\u0442\u043e\u043a\/\u043a\u0430\u0434\u0440 (\u043f\u043b\u043e\u0442\u043d\u0430\u044f \u0441\u0446\u0435\u043d\u0430):<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/8f9\/4fd\/01f\/8f94fd01f2be5b351a35052892d79254.png\" alt=\"CPU vs GPU \u0441\u043a\u0435\u0439\u043b\u0438\u043d\u0433\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/8f9\/4fd\/01f\/8f94fd01f2be5b351a35052892d79254.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/8f9\/4fd\/01f\/8f94fd01f2be5b351a35052892d79254.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>CPU vs GPU \u0441\u043a\u0435\u0439\u043b\u0438\u043d\u0433<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/769\/6e6\/c1a\/7696e6c1a9156d806e07b38c112a8e81.png\" alt=\"\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/769\/6e6\/c1a\/7696e6c1a9156d806e07b38c112a8e81.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/769\/6e6\/c1a\/7696e6c1a9156d806e07b38c112a8e81.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>End-to-end \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c YOLO \u043d\u0430 \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u043e\u043c \u0432\u0438\u0434\u0435\u043e (8 \u043f\u043e\u0442\u043e\u043a\u043e\u0432): \u0442\u0440\u0435\u043a\u0438\u043d\u0433 <strong>5.1 \u043c\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 31.8 \u043c\u0441<\/strong> \u043d\u0430 CPU (6.2x), \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u0441 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0435\u0439 \u2014 91 FPS \u043d\u0430 \u0431\u0430\u0442\u0447 \u0438\u0437 8 \u043a\u0430\u043c\u0435\u0440.<\/p>\n<p>\u041d\u0430 1\u20132 \u043a\u0430\u043c\u0435\u0440\u0430\u0445 CPU \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442: \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 GPU \u0442\u0430\u043c \u043d\u0435 \u043e\u043a\u0443\u043f\u0430\u044e\u0442\u0441\u044f.<\/p>\n<h4>ReID<\/h4>\n<p>\u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 ReID \u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0430\u0441\u043a\u043b\u0430\u0434: 70\u201380% \u043a\u0430\u0434\u0440\u0430 \u2014 \u044d\u0442\u043e \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 OSNet, \u043d\u0435\u0441\u0436\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442. \u0411\u0430\u0442\u0447\u0435\u0432\u044b\u0439 roi_align + pinned-\u0431\u0443\u0444\u0435\u0440\u044b + FP16 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0444\u0438\u0447 \u0432 ~2.3 \u0440\u0430\u0437\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/bda\/3f8\/972\/bda3f89727e6d44cf079bedcb8f4081e.png\" alt=\"ReID \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/bda\/3f8\/972\/bda3f89727e6d44cf079bedcb8f4081e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/bda\/3f8\/972\/bda3f89727e6d44cf079bedcb8f4081e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>ReID \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u0447\u0443\u0434\u0435\u0441 \u043d\u0435\u0442: \u0441 ReID \u043e\u0431\u0449\u0438\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 GPU \u043d\u0430\u0434 CPU \u2014 1.8x \u043d\u0430 8 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 (\u0437\u0430\u043a\u043e\u043d \u0410\u043c\u0434\u0430\u043b\u0430: \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043b\u0430\u0442\u044f\u0442 \u0437\u0430 \u0441\u0435\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u043e, \u043f\u043e\u043a\u0430 \u043a\u0440\u043e\u043f\u043e\u0432 \u043c\u0430\u043b\u043e). \u0414\u0430\u043b\u044c\u0448\u0435 \u043b\u0438\u0431\u043e <code>reid_interval<\/code> (\u0444\u0438\u0447\u0438 \u0440\u0430\u0437 \u0432 K \u043a\u0430\u0434\u0440\u043e\u0432 \u2014 \u0442\u0440\u0435\u043a\u0438 \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0445 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0430\u0445), \u043b\u0438\u0431\u043e TensorRT \u2014 \u043e\u043d \u0432 \u0440\u043e\u0430\u0434\u043c\u0430\u043f\u0435.<\/p>\n<h3>\u0427\u0442\u043e \u041d\u0415 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e (\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438)<\/h3>\n<ul>\n<li>\n<p><strong>LAPJV-\u0431\u0430\u0442\u0447\u0438\u043d\u0433 \u0432\u0435\u043d\u0433\u0435\u0440\u043a\u0438<\/strong> \u2014 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0440\u0438\u0446 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u043e\u0432\u0435\u0440\u0445\u0435\u0434 \u0442\u0440\u0435\u0434\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>torch.compile kernel fusion<\/strong> \u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u044b (\u0447\u0438\u0441\u043b\u043e \u0442\u0440\u0435\u043a\u043e\u0432 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440) \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0441\u044a\u0435\u0434\u0430\u044e\u0449\u0438\u0435 \u0432\u0435\u0441\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448. \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u041a\u0430\u043b\u044c\u043c\u0430\u043d\u0430 \u0432 \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0435 GPU-\u0442\u0435\u043d\u0437\u043e\u0440\u044b (\u0442\u043e\u0433\u0434\u0430 \u0444\u043e\u0440\u043c\u044b \u0441\u0442\u0430\u043d\u0443\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438).<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0435\u043d\u0433\u0435\u0440\u043a\u0430 \u043d\u0430 GPU<\/strong> \u2014 GPU-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 LAP \u043e\u043a\u0443\u043f\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445; \u043d\u0430\u0448\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u2014 \u00ab\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00d7\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00bb.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u0442\u0440\u0438 \u0442\u0443\u043f\u0438\u043a\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <code>docs\/optimization_guide.md<\/code>.<\/p>\n<h3>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 NVIDIA DeepStream (nvtracker)<\/h3>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u043f\u043e \u0438\u0434\u0435\u0435 \u043a\u0440\u043e\u0441\u0441-\u043a\u0430\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u0442\u0447\u0438\u043d\u0433\u0430. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\n<\/th>\n<th>\n<p align=\"left\">DeepStream nvtracker<\/p>\n<\/th>\n<th>\n<p align=\"left\">BatchGpuByteTrack<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">IOU, NvSORT, NvDeepSORT, NvDCF, MaskTracker (SAM2)<\/p>\n<\/td>\n<td>\n<p align=\"left\">ByteTrack (+ OSNet ReID)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u0430\u0442\u0447\u0438\u043d\u0433 \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430, \u0432\u0441\u0435 \u0441\u0442\u0440\u0438\u043c\u044b \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430, \u0432\u0441\u0435 \u0441\u0442\u0440\u0438\u043c\u044b \u043e\u0431\u0449\u0438\u043c\u0438 GPU-\u0431\u0430\u0442\u0447\u0430\u043c\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">GStreamer-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d, C+\u00b1\u043f\u043b\u0430\u0433\u0438\u043d, YAML-\u043a\u043e\u043d\u0444\u0438\u0433\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>pip install<\/code>, ~10 \u0441\u0442\u0440\u043e\u043a Python<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043d\u0443\u0442\u0440\u0438 DeepStream-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430 (nvinfer)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041b\u044e\u0431\u043e\u0439: \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 numpy <code>[N, 5]<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">NVIDIA dGPU \/ Jetson + \u0441\u0442\u0435\u043a DeepStream<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041b\u044e\u0431\u043e\u0439 CUDA GPU + PyTorch; \u0435\u0441\u0442\u044c CPU-\u0440\u0435\u0436\u0438\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ReID<\/p>\n<\/td>\n<td>\n<p align=\"left\">TensorRT-\u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">OSNet (FP16), \u043b\u0438\u0431\u043e \u0441\u0432\u043e\u0438 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u0447\u0435\u0440\u0435\u0437 API<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0442\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043b\u0430\u0433\u0438\u043d \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445, \u044f\u0434\u0440\u043e \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u0430\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">100% \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043e\u0434, MIT<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0427\u0435\u0433\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">NvDCF (\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0440\u0435\u043a\u0438\u043d\u0433 \u043c\u0435\u0436\u0434\u0443 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044f\u043c\u0438), 3D multi-view, sub-batching, PVA \u043d\u0430 Jetson<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0435\u0437\u044e\u043c\u0435: \u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u0436\u0438\u0432\u0451\u0442\u0435 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 DeepStream \u0438\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d NvDCF\/Jetson-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430 \u2014 \u0431\u0435\u0440\u0438\u0442\u0435 nvtracker, \u043e\u043d \u0432\u0437\u0440\u043e\u0441\u043b\u0435\u0435. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u2014 Python\/PyTorch, \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0441\u0432\u043e\u0439, \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u2014 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u043d BatchGpuByteTrack.<\/p>\n<h3>\u041a\u0430\u043a \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c<\/h3>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/sweetlhare\/BatchGpuByteTrack.gitcd BatchGpuByteTrack &amp;&amp; pip install -r requirements.txtpython -m pytest tests\/ -q          # 64 \u0442\u0435\u0441\u0442\u0430python tools\/benchmark_comparison.py \\    --video test_videos\/6387-191695740_medium.mp4 --streams 1,4,8,16 --device cuda<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code class=\"python\">from bytetrack import BatchGPUTracker, TrackerConfigtracker = BatchGPUTracker(num_streams=8, config=TrackerConfig(device='cuda'))tracks = tracker.update(batch_detections)   # \u0441\u043f\u0438\u0441\u043e\u043a numpy [N,5] \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: <a href=\"https:\/\/github.com\/sweetlhare\/BatchGpuByteTrack\" rel=\"noopener noreferrer nofollow\"><strong>https:\/\/github.com\/sweetlhare\/BatchGpuByteTrack<\/strong><\/a> \u2014 \u0442\u0435\u0441\u0442\u044b, \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438, \u043f\u043e\u043b\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0438 \u0440\u043e\u0430\u0434\u043c\u0430\u043f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438. Issues \u0438 PR \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f: \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0437\u0430\u043c\u0435\u0440\u044b \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 GPU \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0443\u043b\u044c\u0442\u0438-\u043a\u0430\u043c\u0435\u0440\u043d\u044b\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u0445.<\/p>\n<hr\/>\n<p><em>\u041e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 <\/em><a href=\"https:\/\/github.com\/FoundationVision\/ByteTrack\" rel=\"noopener noreferrer nofollow\"><em>ByteTrack<\/em><\/a><em> (Zhang et al., ECCV 2022) \u0438 <\/em><a href=\"https:\/\/github.com\/KaiyangZhou\/deep-person-reid\" rel=\"noopener noreferrer nofollow\"><em>OSNet<\/em><\/a><em> (Zhou et al., ICCV 2019), MIT-\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f.<\/em><\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1059236\/\">https:\/\/habr.com\/ru\/articles\/1059236\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u044f \u0432\u0437\u044f\u043b \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0442\u0440\u0435\u043a\u0438\u043d\u0433-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b \u0435\u0433\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u0432\u0441\u0435\u0445 \u043a\u0430\u043c\u0435\u0440 \u043e\u0434\u043d\u0438\u043c GPU-\u0431\u0430\u0442\u0447\u0435\u043c \u2014 \u0438 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435 \u0442\u0440\u0438\u0436\u0434\u044b \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b \u043d\u0430 \u0433\u0440\u0430\u0431\u043b\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u043c\u0443, \u043a\u0442\u043e \u043f\u0438\u0448\u0435\u0442 real-time \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b \u043d\u0430 PyTorch.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 vs \u0431\u0430\u0442\u0447\u0435\u0432\u044b\u0439\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: N \u043a\u0430\u043c\u0435\u0440 = N \u0442\u0440\u0435\u043a\u0435\u0440\u043e\u0432 = \u0433\u0440\u0443\u0441\u0442\u043d\u044b\u0439 CPU\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u0438\u0434\u0435\u043e\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438: \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 GPU, \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 8\u201332 RTSP-\u043f\u043e\u0442\u043e\u043a\u0430, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 YOLO \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043b\u044e\u0434\u0435\u0439\/\u043c\u0430\u0448\u0438\u043d\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u0435\u043d \u0442\u0440\u0435\u043a\u0438\u043d\u0433 \u2014 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 ID \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043e\u0442 \u043a\u0430\u0434\u0440\u0430 \u043a \u043a\u0430\u0434\u0440\u0443.\u0421 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0435\u0439 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e: YOLO \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0431\u0430\u0442\u0447\u0438\u0442\u0441\u044f, 16 \u043a\u0430\u0434\u0440\u043e\u0432 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u043e\u043c. \u0410 \u0432\u043e\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u0412\u0441\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 Python-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430 \u2014 BoxMOT, Norfair, roboflow\/trackers, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0442\u0440\u0435\u043a\u0435\u0440 ultralytics \u2014 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e: \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0432\u0438\u0434\u0435\u043e, \u0432\u0441\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043d\u0430 CPU. \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0446\u0435\u043f\u0442 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u043c\u0435\u0440 \u2014 \u00ab\u0437\u0430\u0432\u0435\u0440\u043d\u0438\u0442\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u0430\u043c\u0435\u0440\u0443 \u0432 \u0441\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a\/\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u00bb.\u041d\u0430 2\u20134 \u043a\u0430\u043c\u0435\u0440\u0430\u0445 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430 16 \u2014 \u0444\u0438\u043b\u044c\u0442\u0440 \u041a\u0430\u043b\u044c\u043c\u0430\u043d\u0430, IoU-\u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u043a\u0430\u043c\u0438 \u0441\u044a\u0435\u0434\u0430\u044e\u0442 \u044f\u0434\u0440\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c YOLO \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: \u0432 \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 16 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 ByteTrack \u043d\u0430 CPU \u0441\u0442\u043e\u044f\u0442 104 \u043c\u0441 \u043d\u0430 \u043a\u0430\u0434\u0440 \u2014 \u043f\u0440\u043e\u0442\u0438\u0432 6 \u043c\u0441 \u043d\u0430 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044e. \u0422\u0440\u0435\u043a\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u043b\u0435\u0433\u0447\u0435 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0430\u00bb, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u044b\u043c \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e\u043c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430.\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043a\u0440\u043e\u0441\u0441-\u043a\u0430\u043c\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0442\u0447\u0438\u043d\u0433\u043e\u043c \u2014 NVIDIA DeepStream (nvtracker). \u041d\u043e \u044d\u0442\u043e GStreamer-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d, C+\u00b1\u043f\u043b\u0430\u0433\u0438\u043d\u044b, YAML-\u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0435 \u044f\u0434\u0440\u043e \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u2014 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0432\u0435\u0441\u043e\u0432\u0430\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f, \u0435\u0441\u043b\u0438 \u0432\u0435\u0441\u044c \u0432\u0430\u0448 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u043d\u0430 Python. (\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u2014 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.)\u0417\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c DeepStream, \u043d\u043e pip install \u0438 \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430 PyTorch. \u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f BatchGpuByteTrack.\u0418\u0434\u0435\u044f: \u0442\u0440\u0435\u043a\u0435\u0440 \u043a\u0430\u043a \u0431\u0430\u0442\u0447\u0435\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435: \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 ByteTrack \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0431\u0430\u0442\u0447\u0438\u0442\u0441\u044f \u043d\u0435 \u0445\u0443\u0436\u0435 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438.Kalman predict\/update \u2014 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043c\u0430\u0442\u0440\u0438\u0446 (8\u00d78). \u0422\u044b\u0441\u044f\u0447\u0430 \u0442\u0440\u0435\u043a\u043e\u0432 \u2014 \u044d\u0442\u043e \u0442\u0435\u043d\u0437\u043e\u0440 [1000, 8, 8], \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 torch.einsum \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u044b\u0441\u044f\u0447\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 numpy.IoU cost-\u043c\u0430\u0442\u0440\u0438\u0446\u044b \u2014 \u043f\u043e\u043f\u0430\u0440\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043a\u0441\u043e\u0432. \u0412\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u0430\u043a\u0443\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d padded-\u0442\u0435\u043d\u0437\u043e\u0440 [S, M_max, N_max] \u2014 \u043e\u0434\u043d\u043e \u044f\u0434\u0440\u043e.ReID-\u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u2014 \u043a\u0440\u043e\u043f\u044b \u0432\u0441\u0435\u0445 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0439 \u0432\u0441\u0435\u0445 \u043a\u0430\u043c\u0435\u0440 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0431\u0430\u0442\u0447 \u0434\u043b\u044f OSNet.\u041d\u0430 CPU \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0430 CPU: \u0432\u0435\u043d\u0433\u0435\u0440\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c (lap.lapjv \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u0445 \u00ab\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00d7\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00bb \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u2014 GPU-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 LAP \u043e\u043a\u0443\u043f\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043d\u0435 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0435) \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0442\u0440\u0435\u043a\u043e\u0432.\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440: \u043e\u0434\u043d\u0430 \u0431\u0430\u0442\u0447\u0435\u0432\u0430\u044f GPU-\u0444\u0430\u0437\u0430 (predict + IoU + OSNet) \u2192 \u043e\u0434\u043d\u0430 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 CPU \u2192 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c \u2192 \u043e\u0434\u043d\u0430 \u0431\u0430\u0442\u0447\u0435\u0432\u0430\u044f GPU-\u0444\u0430\u0437\u0430 (update). \u0412\u0435\u0441\u044c \u0442\u0440\u0430\u0444\u0438\u043a CPU\u2194GPU \u2014 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e bulk-\u043a\u043e\u043f\u0438\u0439 \u043d\u0430 \u043a\u0430\u0434\u0440, \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0435\u0435 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u043a\u0430\u043c\u0435\u0440.\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u2014 \u0447\u0435\u0441\u0442\u043d\u044b\u0439 ByteTrack: \u0442\u0440\u0438 \u0441\u0442\u0430\u0434\u0438\u0438 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0444\u0438\u0440\u043c\u0435\u043d\u043d\u043e\u0435 \u00abBYTE\u00bb-\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043d\u0438\u0437\u043a\u043e\u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0441\u043d\u044b\u043c \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044f\u043c), \u0441\u0442\u0430\u0434\u0438\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0442\u0440\u0435\u043a\u043e\u0432, \u0442\u0435 \u0436\u0435 \u043f\u043e\u0440\u043e\u0433\u0438. \u041f\u0430\u0440\u0438\u0442\u0435\u0442 \u0441 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d \u0442\u0435\u0441\u0442\u0430\u043c\u0438.\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0430\u043b\u0438\u0441\u044c \u0433\u0440\u0430\u0431\u043b\u0438\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043d\u043e \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435: \u043d\u0430 16 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 GPU-\u0432\u0435\u0440\u0441\u0438\u044f \u043e\u0431\u0433\u043e\u043d\u044f\u043b\u0430 CPU \u0432\u0441\u0435\u0433\u043e \u0432 1.2 \u0440\u0430\u0437\u0430. \u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u043e\u043b\u0451\u0442\u043e\u0432 \u0432\u044b\u043b\u0438\u043b\u0441\u044f \u0432 \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438.\u0413\u0440\u0430\u0431\u043b\u0438 \u21161: \u00ab\u0431\u0430\u0442\u0447\u0435\u0432\u044b\u0439\u00bb \u043a\u043e\u0434 \u0441 \u0446\u0438\u043a\u043b\u043e\u043c \u043f\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 \u0436\u0430\u043d\u0440\u0430. Kalman predict \u0431\u044b\u043b \u0443\u0436\u0435 \u0431\u0430\u0442\u0447\u0435\u0432\u044b\u043c \u2014 \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u043a\u043e\u0432 \u0432\u0441\u0435\u0445 \u043a\u0430\u043c\u0435\u0440. \u0410 Kalman update \u2014 \u043d\u0435\u0442:# \u0434\u043e: \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u2014 \u0441\u0432\u043e\u0439 upload, kernel \u0438 downloadfor stream_id in range(num_streams):    means, covs, meas = collect_matched(stream_id)          # CPU    means_t = torch.from_numpy(means).to(device)            # upload \u00d716    upd_means, upd_covs = kalman.batch_update(means_t, &#8230;) # kernel \u00d716    results[stream_id] = upd_means.cpu().numpy()            # download \u00d71616 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u2014 48 \u043c\u0435\u043b\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 GPU \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440. \u041a\u0430\u0436\u0434\u0430\u044f \u2014 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445: \u0437\u0430\u043f\u0443\u0441\u043a \u044f\u0434\u0440\u0430, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f, PCIe-\u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f.\u041b\u0435\u0447\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043c\u0430\u0442\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u044b \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0432 \u043e\u0434\u0438\u043d \u0442\u0435\u043d\u0437\u043e\u0440:# \u043f\u043e\u0441\u043b\u0435: \u043e\u0434\u0438\u043d upload, \u043e\u0434\u0438\u043d kernel, \u043e\u0434\u0438\u043d download \u2014 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432entries, means, covs, meas = collect_matched_all_streams()upd_means, upd_covs = kalman.batch_update(stack(means), stack(covs), stack(meas))scatter_back(entries, upd_means.cpu().numpy())\u042d\u0442\u0430\u043f \u0443\u043f\u0430\u043b \u0441 11.8 \u043c\u0441 \u0434\u043e 1.6 \u043c\u0441. \u0422\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0451\u043c \u0434\u043b\u044f IoU-\u043c\u0430\u0442\u0440\u0438\u0446 (padded-\u0431\u0430\u0442\u0447 [S, M_max, N_max] \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0438\u043a\u043b\u0430) \u0441\u043d\u044f\u043b \u0435\u0449\u0451 5 \u043c\u0441:\u041f\u0440\u043e\u0444\u0438\u043b\u044c \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435\u0422\u0440\u0438 \u0448\u0430\u0433\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\u041c\u043e\u0440\u0430\u043b\u044c: \u0435\u0441\u043b\u0438 \u0432 \u00abGPU-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u043c\u00bb \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c for \u043f\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\/\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0441 .to(device) \u0432\u043d\u0443\u0442\u0440\u0438 \u2014 \u044d\u0442\u043e \u043d\u0435 GPU-\u043a\u043e\u0434, \u044d\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0432\u0435\u0440\u0445\u0435\u0434\u0430.\u0413\u0440\u0430\u0431\u043b\u0438 \u21162: \u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u043d\u0430 1.6 \u0413\u0411\/\u0441 \u043f\u0440\u0438 \u0448\u0438\u043d\u0435 \u0432 25\u0414\u043b\u044f ReID \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0434\u0440\u044b \u043d\u0430 GPU. \u041c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e: \u0437\u0430\u043b\u0438\u0432\u043a\u0430 16 \u043a\u0430\u0434\u0440\u043e\u0432 720p (44 \u041c\u0411) \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 26.7 \u043c\u0441 \u2014 \u044d\u0442\u043e 1.6 \u0413\u0411\/\u0441 \u043f\u0440\u0438 PCIe 4.0, \u0443\u043c\u0435\u044e\u0449\u0435\u0439 ~25.\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 pageable-\u043f\u0430\u043c\u044f\u0442\u044c: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 torch.from_numpy(arr).to(&#8216;cuda&#8217;) \u0438\u0437 numpy-\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 staging-\u0431\u0443\u0444\u0435\u0440 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. \u041b\u0435\u0447\u0435\u043d\u0438\u0435 \u2014 \u0441\u0432\u043e\u0439 \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0439 pinned-\u0431\u0443\u0444\u0435\u0440:buf = torch.empty(F, H, W, 3, dtype=torch.uint8, pin_memory=True)  # \u043e\u0434\u0438\u043d \u0440\u0430\u0437&#8230;for i, frame in enumerate(frames):                       # \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440    buf[i].copy_(torch.from_numpy(frame))                # memcpy \u0432 pinnedimgs = buf.to(device, non_blocking=True)                 # DMA \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438\u0417\u0430\u043e\u0434\u043d\u043e \u043a\u0440\u043e\u043f\u044b \u0432\u0441\u0435\u0445 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0439 \u0441\u0442\u0430\u043b\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0435\u0441\u0430\u0439\u0437\u0438\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c torchvision.ops.roi_align \u043f\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u043a\u0430\u0434\u0440\u0430\u043c \u2014 \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0438\u043a\u043b\u0430 \u00ab\u0432\u044b\u0440\u0435\u0437\u0430\u043b\u0438 \u043a\u0440\u043e\u043f \u2192 \u0437\u0430\u043b\u0438\u043b\u0438 \u2192 \u043e\u0442\u0440\u0435\u0441\u0430\u0439\u0437\u0438\u043b\u0438\u00bb \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044e (\u0442\u043e\u0442 \u0436\u0435 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u0447\u0442\u043e \u0432 \u0433\u0440\u0430\u0431\u043b\u044f\u0445 \u21161, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438).\u0413\u0440\u0430\u0431\u043b\u0438 \u21163: FP16 \u0438 300 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430\u0421\u0430\u043c\u043e\u0435 \u043a\u043e\u0432\u0430\u0440\u043d\u043e\u0435. \u0412\u043a\u043b\u044e\u0447\u0438\u043b\u0438 FP16-\u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 OSNet (\u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u00d72) \u2014 \u0438 \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c\u044b\u0435 \u0444\u0440\u0438\u0437\u044b: \u043c\u0435\u0434\u0438\u0430\u043d\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0444\u0438\u0447 14 \u043c\u0441, \u043d\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043a\u0430\u0434\u0440\u044b \u043f\u043e 300 \u043c\u0441.\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c: cuDNN \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442 \u044f\u0434\u0440\u0430 \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0432\u0445\u043e\u0434\u0430, \u0438 \u043f\u043e\u0434 FP16 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0431\u043e\u0440 \u0441\u0442\u043e\u0438\u0442 ~300 \u043c\u0441 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u041d\u041e\u0412\u042b\u0419 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430. \u0410 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0430\u0442\u0447\u0430 \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0439 \u0432 \u043a\u0430\u0434\u0440\u0435, \u043e\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440: 48 \u043a\u0440\u043e\u043f\u043e\u0432, 52, 47, 61\u2026 \u041a\u0430\u0436\u0434\u043e\u0435 \u043d\u043e\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u2014 \u043d\u043e\u0432\u044b\u0439 \u0444\u0440\u0438\u0437. \u041d\u0430 FP32 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u0441\u0442\u043e\u0438\u0442 ~40 \u043c\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043c \u043d\u0438\u043a\u0442\u043e \u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442.\u041b\u0435\u0447\u0435\u043d\u0438\u0435 \u2014 \u0431\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u043f\u0430\u0434\u0434\u0438\u043c \u0431\u0430\u0442\u0447 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0434\u043e \u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e 32 (\u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435). \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u043e\u0440\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f 3\u20134 \u043d\u0430 \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0433\u043e\u043d, \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u2014 \u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:FP16-\u0441\u043f\u0430\u0439\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0431\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u043f\u0440\u043e\u0434\u0435 PyTorch-\u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u0434 autocast \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0432\u043e\u0438 \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 p99. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u043f\u043b\u0430\u0442\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043d\u0430\u043b\u043e\u0433 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441.\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c: \u0446\u0438\u0444\u0440\u044b\u0412\u0441\u0451 \u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435. \u0421\u0442\u0435\u043d\u0434: RTX 4090, PyTorch 2.13, 200 \u043a\u0430\u0434\u0440\u043e\u0432, \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 30 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0439\/\u043f\u043e\u0442\u043e\u043a\/\u043a\u0430\u0434\u0440 (\u043f\u043b\u043e\u0442\u043d\u0430\u044f \u0441\u0446\u0435\u043d\u0430):CPU vs GPU \u0441\u043a\u0435\u0439\u043b\u0438\u043d\u0433\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u043e\u0442\u043e\u043a\u043e\u0432End-to-end \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c YOLO \u043d\u0430 \u043f\u0435\u0448\u0435\u0445\u043e\u0434\u043d\u043e\u043c \u0432\u0438\u0434\u0435\u043e (8 \u043f\u043e\u0442\u043e\u043a\u043e\u0432): \u0442\u0440\u0435\u043a\u0438\u043d\u0433 5.1 \u043c\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 31.8 \u043c\u0441 \u043d\u0430 CPU (6.2x), \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u0441 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0435\u0439 \u2014 91 FPS \u043d\u0430 \u0431\u0430\u0442\u0447 \u0438\u0437 8 \u043a\u0430\u043c\u0435\u0440.\u041d\u0430 1\u20132 \u043a\u0430\u043c\u0435\u0440\u0430\u0445 CPU \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442: \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 GPU \u0442\u0430\u043c \u043d\u0435 \u043e\u043a\u0443\u043f\u0430\u044e\u0442\u0441\u044f.ReID\u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 ReID \u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0430\u0441\u043a\u043b\u0430\u0434: 70\u201380% \u043a\u0430\u0434\u0440\u0430 \u2014 \u044d\u0442\u043e \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 OSNet, \u043d\u0435\u0441\u0436\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442. \u0411\u0430\u0442\u0447\u0435\u0432\u044b\u0439 roi_align + pinned-\u0431\u0443\u0444\u0435\u0440\u044b + FP16 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0444\u0438\u0447 \u0432 ~2.3 \u0440\u0430\u0437\u0430:ReID \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435\u041d\u043e \u0447\u0443\u0434\u0435\u0441 \u043d\u0435\u0442: \u0441 ReID \u043e\u0431\u0449\u0438\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 GPU \u043d\u0430\u0434 CPU \u2014 1.8x \u043d\u0430 8 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 (\u0437\u0430\u043a\u043e\u043d \u0410\u043c\u0434\u0430\u043b\u0430: \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043b\u0430\u0442\u044f\u0442 \u0437\u0430 \u0441\u0435\u0442\u044c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u043e, \u043f\u043e\u043a\u0430 \u043a\u0440\u043e\u043f\u043e\u0432 \u043c\u0430\u043b\u043e). \u0414\u0430\u043b\u044c\u0448\u0435 \u043b\u0438\u0431\u043e reid_interval (\u0444\u0438\u0447\u0438 \u0440\u0430\u0437 \u0432 K \u043a\u0430\u0434\u0440\u043e\u0432 \u2014 \u0442\u0440\u0435\u043a\u0438 \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0445 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0430\u0445), \u043b\u0438\u0431\u043e TensorRT \u2014 \u043e\u043d \u0432 \u0440\u043e\u0430\u0434\u043c\u0430\u043f\u0435.\u0427\u0442\u043e \u041d\u0415 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e (\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438)LAPJV-\u0431\u0430\u0442\u0447\u0438\u043d\u0433 \u0432\u0435\u043d\u0433\u0435\u0440\u043a\u0438 \u2014 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0440\u0438\u0446 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u043e\u0432\u0435\u0440\u0445\u0435\u0434 \u0442\u0440\u0435\u0434\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.torch.compile kernel fusion \u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u044b (\u0447\u0438\u0441\u043b\u043e \u0442\u0440\u0435\u043a\u043e\u0432 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440) \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0441\u044a\u0435\u0434\u0430\u044e\u0449\u0438\u0435 \u0432\u0435\u0441\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448. \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u041a\u0430\u043b\u044c\u043c\u0430\u043d\u0430 \u0432 \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0435 GPU-\u0442\u0435\u043d\u0437\u043e\u0440\u044b (\u0442\u043e\u0433\u0434\u0430 \u0444\u043e\u0440\u043c\u044b \u0441\u0442\u0430\u043d\u0443\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438).\u0412\u0435\u043d\u0433\u0435\u0440\u043a\u0430 \u043d\u0430 GPU \u2014 GPU-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 LAP \u043e\u043a\u0443\u043f\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445; \u043d\u0430\u0448\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u2014 \u00ab\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00d7\u0434\u0435\u0441\u044f\u0442\u043a\u0438\u00bb.\u0412\u0441\u0435 \u0442\u0440\u0438 \u0442\u0443\u043f\u0438\u043a\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 docs\/optimization_guide.md.\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 NVIDIA DeepStream (nvtracker)\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u043f\u043e \u0438\u0434\u0435\u0435 \u043a\u0440\u043e\u0441\u0441-\u043a\u0430\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u0442\u0447\u0438\u043d\u0433\u0430. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c:DeepStream nvtrackerBatchGpuByteTrack\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044bIOU, NvSORT, NvDeepSORT, NvDCF, MaskTracker (SAM2)ByteTrack (+ OSNet ReID)\u0411\u0430\u0442\u0447\u0438\u043d\u0433 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u0414\u0430, \u0432\u0441\u0435 \u0441\u0442\u0440\u0438\u043c\u044b \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c\u0414\u0430, \u0432\u0441\u0435 \u0441\u0442\u0440\u0438\u043c\u044b \u043e\u0431\u0449\u0438\u043c\u0438 GPU-\u0431\u0430\u0442\u0447\u0430\u043c\u0438\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044fGStreamer-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d, C+\u00b1\u043f\u043b\u0430\u0433\u0438\u043d, YAML-\u043a\u043e\u043d\u0444\u0438\u0433\u0438pip install, ~10 \u0441\u0442\u0440\u043e\u043a Python\u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0412\u043d\u0443\u0442\u0440\u0438 DeepStream-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430 (nvinfer)\u041b\u044e\u0431\u043e\u0439: \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 numpy [N, 5]\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430NVIDIA dGPU \/ Jetson + \u0441\u0442\u0435\u043a DeepStream\u041b\u044e\u0431\u043e\u0439 CUDA GPU + PyTorch; \u0435\u0441\u0442\u044c CPU-\u0440\u0435\u0436\u0438\u043cReIDTensorRT-\u043c\u043e\u0434\u0435\u043b\u0438OSNet (FP16), \u043b\u0438\u0431\u043e \u0441\u0432\u043e\u0438 \u044d\u043c\u0431\u0435\u0434\u0434\u0438\u043d\u0433\u0438 \u0447\u0435\u0440\u0435\u0437 API\u041e\u0442\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u044c\u041f\u043b\u0430\u0433\u0438\u043d \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445, \u044f\u0434\u0440\u043e \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u0430\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430100% \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043e\u0434, MIT\u0427\u0435\u0433\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442NvDCF (\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0440\u0435\u043a\u0438\u043d\u0433 \u043c\u0435\u0436\u0434\u0443 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044f\u043c\u0438), 3D multi-view, sub-batching, PVA \u043d\u0430 Jetson\u2014\u0420\u0435\u0437\u044e\u043c\u0435: \u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u0436\u0438\u0432\u0451\u0442\u0435 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 DeepStream \u0438\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d NvDCF\/Jetson-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430 \u2014 \u0431\u0435\u0440\u0438\u0442\u0435 nvtracker, \u043e\u043d \u0432\u0437\u0440\u043e\u0441\u043b\u0435\u0435. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u2014 Python\/PyTorch, \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0441\u0432\u043e\u0439, \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u2014 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u043d BatchGpuByteTrack.\u041a\u0430\u043a \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044cgit clone https:\/\/github.com\/sweetlhare\/BatchGpuByteTrack.gitcd BatchGpuByteTrack &amp;&amp; pip install -r requirements.txtpython -m pytest tests\/ -q          # 64 \u0442\u0435\u0441\u0442\u0430python tools\/benchmark_comparison.py \\    &#8212;video test_videos\/6387-191695740_medium.mp4 &#8212;streams 1,4,8,16 &#8212;device cudafrom bytetrack import BatchGPUTracker, TrackerConfigtracker = BatchGPUTracker(num_streams=8, config=TrackerConfig(device=&#8217;cuda&#8217;))tracks = tracker.update(batch_detections)   # \u0441\u043f\u0438\u0441\u043e\u043a numpy [N,5] \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: https:\/\/github.com\/sweetlhare\/BatchGpuByteTrack \u2014 \u0442\u0435\u0441\u0442\u044b, \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438, \u043f\u043e\u043b\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0438 \u0440\u043e\u0430\u0434\u043c\u0430\u043f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438. Issues \u0438 PR \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f: \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0437\u0430\u043c\u0435\u0440\u044b \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 GPU \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0443\u043b\u044c\u0442\u0438-\u043a\u0430\u043c\u0435\u0440\u043d\u044b\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u0445.\u041e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 ByteTrack (Zhang et al., ECCV 2022) \u0438 OSNet (Zhou et al., ICCV 2019), MIT-\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f.\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 https:\/\/habr.com\/ru\/articles\/1059236\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-487327","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/487327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=487327"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/487327\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=487327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=487327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=487327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}