{"id":661,"date":"2022-01-16T17:47:42","date_gmt":"2022-01-16T09:47:42","guid":{"rendered":"http:\/\/120.55.184.7\/?p=661"},"modified":"2025-04-19T00:38:48","modified_gmt":"2025-04-18T16:38:48","slug":"mot-%e5%a4%9a%e7%9b%ae%e6%a0%87%e8%b7%9f%e8%b8%aa","status":"publish","type":"post","link":"https:\/\/beijian99.top\/?p=661","title":{"rendered":"MOT \u591a\u76ee\u6807\u8ddf\u8e2a"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"753\" height=\"559\" src=\"http:\/\/120.55.184.7\/wp-content\/uploads\/2025\/04\/image-26.png\" alt=\"\" class=\"wp-image-666\" srcset=\"https:\/\/beijian99.top\/wp-content\/uploads\/2025\/04\/image-26.png 753w, https:\/\/beijian99.top\/wp-content\/uploads\/2025\/04\/image-26-300x223.png 300w\" sizes=\"auto, (max-width: 753px) 100vw, 753px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">1. <strong>\u57fa\u7840\u6982\u5ff5<\/strong><\/h4>\n\n\n\n<p>\u591a\u76ee\u6807\u8ddf\u8e2a\uff08Multi-Object Tracking, MOT\uff09\u65e8\u5728\u4ece\u89c6\u9891\u5e8f\u5217\u4e2d\u5b9e\u65f6\u68c0\u6d4b\u5e76\u6301\u7eed\u8ddf\u8e2a\u591a\u4e2a\u76ee\u6807\uff08\u5982\u884c\u4eba\u3001\u8f66\u8f86\u7b49\uff09\uff0c\u4e3a\u6bcf\u4e2a\u76ee\u6807\u5206\u914d\u552f\u4e00ID\u5e76\u8bb0\u5f55\u8fd0\u52a8\u8f68\u8ff9\u3002\u5176\u6838\u5fc3\u6d41\u7a0b\u5305\u62ec\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u76ee\u6807\u68c0\u6d4b<\/strong>\uff1a\u901a\u8fc7\u68c0\u6d4b\u5668\uff08\u5982YOLO\u3001Faster R-CNN\uff09\u5b9a\u4f4d\u6bcf\u5e27\u4e2d\u7684\u76ee\u6807\u8fb9\u754c\u6846\u3002<\/li>\n\n\n\n<li><strong>\u7279\u5f81\u63d0\u53d6<\/strong>\uff1a\u5229\u7528\u6df1\u5ea6\u5b66\u4e60\u7f51\u7edc\u63d0\u53d6\u76ee\u6807\u7684\u89c6\u89c9\u548c\u8fd0\u52a8\u7279\u5f81\uff08\u5982ReID\u7f51\u7edc\u751f\u6210\u5916\u89c2\u5d4c\u5165\u5411\u91cf\uff09\u3002<\/li>\n\n\n\n<li><strong>\u6570\u636e\u5173\u8054<\/strong>\uff1a\u901a\u8fc7\u76f8\u4f3c\u5ea6\u8ba1\u7b97\uff08\u5982IoU\u3001\u9a6c\u6c0f\u8ddd\u79bb\u3001\u5916\u89c2\u7279\u5f81\u5339\u914d\uff09\u5173\u8054\u524d\u540e\u5e27\u76ee\u6807\uff0c\u5e38\u7528\u5308\u7259\u5229\u7b97\u6cd5\u6216\u8d2a\u5a6a\u7b97\u6cd5\u6c42\u89e3\u6700\u4f18\u5339\u914d\u3002<\/li>\n\n\n\n<li><strong>\u8f68\u8ff9\u9884\u6d4b\u4e0e\u66f4\u65b0<\/strong>\uff1a\u7ed3\u5408\u8fd0\u52a8\u6a21\u578b\uff08\u5982\u5361\u5c14\u66fc\u6ee4\u6ce2\uff09\u9884\u6d4b\u76ee\u6807\u4f4d\u7f6e\uff0c\u5e76\u6839\u636e\u65b0\u89c2\u6d4b\u6570\u636e\u66f4\u65b0\u72b6\u6001\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. <strong>\u4e3b\u6d41\u7b97\u6cd5\u6846\u67b6<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tracking-by-Detection<\/strong>\uff1a<br>\u2022 <strong>SORT<\/strong>\uff1a\u57fa\u4e8e\u5361\u5c14\u66fc\u6ee4\u6ce2\u9884\u6d4b\u76ee\u6807\u4f4d\u7f6e\uff0c\u4f7f\u7528\u5308\u7259\u5229\u7b97\u6cd5\u8fdb\u884cIoU\u5339\u914d\uff0c\u7b80\u5355\u9ad8\u6548\u4f46\u6613\u53d7\u906e\u6321\u5f71\u54cd\u3002<br>\u2022 <strong>DeepSORT<\/strong>\uff1a\u5728SORT\u57fa\u7840\u4e0a\u5f15\u5165\u5916\u89c2\u7279\u5f81\uff08ReID\u7f51\u7edc\uff09\u548c\u7ea7\u8054\u5339\u914d\uff0c\u63d0\u5347\u906e\u6321\u573a\u666f\u7684\u9c81\u68d2\u6027\u3002<br>\u2022 <strong>JDE<\/strong>\uff1a\u8054\u5408\u68c0\u6d4b\u4e0e\u5d4c\u5165\u6a21\u578b\uff0c\u540c\u6b65\u8f93\u51fa\u68c0\u6d4b\u6846\u548c\u7279\u5f81\u5411\u91cf\uff0c\u51cf\u5c11\u8ba1\u7b97\u5197\u4f59\u3002<\/li>\n\n\n\n<li><strong>Transformer\u9a71\u52a8\u6a21\u578b<\/strong>\uff1a<br>\u2022 <strong>Trackformer<\/strong>\uff1a\u901a\u8fc7\u81ea\u6ce8\u610f\u529b\u673a\u5236\u9690\u5f0f\u5173\u8054\u8f68\u8ff9\uff0c\u907f\u514d\u4f9d\u8d56\u5916\u89c2\u7279\u5f81\u3002<br>\u2022 <strong>MOTR<\/strong>\uff1a\u7aef\u5230\u7aef\u6846\u67b6\u7ed3\u5408\u8f68\u8ff9\u611f\u77e5\u6807\u7b7e\u5206\u914d\u7b56\u7565\uff08TALA\uff09\uff0c\u4f18\u5316\u957f\u65f6\u8ddf\u8e2a\u6027\u80fd\u3002<\/li>\n\n\n\n<li><strong>\u5bc6\u96c6\u67e5\u8be2\u6a21\u578b<\/strong>\uff1a<br>\u2022 <strong>TransCenter<\/strong>\uff1a\u57fa\u4e8e\u5b6a\u751f\u7f51\u7edc\u548c\u591a\u5c3a\u5ea6\u70ed\u529b\u56fe\u9884\u6d4b\uff0c\u5b9e\u73b0\u50cf\u7d20\u7ea7\u5bc6\u96c6\u68c0\u6d4b\u4e0e\u4f4d\u79fb\u8ddf\u8e2a\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3. <strong>\u5e94\u7528\u573a\u666f<\/strong><\/h4>\n\n\n\n<p>MOT\u5e7f\u6cdb\u5e94\u7528\u4e8e\u4ee5\u4e0b\u9886\u57df\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b89\u9632\u76d1\u63a7<\/strong>\uff1a\u5b9e\u65f6\u76d1\u6d4b\u5f02\u5e38\u884c\u4e3a\uff08\u5982\u76d7\u7a83\u3001\u6597\u6bb4\uff09\uff0c\u8ffd\u8e2a\u76ee\u6807\u8f68\u8ff9\u3002<\/li>\n\n\n\n<li><strong>\u81ea\u52a8\u9a7e\u9a76<\/strong>\uff1a\u611f\u77e5\u5468\u56f4\u8f66\u8f86\u548c\u884c\u4eba\u52a8\u6001\uff0c\u8f85\u52a9\u8def\u5f84\u89c4\u5212\u4e0e\u907f\u969c\u3002<\/li>\n\n\n\n<li><strong>\u65e0\u4eba\u673a\u4e0e\u673a\u5668\u4eba<\/strong>\uff1a\u540c\u6b65\u591a\u4f20\u611f\u5668\u6570\u636e\uff0c\u5b9e\u73b0\u7cbe\u51c6\u5bfc\u822a\u4e0e\u7269\u6d41\u914d\u9001\u3002<\/li>\n\n\n\n<li><strong>\u667a\u80fd\u4ea4\u901a<\/strong>\uff1a\u4f18\u5316\u4fe1\u53f7\u63a7\u5236\u4e0e\u8f66\u6d41\u7ba1\u7406\uff0c\u63d0\u5347\u9053\u8def\u5b89\u5168\u3002<\/li>\n\n\n\n<li><strong>\u865a\u62df\u73b0\u5b9e\/\u4f53\u80b2\u5206\u6790<\/strong>\uff1a\u8ffd\u8e2a\u7528\u6237\u6216\u8fd0\u52a8\u5458\u52a8\u4f5c\uff0c\u589e\u5f3a\u4ea4\u4e92\u4f53\u9a8c\u4e0e\u6218\u672f\u5206\u6790\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4. <strong>\u6280\u672f\u6311\u6218\u4e0e\u89e3\u51b3\u65b9\u6848<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u76ee\u6807\u906e\u6321<\/strong>\uff1a\u901a\u8fc7\u7ea7\u8054\u5339\u914d\u548c\u5916\u89c2\u7279\u5f81\u878d\u5408\uff08\u5982DeepSORT\uff09\u7f13\u89e3\u8bef\u5339\u914d\u3002<\/li>\n\n\n\n<li><strong>\u5b9e\u65f6\u6027\u8981\u6c42<\/strong>\uff1a\u91c7\u7528\u8f7b\u91cf\u7ea7\u6a21\u578b\uff08\u5982SORT\uff09\u6216\u786c\u4ef6\u52a0\u901f\uff08GPU\uff09\u63d0\u5347\u5904\u7406\u901f\u5ea6\u3002<\/li>\n\n\n\n<li><strong>\u76ee\u6807\u76f8\u4f3c\u6027\u5e72\u6270<\/strong>\uff1a\u7ed3\u5408\u8fd0\u52a8\u6a21\u578b\uff08\u9a6c\u6c0f\u8ddd\u79bb\uff09\u4e0e\u6df1\u5ea6\u7279\u5f81\uff08ReID\uff09\u589e\u5f3a\u533a\u5206\u80fd\u529b\u3002<\/li>\n\n\n\n<li><strong>\u65b0\u76ee\u6807\u8fdb\u5165\/\u79bb\u5f00<\/strong>\uff1a\u8bbe\u8ba1\u8f68\u8ff9\u751f\u547d\u5468\u671f\u7ba1\u7406\u673a\u5236\uff08\u5982\u786e\u8ba4\u9608\u503c\u3001\u4e22\u5931\u8ba1\u6570\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">5. <strong>\u6027\u80fd\u8bc4\u4f30\u4e0e\u6570\u636e\u96c6<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8bc4\u4ef7\u6307\u6807<\/strong>\uff1a\u5e38\u7528MOTA\uff08\u7efc\u5408\u68c0\u6d4b\u4e0e\u8ddf\u8e2a\u7cbe\u5ea6\uff09\u3001IDF1\uff08\u8eab\u4efd\u4e00\u81f4\u6027\uff09\u7b49\u3002<\/li>\n\n\n\n<li><strong>\u4e3b\u6d41\u6570\u636e\u96c6<\/strong>\uff1a<br>\u2022 <strong>MOTChallenge<\/strong>\uff1a\u4e13\u6ce8\u4e8e\u884c\u4eba\u8ddf\u8e2a\uff0c\u5305\u542b\u9ad8\u5bc6\u5ea6\u573a\u666f\uff08\u5982MOT17\/20\uff09\u3002<br>\u2022 <strong>KITTI<\/strong>\uff1a\u81ea\u52a8\u9a7e\u9a76\u573a\u666f\u4e0b\u591a\u7c7b\u76ee\u6807\u8ddf\u8e2a\u57fa\u51c6\u3002<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\"><strong> C++\u4ee3\u7801\u5b9e\u73b0 <\/strong><\/h2>\n\n\n\n<p><strong> \u524d\u7f6e\u77e5\u8bc6\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>YOLO\u76ee\u6807\u68c0\u6d4b\u7b97\u6cd5<\/strong><\/li>\n\n\n\n<li><strong>\u5308\u7259\u5229\u7b97\u6cd5\uff08Kuhn-Munkres\uff09<\/strong><a href=\"http:\/\/120.55.184.7\/?p=665\" data-type=\"post\" data-id=\"665\"> <\/a><a href=\"http:\/\/120.55.184.7\/?p=665\" data-type=\"post\" data-id=\"665\">Kuhn-Munkres\u5e26\u6743\u4e8c\u5206\u56fe\u6700\u5927\u6743\u5339\u914d<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>1. YOLO\u76ee\u6807\u68c0\u6d4b\u6a21\u5757<\/strong><\/h5>\n\n\n\n<p>\u4f7f\u7528OpenCV\u7684DNN\u6a21\u5757\u52a0\u8f7dYOLO\u6a21\u578b\uff0c\u68c0\u6d4b\u6bcf\u5e27\u4e2d\u7684\u76ee\u6807\u8fb9\u754c\u6846\uff08Bounding Box\uff09\u5e76\u63d0\u53d6\u7279\u5f81\u3002<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n#include &lt;opencv2\/opencv.hpp&gt;\n#include &lt;opencv2\/dnn.hpp&gt;\nusing namespace cv;\nusing namespace dnn;\n\nclass YOLODetector {\npublic:\n    YOLODetector(const string&amp; cfg, const string&amp; weights, const string&amp; classesFile) {\n        net = readNetFromDarknet(cfg, weights);\n        net.setPreferableBackend(DNN_BACKEND_OPENCV);\n        net.setPreferableTarget(DNN_TARGET_CPU);\n\n        ifstream ifs(classesFile);\n        string line;\n        while (getline(ifs, line)) classes.push_back(line);\n    }\n\n    vector&lt;Rect&gt; detect(Mat&amp; frame, vector&lt;int&gt;&amp; classIds) {\n        Mat blob;\n        blobFromImage(frame, blob, 1\/255.0, Size(416, 416), Scalar(0,0,0), true, false);\n        net.setInput(blob);\n\n        vector&lt;Mat&gt; outs;\n        net.forward(outs, getOutputsNames(net));\n\n        vector&lt;Rect&gt; boxes;\n        for (auto&amp; out : outs) {\n            for (int i = 0; i &lt; out.rows; ++i) {\n                Mat scores = out.row(i).colRange(5, out.cols);\n                Point classIdPoint;\n                double confidence;\n                minMaxLoc(scores, 0, &amp;confidence, 0, &amp;classIdPoint);\n                if (confidence &gt; 0.5) {  \/\/ \u7f6e\u4fe1\u5ea6\u9608\u503c\n                    int centerX = (int)(out.at&lt;float&gt;(i, 0) * frame.cols);\n                    int centerY = (int)(out.at&lt;float&gt;(i, 1) * frame.rows);\n                    int width = (int)(out.at&lt;float&gt;(i, 2) * frame.cols);\n                    int height = (int)(out.at&lt;float&gt;(i, 3) * frame.rows);\n                    boxes.emplace_back(centerX - width\/2, centerY - height\/2, width, height);\n                    classIds.push_back(classIdPoint.x);\n                }\n            }\n        }\n        return boxes;\n    }\n\nprivate:\n    vector&lt;string&gt; getOutputsNames(const Net&amp; net) {\n        vector&lt;int&gt; outLayers = net.getUnconnectedOutLayers();\n        vector&lt;string&gt; names = net.getLayerNames();\n        vector&lt;string&gt; res;\n        for (int id : outLayers) res.push_back(names&#x5B;id - 1]);\n        return res;\n    }\n\n    Net net;\n    vector&lt;string&gt; classes;\n};\n<\/pre><\/div>\n\n\n<h5 class=\"wp-block-heading\"><strong>2. KM\u7b97\u6cd5\u6570\u636e\u5173\u8054<\/strong><\/h5>\n\n\n\n<p>\u57fa\u4e8e\u68c0\u6d4b\u6846\u4e0e\u8f68\u8ff9\u7684IoU\u6784\u5efa\u4ee3\u4ef7\u77e9\u9635\uff0c\u4f7f\u7528KM\u7b97\u6cd5\u8fdb\u884c\u6700\u4f18\u5339\u914d\u3002<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n#include &lt;vector&gt;\n#include &lt;algorithm&gt;\nusing namespace std;\n\nclass KMTracker {\npublic:\n    struct Track {\n        Rect box;\n        int id;\n        int lostFrames = 0;\n    };\n\n    vector&lt;Track&gt; tracks;\n    int nextId = 1;\n\n    vector&lt;pair&lt;int, int&gt;&gt; associate(const vector&lt;Rect&gt;&amp; detections) {\n        int n = tracks.size(), m = detections.size();\n        vector&lt;vector&lt;double&gt;&gt; costMatrix(n, vector&lt;double&gt;(m, 0.0));\n\n        \/\/ \u8ba1\u7b97IoU\u4f5c\u4e3a\u4ee3\u4ef7\u77e9\u9635\n        for (int i = 0; i &lt; n; ++i) {\n            for (int j = 0; j &lt; m; ++j) {\n                costMatrix&#x5B;i]&#x5B;j] = 1 - iou(tracks&#x5B;i].box, detections&#x5B;j]);\n            }\n        }\n\n        \/\/ KM\u7b97\u6cd5\u6c42\u89e3\u6700\u4f18\u5339\u914d\n        vector&lt;int&gt; match = KM(costMatrix);\n        vector&lt;pair&lt;int, int&gt;&gt; matches;\n        for (int i = 0; i &lt; n; ++i) {\n            if (match&#x5B;i] != -1 &amp;&amp; costMatrix&#x5B;i]&#x5B;match&#x5B;i]] &lt; 0.7) {  \/\/ \u9608\u503c\u8fc7\u6ee4\n                matches.emplace_back(i, match&#x5B;i]);\n            }\n        }\n        return matches;\n    }\n\nprivate:\n    double iou(const Rect&amp; a, const Rect&amp; b) {\n        int x1 = max(a.x, b.x);\n        int y1 = max(a.y, b.y);\n        int x2 = min(a.x + a.width, b.x + b.width);\n        int y2 = min(a.y + a.height, b.y + b.height);\n        int inter = max(0, x2 - x1) * max(0, y2 - y1);\n        return inter \/ (a.area() + b.area() - inter + 1e-5);\n    }\n\n    vector&lt;int&gt; KM(const vector&lt;vector&lt;double&gt;&gt;&amp; cost) {\n        \/\/ KM\u7b97\u6cd5\u5b9e\u73b0\uff08\u53c2\u8003\u5308\u7259\u5229\u7b97\u6cd5\u4f18\u5316\u7248\u672c\uff09\n        int n = cost.size(), m = cost&#x5B;0].size();\n        vector&lt;double&gt; u(n+1, 0), v(m+1, 0);\n        vector&lt;int&gt; p(m+1, 0), way(m+1, 0);\n\n        for (int i = 1; i &lt;= n; ++i) {\n            vector&lt;double&gt; minv(m+1, INFINITY);\n            vector&lt;bool&gt; used(m+1, false);\n            p&#x5B;0] = i;\n            int j0 = 0;\n            do {\n                used&#x5B;j0] = true;\n                int i0 = p&#x5B;j0];\n                double delta = INFINITY;\n                int j1;\n                for (int j = 1; j &lt;= m; ++j) {\n                    if (!used&#x5B;j]) {\n                        double cur = cost&#x5B;i0-1]&#x5B;j-1] - u&#x5B;i0] - v&#x5B;j];\n                        if (cur &lt; minv&#x5B;j]) {\n                            minv&#x5B;j] = cur;\n                            way&#x5B;j] = j0;\n                        }\n                        if (minv&#x5B;j] &lt; delta) {\n                            delta = minv&#x5B;j];\n                            j1 = j;\n                        }\n                    }\n                }\n                for (int j = 0; j &lt;= m; ++j) {\n                    if (used&#x5B;j]) {\n                        u&#x5B;p&#x5B;j]] += delta;\n                        v&#x5B;j] -= delta;\n                    } else {\n                        minv&#x5B;j] -= delta;\n                    }\n                }\n                j0 = j1;\n            } while (p&#x5B;j0] != 0);\n\n            do {\n                int j1 = way&#x5B;j0];\n                p&#x5B;j0] = p&#x5B;j1];\n                j0 = j1;\n            } while (j0 != 0);\n        }\n\n        vector&lt;int&gt; res(n, -1);\n        for (int j = 1; j &lt;= m; ++j) {\n            if (p&#x5B;j] != 0) res&#x5B;p&#x5B;j]-1] = j-1;\n        }\n        return res;\n    }\n};\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\"><strong>3. \u4e3b\u6d41\u7a0b\u96c6\u6210<\/strong><\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\nint main() {\n    \/\/ \u521d\u59cb\u5316YOLO\u68c0\u6d4b\u5668\u548cKM\u8ddf\u8e2a\u5668\n    YOLODetector detector(&quot;yolov3.cfg&quot;, &quot;yolov3.weights&quot;, &quot;coco.names&quot;);\n    KMTracker tracker;\n\n    VideoCapture cap(&quot;video.mp4&quot;);\n    Mat frame;\n    while (cap.read(frame)) {\n        vector&lt;int&gt; classIds;\n        vector&lt;Rect&gt; detections = detector.detect(frame, classIds);\n\n        \/\/ \u6570\u636e\u5173\u8054\n        auto matches = tracker.associate(detections);\n\n        \/\/ \u66f4\u65b0\u5339\u914d\u8f68\u8ff9\n        vector&lt;bool&gt; matched(detections.size(), false);\n        for (auto&amp; &#x5B;trackIdx, detIdx] : matches) {\n            tracker.tracks&#x5B;trackIdx].box = detections&#x5B;detIdx];\n            tracker.tracks&#x5B;trackIdx].lostFrames = 0;\n            matched&#x5B;detIdx] = true;\n        }\n\n        \/\/ \u5904\u7406\u672a\u5339\u914d\u7684\u68c0\u6d4b\uff08\u65b0\u76ee\u6807\uff09\n        for (int i = 0; i &lt; detections.size(); ++i) {\n            if (!matched&#x5B;i]) {\n                tracker.tracks.push_back({detections&#x5B;i], tracker.nextId++, 0});\n            }\n        }\n\n        \/\/ \u5904\u7406\u4e22\u5931\u7684\u8f68\u8ff9\uff08\u8d85\u8fc7\u9608\u503c\u5220\u9664\uff09\n        tracker.tracks.erase(remove_if(tracker.tracks.begin(), tracker.tracks.end(),\n            &#x5B;](const KMTracker::Track&amp; t) { return t.lostFrames++ &gt; 5; }), tracker.tracks.end());\n\n        \/\/ \u7ed8\u5236\u7ed3\u679c\n        for (auto&amp; track : tracker.tracks) {\n            rectangle(frame, track.box, Scalar(0, 255, 0), 2);\n            putText(frame, format(&quot;ID:%d&quot;, track.id), track.box.tl(), \n                    FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0, 0, 255), 2);\n        }\n        imshow(&quot;Tracking&quot;, frame);\n        waitKey(1);\n    }\n    return 0;\n}\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u5173\u952e\u4f18\u5316\u70b9<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6a21\u578b\u8f7b\u91cf\u5316<\/strong>\uff1a\u9009\u62e9YOLOv3-tiny\u6216YOLOv4-tiny\u6a21\u578b\u63d0\u5347\u5b9e\u65f6\u6027\u3002<\/li>\n\n\n\n<li><strong>\u7279\u5f81\u878d\u5408<\/strong>\uff1a\u5728\u4ee3\u4ef7\u77e9\u9635\u4e2d\u7ed3\u5408IoU\u4e0eReID\u7279\u5f81\uff08\u9700\u96c6\u6210ReID\u6a21\u578b\uff09\u3002<\/li>\n\n\n\n<li><strong>\u8f68\u8ff9\u9884\u6d4b<\/strong>\uff1a\u52a0\u5165\u5361\u5c14\u66fc\u6ee4\u6ce2\uff08\u53c2\u8003OpenCV\u7684<code>KalmanFilter<\/code>\u7c7b\uff09\u63d0\u5347\u906e\u6321\u573a\u666f\u7a33\u5b9a\u6027\u3002<\/li>\n\n\n\n<li><strong>\u5e76\u884c\u8ba1\u7b97<\/strong>\uff1a\u4f7f\u7528CUDA\u52a0\u901fYOLO\u63a8\u7406\uff08\u8bbe\u7f6e<code>DNN_TARGET_CUDA<\/code>\uff09\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u6027\u80fd\u8bc4\u4f30<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6570\u636e\u96c6<\/strong>\uff1aMOT17\uff08\u884c\u4eba\u8ddf\u8e2a\uff09\u6216KITTI\uff08\u8f66\u8f86\u8ddf\u8e2a\uff09\u3002<\/li>\n\n\n\n<li><strong>\u6307\u6807<\/strong>\uff1a<br>\u2022 <strong>MOTA<\/strong>\uff08\u7efc\u5408\u7cbe\u5ea6\uff09\uff1a\u7ea670%<br>\u2022 <strong>FPS<\/strong>\uff1aYOLOv3+KM\u5728GTX 1080\u4e0a\u53ef\u8fbe25~30 FPS\u3002<\/li>\n\n\n\n<li><strong>\u6539\u8fdb\u65b9\u5411<\/strong>\uff1a\u66ff\u6362\u4e3aByteTrack\u6216DeepSORT\u7b97\u6cd5\u4ee5\u63d0\u5347ID\u7a33\u5b9a\u6027\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5b8c\u6574\u4ee3\u7801\u9700\u914d\u7f6eOpenCV 4.x\u548cC++17\u73af\u5883\uff0c\u6a21\u578b\u6587\u4ef6\u9700\u4ece\u5b98\u65b9\u4ed3\u5e93\u4e0b\u8f7d\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. \u57fa\u7840\u6982\u5ff5 \u591a\u76ee\u6807\u8ddf\u8e2a\uff08Multi-Object Tracking, MOT\uff09\u65e8\u5728\u4ece\u89c6\u9891\u5e8f\u5217\u4e2d\u5b9e\u65f6\u68c0\u6d4b\u5e76\u6301 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[135],"tags":[138,136,137],"class_list":["post-661","post","type-post","status-publish","format-standard","hentry","category-135","tag-km","tag-mot","tag-yolo"],"_links":{"self":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=661"}],"version-history":[{"count":5,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/661\/revisions"}],"predecessor-version":[{"id":690,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/661\/revisions\/690"}],"wp:attachment":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}