{"id":478,"date":"2023-05-07T08:29:31","date_gmt":"2023-05-07T00:29:31","guid":{"rendered":"https:\/\/zhaocunwei.co.uk\/?p=478"},"modified":"2023-05-07T09:14:19","modified_gmt":"2023-05-07T01:14:19","slug":"summary-the-understanding-and-code-imple","status":"publish","type":"post","link":"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/","title":{"rendered":"\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09"},"content":{"rendered":"<h1>\u524d\u8a00<\/h1>\n<p>\u6700\u8fd1\u5de5\u4f5c\u8fdb\u884c\ud83d\ude97\u62cd\u7167\u7684\u68c0\u6d4b\uff0c\u5e94\u7528\u5230\u4e86\u6b64\u6a21\u578b\uff0c\u672c\u7bc7\u6587\u7ae0\u53ea\u662f\u81ea\u5df1\u5bf9\u6a21\u578b\u7684\u7406\u89e3\uff0c\u521d\u5b66\u5c0f\u767d\ud83d\ude00<\/p>\n<p><font color=red>\u4e2a\u4eba\u603b\u7ed3\uff0c\u6709\u4e0d\u59a5\u7684\u5730\u65b9\uff0c\u8bf7\u60a8\u8bc4\u8bba\u56de\u590d\u8c22\u8c22\u60a8<\/font><\/p>\n<h1>\u4e2a\u4eba\u603b\u7ed3<\/h1>\n<p>\u6211\u901a\u8fc7\u67e5\u9605\u8d44\u6599\u77e5\u9053Faster R-CNN \u662f\u5bf9\u8c61\u68c0\u6d4b\u9886\u57df\u7684\u91cd\u8981\u5de5\u4f5c,\u5b83\u63d0\u51fa\u4e86\u533a\u57df\u5efa\u8bae\u7f51\u7edc(Regional Proposal Network,RPN)\u6765\u751f\u6210\u68c0\u6d4b\u6846\u7684\u5efa\u8bae,\u6781\u5927\u5730\u52a0\u5feb\u4e86\u68c0\u6d4b\u901f\u5ea6\u3002<\/p>\n<p>Faster R-CNN \u7684\u4e3b\u8981\u521b\u65b0\u70b9\u6709:<\/p>\n<ol>\n<li>\n<p>RPN\u7f51\u7edc:RPN \u7f51\u7edc\u901a\u8fc7\u6ed1\u52a8\u7a97\u53e3\u65b9\u5f0f\u5728\u6574\u4e2a\u56fe\u50cf\u4e0a\u751f\u6210\u53ef\u80fd\u5305\u542b\u5bf9\u8c61\u7684\u77e9\u5f62\u63d0\u6848,\u8fd9\u4e9b\u63d0\u6848\u4f1a\u8f93\u5165\u5230\u68c0\u6d4b\u7f51\u7edc\u4e2d\u3002RPN \u5305\u542b\u5377\u79ef\u5c42\u548c\u4e24\u4e2a\u5b50\u7f51\u7edc:\u5206\u7c7b\u5b50\u7f51\u7edc\u5224\u65ad\u63d0\u6848\u6846\u5185\u662f\u5426\u5305\u542b\u76ee\u6807\u5bf9\u8c61;\u56de\u5f52\u5b50\u7f51\u7edc\u7cbe\u4fee\u63d0\u6848\u6846\u7684\u5750\u6807\u3002RPN \u66ff\u4ee3\u4e86\u4f20\u7edf\u4f7f\u7528\u7684\u9009\u62e9\u6027\u641c\u7d22\u7b97\u6cd5,\u5927\u5927\u52a0\u5feb\u4e86\u68c0\u6d4b\u901f\u5ea6\u3002<\/p>\n<p>\u6839\u636e\u4e0a\u9762\u7684\u603b\u7ed3\u63cf\u8ff0\uff0c\u6211\u81ea\u5df1\u5c1d\u8bd5\u7740\u4f7f\u7528Java\u4ee3\u7801\u8fdb\u884c\u6c47\u603b\u81ea\u5df1\u60f3\u8868\u8fbe\u7684\u5185\u5bb9\uff1a<\/p>\n<pre><code>\/\/ \u5b9a\u4e49RPN\u7f51\u7edc\npublic class RPN {\n   \/\/ \u5b9a\u4e49RPN\u5206\u7c7b\u7f51\u7edc\u548c\u56de\u5f52\u7f51\u7edc\n   private ConvolutionalLayer clsLayer; \n   private ConvolutionalLayer regLayer;\n\n   \/\/ RPN\u7f51\u7edc\u8f93\u5165\n   private Tensor input;\n\n   \/\/ \u6ed1\u52a8\u7a97\u53e3\u53c2\u6570\n   private int windowSize = 3; \n   private int stride = 2;\n\n   \/\/ anchor\u6846\u53c2\u6570\n   private int[] anchorSizes = {8, 16, 32};\n   private int[] anchorRatios = {0.5, 1, 2};\n\n   public RPN(Tensor input) {\n       this.input = input;\n       \/\/ \u6784\u5efaRPN\u5206\u7c7b\u7f51\u7edc,\u5224\u65ad\u63d0\u6848\u6846\u5185\u662f\u5426\u5305\u542b\u76ee\u6807\n       clsLayer = new ConvolutionalLayer(input.width, input.height, 512, \n                   windowSize, stride, \"relu\", \"cls_layer\"); \n       \/\/ \u6784\u5efaRPN\u56de\u5f52\u7f51\u7edc,\u8c03\u6574\u63d0\u6848\u6846\u7684\u4f4d\u7f6e\n       regLayer = new ConvolutionalLayer(input.width, input.height, 512 * 4,  \n                   windowSize, stride, \"relu\", \"reg_layer\"); \n   }\n\n   public ArrayList<Rect> getProposals() {\n       \/\/ \u8f93\u5165\u5230RPN\u7f51\u7edc\n       Tensor clsLayerOutput = clsLayer.forwardPropagate(input); \n       Tensor regLayerOutput = regLayer.forwardPropagate(input);\n\n       \/\/ \u751f\u6210anchor\u6846\n       List<Rect> anchors = generateAnchors(input.width, input.height); \n\n       \/\/ \u8fd0\u7528\u6ed1\u52a8\u7a97\u53e3\u5728\u7279\u5f81\u56fe\u4e0a\u8fdb\u884c\u626b\u63cf    \n       for (int y = 0; y < clsLayerOutput.height; y += stride) {\n           for (int x = 0; x < clsLayerOutput.width; x += stride) {\n               \/\/ \u83b7\u5f97\u7a97\u53e3\u5185\u7684anchor\n               List<Rect> windowAnchors = getWindowAnchors(anchors, x, y);\n               \/\/ \u5bf9\u7a97\u53e3\u5185\u6bcf\u4e2aanchor\u5224\u65ad\u662f\u5426\u5305\u542b\u5bf9\u8c61\n               for (Rect anchor : windowAnchors) {\n                   double clsScore = clsLayerOutput.get(x, y, anchor.index);\n                   if (clsScore > 0.5) {\n                       \/\/ \u7cbe\u4feeanchor\u6846\u5750\u6807\n                       Rect rect = regressAnchor(regLayerOutput, anchor);\n                       proposals.add(rect);\n                   }\n               }\n           } \n       }\n       \/\/ \u8fd4\u56deRPN\u751f\u6210\u7684\u63d0\u6848\u6846\n       return proposals;\n   }\n}\n<\/code><\/pre>\n<p>\u5144\u5f1f\u4eecJava\u4ee3\u7801\u5b9e\u73b0\u4e86RPN\u7f51\u7edc\u7684\u6846\u67b6,\u5305\u62ec\u5206\u7c7b\u5b50\u7f51\u7edc\u3001\u56de\u5f52\u5b50\u7f51\u7edc,\u901a\u8fc7\u6ed1\u52a8\u7a97\u53e3\u5728\u7279\u5f81\u56fe\u4e0a\u751f\u6210\u63d0\u6848\u6846,\u5e76\u5224\u65ad\u63d0\u6848\u6846\u5185\u662f\u5426\u5305\u542b\u76ee\u6807\u4ee5\u53ca\u8c03\u6574\u63d0\u6848\u6846\u7684\u5750\u6807,\u4ece\u800c\u751f\u6210\u6700\u7ec8\u7684\u63d0\u6848\u3002 <\/p>\n<\/li>\n<li>\n<p>\u5171\u4eab\u5377\u79ef\u5c42:Faster R-CNN \u4f7f\u7528\u540c\u4e00\u4e2a\u5377\u79ef\u5c42\u6765\u63d0\u53d6\u56fe\u50cf\u7279\u5f81,\u7136\u540e\u5206\u522b\u8f93\u5165\u5230RPN\u7f51\u7edc\u548c\u68c0\u6d4b\u7f51\u7edc\u4e2d\u3002\u8fd9\u907f\u514d\u4e86\u91cd\u590d\u8ba1\u7b97,\u52a0\u5feb\u4e86\u6574\u4e2a\u7f51\u7edc\u7684\u5904\u7406\u901f\u5ea6\u3002<\/p>\n<\/li>\n<\/ol>\n<p>\u200b       \u9996\u5148\u6211\u4eec\u5927\u5bb6\u8981\u77e5\u9053\u4eab\u5377\u79ef\u5c42\u5305\u542b\u4e00\u4e2a\u5377\u79ef\u5c42,\u5b83\u5bf9\u8f93\u5165\u56fe\u50cf\u8fdb\u884c\u5377\u79ef,\u5f97\u5230\u7279\u5f81\u56fe\u3002\u8fd9\u4e2a\u7279\u5f81\u56fe\u7136\u540e\u540c\u65f6\u8f93\u5165\u5230RPN\u7f51\u7edc\u548c\u68c0\u6d4b\u7f51\u7edc,\u5b9e\u73b0\u4e86\u8ba1\u7b97\u7684\u5171\u4eab,\u52a0\u5feb\u4e86\u6574\u4e2a\u68c0\u6d4b\u7f51\u7edc\u7684\u901f\u5ea6\u3002RPN\u7f51\u7edc\u548c\u68c0\u6d4b\u7f51\u7edc\u7136\u540e\u5404\u81ea\u4ece\u8fd9\u4e2a\u7279\u5f81\u56fe\u4e2d\u63d0\u53d6\u81ea\u5df1\u9700\u8981\u7684\u4fe1\u606f,\u5b8c\u6210\u63d0\u6848\u751f\u6210\u548c\u6700\u7ec8\u68c0\u6d4b\u7ed3\u679c\u7684\u8f93\u51fa\u3002<\/p>\n<p>\u5177\u4f53\u7684\u4ee3\u7801\u5b9e\u73b0\uff1a<\/p>\n<pre><code>\/\/ \u5b9a\u4e49\u5171\u4eab\u5377\u79ef\u5c42\npublic class SharedConvLayer {\n    private ConvolutionalLayer convLayer;\n\n    public SharedConvLayer(int width, int height, int channels) {\n        \/\/ \u6784\u5efa\u5377\u79ef\u5c42\n        convLayer = new ConvolutionalLayer(width, height, channels, \n                    3, 1, &quot;relu&quot;, &quot;conv_layer&quot;); \n    }\n\n    public Tensor forwardPropagate(Tensor input) {\n        \/\/ \u8f93\u5165\u56fe\u50cf,\u5f97\u5230\u7279\u5f81\u56fe\n        Tensor convOutput = convLayer.forwardPropagate(input);\n        \/\/ convOutput\u5206\u522b\u8f93\u5165\u5230RPN\u7f51\u7edc\u548c\u68c0\u6d4b\u7f51\u7edc\n        Tensor rpnInput = convOutput;\n        Tensor detInput = convOutput; \n        \/\/ ......\n\n        return convOutput;\n    }\n}\n\n\/\/ \u8c03\u7528\u5171\u4eab\u5377\u79ef\u5c42\nSharedConvLayer sharedLayer = new SharedConvLayer(width, height, 256);\nTensor features = sharedLayer.forwardPropagate(imageInput);\n\/\/ features\u8f93\u5165\u5230RPN\u7f51\u7edc\u548c\u68c0\u6d4b\u7f51\u7edc \nRPN rpn = new RPN(features);\nDetector det = new Detector(features);<\/code><\/pre>\n<ol>\n<li>\n<p>RoI pooling \u5c42:RoI pooling\u5c42\u5c06RPN\u751f\u6210\u7684\u63d0\u6848\u6846\u5185\u7684\u7279\u5f81\u6620\u5c04\u5230\u4e00\u4e2a\u56fa\u5b9a\u5927\u5c0f,\u4e3a\u68c0\u6d4b\u7f51\u7edc\u63d0\u4f9b\u7edf\u4e00\u5c3a\u5bf8\u7684\u8f93\u5165\u3002\u8fd9\u7b80\u5316\u4e86\u68c0\u6d4b\u7f51\u7edc\u7684\u7ed3\u6784,\u4e5f\u4f7f\u7f51\u7edc\u5728\u4e0d\u540c\u5c3a\u5bf8\u7684\u8f93\u5165\u56fe\u50cf\u4e0a\u4e5f\u80fd\u6b63\u5e38\u5de5\u4f5c\u3002<\/p>\n<p>\u5b9e\u9645\u9879\u76ee\u5f53\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u8fd9\u4e2a\u6c60\u5316\u6280\u672f\uff0c\u5728\u9879\u76ee\u5f53\u4e2d\uff0c\u4e3b\u8981\u4f7f\u7528\u5728\uff1a<br \/>\n\u7edf\u4e00\u8f93\u5165\u5927\u5c0f:RoI\u6c60\u5316\u5c42\u5c06\u4efb\u610f\u5927\u5c0f\u7684RoI(\u63d0\u6848\u6846\u533a\u57df)\u6620\u5c04\u5230\u56fa\u5b9a\u5c3a\u5bf8\u7684\u8f93\u51fa,\u6bd4\u59827x7,\u8fd9\u4f7f\u5f97\u540e\u7eed\u7684\u5168\u8fde\u63a5\u5c42\u548c\u68c0\u6d4b\u7f51\u7edc\u53ef\u4ee5\u5904\u7406\u56fa\u5b9a\u5c3a\u5bf8\u7684\u8f93\u5165,\u7b80\u5316\u4e86\u7f51\u7edc\u7ed3\u6784\u3002\u5982\u679c\u4e0d\u4f7f\u7528RoI\u6c60\u5316\u5c42,\u5168\u8fde\u63a5\u5c42\u7684\u8f93\u5165\u5927\u5c0f\u662f\u53ef\u53d8\u7684,\u7f51\u7edc\u7ed3\u6784\u4f1a\u5f88\u590d\u6742\u3002<\/p>\n<p>\u907f\u514d\u7279\u5f81\u56fe\u5c3a\u5ea6\u53d8\u5316:RoI\u6c60\u5316\u5c42\u5c06\u63d0\u6848\u6846\u5185\u7684\u7279\u5f81\u56fe\u533a\u57df\u6620\u5c04\u5230\u56fa\u5b9a\u5927\u5c0f,\u8fd9\u6837\u907f\u514d\u4e86\u7279\u5f81\u56fe\u8f93\u5165\u5230\u5168\u8fde\u63a5\u5c42\u65f6\u7531\u4e8eRoI\u5927\u5c0f\u4e0d\u540c\u5bfc\u81f4\u7684\u5c3a\u5ea6\u53d8\u5316,\u4fdd\u8bc1\u4e86\u5168\u8fde\u63a5\u5c42\u8f93\u5165\u7684\u7a33\u5b9a\u6027\u3002<\/p>\n<p>\u6700\u5927\u6c47\u805a:RoI\u6c60\u5316\u5c42\u4f7f\u7528\u6700\u5927\u6c60\u5316,\u8fd9\u6709\u52a9\u4e8e\u6291\u5236\u7279\u5f81\u56fe\u5185\u566a\u70b9\u7684\u5f71\u54cd,\u63d0\u53d6RoI\u5185\u6700\u663e\u8457\u7684\u7279\u5f81\u3002<\/p>\n<p>\u8f6c\u7f6e\u5377\u79ef\u586b\u5145:\u5728Mask R-CNN\u4e2d,RoI\u6c60\u5316\u5c42\u8f93\u51fa\u88ab\u9001\u5165\u8f6c\u7f6e\u5377\u79ef\u5c42\u8fdb\u884c\u4e0a\u91c7\u6837,\u751f\u6210\u4e0e\u8f93\u5165RoI\u5927\u5c0f\u76f8\u540c\u7684\u8f93\u51fa,\u7136\u540e\u53ef\u4ee5\u5f97\u5230RoI\u5185\u6bcf\u4e2a\u50cf\u7d20\u7684\u7c7b\u522b\u9884\u6d4b\u548c\u5206\u5272\u63a9\u7801\u3002RoI\u6c60\u5316\u5c42\u4fdd\u8bc1\u4e86\u8f6c\u7f6e\u5377\u79ef\u8f93\u5165\u7684\u5927\u5c0f,\u5b9e\u73b0\u4e86Mask R-CNN\u7684\u5206\u5272\u529f\u80fd\u3002\u9664\u4e86Faster\/Mask R-CNN,RoI\u6c60\u5316\u5c42\u4e5f\u7528\u4e8e\u5176\u4ed6\u57fa\u4e8eRoI\u7684\u65b9\u6cd5\u4e2d,\u6bd4\u5982SPPnet\u3001Fast R-CNN\u7b49,\u5176\u4f5c\u7528\u4e3b\u8981\u8fd8\u662f\u4e3a\u4e86\u751f\u6210\u56fa\u5b9a\u5c3a\u5bf8\u7684\u8f93\u5165,\u7b80\u5316\u5168\u8fde\u63a5\u5c42\u548c\u540e\u7eed\u7f51\u7edc\u7ed3\u6784,\u8fd9\u662f\u5b9e\u73b0\u5feb\u901f\u548c\u9ad8\u7cbe\u5ea6\u68c0\u6d4b\u7684\u5173\u952e\u3002\u6240\u4ee5RoI\u6c60\u5316\u5c42\u53ef\u4ee5\u8bf4\u662fR-CNN\u7cfb\u5217\u7f51\u7edc\u7684\u6838\u5fc3\u7ec4\u4ef6\u4e4b\u4e00\u3002<\/p>\n<\/li>\n<\/ol>\n<p>\u200b      <\/p>\n<pre><code>public class RoIPoolingLayer {\n    \/\/ \u6c60\u5316\u53c2\u6570\n    private int pooledWidth;\n    private int pooledHeight;\n\n    public RoIPoolingLayer(int pooledWidth, int pooledHeight) {\n        this.pooledWidth = pooledWidth;\n        this.pooledHeight = pooledHeight;\n    }\n\n    public Tensor forwardPropagate(Tensor features, List&lt;Rect&gt; proposals) {\n        \/\/ features\u662f\u5171\u4eab\u5377\u79ef\u5c42\u8f93\u51fa\u7684\u7279\u5f81\u56fe\n        \/\/ proposals\u662fRPN\u7f51\u7edc\u751f\u6210\u7684\u63d0\u6848\u6846\u5217\u8868\n\n        \/\/ \u5b58\u50a8\u7279\u5f81\u56fe\u5bf9\u5e94\u6bcf\u4e2a\u63d0\u6848\u6846\u7684\u6c60\u5316\u7ed3\u679c\n        Tensor[] pooledFeatures = new Tensor[proposals.size()]; \n\n        \/\/ \u904d\u5386\u6bcf\u4e2a\u63d0\u6848\u6846\n        for (int i = 0; i &lt; proposals.size(); i++) {\n            \/\/ \u63d0\u6848\u6846\u5750\u6807\n            Rect rect = proposals.get(i);\n            \/\/ \u8ba1\u7b97\u63d0\u6848\u6846\u5185\u7279\u5f81\u56fe\u7684\u5bbd\u548c\u9ad8\n            int roiWidth = (int) rect.width \/ 16; \n            int roiHeight = (int) rect.height \/ 16; \n\n            \/\/ \u904d\u5386\u6c60\u5316\u7f51\u683c\u6bcf\u4e2a\u5355\u5143,\u6700\u5927\u6c60\u5316\n            for (int x = 0; x &lt; pooledWidth; x++) {\n                for (int y = 0; y &lt; pooledHeight; y++) {\n                    \/\/ \u8ba1\u7b97\u6c60\u5316\u5355\u5143\u5728\u7279\u5f81\u56fe\u5185\u7684\u5750\u6807\u8303\u56f4\n                    int xstart = x * roiWidth \/ pooledWidth; \n                    int xend = (x + 1) * roiWidth \/ pooledWidth;\n                    int ystart = y * roiHeight \/ pooledHeight;\n                    int yend = (y + 1) * roiHeight \/ pooledHeight;\n\n                    \/\/ \u83b7\u5f97\u6c60\u5316\u5355\u5143\u5185\u7684\u6700\u5927\u503c\n                    double maxVal = -1;  \n                    for (int xx = xstart; xx &lt; xend; xx++) {\n                        for (int yy = ystart; yy &lt; yend; yy++) {\n                            double val = features.get(rect.x + xx, rect.y + yy);\n                            maxVal = Math.max(maxVal, val);\n                        }\n                    }\n                    \/\/ \u8bbe\u7f6e\u6c60\u5316\u7ed3\u679c\u4e3a\u6700\u5927\u503c\n                    pooledFeatures[i].set(x, y, maxVal);\n                }\n            }\n        }\n        \/\/ \u8fd4\u56de\u6bcf\u4e2a\u63d0\u6848\u6846\u5f97\u5230\u7684\u56fa\u5b9a\u7ef4\u5ea6\u7684\u6c60\u5316\u7ed3\u679c\n        return pooledFeatures;\n    }\n}<\/code><\/pre>\n<ol>\n<li>\n<p>\u5728\u591a\u4efb\u52a1\u635f\u5931\u51fd\u6570:Faster R-CNN \u4f7f\u7528\u4e00\u79cd\u591a\u4efb\u52a1\u635f\u5931\u51fd\u6570\u540c\u65f6\u8bad\u7ec3\u5206\u7c7b subnet\u3001\u56de\u5f52 subnet \u548c RPN\u3002\u8fd9\u79cd\u635f\u5931\u51fd\u6570\u5305\u542b\u5206\u7c7b\u635f\u5931\u3001\u56de\u5f52\u635f\u5931\u548crpn\u5206\u7c7b\u635f\u5931\u4e09\u90e8\u5206,\u6709\u52a9\u4e8e\u7f51\u7edc\u7684\u7aef\u5230\u7aef\u8bad\u7ec3\u3002<\/p>\n<pre><code>public class MultiTaskLoss {\n   \/\/ \u5206\u7c7b\u635f\u5931\u51fd\u6570\n   private CrossEntropyLoss clsLoss; \n   \/\/ \u56de\u5f52\u635f\u5931\u51fd\u6570\n   private SmoothL1Loss regLoss;\n   \/\/ RPN\u5206\u7c7b\u635f\u5931\u51fd\u6570\n   private CrossEntropyLoss rpnClsLoss;\n\n   public MultiTaskLoss() {\n       \/\/ \u521d\u59cb\u5316\u635f\u5931\u51fd\u6570\n       clsLoss = new CrossEntropyLoss();\n       regLoss = new SmoothL1Loss(); \n       rpnClsLoss = new CrossEntropyLoss();\n   }\n\n   public double computeLoss(List<DetectResult> detResults, List<Rect> gtBoxes,  \n                            Tensor rpnClsOut, Tensor rpnRegOut, \n                            Tensor clsOut, Tensor regOut) {\n       \/\/ detResults\u662f\u68c0\u6d4b\u7f51\u7edc\u8f93\u51fa\u7684\u68c0\u6d4b\u7ed3\u679c\n       \/\/ gtBoxes\u662f\u56fe\u50cf\u7684\u771f\u5b9e\u6846\u5750\u6807\u548c\u7c7b\u522b\n       \/\/ rpnClsOut\u548crpnRegOut\u662fRPN\u7f51\u7edc\u7684\u8f93\u51fa\n       \/\/ clsOut\u548cregOut\u662f\u68c0\u6d4b\u7f51\u7edc\u7684\u8f93\u51fa\n\n       double classificationLoss = 0; \n       double regressionLoss = 0;\n       double rpnClassificationLoss = 0;\n\n       \/\/ \u8ba1\u7b97\u68c0\u6d4b\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931\u548c\u56de\u5f52\u635f\u5931\n       for (int i = 0; i < detResults.size(); i++) {\n           DetectResult detRes = detResults.get(i);\n           Rect gtBox = gtBoxes.get(i);\n           double clsProb = clsOut.get(i, gtBox.label);\n           classificationLoss += clsLoss.computeLoss(clsProb, 1);\n           double[] regPreds = getRegressionPredictions(regOut, i);\n           regressionLoss += regLoss.computeLoss(regPreds, gtBox);\n       }\n\n       \/\/ \u8ba1\u7b97RPN\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931\n       double[] rpnClsScores = rpnClsOut.data;\n       double[] rpnClsLabels = getRPNAnchorsLabels(gtBoxes);\n       rpnClassificationLoss = rpnClsLoss.computeLoss(rpnClsScores, rpnClsLabels); \n\n       \/\/ \u603b\u635f\u5931 = \u68c0\u6d4b\u7f51\u7edc\u5206\u7c7b\u635f\u5931 + \u68c0\u6d4b\u7f51\u7edc\u56de\u5f52\u635f\u5931 + RPN\u5206\u7c7b\u635f\u5931\n       double totalLoss = classificationLoss + regressionLoss + rpnClassificationLoss;\n       return totalLoss;\n   }\n}<\/code><\/pre>\n<p>\u6d4b\u8bd5\u6b65\u9aa4\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\n<p>\u83b7\u53d6\u68c0\u6d4b\u7f51\u7edc\u548cRPN\u7f51\u7edc\u7684\u8f93\u51fa,\u4ee5\u53caground truth\u6846\u548c\u7c7b\u522b<\/p>\n<pre><code>\/\/ \u83b7\u5f97\u68c0\u6d4b\u7f51\u7edc\u8f93\u51fa\nList<DetectResult> detResults = detector.detect(image);\nTensor clsOut = detector.getClsLayerOutput();\nTensor regOut = detector.getRegLayerOutput();\n\n\/\/ \u83b7\u5f97RPN\u7f51\u7edc\u8f93\u51fa \nTensor rpnClsOut = rpn.getClsLayerOutput(); \nTensor rpnRegOut = rpn.getRegLayerOutput();\n\n\/\/ \u8bfb\u53d6\u56fe\u50cf\u7684ground truth\u6846\u548c\u7c7b\u522b\nList<Rect> gtBoxes = new ArrayList<>();\nList<Integer> gtClasses = new ArrayList<>();\n\/\/ \u8bfb\u53d6ground truth\u6570\u636e\nfor (DetectionData data : groundTruth) {\n  Rect box = data.box;\n  int cls = data.label;\n  gtBoxes.add(box);\n  gtClasses.add(cls); \n} \n\n\/\/\u4e3aground truth\u6846\u5206\u914d\u7c7b\u522b one-hot\u7f16\u7801\nList<Integer> gtClassesOneHot = new ArrayList<>();\nfor (int cls : gtClasses) {\n  int[] oneHot = new int[numClasses];\n  oneHot[cls] = 1;\n  gtClassesOneHot.add(oneHot);\n} <\/code><\/pre>\n<p>-  detResults\u5b58\u50a8\u68c0\u6d4b\u7f51\u7edc\u8f93\u51fa\u7684\u68c0\u6d4b\u6846\u548c\u7f6e\u4fe1\u5ea6<br \/>\n-  clsOut\u548cregOut\u5206\u522b\u662f\u68c0\u6d4b\u7f51\u7edc\u7684\u5206\u7c7b\u8f93\u51fa\u548c\u56de\u5f52\u8f93\u51fa<br \/>\n-  rpnClsOut\u548crpnRegOut\u5206\u522b\u662fRPN\u7f51\u7edc\u7684\u5206\u7c7b\u8f93\u51fa\u548c\u56de\u5f52\u8f93\u51fa<br \/>\n-  gtBoxes\u5b58\u50a8\u56fe\u50cf\u4e2d\u7684ground truth\u6846\u5750\u6807<br \/>\n-  gtClasses\u548cgtClassesOneHot\u5206\u522b\u5b58\u50a8ground truth\u6846\u7684\u7c7b\u522b\u6807\u7b7e\u548cone-hot\u7f16\u7801\u8fd9\u4e9b\u4fe1\u606f\u4f5c\u4e3a\u591a\u4efb\u52a1\u635f\u5931\u51fd\u6570\u7684\u8f93\u5165,\u7528\u4e8e\u8ba1\u7b97\u68c0\u6d4b\u7f51\u7edc\u548cRPN\u7f51\u7edc\u7684\u635f\u5931,\u5b9e\u73b0Faster R-CNN\u7684\u7aef\u5230\u7aef\u8bad\u7ec3\u3002<\/p>\n<p>ground truth\u4fe1\u606f\u4e5f\u7528\u4e8e\u5bf9\u8bad\u7ec3\u597d\u7684\u6a21\u578b\u8fdb\u884c\u8bc4\u4f30\u3002<\/p>\n<\/li>\n<li>\n<p>\u8ba1\u7b97\u68c0\u6d4b\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931\u548c\u56de\u5f52\u635f\u5931<\/p>\n<pre><code>\/\/ \u5206\u7c7b\u635f\u5931\ndouble classificationLoss = 0;  \n\/\/ \u56de\u5f52\u635f\u5931\ndouble regressionLoss = 0;\n\n\/\/ \u904d\u5386\u6bcf\u4e2a\u68c0\u6d4b\u6846\nfor (int i = 0; i < detResults.size(); i++) {\n  DetectResult detRes = detResults.get(i);\n  Rect gtBox = gtBoxes.get(i);\n\n  \/\/ \u83b7\u5f97\u9884\u6d4b\u7684\u7c7b\u522b\u6982\u7387\u548c\u56de\u5f52\u9884\u6d4b\u7ed3\u679c\n  double clsProb = clsOut.get(i, gtClassesOneHot.get(i));\n  double[] regPreds = getRegressionPredictions(regOut, i);\n\n  \/\/ \u8ba1\u7b97\u5206\u7c7b\u635f\u5931\n  classificationLoss += clsLoss.computeLoss(clsProb, 1);\n\n  \/\/ \u8ba1\u7b97\u56de\u5f52\u635f\u5931\n  regressionLoss += regLoss.computeLoss(regPreds, gtBox);  \n}\n\ndouble totalLoss = classificationLoss + regressionLoss; <\/code><\/pre>\n<p>- detResults\u5b58\u50a8\u68c0\u6d4b\u7f51\u7edc\u9884\u6d4b\u7684\u68c0\u6d4b\u6846,gtBoxes\u5b58\u50a8\u5bf9\u5e94\u7684ground truth\u6846<br \/>\n- clsOut\u5b58\u50a8\u9884\u6d4b\u7684\u7c7b\u522b\u6982\u7387,regOut\u5b58\u50a8\u9884\u6d4b\u7684\u56de\u5f52\u7ed3\u679c(\u6846\u7684\u504f\u79fb\u91cf\u7b49)<br \/>\n- clsLoss\u662f\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570\u7528\u4e8e\u8ba1\u7b97\u5206\u7c7b\u635f\u5931,regLoss\u662fSmooth L1\u635f\u5931\u51fd\u6570\u7528\u4e8e\u8ba1\u7b97\u56de\u5f52\u635f\u5931<br \/>\n- \u5bf9\u6bcf\u4e2a\u9884\u6d4b\u6846,\u83b7\u5f97\u5176\u9884\u6d4b\u7c7b\u522b\u6982\u7387\u548c\u56de\u5f52\u7ed3\u679c,\u8ba1\u7b97\u5176\u5206\u7c7b\u635f\u5931\u548c\u56de\u5f52\u635f\u5931,\u7d2f\u52a0\u5230\u603b\u635f\u5931totalLoss<br \/>\n- \u603b\u635f\u5931totalLoss\u5c06\u7528\u4e8e\u901a\u8fc7\u4f18\u5316\u7b97\u6cd5\u66f4\u65b0\u68c0\u6d4b\u7f51\u7edc\u7684\u53c2\u6570\u5206\u7c7b\u635f\u5931\u4f7f\u5f97\u9884\u6d4b\u7684\u7c7b\u522b\u6982\u7387\u4e0eground truth\u7c7b\u522b\u6700\u5339\u914d,\u56de\u5f52\u635f\u5931\u4f7f\u5f97\u9884\u6d4b\u6846\u4e0eground truth\u6846\u7684\u4f4d\u7f6e\u6700\u63a5\u8fd1\u3002\u540c\u65f6\u4f18\u5316\u8fd9\u4e24\u4e2a\u635f\u5931\u53ef\u4ee5\u8ba9\u68c0\u6d4b\u7f51\u7edc\u65e2\u9884\u6d4b\u6b63\u786e\u7684\u7c7b\u522b\u4e5f\u9884\u6d4b\u51c6\u786e\u7684\u6846\u4f4d\u7f6e,\u5b9e\u73b0\u9ad8\u7cbe\u5ea6\u7684\u68c0\u6d4b\u3002\u68c0\u6d4b\u7f51\u7edc\u7684\u5177\u4f53\u8f93\u51fa\u683c\u5f0f\u5728\u4e0d\u540c\u5b9e\u73b0\u4e2d\u53ef\u80fd\u4e0d\u540c,\u8fd9\u91cc\u53ea\u6982\u62ec\u5730\u8868\u793a\u4e3a\u7c7b\u522b\u6982\u7387\u548c\u56de\u5f52\u7ed3\u679c\u3002\u5206\u7c7b\u635f\u5931\u548c\u56de\u5f52\u635f\u5931\u7684\u8ba1\u7b97\u65b9\u5f0f\u4e5f\u53ef\u80fd\u4e0d\u540c,\u8fd9\u91cc\u53ea\u7ed9\u51fa\u901a\u7528\u7684\u601d\u8def\u3002\u6839\u636e\u7f51\u7edc\u7684\u5177\u4f53\u7ed3\u6784\u548c\u5b9e\u73b0,\u53ef\u4ee5\u9009\u62e9\u6700\u5408\u9002\u7684\u635f\u5931\u51fd\u6570\u5f62\u5f0f\u3002<\/p>\n<\/li>\n<li>\n<p>\u8ba1\u7b97RPN\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931<\/p>\n<pre><code>\/\/ RPN\u5206\u7c7b\u635f\u5931\ndouble rpnClassificationLoss = 0;  \n\n\/\/ \u83b7\u5f97RPN\u7f51\u7edc\u7684\u5206\u7c7b\u8f93\u51fa\ndouble[] rpnClsScores = rpnClsOut.data;\n\n\/\/ \u6784\u9020RPN\u7684anchor\u6807\u7b7e\ndouble[] rpnClsLabels = getRPNAnchorsLabels(gtBoxes);\n\n\/\/ \u4f7f\u7528\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570\u8ba1\u7b97RPN\u7684\u5206\u7c7b\u635f\u5931\nrpnClassificationLoss = rpnClsLoss.computeLoss(rpnClsScores, rpnClsLabels);<\/code><\/pre>\n<p>- rpnClsScores\u5b58\u50a8RPN\u7f51\u7edc\u9884\u6d4b\u6bcf\u4e2aanchor\u6846\u5305\u542b\u76ee\u6807\u7684\u6982\u7387<br \/>\n- rpnClsLabels\u5b58\u50a8\u6bcf\u4e2aanchor\u6846\u5bf9\u5e94\u7684ground truth\u6807\u7b7e,1\u8868\u793a\u5305\u542b\u76ee\u6807,0\u8868\u793a\u4e0d\u5305\u542b<br \/>\n- rpnClsLoss\u662f\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570,\u7528\u4e8e\u8ba1\u7b97RPN\u7684\u5206\u7c7b\u635f\u5931<br \/>\n- \u6839\u636eanchor\u6846\u548cground truth\u6846\u7684\u4ea4\u5e76\u6bd4,\u4e3a\u6bcf\u4e2aanchor\u6846\u8d4b\u4e881\u62160\u7684\u6807\u7b7e<br \/>\n- \u4f7f\u7528\u4ea4\u53c9\u71b5\u635f\u5931\u51fd\u6570\u8ba1\u7b97RPN\u5206\u7c7b\u635f\u5931,\u4f7f\u5f97\u9884\u6d4b\u6982\u7387\u4e0e\u6807\u7b7e\u5339\u914dRPN\u7f51\u7edc\u7684\u5206\u7c7b\u8f93\u51fa\u548c\u5206\u7c7b\u635f\u5931\u7684\u8ba1\u7b97\u4e0e\u68c0\u6d4b\u7f51\u7edc\u7c7b\u4f3c,\u4e5f\u662f\u4e3a\u4e86\u8ba9\u9884\u6d4b\u7684\u7c7b\u522b\u4e0eground truth\u5339\u914d\u3002\u4e0d\u540c\u7684\u662f,RPN\u7f51\u7edc predicting\u7684\u662f\u6bcf\u4e2aanchor\u6846\u662f\u5426\u5305\u542b\u76ee\u6807\u5bf9\u8c61\u3002\u6784\u9020RPN\u7684anchor\u6807\u7b7e\u7684\u4ee3\u7801\u53ef\u4ee5\u5982\u4e0b:<\/p>\n<pre><code>java\ndouble[] getRPNAnchorsLabels(List<Rect> gtBoxes) {\n  \/\/ \u83b7\u5f97\u6240\u6709anchor\u6846\n  List<Rect> anchors = generateAnchors(inputWidth, inputHeight);\n\n  \/\/ \u4e3a\u6bcf\u4e2aanchor\u6846\u521d\u59cb\u5316\u6807\u7b7e\u4e3a0(\u4e0d\u5305\u542b\u76ee\u6807)\n  double[] labels = new double[anchors.size()];\n\n  \/\/ \u904d\u5386\u6bcf\u4e2aground truth\u6846\n  for (Rect gtBox : gtBoxes) {\n      \/\/ \u8ba1\u7b97\u6bcf\u4e2aanchor\u6846\u4e0e\u8be5ground truth\u6846\u7684\u4ea4\u5e76\u6bd4\n      for (int i = 0; i < anchors.size(); i++) {\n          Rect anchor = anchors.get(i);\n          double iou = anchor.calculateIoU(gtBox);\n\n          \/\/ \u5982\u679c\u4ea4\u5e76\u6bd4\u5927\u4e8e0.7,\u5219\u8be5anchor\u6846\u5305\u542b\u76ee\u6807,\u6807\u7b7e\u8bbe\u4e3a1\n          if (iou > 0.7) {\n              labels[i] = 1; \n          }\n      }\n  }\n\n  return labels; \n}<\/code><\/pre>\n<p>RPN\u7684\u5206\u7c7b\u635f\u5931\u7684\u8ba1\u7b97\u4e0e\u68c0\u6d4b\u7f51\u7edc\u7c7b\u4f3c,\u4e5f\u662fFaster R-CNN\u7aef\u5230\u7aef\u8bad\u7ec3\u7684\u4e00\u90e8\u5206,\u7528\u4e8e\u4f7fRPN\u751f\u6210\u9ad8\u8d28\u91cf\u7684\u5019\u9009\u6846,\u4e3a\u68c0\u6d4b\u7f51\u7edc\u63d0\u4f9b\u66f4\u597d\u7684\u8f93\u5165\u63d0\u6848\u3002 <\/p>\n<\/li>\n<li>\n<p>\u6c42\u4e09\u4e2a\u635f\u5931\u7684\u548c,\u5f97\u5230\u603b\u7684\u591a\u4efb\u52a1\u635f\u5931<\/p>\n<pre><code>\/\/ \u68c0\u6d4b\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931\ndouble classificationLoss = 0;  \n\n\/\/ \u68c0\u6d4b\u7f51\u7edc\u7684\u56de\u5f52\u635f\u5931 \ndouble regressionLoss = 0;\n\n\/\/ RPN\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931\ndouble rpnClassificationLoss = 0;\n\n\/\/ \u8ba1\u7b97\u68c0\u6d4b\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931\u548c\u56de\u5f52\u635f\u5931\n\/\/ ...\n\n\/\/ \u8ba1\u7b97RPN\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931 \n\/\/ ...\n\n\/\/ \u603b\u635f\u5931 = \u68c0\u6d4b\u7f51\u7edc\u5206\u7c7b\u635f\u5931 + \u68c0\u6d4b\u7f51\u7edc\u56de\u5f52\u635f\u5931 + RPN\u5206\u7c7b\u635f\u5931\ndouble totalLoss = classificationLoss + regressionLoss + rpnClassificationLoss;<\/code><\/pre>\n<p>- classificationLoss\u662f\u68c0\u6d4b\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931<br \/>\n- regressionLoss\u662f\u68c0\u6d4b\u7f51\u7edc\u7684\u56de\u5f52\u635f\u5931<br \/>\n- rpnClassificationLoss\u662fRPN\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931<br \/>\n- totalLoss\u662f\u4e09\u4e2a\u635f\u5931\u7684\u603b\u548c,\u4f5c\u4e3aFaster R-CNN\u7684\u591a\u4efb\u52a1\u635f\u5931\u51fd\u6570\u591a\u4efb\u52a1\u635f\u5931\u51fd\u6570\u540c\u65f6\u5305\u542b\u4e09\u4e2a\u90e8\u5206:1. \u68c0\u6d4b\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931:\u4f7f\u68c0\u6d4b\u6846\u9884\u6d4b\u7684\u7c7b\u522b\u4e0eground truth\u5339\u914d<\/p>\n<ol start=\"2\">\n<li>\u68c0\u6d4b\u7f51\u7edc\u7684\u56de\u5f52\u635f\u5931:\u4f7f\u68c0\u6d4b\u6846\u7684\u4f4d\u7f6e\u4e0eground truth\u6846\u5339\u914d<\/li>\n<li>RPN\u7f51\u7edc\u7684\u5206\u7c7b\u635f\u5931:\u4f7fanchor\u6846\u9884\u6d4b\u7684\u5305\u542b\u76ee\u6807\u6982\u7387\u4e0e\u6807\u6ce8\u5339\u914d\u901a\u8fc7\u540c\u65f6\u4f18\u5316\u8fd9\u4e09\u4e2a\u635f\u5931,Faster R-CNN\u5b9e\u73b0\u7aef\u5230\u7aef\u7684\u8bad\u7ec3\u3002\u5206\u7c7b\u635f\u5931\u6709\u52a9\u4e8e\u9884\u6d4b\u6b63\u786e\u7684\u7c7b\u522b,\u56de\u5f52\u635f\u5931\u6709\u52a9\u4e8e\u9884\u6d4b\u51c6\u786e\u7684\u6846\u4f4d\u7f6e,RPN\u7684\u5206\u7c7b\u635f\u5931\u6709\u52a9\u4e8e\u751f\u6210\u9ad8\u8d28\u91cf\u7684\u5019\u9009\u6846\u3002\u4e09\u8005\u76f8\u4e92\u8865\u5145,\u5171\u540c\u63d0\u9ad8Faster R-CNN\u7684\u68c0\u6d4b\u6027\u80fd\u3002\u603b\u635f\u5931totalLoss\u53cd\u6620\u4e86\u7f51\u7edc\u7684\u5206\u7c7b\u3001\u56de\u5f52\u548c\u5019\u9009\u6846\u751f\u6210\u7684\u80fd\u529b\u3002\u901a\u8fc7\u4f18\u5316\u7b97\u6cd5\u66f4\u65b0\u7f51\u7edc\u53c2\u6570,\u6700\u5c0f\u5316\u603b\u635f\u5931,\u6700\u7ec8\u5b66\u5f97\u5206\u7c7b\u51c6\u786e\u3001\u5b9a\u4f4d\u7cbe\u786e\u3001\u5019\u9009\u6846\u9ad8\u8d28\u91cf\u7684\u68c0\u6d4b\u6a21\u578b\u3002\u591a\u4efb\u52a1\u635f\u5931\u51fd\u6570\u662fFaster R-CNN\u5b9e\u73b0\u7aef\u5230\u7aef\u8bad\u7ec3\u7684\u5173\u952e,\u5b83\u901a\u8fc7\u4f18\u5316\u591a\u4e2a\u76ee\u6807,\u63d0\u9ad8\u4e86\u6a21\u578b\u7684\u9c81\u68d2\u6027,\u5b9e\u73b0\u4e86\u51fa\u8272\u7684\u68c0\u6d4b\u6548\u679c\u3002\u603b\u635f\u5931totalLoss\u7efc\u5408\u53cd\u6620\u4e86\u7f51\u7edc\u7684\u591a\u4e2a\u529f\u80fd,\u662f\u8861\u91cf\u7f51\u7edc\u6027\u80fd\u7684\u91cd\u8981\u6307\u6807\u3002<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u901a\u8fc7\u56de\u4f20\u548c\u4f18\u5316\u7b97\u6cd5\u66f4\u65b0\u7f51\u7edc\u53c2\u6570,\u4f7f\u5f97\u591a\u4efb\u52a1\u635f\u5931\u6700\u5c0f\u5316<\/p>\n<pre><code>\/\/ \u4f18\u5316\u5668\u4f7f\u7528Adam\u7b97\u6cd5\nOptimizer adam = new Adam(lr);\n\n\/\/ \u8bad\u7ec3\u8f6e\u6570 \nint epochs = 100;\n\n\/\/ \u904d\u5386\u6bcf\u4e2aepoch\nfor (int epoch = 0; epoch < epochs; epoch++) {\n  \/\/ \u904d\u5386\u6bcf\u4e2aminibatch\n  for (int batch = 0; batch < batches; batch++) {\n      \/\/ \u83b7\u5f97\u5f53\u524dminibatch\u7684\u56fe\u50cf\u548cground truth\n      List<Image> images = trainData.getBatch(batch); \n      List<List<DetectionData>> groundTruth = trainData.getGroundTruth(batch);\n\n      \/\/ \u524d\u5411\u4f20\u64ad\u83b7\u5f97\u68c0\u6d4b\u7f51\u7edc\u8f93\u51fa\u3001RPN\u7f51\u7edc\u8f93\u51fa\u548c\u635f\u5931\n      List<DetectResult> detResults = detector.detect(images);\n      Tensor clsOut = detector.getClsLayerOutput();\n      Tensor regOut = detector.getRegLayerOutput();\n      Tensor rpnClsOut = rpn.getClsLayerOutput();   \n      Tensor rpnRegOut = rpn.getRegLayerOutput(); \n      double loss = lossFunction.computeLoss(detResults, groundTruth,  \n                                             rpnClsOut, rpnRegOut,  \n                                             clsOut, regOut); \n\n      \/\/ \u53cd\u5411\u4f20\u64ad\u8ba1\u7b97\u635f\u5931\u5bf9\u7f51\u7edc\u53c2\u6570\u7684\u68af\u5ea6\n      detector.backPropagate(loss);\n      rpn.backPropagate(loss);\n\n      \/\/ \u66f4\u65b0\u7f51\u7edc\u53c2\u6570\n      adam.update(detector.getParams()); \n      adam.update(rpn.getParams());\n  }\n\n  \/\/ \u53ef\u89c6\u5316\u8bad\u7ec3\u8fc7\u7a0b,\u8bc4\u4f30\u6a21\u578b\u5728\u9a8c\u8bc1\u96c6\u4e0a\u7684\u6027\u80fd\n  \/\/ ... \n}<\/code><\/pre>\n<p>- adam\u662fAdam\u4f18\u5316\u7b97\u6cd5,\u7528\u4e8e\u66f4\u65b0\u7f51\u7edc\u53c2\u6570,lr\u662f\u5b66\u4e60\u7387<br \/>\n- images\u548cgroundTruth\u5206\u522b\u5b58\u50a8\u5f53\u524dminibatch\u7684\u56fe\u50cf\u548c\u5bf9\u5e94\u7684ground truth<br \/>\n- \u524d\u5411\u4f20\u64ad\u901a\u8fc7\u68c0\u6d4b\u7f51\u7edc\u548cRPN\u7f51\u7edc\u83b7\u5f97\u9884\u6d4b\u8f93\u51fa\u548c\u635f\u5931<br \/>\n- \u53cd\u5411\u4f20\u64ad\u8ba1\u7b97\u635f\u5931\u76f8\u5bf9\u4e8e\u7f51\u7edc\u53c2\u6570\u7684\u68af\u5ea6<br \/>\n- Adam\u4f18\u5316\u5668\u5229\u7528\u68af\u5ea6\u66f4\u65b0\u7f51\u7edc\u53c2\u6570,\u6700\u5c0f\u5316\u635f\u5931<br \/>\n- \u91cd\u590d\u4ee5\u4e0a\u6b65\u9aa4,\u904d\u5386\u6574\u4e2a\u8bad\u7ec3\u96c6,\u5b8c\u6210Faster R-CNN\u7684\u8bad\u7ec3<br \/>\n- \u53ef\u901a\u8fc7\u5728\u9a8c\u8bc1\u96c6\u4e0a\u8bc4\u4f30\u6a21\u578b,\u89c2\u5bdf\u8bad\u7ec3\u8fc7\u7a0b,\u9009\u62e9\u6700\u4f18\u6a21\u578b\u901a\u8fc7\u53cd\u590d\u904d\u5386\u8bad\u7ec3\u6570\u636e,\u6839\u636e\u591a\u4efb\u52a1\u635f\u5931\u66f4\u65b0\u7f51\u7edc\u53c2\u6570,Faster R-CNN\u7684\u5206\u7c7b\u80fd\u529b\u3001\u56de\u5f52\u80fd\u529b\u548c\u63d0\u6848\u751f\u6210\u80fd\u529b\u9010\u6e10\u63d0\u9ad8,\u5b9e\u73b0\u7aef\u5230\u7aef\u7684\u68c0\u6d4b\u6a21\u578b\u8bad\u7ec3\u3002Adam\u4f18\u5316\u7b97\u6cd5\u662f\u5f53\u524d\u6700\u6d41\u884c\u7684\u4f18\u5316\u65b9\u6cd5,\u80fd\u6709\u6548\u5730\u5229\u7528\u68af\u5ea6\u4fe1\u606f\u66f4\u65b0\u53c2\u6570,\u5feb\u901f\u6536\u655b\u3002<\/p>\n<p>\u8bad\u7ec3\u8fc7\u7a0b\u7684\u53ef\u89c6\u5316\u548c\u5728\u9a8c\u8bc1\u96c6\u4e0a\u7684\u8bc4\u4f30\u53ef\u4ee5\u5e2e\u52a9\u9009\u62e9\u6700\u4f18\u7684\u6a21\u578b,\u907f\u514d\u8fc7\u62df\u5408,\u8fd9\u662f\u5b9e\u73b0\u9ad8\u8d28\u91cf\u68c0\u6d4b\u6a21\u578b\u7684\u5173\u952e\u3002Faster R-CNN \u7684\u8bad\u7ec3\u8fc7\u7a0b\u4e0e\u5e38\u89c4\u7684\u5206\u7c7b\u7f51\u7edc\u7c7b\u4f3c,\u901a\u8fc7\u635f\u5931\u5bfc\u5411\u7684\u5b66\u4e60\u4e0d\u65ad\u4f18\u5316\u7f51\u7edc,\u662f\u5b9e\u73b0\u5176\u51fa\u8272\u6027\u80fd\u7684\u57fa\u7840\u3002<\/p>\n<\/li>\n<\/ol>\n<p>\u603b\u4e4b,Faster R-CNN\u901a\u8fc7RPN\u66ff\u4ee3\u9009\u62e9\u6027\u641c\u7d22\u7b97\u6cd5,RoI\u6c60\u5316\u5c42Screen\u6539\u53d8\u7279\u5f81\u56fe\u5927\u5c0f,\u548c\u591a\u4efb\u52a1\u635f\u5931\u51fd\u6570\u5b9e\u73b0\u7aef\u5230\u7aef\u8bad\u7ec3,\u5927\u5e45\u52a0\u5feb\u4e86\u68c0\u6d4b\u901f\u5ea6\u4e0e\u7cbe\u5ea6,\u662f\u76ee\u524d\u5bf9\u8c61\u68c0\u6d4b\u7684\u57fa\u51c6\u65b9\u6cd5\u4e4b\u4e00\u3002 <\/p>\n<\/li>\n<\/ol>\n<h2>\u5e94\u7528\u573a\u666f<\/h2>\n<p>Faster R-CNN \u5728\u5f88\u591a\u9886\u57df\u90fd\u6709\u5e7f\u6cdb\u7684\u5e94\u7528:<\/p>\n<ol>\n<li>\n<p>\u901a\u7528\u5bf9\u8c61\u68c0\u6d4b:Faster R-CNN \u6700\u521d\u662f\u4e3a\u901a\u7528\u5bf9\u8c61\u68c0\u6d4b\u800c\u63d0\u51fa\u7684,\u5b83\u5728PASCAL VOC\u548cMS COCO\u6570\u636e\u96c6\u4e0a\u8868\u73b0\u4f18\u5f02,\u80fd\u68c0\u6d4b\u4eba\u3001\u8f66\u3001\u52a8\u7269\u7b49\u5404\u7c7b\u5bf9\u8c61\u3002<\/p>\n<p>\u8fd9\u91cc\u662f\u4f7f\u7528Faster R-CNN\u8fdb\u884c\u901a\u7528\u5bf9\u8c61\u68c0\u6d4b\u7684\u6d4b\u8bd5\u4ee3\u7801:<\/p>\n<pre><code>\/\/ \u8bfb\u53d6PASCAL VOC\u6216COCO\u6570\u636e\u96c6\u7684\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\nList<Image> trainImages = readTrainImages(); \nList<List<DetectionData>> trainGroundTruth = readTrainGroundTruth(); \nList<Image> testImages = readTestImages();\n\n\/\/ \u6784\u5efaFaster R-CNN\u6a21\u578b \nFasterRCNN fasterRCNN = new FasterRCNN(); \n\n\/\/ \u8bad\u7ec3\u6a21\u578b\nfasterRCNN.train(trainImages, trainGroundTruth, 100); \n\n\/\/ \u5728\u6d4b\u8bd5\u96c6\u4e0a\u8bc4\u4f30\u6a21\u578b\nList<DetectResult> testResults = fasterRCNN.detect(testImages);\ndouble map = meanAveragePrecision(testResults, testGroundTruth); \nprint(\"mAP: \" + map);\n\n\/\/ \u663e\u793a\u6d4b\u8bd5\u7ed3\u679c\nfor (int i = 0; i < testResults.size(); i++) {\n   Image image = testImages.get(i);\n   List<DetectResult> results = testResults.get(i);\n   displayDetections(image, results); \n}<\/code><\/pre>\n<p>- PASCAL VOC\u548cCOCO\u6570\u636e\u96c6\u5305\u542b\u5404\u7c7b\u76ee\u6807\u5bf9\u8c61\u7684\u56fe\u50cf\u548c\u6807\u7b7e,\u53ef\u7528\u4e8eFaster R-CNN\u7684\u8bad\u7ec3\u4e0e\u6d4b\u8bd5<br \/>\n- \u6784\u5efaFaster R-CNN\u6a21\u578b,\u5e76\u5728PASCAL VOC\u6216COCO\u8bad\u7ec3\u96c6\u4e0a\u8bad\u7ec3<br \/>\n- \u5728\u6d4b\u8bd5\u96c6\u4e0a\u8bc4\u4f30\u6a21\u578b,\u8ba1\u7b97mAP(\u5e73\u5747\u7cbe\u5ea6)\u6307\u6807<br \/>\n- \u663e\u793a\u6d4b\u8bd5\u96c6\u4e0a\u7684\u68c0\u6d4b\u7ed3\u679c,\u6bcf\u4e2a\u56fe\u50cf\u4e0a\u753b\u51fa\u9884\u6d4b\u6846\u548c\u7c7b\u522bFaster R-CNN\u901a\u8fc7\u5728\u5927\u89c4\u6a21\u6570\u636e\u96c6\u4e0a\u8bad\u7ec3,\u5b66\u4e60\u5230\u68c0\u6d4b\u5404\u7c7b\u5bf9\u8c61\u7684\u7279\u5f81,\u53ef\u4ee5\u5b9e\u73b0\u901a\u7528\u7684\u5bf9\u8c61\u68c0\u6d4b\u3002<\/p>\n<p>PASCAL VOC\u6570\u636e\u96c6\u5305\u542b20\u4e2a\u7c7b\u522b\u7684\u5bf9\u8c61,COCO\u6570\u636e\u96c6\u5305\u542b80\u4e2a\u7c7b\u522b\u7684\u5bf9\u8c61,\u8fd9\u4e24\u4e2a\u6570\u636e\u96c6\u662fFaster R-CNN\u6700\u5e38\u7528\u7684\u6570\u636e\u96c6\u3002mAP\u6307\u6807\u7efc\u5408\u8bc4\u4ef7\u4e86\u6a21\u578b\u7684\u9884\u6d4b\u7cbe\u5ea6\u548c\u53ec\u56de\u7387,\u662f\u8861\u91cf\u68c0\u6d4b\u6a21\u578b\u6027\u80fd\u6700\u91cd\u8981\u7684\u6307\u6807\u3002<\/p>\n<p>\u9ad8mAP\u503c\u8868\u793a\u6a21\u578b\u53ef\u4ee5\u68c0\u6d4b\u8bb8\u591a\u771f\u5b9e\u76ee\u6807,\u4e14\u5c11\u6709\u9519\u68c0\u73b0\u8c61,\u5b9e\u73b0\u4e86\u7cbe\u786e\u7684\u68c0\u6d4b\u3002\u663e\u793a\u7684\u793a\u4f8b\u68c0\u6d4b\u7ed3\u679c\u53ef\u4ee5\u76f4\u89c2\u5730\u5224\u65adFaster R-CNN\u7684\u6027\u80fd,\u9884\u6d4b\u6846\u4f4d\u7f6e\u51c6\u786e\u548c\u7c7b\u522b\u6b63\u786e\u4e0e\u5426\u53cd\u6620\u4e86\u6a21\u578b\u7684\u5206\u7c7b\u548c\u56de\u5f52\u80fd\u529b\u3002<\/p>\n<p>Faster R-CNN\u901a\u5e38\u53ef\u4ee5\u5b9e\u73b0\u8f83\u9ad8\u7684mAP,\u5e76\u7ed9\u51fa\u786e\u5b9a\u7684\u68c0\u6d4b\u7ed3\u679c,\u8fd9\u8868\u660e\u5176\u51fa\u8272\u7684\u68c0\u6d4b\u6548\u679c\u3002\u6d4b\u8bd5\u4ee3\u7801\u4e3b\u8981\u7528\u4e8e\u8bc4\u4f30\u5df2\u8bad\u7ec3\u597d\u7684Faster R-CNN\u6a21\u578b,\u89c2\u5bdf\u5176\u68c0\u6d4b\u6548\u679c\u548c\u6027\u80fd\u3002<\/p>\n<p>\u901a\u8fc7mAP\u503c\u548c\u793a\u4f8b\u68c0\u6d4b\u53ef\u5224\u65ad\u6a21\u578b\u7684\u5206\u7c7b\u3001\u5b9a\u4f4d\u548c\u5019\u9009\u6846\u751f\u6210\u80fd\u529b,\u8fdb\u800c\u6539\u8fdb\u7f51\u7edc\u7ed3\u6784\u548c\u8bad\u7ec3\u7b56\u7565\u3002\u6d4b\u8bd5\u9636\u6bb5\u7684\u7ed3\u679c\u5206\u6790\u662f\u63d0\u9ad8\u68c0\u6d4b\u6a21\u578b\u6027\u80fd\u7684\u5173\u952e\u6240\u5728\u3002<\/p>\n<\/li>\n<li>\n<p>\u884c\u4eba\u68c0\u6d4b:Faster R-CNN \u4e5f\u7ecf\u5e38\u88ab\u5e94\u7528\u4e8e\u884c\u4eba\u68c0\u6d4b,\u901a\u8fc7\u8bad\u7ec3\u5927\u91cf\u884c\u4eba\u56fe\u50cf\u53ef\u4ee5\u5f88\u597d\u7684\u68c0\u6d4b\u884c\u4eba\u3002<\/p>\n<p>\u5bf9\u4e8e\u884c\u4eba\u68c0\u6d4b,Faster R-CNN\u7684\u8bad\u7ec3\u548c\u6d4b\u8bd5\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre><code>\/\/ \u8bfb\u53d6\u884c\u4eba\u68c0\u6d4b\u6570\u636e\u96c6,\u5982INRIA\u6216Caltech\u6570\u636e\u96c6\nList<Image> trainImages = readTrainImages(); \nList<List<PedestrianDetectionData>> trainGroundTruth = readTrainGroundTruth();\nList<Image> testImages = readTestImages();\n\n\/\/ \u6784\u5efaFaster R-CNN\u6a21\u578b,\u8bbe\u7f6enumClasses=1(\u53ea\u6709\u4e00\u4e2a\u884c\u4eba\u7c7b)\nFasterRCNN fasterRCNN = new FasterRCNN(1);  \n\n\/\/ \u8bad\u7ec3\u6a21\u578b\nfasterRCNN.train(trainImages, trainGroundTruth, 100);  \n\n\/\/ \u5728\u6d4b\u8bd5\u96c6\u4e0a\u8bc4\u4f30\u6a21\u578b  \nList<PedestrianDetectResult> testResults = fasterRCNN.detectPedestrians(testImages);\ndouble map = meanAveragePrecision(testResults, testGroundTruth);\nprint(\"mAP: \" + map);\n\n\/\/ \u663e\u793a\u6d4b\u8bd5\u96c6\u4e0a\u7684\u68c0\u6d4b\u7ed3\u679c\nfor (int i = 0; i < testResults.size(); i++) { \n   Image image = testImages.get(i);\n   List<PedestrianDetectResult> results = testResults.get(i);\n   displayDetections(image, results);  \n} <\/code><\/pre>\n<p>- INRIA\u4eba\u4f53\u68c0\u6d4b\u6570\u636e\u96c6\u548cCaltech\u884c\u4eba\u68c0\u6d4b\u6570\u636e\u96c6\u5305\u542b\u884c\u4eba\u7684\u56fe\u50cf\u548c\u6807\u6ce8\u4fe1\u606f<br \/>\n- \u6784\u5efaFaster R-CNN\u6a21\u578b,\u6307\u5b9a numClasses=1,\u8868\u793a\u53ea\u68c0\u6d4b\u884c\u4eba\u4e00\u4e2a\u7c7b\u522b<br \/>\n- \u5728\u884c\u4eba\u68c0\u6d4b\u6570\u636e\u96c6\u4e0a\u8bad\u7ec3\u6a21\u578b,\u5b66\u4e60\u68c0\u6d4b\u884c\u4eba<br \/>\n- \u8ba1\u7b97mAP\u548c\u663e\u793a\u68c0\u6d4b\u7ed3\u679c,\u8bc4\u4f30\u6a21\u578b\u7684\u884c\u4eba\u68c0\u6d4b\u6027\u80fd\u901a\u8fc7\u5927\u91cf\u884c\u4eba\u56fe\u50cf\u8bad\u7ec3,Faster R-CNN\u53ef\u4ee5\u5b66\u4e60\u5230\u68c0\u6d4b\u884c\u4eba\u7684\u7279\u5f81,\u5b9e\u73b0\u9ad8\u7cbe\u5ea6\u7684\u884c\u4eba\u68c0\u6d4b\u3002<\/p>\n<p>\u6307\u5b9a numClasses=1 \u7b80\u5316\u4e86\u6a21\u578b,\u53ea\u9700\u8981\u5224\u65ad\u662f\u5426\u5c5e\u4e8e\u884c\u4eba\u7c7b\u522b\u3002<\/p>\n<p>mAP\u6307\u6807\u548c\u793a\u4f8b\u68c0\u6d4b\u7ed3\u679c\u663e\u793a\u4e86\u6a21\u578b\u7684\u884c\u4eba\u68c0\u6d4b\u6548\u679c\u3002<\/p>\n<p>\u9ad8mAP\u548c\u51c6\u786e\u7684\u884c\u4eba\u6846\u8868\u660eFaster R-CNN\u5bf9\u4e8e\u884c\u4eba\u68c0\u6d4b\u4e5f\u662f\u975e\u5e38\u9ad8\u6548\u7684,\u53ef\u4ee5\u51c6\u786e\u5b9a\u4f4d\u884c\u4eba\u4f4d\u7f6e\u5e76\u6700\u5c0f\u5316\u8bef\u68c0\u3002<\/p>\n<p>Faster R-CNN\u7684\u6cdb\u5316\u80fd\u529b\u4f7f\u5176\u4e0d\u4ec5\u53ef\u4ee5\u68c0\u6d4b\u5404\u79cd\u4e00\u822c\u5bf9\u8c61,\u4e5f\u9002\u7528\u4e8e\u7279\u5b9a\u76ee\u6807\u7684\u68c0\u6d4b,\u6bd4\u5982\u884c\u4eba\u548c\u8f66\u8f86\u3002<\/p>\n<p>\u901a\u8fc7\u6d88\u9664\u80cc\u666f\u7c7b\u522b\u548c\u8c03\u6574\u7f51\u7edc\u7ed3\u6784,Faster R-CNN\u53ef\u4ee5\u4e13\u6ce8\u4e8e\u67d0\u4e00\u7279\u5b9a\u76ee\u6807\u7684\u68c0\u6d4b,\u5b9e\u73b0\u66f4\u9ad8\u7684\u7cbe\u5ea6\u3002<\/p>\n<p>\u884c\u4eba\u68c0\u6d4b\u662f\u4e00\u4e2a\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u5177\u6709\u6311\u6218\u7684\u4efb\u52a1,Faster R-CNN\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7aef\u5230\u7aef\u7684\u89e3\u51b3\u65b9\u6848,\u53ef\u4ee5\u5b66\u4e60\u884c\u4eba\u7684\u7279\u5f81\u8868\u793a,\u5b9e\u73b0\u51c6\u786e\u548c\u5b9e\u65f6\u7684\u884c\u4eba\u68c0\u6d4b,\u5f97\u5230\u5e7f\u6cdb\u5e94\u7528\u3002<\/p>\n<p>\u5b83\u8bc1\u660e\u4e86Faster R-CNN\u5728\u7279\u5b9a\u76ee\u6807\u68c0\u6d4b\u4e0a\u7684\u5f3a\u5927\u529f\u80fd\u3002<\/p>\n<p>Faster R-CNN\u901a\u8fc7\u5176\u5f3a\u5927\u7684\u8868\u793a\u80fd\u529b\u548c\u7aef\u5230\u7aef\u7684\u68c0\u6d4b\u67b6\u6784,\u4e0d\u4ec5\u9002\u7528\u4e8e\u901a\u7528\u76ee\u6807\u68c0\u6d4b,\u4e5f\u975e\u5e38\u9ad8\u6548\u5730\u89e3\u51b3\u4e86\u884c\u4eba\u68c0\u6d4b\u8fd9\u6837\u7684\u7279\u5b9a\u4efb\u52a1\u3002<\/p>\n<p>\u5b83\u4e3a\u76ee\u6807\u68c0\u6d4b\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u89e3\u51b3\u65b9\u6848,\u65e2\u53ef\u4ee5\u68c0\u6d4b\u5404\u79cd\u5bf9\u8c61,\u4e5f\u53ef\u4ee5\u4e13\u6ce8\u4e8e\u4e2a\u522b\u76ee\u6807,\u8fd9\u4f7f\u5176\u6210\u4e3a\u76ee\u6807\u68c0\u6d4b\u9886\u57df\u7684\u91cc\u7a0b\u7891\u3002<\/p>\n<\/li>\n<li>\n<p>\u8f66\u8f86\u68c0\u6d4b:\u540c\u6837,Faster R-CNN \u4e5f\u5e7f\u6cdb\u7528\u4e8e\u8f66\u8f86\u7684\u68c0\u6d4b,\u7279\u522b\u662f\u7528\u4e8e\u65e0\u4eba\u9a7e\u9a76\u7684\u81ea\u52a8\u9a7e\u9a76\u7cfb\u7edf\u4e2d\u3002<\/p>\n<p>\u5bf9\u4e8e\u8f66\u8f86\u68c0\u6d4b,Faster R-CNN\u7684\u8bad\u7ec3\u548c\u6d4b\u8bd5\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre><code>java\n\/\/ \u8bfb\u53d6\u8f66\u8f86\u68c0\u6d4b\u6570\u636e\u96c6,\u5982PASCAL VOC\u3001KITTI\u6216Cifar-10-Cars\nList<Image> trainImages = readTrainImages();  \nList<List<CarDetectionData>> trainGroundTruth = readTrainGroundTruth();\nList<Image> testImages = readTestImages();\n\n\/\/ \u6784\u5efaFaster R-CNN\u6a21\u578b,\u8bbe\u7f6enumClasses=1(\u53ea\u6709\u4e00\u4e2a\u8f66\u8f86\u7c7b)\nFasterRCNN fasterRCNN = new FasterRCNN(1);   \n\n\/\/ \u8bad\u7ec3\u6a21\u578b\nfasterRCNN.train(trainImages, trainGroundTruth, 100);   \n\n\/\/ \u5728\u6d4b\u8bd5\u96c6\u4e0a\u8bc4\u4f30\u6a21\u578b  \nList<CarDetectResult> testResults = fasterRCNN.detectCars(testImages);\ndouble map = meanAveragePrecision(testResults, testGroundTruth);\nprint(\"mAP: \" + map);\n\n\/\/ \u663e\u793a\u6d4b\u8bd5\u96c6\u4e0a\u7684\u68c0\u6d4b\u7ed3\u679c \nfor (int i = 0; i < testResults.size(); i++) { \n   Image image = testImages.get(i);\n   List<CarDetectResult> results = testResults.get(i);\n   displayDetections(image, results);\n}<\/code><\/pre>\n<p>- PASCAL VOC\u3001KITTI\u548cCifar-10-Cars\u6570\u636e\u96c6\u5305\u542b\u8f66\u8f86\u7684\u56fe\u50cf\u548c\u6807\u6ce8,\u53ef\u7528\u4e8e\u6a21\u578b\u7684\u8bad\u7ec3\u548c\u6d4b\u8bd5<br \/>\n- \u6784\u5efaFaster R-CNN\u6a21\u578b,\u6307\u5b9anumClasses=1,\u8868\u793a\u53ea\u68c0\u6d4b\u4e00\u4e2a\u8f66\u8f86\u7c7b\u522b<br \/>\n- \u5728\u8f66\u8f86\u68c0\u6d4b\u6570\u636e\u96c6\u4e0a\u8bad\u7ec3\u6a21\u578b,\u5b66\u4e60\u68c0\u6d4b\u8f66\u8f86<br \/>\n- \u8ba1\u7b97mAP\u548c\u663e\u793a\u68c0\u6d4b\u7ed3\u679c,\u8bc4\u4ef7\u6a21\u578b\u7684\u8f66\u8f86\u68c0\u6d4b\u6027\u80fd\u5728\u5927\u89c4\u6a21\u8f66\u8f86\u6570\u636e\u4e0a\u8bad\u7ec3,Faster R-CNN\u53ef\u4ee5\u5b66\u4e60\u5230\u9ad8\u6548\u7684\u8f66\u8f86\u68c0\u6d4b\u7279\u5f81,\u5b9e\u73b0\u5bf9\u8f66\u8f86\u7684\u51c6\u786e\u5b9a\u4f4d\u548c\u8bc6\u522b\u3002<\/p>\n<p>\u6307\u5b9anumClasses=1\u7b80\u5316\u4e86\u8f66\u8f86\u68c0\u6d4b\u4efb\u52a1\u3002mAP\u6307\u6807\u548c\u793a\u4f8b\u68c0\u6d4b\u7ed3\u679c\u5c55\u793a\u4e86Faster R-CNN\u7684\u8f66\u8f86\u68c0\u6d4b\u6548\u679c\u3002<\/p>\n<p>\u9ad8mAP\u548c\u51c6\u786e\u7684\u8f66\u8f86\u6846\u8868\u660eFaster R-CNN\u4e5f\u975e\u5e38\u9002\u5408\u8f66\u8f86\u68c0\u6d4b,\u53ef\u4ee5\u9ad8\u6548\u4e14\u51c6\u786e\u5730\u68c0\u6d4b\u56fe\u50cf\u4e2d\u7684\u8f66\u8f86,\u5e7f\u6cdb\u5e94\u7528\u4e8e\u81ea\u52a8\u9a7e\u9a76\u7b49\u9886\u57df\u3002<\/p>\n<p>\u4e0e\u884c\u4eba\u68c0\u6d4b\u4e00\u81f4,Faster R-CNN\u4e0d\u4ec5\u9002\u7528\u4e8e\u4e00\u822c\u7269\u4f53\u68c0\u6d4b,\u4e5f\u53ef\u4ee5\u4e13\u6ce8\u4e8e\u4e2a\u522b\u76ee\u6807\u5982\u8f66\u8f86\u7684\u68c0\u6d4b,\u5b9e\u73b0\u66f4\u9ad8\u7684\u7cbe\u5ea6\u3002\u901a\u8fc7\u8c03\u6574\u7f51\u7edc\u7ed3\u6784\u548c\u8bad\u7ec3\u6570\u636e,Faster R-CNN\u53ef\u4ee5\u5b66\u4f1a\u4e13\u95e8\u68c0\u6d4b\u67d0\u4e00\u7279\u5b9a\u76ee\u6807\u3002<\/p>\n<p>\u8f66\u8f86\u68c0\u6d4b\u662f\u8ba1\u7b97\u673a\u89c6\u89c9\u548c\u81ea\u52a8\u9a7e\u9a76\u9886\u57df\u7684\u91cd\u8981\u4efb\u52a1,Faster R-CNN\u4e3a\u5176\u63d0\u4f9b\u4e86\u4e00\u79cd\u9ad8\u6548\u7684\u7aef\u5230\u7aef\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<p>\u5b83\u53ef\u4ee5\u5b66\u4e60\u590d\u6742\u573a\u666f\u4e2d\u7684\u8f66\u8f86\u7279\u5f81,\u5b9e\u73b0\u5bf9\u8f66\u8f86\u7684\u51c6\u786e\u5b9a\u4f4d\u548c\u5206\u7c7b,\u5e7f\u6cdb\u5e94\u7528\u4e8e\u65e0\u4eba\u9a7e\u9a76\u8f66\u8f86\u4e2d\u3002<\/p>\n<p>Faster R-CNN\u662f\u76ee\u6807\u68c0\u6d4b\u9886\u57df\u7684\u91cc\u7a0b\u7891\u5f0f\u5de5\u4f5c,\u4e0d\u4ec5\u53ef\u4ee5\u68c0\u6d4b\u5404\u79cd\u4e00\u822c\u7269\u4f53,\u4e5f\u9002\u7528\u4e8e\u7279\u5b9a\u76ee\u6807\u7684\u68c0\u6d4b\u3002<\/p>\n<p>\u5b83\u4e3a\u884c\u4eba\u68c0\u6d4b\u3001\u8f66\u8f86\u68c0\u6d4b\u7b49\u7279\u5b9a\u4efb\u52a1\u63d0\u4f9b\u4e86\u7edf\u4e00\u7684\u68c0\u6d4b\u6846\u67b6,\u5927\u5927\u63a8\u52a8\u4e86\u76ee\u6807\u68c0\u6d4b\u6280\u672f\u7684\u53d1\u5c55,\u5f97\u5230\u5e7f\u6cdb\u5e94\u7528\u4e0e\u7814\u7a76\u3002<\/p>\n<\/li>\n<li>\n<p>\u56fe\u50cf\u5206\u5272:Faster R-CNN \u8fd8\u88ab\u5ef6\u4f38\u7528\u4e8e\u56fe\u50cf\u5206\u5272,\u6bd4\u5982Mask R-CNN\u5728Faster R-CNN\u7684\u57fa\u7840\u4e0a\u52a0\u5165\u4e86\u5206\u5272\u5206\u652f,\u5b9e\u73b0\u4e86\u56fe\u50cf\u7684\u8bed\u4e49\u5206\u5272\u3002<\/p>\n<\/li>\n<\/ol>\n<p>\u200b     Mask R-CNN\u5728Faster R-CNN\u7684\u57fa\u7840\u4e0a\u52a0\u5165\u4e86\u5206\u5272\u5206\u652f,\u5b9e\u73b0\u4e86Faster R-CNN\u7528\u4e8e\u56fe\u50cf\u5206\u5272\u7684\u4ee3\u7801\u5982\u4e0b:<\/p>\n<pre><code>java\n\/\/ \u6784\u5efaMask R-CNN\u6a21\u578b,\u5728Faster R-CNN\u57fa\u7840\u4e0a\u6dfb\u52a0\u5206\u5272\u7f51\u7edc\nMaskRCNN maskRCNN = new MaskRCNN(); \n\n\/\/ \u8bfb\u53d6\u5305\u542b\u5206\u5272\u6807\u7b7e\u7684\u8bad\u7ec3\u6570\u636e  \nList&lt;Image&gt; trainImages = readTrainImages();  \nList&lt;List&lt;InstanceSegmentationData&gt;&gt; trainGroundTruth = readTrainGroundTruth();\n\n\/\/ \u8bad\u7ec3Mask R-CNN\u6a21\u578b\nmaskRCNN.train(trainImages, trainGroundTruth, 100);   \n\n\/\/ \u5728\u6d4b\u8bd5\u96c6\u4e0a\u8fdb\u884c\u5b9e\u4f8b\u5206\u5272 \nList&lt;SegmentationResult&gt; segResults = maskRCNN.segment(testImages);\n\n\/\/ \u8bc4\u4f30\u5206\u5272\u6027\u80fd,\u8ba1\u7b97mIoU(\u5e73\u5747IoU)\ndouble mIoU = meanIoU(segResults, testGroundTruth); \nprint(&quot;mIoU: &quot; + mIoU);\n\n\/\/ \u663e\u793a\u5b9e\u4f8b\u5206\u5272\u7ed3\u679c\nfor (int i = 0; i &lt; segResults.size(); i++) {\n    Image image = testImages.get(i);\n    SegmentationResult result = segResults.get(i);\n    displaySegmentation(image, result); \n}<\/code><\/pre>\n<p>- Mask R-CNN\u5728Faster R-CNN\u7684\u57fa\u7840\u4e0a\u6dfb\u52a0\u4e86\u5206\u5272\u7f51\u7edc(\u5206\u5272\u5206\u652f),\u5b9e\u73b0\u5b9e\u4f8b\u5206\u5272<br \/>\n- \u8bfb\u53d6\u5305\u542b\u5bf9\u8c61\u5206\u5272\u6807\u6ce8\u7684\u6570\u636e\u96c6\u8fdb\u884c\u8bad\u7ec3<br \/>\n- \u8ba1\u7b97mIoU(\u5e73\u5747\u4ea4\u5e76\u6bd4)\u8bc4\u4ef7\u5206\u5272\u6027\u80fd<br \/>\n- \u663e\u793a\u793a\u4f8b\u5b9e\u4f8b\u5206\u5272\u7ed3\u679cMask R-CNN\u7ee7\u627f\u4e86Faster R-CNN\u7684\u68c0\u6d4b\u529f\u80fd,\u5e76\u65b0\u589e\u4e86\u5206\u5272\u80fd\u529b\u3002<\/p>\n<p>\u5b83\u4ee5\u5019\u9009\u6846\u4e3a\u57fa\u7840,\u8fdb\u4e00\u6b65\u8f93\u51fa\u6bcf\u4e2a\u5019\u9009\u6846\u5185\u90e8\u7684\u7cbe\u7ec6\u5206\u5272\u7ed3\u679c,\u5b9e\u73b0\u4e86\u5bf9\u8c61\u7684\u5b9e\u4f8b\u5206\u5272\u3002<\/p>\n<p>mIoU\u8003\u5bdf\u4e86\u9884\u6d4b\u7ed3\u679c\u548c\u771f\u5b9e\u5206\u5272\u4e4b\u95f4\u7684\u91cd\u5408\u7a0b\u5ea6,\u662f\u8861\u91cf\u5b9e\u4f8b\u5206\u5272\u6027\u80fd\u7684\u91cd\u8981\u6307\u6807\u3002<\/p>\n<p>\u8f83\u9ad8\u7684mIoU\u503c\u8868\u660eMask R-CNN\u53ef\u4ee5\u5206\u5272\u5927\u90e8\u5206\u771f\u5b9e\u76ee\u6807\u5e76\u4e14\u5206\u5272\u6548\u679c\u51c6\u786e\u3002<\/p>\n<p>\u5b9e\u4f8b\u5206\u5272\u7ed3\u679c\u76f4\u89c2\u5c55\u793a\u4e86Mask R-CNN\u7684\u5206\u5272\u6548\u679c\u3002<\/p>\n<p>\u51c6\u786e\u7684\u5206\u5272\u8f6e\u5ed3\u548c\u4e0e\u771f\u5b9e\u5bf9\u8c61\u9ad8\u5ea6\u91cd\u5408\u7684\u63a9\u819c\u8868\u660e\u5176\u8f83\u5f3a\u7684\u5206\u5272\u6027\u80fd,\u53ef\u4ee5\u7cbe\u786e\u5730\u5206\u5272\u56fe\u50cf\u4e2d\u7684\u4e3b\u8981\u76ee\u6807\u548c\u4e00\u4e9b\u7ec6\u8282\u3002<\/p>\n<p>Faster R-CNN\u4f5c\u4e3a\u76ee\u6807\u68c0\u6d4b\u7684\u5178\u578b\u4ee3\u8868,Mask R-CNN\u5728\u5176\u57fa\u7840\u4e0a\u8fdb\u4e00\u6b65\u5b9e\u73b0\u4e86\u5b9e\u4f8b\u5206\u5272,\u5927\u5927\u63a8\u52a8\u4e86\u7aef\u5230\u7aef\u68c0\u6d4b\u6280\u672f\u7684\u53d1\u5c55\u3002\u591a\u4efb\u52a1\u5b66\u4e60\u67b6\u6784\u4f7f\u5176\u5728\u68c0\u6d4b\u548c\u5206\u5272\u4e0a\u90fd\u8868\u73b0\u51fa\u8272,\u5f97\u5230\u5e7f\u6cdb\u5e94\u7528\u3002<\/p>\n<p>Mask R-CNN\u5c06Faster R-CNN\u53d1\u5c55\u5230\u65b0\u7684\u9ad8\u5ea6,\u5b9e\u73b0\u4e86\u68c0\u6d4b\u4e0e\u5206\u5272\u7684\u6709\u673a\u7ed3\u5408\u3002<\/p>\n<p>\u5b83\u8bc1\u660e\u4e86Faster R-CNN\u53ef\u4ee5\u4f5c\u4e3a\u66f4\u52a0\u590d\u6742\u4efb\u52a1\u7684\u57fa\u77f3,\u4e3a\u8ba1\u7b97\u673a\u89c6\u89c9\u7684\u591a\u79cd\u5e94\u7528\u63d0\u4f9b\u7edf\u4e00\u7684\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<p>Mask R-CNN\u8fdb\u4e00\u6b65\u63a8\u52a8\u4e86\u7aef\u5230\u7aef\u7684\u5b66\u4e60\u65b9\u6cd5\u5728\u89c6\u89c9\u667a\u80fd\u4e0a\u7684\u63a2\u7d22\u4e0e\u521b\u65b0\u3002<\/p>\n<p>Faster R-CNN\u7cfb\u5217\u4e3a\u76ee\u6807\u68c0\u6d4b\u548c\u5206\u5272\u7b49\u89c6\u89c9\u4efb\u52a1\u63d0\u4f9b\u4e86\u4e00\u5957\u9ad8\u6548\u7684\u89e3\u51b3\u65b9\u6848,\u5b83\u4eec\u4ee5\u5404\u79cd\u521b\u65b0\u70b9\u63a8\u52a8\u4e86\u76f8\u5e94\u6280\u672f\u7684\u53d1\u5c55,\u5f15\u9886\u4e86\u7aef\u5230\u7aef\u68c0\u6d4b\u7684\u6f6e\u6d41,\u5177\u6709\u91cc\u7a0b\u7891\u7684\u610f\u4e49\u3002<\/p>\n<p>\u8fd9\u4e5f\u4f7fFaster R-CNN\u53ca\u5176\u6269\u5c55\u5de5\u4f5c\u6210\u4e3a\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u6700\u91cd\u8981\u7684\u6210\u679c\u4e4b\u4e00\u3002O(\u2229_\u2229)O\u54c8\u54c8~\ud83d\udcaa<\/p>\n<p>\u76ee\u6807\u8ddf\u8e2a:Faster R-CNN \u4e5f\u88ab\u7528\u4e8e\u89c6\u9891\u76ee\u6807\u8ddf\u8e2a,\u901a\u8fc7\u5728\u89c6\u9891\u7684\u8fde\u7eed\u5e27\u4e0a\u5e94\u7528Faster R-CNN\u53ef\u4ee5\u5b9e\u73b0\u5bf9\u76ee\u6807\u7684\u8ddf\u8e2a\u3002<\/p>\n<pre><code>\/\/ \u8bfb\u53d6\u89c6\u9891,\u83b7\u5f97\u6240\u6709\u5e27\nList&lt;Image&gt; frames = readVideoFrames();  \n\n\/\/ \u5728\u7b2c\u4e00\u5e27\u4e0a\u68c0\u6d4b\u76ee\u6807,\u83b7\u5f97\u68c0\u6d4b\u7ed3\u679c \nList&lt;DetectResult&gt; initResults = fasterRCNN.detect(frames.get(0));\n\n\/\/ \u5b58\u50a8\u4e0a\u4e00\u5e27\u7684\u8ddf\u8e2a\u7ed3\u679c\nList&lt;TrackResult&gt; preResults = initResults;   \n\n\/\/ \u904d\u5386\u89c6\u9891\u7684\u5176\u4ed6\u5e27\nfor (int i = 1; i &lt; frames.size(); i++) {\n    Image frame = frames.get(i);\n\n    \/\/ \u5728\u5f53\u524d\u5e27\u4e0a\u68c0\u6d4b\u76ee\u6807\n    List&lt;DetectResult&gt; curResults = fasterRCNN.detect(frame);  \n\n    \/\/ \u8ddf\u8e2a\u4e0a\u4e00\u5e27\u7ed3\u679c\u4e0e\u5f53\u524d\u5e27\u68c0\u6d4b\u7ed3\u679c\u7684\u5339\u914d\n    List&lt;TrackResult&gt; trackResults = track(preResults, curResults);\n\n    \/\/ \u66f4\u65b0\u4e0a\u4e00\u5e27\u7ed3\u679c\u4e3a\u5f53\u524d\u8ddf\u8e2a\u7ed3\u679c\n    preResults = trackResults;  \n\n    \/\/ \u53ef\u89c6\u5316\u5f53\u524d\u5e27\u7684\u8ddf\u8e2a\u7ed3\u679c\n    displayTracking(frame, trackResults);\n}<\/code><\/pre>\n<p>- \u8bfb\u53d6\u89c6\u9891,\u83b7\u5f97\u6240\u6709\u5e27\u56fe\u7247<br \/>\n- \u5728\u7b2c\u4e00\u5e27\u4e0a\u4f7f\u7528Faster R-CNN\u68c0\u6d4b\u76ee\u6807,\u83b7\u5f97\u521d\u59cb\u68c0\u6d4b\u7ed3\u679c<br \/>\n- \u904d\u5386\u89c6\u9891\u5176\u4ed6\u5e27,\u5728\u6bcf\u4e2a\u5e27\u4e0a\u4f7f\u7528Faster R-CNN\u68c0\u6d4b\u76ee\u6807<br \/>\n- \u901a\u8fc7\u8ddf\u8e2a\u7b97\u6cd5\u8ddf\u8e2a\u4e0a\u4e00\u5e27\u7684\u7ed3\u679c\u4e0e\u5f53\u524d\u5e27\u68c0\u6d4b\u7ed3\u679c\u7684\u5339\u914d,\u83b7\u5f97\u8ddf\u8e2a\u7ed3\u679c<br \/>\n- \u66f4\u65b0\u4e0a\u4e00\u5e27\u7684\u8ddf\u8e2a\u7ed3\u679c,\u5faa\u73af\u89c6\u9891\u6240\u6709\u5e27<br \/>\n- \u53ef\u89c6\u5316\u6bcf\u4e2a\u5e27\u7684\u8ddf\u8e2a\u7ed3\u679c\u901a\u8fc7\u5728\u8fde\u7eed\u7684\u89c6\u9891\u5e27\u4e0a\u91cd\u590d\u4f7f\u7528Faster R-CNN\u8fdb\u884c\u68c0\u6d4b,\u5e76\u7ed3\u5408\u8ddf\u8e2a\u7b97\u6cd5\u5173\u8054\u4e0d\u540c\u5e27\u4e4b\u95f4\u7684\u68c0\u6d4b\u7ed3\u679c,\u5b9e\u73b0\u4e86\u57fa\u4e8eFaster R-CNN\u7684\u89c6\u9891\u76ee\u6807\u8ddf\u8e2a\u3002<\/p>\n<p>\u8ddf\u8e2a\u7ed3\u679c\u7684\u53ef\u89c6\u5316\u53ef\u4ee5\u76f4\u89c2\u5224\u65ad\u8ddf\u8e2a\u6548\u679c\u548c\u5728\u6bcf\u4e2a\u5e27\u4e0a\u7684\u51c6\u786e\u6027\u3002<\/p>\n<p>\u5bc6\u96c6\u4e14\u5e73\u6ed1\u7684\u8ddf\u8e2a\u8f68\u8ff9\u8868\u660e\u76ee\u6807\u88ab\u7a33\u5b9a\u800c\u51c6\u786e\u5730\u8ddf\u8e2a,\u5426\u5219\u8868\u793a\u8ddf\u8e2a\u51fa\u73b0\u95ee\u9898,\u76ee\u6807\u53ef\u80fd\u4e22\u5931\u6216\u8ddf\u8e2a\u504f\u79bb\u3002<\/p>\n<p>Faster R-CNN\u4f5c\u4e3a\u4e00\u4e2a\u68c0\u6d4b\u6a21\u578b,\u5b9e\u73b0\u4e86\u5bf9\u9759\u6001\u56fe\u50cf\u5185\u76ee\u6807\u7684\u68c0\u6d4b\u3002<\/p>\n<p>\u5728\u89c6\u9891\u573a\u666f\u4e0b,\u901a\u8fc7\u5728\u8fde\u7eed\u5e27\u4e0a\u91cd\u590d\u4f7f\u7528Faster R-CNN,\u5e76\u7ed3\u5408\u8ddf\u8e2a\u7b97\u6cd5\u5173\u8054\u4e0d\u540c\u5e27\u4e4b\u95f4\u7684\u68c0\u6d4b\u7ed3\u679c,Faster R-CNN\u7684\u68c0\u6d4b\u529f\u80fd\u88ab\u6269\u5c55\u5230\u4e86\u89c6\u9891\u76ee\u6807\u8ddf\u8e2a\u3002<\/p>\n<p>\u8fd9\u79cd\u57fa\u4e8e\u68c0\u6d4b\u7684\u8ddf\u8e2a\u65b9\u6cd5,\u5229\u7528Faster R-CNN\u51c6\u786e\u7684\u68c0\u6d4b\u7ed3\u679c\u5b9e\u73b0\u76ee\u6807\u8ddf\u8e2a,\u907f\u514d\u4e86\u72ec\u7acb\u8ddf\u8e2a\u65b9\u6cd5\u53ef\u80fd\u51fa\u73b0\u7684\u6f02\u79fb\u73b0\u8c61\u3002\u91cd\u590d\u4f7f\u7528Faster R-CNN\u5728\u6bcf\u5e27\u4e0a\u91cd\u65b0\u68c0\u6d4b\u76ee\u6807,\u4e0d\u65ad\u6821\u6b63\u8ddf\u8e2a\u7ed3\u679c,\u4f7f\u5f97\u8ddf\u8e2a\u66f4\u52a0\u7a33\u5b9a\u51c6\u786e\u3002<\/p>\n<p>Faster R-CNN\u4f5c\u4e3a\u4e00\u4e2a\u5f3a\u5927\u7684\u68c0\u6d4b\u65b9\u6cd5,\u4e0d\u4ec5\u53ef\u4ee5\u68c0\u6d4b\u9759\u6001\u56fe\u50cf\u4e2d\u7684\u76ee\u6807,\u4e5f\u53ef\u4ee5\u88ab\u5f88\u81ea\u7136\u5730\u6269\u5c55\u5230\u89c6\u9891\u76ee\u6807\u8ddf\u8e2a\u3002\u8fd9\u8868\u660eFaster R-CNN\u53ef\u4ee5\u4e3a\u66f4\u5e7f\u6cdb\u7684\u89c6\u89c9\u4efb\u52a1\u63d0\u4f9b\u57fa\u7840,\u6210\u4e3a\u8ba1\u7b97\u673a\u89c6\u89c9\u9886\u57df\u4e00\u4e2a\u975e\u5e38\u6709\u5f71\u54cd\u529b\u7684\u5de5\u4f5c\u3002<\/p>\n<p>\u8ddf\u8e2a\u65b9\u6cd5\u4e0eFaster R-CNN\u7684\u7ed3\u5408,\u751f\u52a8\u6f14\u793a\u4e86\u68c0\u6d4b\u4e0e\u8ddf\u8e2a\u4e4b\u95f4\u7684\u8054\u7cfb\u4e0e\u4e92\u8865\u4f5c\u7528\u3002<\/p>\n<p>Faster R-CNN\u7684\u5e94\u7528\u8303\u7574\u4e0d\u65ad\u6269\u5c55,\u4ece\u6700\u521d\u7684\u56fe\u50cf\u76ee\u6807\u68c0\u6d4b\u53d1\u5c55\u5230\u884c\u4eba\u68c0\u6d4b\u3001\u8f66\u8f86\u68c0\u6d4b,\u5e76\u8fdb\u4e00\u6b65\u62d3\u5c55\u5230\u89c6\u9891\u76ee\u6807\u8ddf\u8e2a\u7b49\u5e94\u7528,\u8fd9\u8868\u660e\u5176\u5f3a\u5927\u7684\u7279\u5f81\u8868\u8fbe\u80fd\u529b\u548c\u68c0\u6d4b\u6548\u679c,\u8db3\u4ee5\u652f\u6491\u66f4\u52a0\u590d\u6742\u7684\u89c6\u89c9\u4efb\u52a1\u3002<\/p>\n<p>Faster R-CNN\u4e3a\u76f8\u5173\u9886\u57df\u63d0\u4f9b\u4e86\u4e00\u6574\u5957\u89e3\u51b3\u65b9\u6848,\u6df1\u523b\u5f71\u54cd\u4e86\u8ba1\u7b97\u673a\u89c6\u89c9\u6280\u672f\u7684\u53d1\u5c55\u8fdb\u7a0b\u3002<\/p>\n<p><font color=red>\u5173\u952e\u70b9\u68c0\u6d4b:\u6709\u5b66\u8005\u5728Faster R-CNN\u7684\u57fa\u7840\u4e0a\u6dfb\u52a0\u5173\u952e\u70b9\u68c0\u6d4b\u5206\u652f,\u5b9e\u73b0\u4eba\u4f53\u5173\u952e\u70b9\u7684\u68c0\u6d4b\u3002<\/font><\/p>\n<pre><code>\/\/ \u6784\u5efa\u5173\u952e\u70b9\u68c0\u6d4b\u6a21\u578b,\u5728Faster R-CNN\u57fa\u7840\u4e0a\u6dfb\u52a0\u5173\u952e\u70b9\u68c0\u6d4b\u7f51\u7edc  \nKeypointRCNN keypointRCNN = new KeypointRCNN();   \n\n\/\/ \u8bfb\u53d6\u5305\u542b\u4eba\u4f53\u5173\u952e\u70b9\u6807\u6ce8\u7684\u6570\u636e\u96c6  \nList&lt;Image&gt; trainImages = readTrainImages();  \nList&lt;List&lt;HumanKeypointData&gt;&gt; trainGroundTruth = readTrainGroundTruth();\n\n\/\/ \u8bad\u7ec3\u5173\u952e\u70b9\u68c0\u6d4b\u6a21\u578b\nkeypointRCNN.train(trainImages, trainGroundTruth, 100);   \n\n\/\/ \u5728\u6d4b\u8bd5\u96c6\u4e0a\u68c0\u6d4b\u4eba\u4f53\u5173\u952e\u70b9\nList&lt;KeypointDetectionResult&gt; keypointResults = keypointRCNN.detectKeypoints(testImages);\n\n\/\/ \u8ba1\u7b97PCK\u8bc4\u4ef7\u5173\u952e\u70b9\u68c0\u6d4b\u6027\u80fd\ndouble pck = computePCK(keypointResults, testGroundTruth);\nprint(&quot;PCK: &quot; + pck); \n\n\/\/ \u663e\u793a\u5173\u952e\u70b9\u68c0\u6d4b\u7ed3\u679c\nfor (int i = 0; i &lt; keypointResults.size(); i++) {\n    Image image = testImages.get(i);\n    KeypointDetectionResult result = keypointResults.get(i);\n    displayKeypointDetection(image, result); \n}<\/code><\/pre>\n<p>- \u6784\u5efa\u5173\u952e\u70b9\u68c0\u6d4b\u6a21\u578b,\u5728Faster R-CNN\u7684\u57fa\u7840\u4e0a\u6dfb\u52a0\u5173\u952e\u70b9\u68c0\u6d4b\u7f51\u7edc<br \/>\n- \u8bfb\u53d6\u5305\u542b\u4eba\u4f53\u5173\u952e\u70b9\u6807\u6ce8\u7684\u6570\u636e\u96c6\u8fdb\u884c\u8bad\u7ec3<br \/>\n- \u8ba1\u7b97PCK(\u5173\u952e\u70b9\u68c0\u6d4b\u7cbe\u5ea6)\u8bc4\u4ef7\u5173\u952e\u70b9\u68c0\u6d4b\u6027\u80fd<br \/>\n- \u663e\u793a\u5173\u952e\u70b9\u68c0\u6d4b\u7ed3\u679c,\u6bcf\u4e2a\u56fe\u50cf\u4e0a\u753b\u51fa\u6240\u6709\u68c0\u6d4b\u5230\u7684\u5173\u952e\u70b9\u5173\u952e\u70b9\u68c0\u6d4b\u6a21\u578b\u5728Faster R-CNN\u7684\u57fa\u7840\u4e0a\u65b0\u589e\u4e86\u5173\u952e\u70b9\u68c0\u6d4b\u5206\u652f,\u5b9e\u73b0\u4e86\u4eba\u4f53\u5173\u952e\u70b9\u7684\u7cbe\u786e\u5b9a\u4f4d\u3002<\/p>\n<p>\u5b83\u7ee7\u627f\u4e86Faster R-CNN\u7684\u5206\u7c7b\u548c\u56de\u5f52\u80fd\u529b,\u5e76\u6269\u5c55\u5230\u4e86\u66f4\u52a0\u8be6\u7ec6\u7684\u4eba\u4f53\u89e3\u6790\u4efb\u52a1\u3002<\/p>\n<p>PCK\u8003\u91cf\u4e86\u5173\u952e\u70b9\u68c0\u6d4b\u7684\u51c6\u786e\u6027,\u662f\u8861\u91cf\u4eba\u4f53\u5173\u952e\u70b9\u68c0\u6d4b\u6027\u80fd\u7684\u91cd\u8981\u6307\u6807\u3002<\/p>\n<p>\u8f83\u9ad8\u7684PCK\u503c\u8868\u660e\u5173\u952e\u70b9\u68c0\u6d4b\u6a21\u578b\u53ef\u4ee5\u51c6\u786e\u5b9a\u4f4d\u5927\u90e8\u5206\u771f\u5b9e\u5173\u952e\u70b9\u3002<\/p>\n<p>\u5173\u952e\u70b9\u68c0\u6d4b\u7ed3\u679c\u76f4\u89c2\u663e\u793a\u4e86\u6a21\u578b\u7684\u5173\u952e\u70b9\u5b9a\u4f4d\u6548\u679c\u3002<\/p>\n<p>\u5bc6\u96c6\u4e14\u51c6\u786e\u7684\u5173\u952e\u70b9\u8868\u793a\u6a21\u578b\u5177\u6709\u8f83\u5f3a\u7684\u5173\u952e\u70b9\u68c0\u6d4b\u80fd\u529b,\u53ef\u4ee5\u7cbe\u786e\u89e3\u6790\u4eba\u4f53\u7ed3\u6784,\u5426\u5219\u8868\u660e\u5173\u952e\u70b9\u68c0\u6d4b\u4ecd\u9700\u63d0\u9ad8\u3002<\/p>\n<p>Faster R-CNN\u4f5c\u4e3a\u76ee\u6807\u68c0\u6d4b\u9886\u57df\u7684\u91cc\u7a0b\u7891,\u5176\u591a\u4efb\u52a1\u5b66\u4e60\u67b6\u6784\u548c\u5f3a\u5927\u7684\u7279\u5f81\u8868\u8fbe\u80fd\u529b,\u4e3a\u66f4\u52a0\u590d\u6742\u7684\u89c6\u89c9\u4efb\u52a1\u5982\u5173\u952e\u70b9\u68c0\u6d4b\u63d0\u4f9b\u4e86\u57fa\u7840\u3002<\/p>\n<p>\u5728Faster R-CNN\u7684\u57fa\u7840\u4e0a\u6dfb\u52a0\u5173\u952e\u70b9\u68c0\u6d4b\u5206\u652f,\u53ef\u4ee5\u76f4\u63a5\u5229\u7528\u5176\u5019\u9009\u6846\u548c\u7279\u5f81,\u5b9e\u73b0\u5bf9\u4eba\u4f53\u5173\u952e\u70b9\u7684\u7cbe\u7ec6\u89e3\u6790\u3002<\/p>\n<p>\u8fd9\u8868\u660eFaster R-CNN\u4f5c\u4e3a\u68c0\u6d4b\u65b9\u6cd5\u7684\u5178\u578b\u4ee3\u8868,\u4e0d\u4ec5\u9002\u7528\u4e8e\u4e00\u822c\u7684\u76ee\u6807\u5b9a\u4f4d,\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u4eba\u4f53\u89e3\u6790\u7b49\u7ec6\u7c92\u5ea6\u4efb\u52a1\u7684\u57fa\u77f3,\u8fdb\u4e00\u6b65\u53d1\u5c55\u548c\u6269\u5c55\u5176\u80fd\u529b\u3002<\/p>\n<p>Faster R-CNN\u4e3a\u76f8\u5173\u7814\u7a76\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5f3a\u6709\u529b\u7684\u57fa\u7ebf,\u6307\u660e\u4e86\u7ee7\u7eed\u4f18\u5316\u548c\u6df1\u5316\u7684\u65b9\u5411\u3002<\/p>\n<p>\u8fd9\u4f7f\u5176\u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u7684\u53d1\u5c55\u5386\u7a0b\u5360\u636e\u4e3e\u8db3\u8f7b\u91cd\u7684\u5730\u4f4d\u3002<\/p>\n<p>\u4eba\u4f53\u5173\u952e\u70b9\u68c0\u6d4b\u9700\u8981\u5728\u56fe\u50cf\u4e2d\u7cbe\u786e\u5b9a\u4f4d\u51e0\u5341\u4e2a\u5173\u952e\u70b9,\u662f\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u7684\u91cd\u8981\u800c\u5177\u6709\u6311\u6218\u7684\u4efb\u52a1\u3002<\/p>\n<p>\u57fa\u4e8eFaster R-CNN\u7684\u5173\u952e\u70b9\u68c0\u6d4b\u6a21\u578b,\u7ee7\u627f\u4e86\u5176\u5f3a\u5927\u7684\u68c0\u6d4b\u80fd\u529b,\u5e76\u6269\u5c55\u5230\u4e86\u4eba\u4f53\u7684\u8be6\u7ec6\u89e3\u6790,\u4e3a\u8fd9\u4e2a\u4efb\u52a1\u63d0\u4f9b\u4e86\u4e00\u79cd\u7aef\u5230\u7aef\u7684\u9ad8\u6548\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<p>\u5b83\u8bc1\u660e\u4e86Faster R-CNN\u53ef\u4ee5\u53d1\u5c55\u5230\u66f4\u52a0\u590d\u6742\u7684\u89c6\u89c9\u4efb\u52a1,\u5e76\u6210\u4e3a\u8fd9\u4e9b\u4efb\u52a1\u5b9e\u73b0\u7684\u6709\u529b\u57fa\u77f3\u3002<\/p>\n<p><font color=red>\u573a\u666f\u6587\u672c\u68c0\u6d4b:Faster R-CNN \u4e5f\u88ab\u7528\u4e8e\u6587\u672c\u68c0\u6d4b,\u901a\u8fc7\u68c0\u6d4b\u6587\u672c\u6846\u5b9e\u73b0\u573a\u666f\u6587\u672c\u7684\u5b9a\u4f4d\u3002<\/font><\/p>\n<pre><code>\/\/ \u6784\u5efaFaster R-CNN\u6a21\u578b,\u8bbe\u7f6enumClasses=1(\u53ea\u68c0\u6d4b\u6587\u672c\u7c7b)\nFasterRCNN textDetector = new FasterRCNN(1);   \n\n\/\/ \u8bfb\u53d6\u5305\u542b\u6587\u672c\u6846\u6807\u6ce8\u7684\u6570\u636e\u96c6  \nList&lt;Image&gt; trainImages = readTrainImages();  \nList&lt;List&lt;Textbox&gt;&gt; trainGroundTruth = readTrainGroundTruth();\n\n\/\/ \u8bad\u7ec3Faster R-CNN\u6a21\u578b \ntextDetector.train(trainImages, trainGroundTruth, 100);   \n\n\/\/ \u5728\u6d4b\u8bd5\u96c6\u4e0a\u68c0\u6d4b\u6587\u672c  \nList&lt;TextDetectionResult&gt; textResults = textDetector.detectText(testImages);\n\n\/\/ \u8ba1\u7b97\u6027\u80fd\u6307\u6807\u5982mAP\u7b49  \ndouble map = meanAveragePrecision(textResults, testGroundTruth);  \nprint(&quot;mAP: &quot; + map);\n\n\/\/ \u663e\u793a\u6587\u672c\u68c0\u6d4b\u7ed3\u679c\nfor (int i = 0; i &lt; textResults.size(); i++) {\n    Image image = testImages.get(i);\n    List&lt;TextDetectionResult&gt; results = textResults.get(i);\n    displayTextDetections(image, results); \n} <\/code><\/pre>\n<p>- \u6784\u5efaFaster R-CNN\u6a21\u578b,\u6307\u5b9anumClasses=1\u8868\u793a\u53ea\u68c0\u6d4b\u6587\u672c\u7c7b\u522b<br \/>\n- \u8bfb\u53d6\u5305\u542b\u6587\u672c\u6846\u6807\u6ce8\u7684\u6570\u636e\u96c6\u8fdb\u884c\u8bad\u7ec3<br \/>\n- \u8ba1\u7b97mAP\u7b49\u6307\u6807\u8bc4\u4ef7\u6587\u672c\u68c0\u6d4b\u6027\u80fd<br \/>\n- \u663e\u793a\u6587\u672c\u68c0\u6d4b\u7ed3\u679c,\u6bcf\u4e2a\u56fe\u50cf\u4e0a\u753b\u51fa\u6240\u6709\u68c0\u6d4b\u5230\u7684\u6587\u672c\u6846\u5728\u5927\u91cf\u6587\u672c\u6570\u636e\u4e0a\u8bad\u7ec3,Faster R-CNN\u53ef\u4ee5\u5b66\u4e60\u5230\u68c0\u6d4b\u6587\u672c\u7684\u7279\u5f81,\u5b9e\u73b0\u5bf9\u6587\u672c\u7684\u51c6\u786e\u5b9a\u4f4d\u3002<\/p>\n<p>\u6307\u5b9anumClasses=1\u7b80\u5316\u4e86Faster R-CNN,\u53ea\u9700\u8981\u5224\u65ad\u76ee\u6807\u662f\u5426\u5c5e\u4e8e\u6587\u672c\u7c7b\u3002<\/p>\n<p>mAP\u6307\u6807\u53cd\u6620\u4e86\u6a21\u578b\u68c0\u6d4b\u6587\u672c\u6846\u7684\u53ec\u56de\u7387\u548c\u51c6\u786e\u7387,\u8f83\u9ad8mAP\u8868\u793a\u6a21\u578b\u53ef\u4ee5\u68c0\u6d4b\u5230\u5927\u90e8\u5206\u6587\u672c,\u4e14\u5c11\u6709\u8bef\u68c0\u73b0\u8c61\u3002\u6587\u672c\u68c0\u6d4b\u7ed3\u679c\u76f4\u89c2\u5224\u65ad\u6a21\u578b\u68c0\u6d4b\u6587\u672c\u7684\u6548\u679c\u3002<\/p>\n<p>\u5bc6\u96c6\u4e14\u51c6\u786e\u7684\u6587\u672c\u6846\u8868\u660e\u6a21\u578b\u5bf9\u6587\u672c\u5177\u6709\u8f83\u5f3a\u7684\u68c0\u6d4b\u80fd\u529b,\u8f83\u5c11\u7684\u6f0f\u68c0\u548c\u8bef\u68c0,\u5426\u5219\u8868\u793a\u6587\u672c\u68c0\u6d4b\u4ecd\u9700\u6539\u8fdb\u3002<\/p>\n<p>Faster R-CNN\u4f5c\u4e3a\u4e00\u4e2a\u5f3a\u5927\u7684\u68c0\u6d4b\u5668,\u4e0d\u4ec5\u53ef\u4ee5\u68c0\u6d4b\u4e00\u822c\u7269\u4f53,\u4e5f\u9002\u7528\u4e8e\u6587\u672c\u7b49\u7279\u5b9a\u76ee\u6807\u7684\u68c0\u6d4b\u3002<\/p>\n<p>\u901a\u8fc7\u8c03\u6574\u7f51\u7edc\u7ed3\u6784\u548c\u8bad\u7ec3\u6570\u636e,Faster R-CNN\u53ef\u4ee5\u4e13\u6ce8\u4e8e\u6587\u672c\u68c0\u6d4b,\u5b9e\u73b0\u66f4\u9ad8\u7cbe\u5ea6\u3002<\/p>\n<p>\u8fd9\u8868\u660eFaster R-CNN\u662f\u4e00\u4e2a\u591a\u529f\u80fd\u7684\u68c0\u6d4b\u6846\u67b6,\u53ef\u4ee5\u6269\u5c55\u5230\u6587\u5b57\u8bc6\u522b\u7b49\u66f4\u7ec6\u81f4\u7684\u89c6\u89c9\u4efb\u52a1\u3002<\/p>\n<p>\u6587\u672c\u68c0\u6d4b\u662f\u6587\u5b57\u8bc6\u522b\u548c\u573a\u666f\u7406\u89e3\u7684\u91cd\u8981\u524d\u63d0,Faster R-CNN\u4e3a\u5176\u63d0\u4f9b\u4e86\u4e00\u79cd\u9ad8\u6548\u7684\u7aef\u5230\u7aef\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<p>\u4f9d\u9760\u5927\u89c4\u6a21\u6570\u636e\u96c6\u8bad\u7ec3,Faster R-CNN\u53ef\u4ee5\u51c6\u786e\u68c0\u6d4b\u6587\u672c,\u5b9e\u73b0\u5bf9\u6587\u672c\u7684\u5b9a\u4f4d\u548c\u6846\u5b9a,\u5e7f\u6cdb\u5e94\u7528\u4e8e\u6587\u5b57\u8bc6\u522b\u548c\u7ffb\u8bd1\u7b49\u9886\u57df\u3002<\/p>\n<p>Faster R-CNN\u4f5c\u4e3a\u76ee\u6807\u68c0\u6d4b\u7684\u5178\u578b\u4ee3\u8868,\u4e0d\u4ec5\u68c0\u6d4b\u4e00\u822c\u7269\u4f53\u5177\u6709\u51fa\u8272\u8868\u73b0,\u5bf9\u4e8e\u7279\u5b9a\u76ee\u6807\u5982\u6587\u672c\u7684\u68c0\u6d4b\u4e5f\u540c\u6837\u9ad8\u6548\u3002\u8fd9\u8868\u660eFaster R-CNN\u662f\u4e00\u4e2a\u5f3a\u5927\u7684\u68c0\u6d4b\u6846\u67b6,\u53ef\u4ee5\u6269\u5c55\u548c\u53d1\u5c55\u5230\u66f4\u52a0\u5e7f\u6cdb\u7684\u89c6\u89c9\u4efb\u52a1,\u68c0\u6d4b\u6548\u679c\u548c\u6cdb\u5316\u80fd\u529b\u4f7f\u5176\u6210\u4e3a\u76ee\u6807\u68c0\u6d4b\u7814\u7a76\u9886\u57df\u6700\u91cd\u8981\u7684\u5de5\u4f5c\u4e4b\u4e00\u3002<\/p>\n<h1>O(\u2229_\u2229)O\u54c8\u54c8~ \u6700\u540e\u901a\u8fc7\u5b66\u4e60\u4e86\u89e3\u6211\u4eec\u53ef\u4ee5(o\u00b4\u03c9`o)\uff89<\/h1>\n<p>Faster R-CNN\u4f5c\u4e3a\u76ee\u6807\u68c0\u6d4b\u9886\u57df\u7684\u91cc\u7a0b\u7891,\u5f00\u521b\u4e86\u7aef\u5230\u7aef\u68c0\u6d4b\u7684\u65b0\u65f6\u4ee3\u3002<\/p>\n<p>\u5b83\u63d0\u51fa\u4e86\u5177\u6709\u5782\u76f4\u548c\u6c34\u5e73\u6784\u6210\u7684\u533a\u57df\u63d0\u8bae\u7f51\u7edc,\u5305\u62ec\u51f8\u51e0\u4f55\u5f62\u72b6\u548c\u9009\u62e9\u6027\u641c\u7d22\u65b9\u6cd5\u7684\u5019\u9009\u533a\u57df\u4ea7\u751f\u65b9\u6cd5\u3002<\/p>\n<p>\u63d0\u51fa\u4e86\u72b6\u6001\u5171\u4eab\u7684\u5377\u79ef\u7279\u5f81\u5c42\u548c\u4efb\u52a1\u4e13\u6709\u7684\u5168\u8fde\u63a5\u5c42\u76f8\u7ed3\u5408\u7684\u68c0\u6d4b\u7f51\u7edc\u7ed3\u6784\u3002<\/p>\n<p>\u5e76\u5728\u6b64\u57fa\u7840\u4e0a\u63d0\u51fa\u4e86RPN\u7f51\u7edc\u4ea7\u751f\u66f4\u52a0\u51c6\u786e\u7684\u5019\u9009\u6846,\u4ece\u800c\u5b9e\u73b0\u4e86\u5feb\u901f\u7684\u5019\u9009\u6846\u68c0\u6d4b\u548c\u51c6\u786e\u7684\u5750\u6807\u56de\u5f52\u3002<\/p>\n<p>Faster R-CNN\u501f\u9274\u4e86rcnn\u548csppnet\u7684\u601d\u8def,\u5c06selective search\u751f\u6210\u7684\u7ea62000\u4e2a\u533a\u57df\u63d0\u8bae\u8f93\u5165 CNN\u8fdb\u884c\u7279\u5f81\u63d0\u53d6\u548c\u5206\u7c7b\u3002<\/p>\n<p>\u7136\u540e\u518d\u5229\u7528\u56de\u5f52\u65b9\u6cd5\u7cbe\u786e\u63d0\u70bc\u51fa\u7269\u4f53\u7684\u5750\u6807,\u6700\u540e\u8f93\u51fa\u68c0\u6d4b\u7ed3\u679c\u3002<\/p>\n<p>\u5b83\u7ee7\u627frcnn\u7684\u601d\u8def,\u63d0\u51fa\u4e86rpn\u7f51\u7edc\u4ea7\u751f\u66f4\u52a0\u51c6\u786e\u7684\u5019\u9009\u6846,\u540c\u65f6\u6452\u9664\u4e86selective search\u8fd9\u4e00\u74f6\u9888,\u5c06\u5019\u9009\u6846\u68c0\u6d4b\u548c\u5750\u6807\u56de\u5f52\u7edf\u4e00\u5728\u4e00\u4e2a\u7f51\u7edc\u5b8c\u6210,\u5b9e\u73b0\u4e86\u7aef\u5230\u7aef\u7684\u68c0\u6d4b,\u5927\u5e45\u63d0\u9ad8\u4e86\u68c0\u6d4b\u901f\u5ea6\u548c\u7cbe\u5ea6,\u771f\u6b63\u505a\u5230\u4e86\u5b9e\u65f6\u76ee\u6807\u68c0\u6d4b\u3002<\/p>\n<p>Faster R-CNN\u4e0d\u4ec5\u68c0\u6d4b\u901f\u5ea6\u5feb,\u68c0\u6d4b\u7cbe\u5ea6\u4e5f\u5f88\u9ad8\u3002<\/p>\n<p>\u8fd9\u4e3b\u8981\u5f97\u76ca\u4e8eRPN\u7f51\u7edc\u4ea7\u751f\u7684\u9ad8\u8d28\u91cf\u5019\u9009\u6846\u548c\u5bf9\u7279\u5f81\u7684\u91cd\u7528\u3002<\/p>\n<p>\u51c6\u786e\u7684\u5019\u9009\u6846\u68c0\u6d4b\u4e3a\u540e\u7eed\u7684\u5206\u7c7b\u548c\u56de\u5f52\u63d0\u4f9b\u4e86\u5f88\u597d\u7684\u5148\u9a8c\u4fe1\u606f,\u8282\u7701\u4e86\u5927\u91cf\u8ba1\u7b97\u65f6\u95f4,\u5e76\u4e14\u91cd\u7528\u7279\u5f81\u5c42\u7684\u7279\u5f81\u56fe\u53ea\u9700\u8ba1\u7b97\u4e00\u6b21,\u907f\u514d\u91cd\u590d\u8ba1\u7b97,\u8fd9\u4f7f\u5f97Faster R-CNN\u5728\u901f\u5ea6\u548c\u7cbe\u5ea6\u4e0a\u90fd\u53d6\u5f97\u4e86\u5f88\u5927\u7684\u63d0\u9ad8\u3002<\/p>\n<p>RPN\u7f51\u7edc\u9274\u522b\u51fa\u7684\u9ad8\u8d28\u91cf\u5019\u9009\u6846\u548c\u5bf9\u7279\u5f81\u91cd\u7528\u7684\u601d\u8def,\u4f7fFaster R-CNN\u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u7684\u68c0\u6d4b\u4efb\u52a1\u4e0a\u6709\u7740\u5e7f\u6cdb\u7684\u5e94\u7528\u3002\u5b83\u53ef\u4ee5\u68c0\u6d4b\u4eba\u3001\u8f66\u3001\u52a8\u7269\u3001\u98df\u7269\u7b49\u5404\u79cd\u76ee\u6807,\u5e76\u5728\u4e0d\u540c\u7684\u6570\u636e\u96c6\u4e0a\u8868\u73b0\u4f18\u5f02\u3002<\/p>\n<p>Faster R-CNN\u5728\u8bb8\u591a\u76ee\u6807\u68c0\u6d4b\u6311\u6218\u8d5b\u4e0a\u7684\u83b7\u80dc\u4e5f\u9a8c\u8bc1\u4e86\u5176\u5353\u8d8a\u7684\u68c0\u6d4b\u6027\u80fd\u3002<\/p>\n<p>Faster R-CNN\u7075\u6d3b\u7684\u7f51\u7edc\u7ed3\u6784\u548c\u5f3a\u5927\u7684\u7279\u5f81\u8868\u8fbe\u80fd\u529b,\u4f7f\u5176\u4e0d\u4ec5\u9002\u7528\u4e8e\u4e00\u822c\u7269\u4f53\u68c0\u6d4b,\u4e5f\u53ef\u4ee5\u5e94\u7528\u4e8e\u4eba\u4f53\u68c0\u6d4b\u3001\u8f66\u8f86\u68c0\u6d4b\u548c\u6587\u672c\u68c0\u6d4b\u7b49\u7279\u5b9a\u76ee\u6807\u3002<\/p>\n<p>\u901a\u8fc7\u8c03\u6574\u7f51\u7edc\u7ed3\u6784\u548c\u8bad\u7ec3\u6570\u636e,Faster R-CNN\u53ef\u4ee5\u4e13\u6ce8\u4e8e\u67d0\u4e00\u5177\u4f53\u7684\u68c0\u6d4b\u4efb\u52a1,\u5e76\u5b9e\u73b0\u9488\u5bf9\u8be5\u4efb\u52a1\u7684\u6700\u4f18\u68c0\u6d4b\u6548\u679c\u3002\u8fd9\u5c55\u793a\u4e86Faster R-CNN\u4f5c\u4e3a\u4e00\u4e2a\u901a\u7528\u7684\u68c0\u6d4b\u6846\u67b6,\u53ef\u4ee5\u89e3\u51b3\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u5404\u79cd\u68c0\u6d4b\u95ee\u9898,\u5177\u6709\u5f88\u5f3a\u7684\u6cdb\u5316\u80fd\u529b\u548c\u6269\u5c55\u6027\u3002<\/p>\n<p>\u57fa\u4e8eFaster R-CNN\u7684\u5404\u79cd\u53d8\u4f53\u4e5f\u8fdb\u4e00\u6b65\u62d3\u5c55\u4e86\u5176\u5e94\u7528\u8303\u56f4\u3002<\/p>\n<p>Mask R-CNN\u5728 Faster R-CNN\u7684\u57fa\u7840\u4e0a\u589e\u52a0\u4e86\u5206\u5272\u5206\u652f,\u5b9e\u73b0\u4e86\u5b9e\u4f8b\u5206\u5272\u3002<\/p>\n<p>\u5173\u952e\u70b9\u68c0\u6d4b\u6a21\u578b\u5728Faster R-CNN\u4e0a\u6dfb\u52a0\u5173\u952e\u70b9\u68c0\u6d4b\u7f51\u7edc,\u5b9e\u73b0\u4e86\u4eba\u4f53\u5173\u952e\u70b9\u7cbe\u786e\u5b9a\u4f4d\u3002<\/p>\n<p>\u89c6\u9891\u76ee\u6807\u8ddf\u8e2a\u901a\u8fc7\u5728\u8fde\u7eed\u5e27\u4e0a\u91cd\u590d\u4f7f\u7528Faster R-CNN,\u5b9e\u73b0\u4e86\u8de8\u5e27\u7684\u76ee\u6807\u8ddf\u8e2a\u3002<\/p>\n<p>\u8fd9\u90fd\u8868\u660eFasterR-CNN\u53ef\u4ee5\u4f5c\u4e3a\u66f4\u52a0\u590d\u6742\u7684\u8ba1\u7b97\u673a\u89c6\u89c9\u4efb\u52a1\u7684\u57fa\u77f3,\u63d0\u4f9b\u7edf\u4e00\u7684\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<p>Faster R-CNN\u7684\u63d0\u51fa\u5f00\u542f\u4e86\u6df1\u5ea6\u5b66\u4e60\u5728\u76ee\u6807\u68c0\u6d4b\u9886\u57df\u7684\u65b0\u7bc7\u7ae0\u3002<\/p>\n<p>\u5b83\u5b9e\u73b0\u4e86\u7aef\u5230\u7aef\u7684\u68c0\u6d4b,\u5927\u5e45\u63d0\u9ad8\u4e86\u68c0\u6d4b\u901f\u5ea6\u548c\u7cbe\u5ea6,\u771f\u6b63\u505a\u5230\u5b9e\u65f6\u9ad8\u8d28\u91cf\u7684\u76ee\u6807\u68c0\u6d4b\u3002<\/p>\n<p>Faster R-CNN\u7075\u6d3b\u7684\u7f51\u7edc\u7ed3\u6784\u548c\u5f3a\u5927\u7684\u7279\u5f81\u8868\u8fbe\u80fd\u529b\u4f7f\u5176\u5728\u5404\u79cd\u68c0\u6d4b\u4efb\u52a1\u4e0a\u90fd\u6709\u51fa\u8272\u8868\u73b0,\u662f\u8ba1\u7b97\u673a\u89c6\u89c9\u7814\u7a76\u9886\u57df\u6700\u91cd\u8981\u548c\u5f71\u54cd\u529b\u6700\u5927\u7684\u5de5\u4f5c\u4e4b\u4e00\u3002<\/p>\n<p>Faster R-CNN\u53ca\u5176\u5404\u79cd\u53d8\u4f53\u6784\u5efa\u4e86\u4e00\u6574\u5957\u9ad8\u6548\u7684\u68c0\u6d4b\u6846\u67b6,\u63a8\u52a8\u4e86\u76f8\u5173\u6280\u672f\u548c\u5e94\u7528\u7684\u5e7f\u6cdb\u53d1<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u6700\u8fd1\u5de5\u4f5c\u8fdb\u884c\ud83d\ude97\u62cd\u7167\u7684\u68c0\u6d4b\uff0c\u5e94\u7528\u5230\u4e86\u6b64\u6a21\u578b\uff0c\u672c\u7bc7\u6587\u7ae0\u53ea\u662f\u81ea\u5df1\u5bf9\u6a21\u578b\u7684\u7406\u89e3\uff0c\u521d\u5b66\u5c0f\u767d\ud83d\ude00 \u4e2a\u4eba\u603b\u7ed3\uff0c\u6709\u4e0d\u59a5\u7684\u5730 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_mi_skip_tracking":false},"categories":[1],"tags":[],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09 - \u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug<\/title>\n<meta name=\"description\" content=\"Faster R-CNN article read in detail\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09 - \u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug\" \/>\n<meta property=\"og:description\" content=\"Faster R-CNN article read in detail\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/\" \/>\n<meta property=\"og:site_name\" content=\"\u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-07T00:29:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-07T01:14:19+00:00\" \/>\n<meta name=\"author\" content=\"\u603b\u662f\u5e78\u798f\u7684\u8001\u8c4c\u8c46\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u603b\u662f\u5e78\u798f\u7684\u8001\u8c4c\u8c46\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"7\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/\",\"url\":\"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/\",\"name\":\"\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09 - \u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug\",\"isPartOf\":{\"@id\":\"https:\/\/zhaocunwei.co.uk\/#website\"},\"datePublished\":\"2023-05-07T00:29:31+00:00\",\"dateModified\":\"2023-05-07T01:14:19+00:00\",\"author\":{\"@id\":\"https:\/\/zhaocunwei.co.uk\/#\/schema\/person\/dfb1dc0fc4a330c41908d477cd99c0b4\"},\"description\":\"Faster R-CNN article read in detail\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09\",\"breadcrumb\":{\"@id\":\"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/#breadcrumb\"},\"inLanguage\":\"zh-CN\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/zhaocunwei.co.uk\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zhaocunwei.co.uk\/#website\",\"url\":\"https:\/\/zhaocunwei.co.uk\/\",\"name\":\"\u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug\",\"description\":\"This site shares programming bugs\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zhaocunwei.co.uk\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-CN\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/zhaocunwei.co.uk\/#\/schema\/person\/dfb1dc0fc4a330c41908d477cd99c0b4\",\"name\":\"\u603b\u662f\u5e78\u798f\u7684\u8001\u8c4c\u8c46\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-CN\",\"@id\":\"https:\/\/zhaocunwei.co.uk\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4226cc1ca6640507df1d2d4ba3da7a62?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4226cc1ca6640507df1d2d4ba3da7a62?s=96&d=mm&r=g\",\"caption\":\"\u603b\u662f\u5e78\u798f\u7684\u8001\u8c4c\u8c46\"},\"sameAs\":[\"http:\/\/zhaocunwei.co.uk\"],\"url\":\"https:\/\/zhaocunwei.co.uk\/index.php\/author\/18500103508163-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09 - \u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug","description":"Faster R-CNN article read in detail\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/","og_locale":"zh_CN","og_type":"article","og_title":"\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09 - \u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug","og_description":"Faster R-CNN article read in detail\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09","og_url":"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/","og_site_name":"\u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug","article_published_time":"2023-05-07T00:29:31+00:00","article_modified_time":"2023-05-07T01:14:19+00:00","author":"\u603b\u662f\u5e78\u798f\u7684\u8001\u8c4c\u8c46","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u603b\u662f\u5e78\u798f\u7684\u8001\u8c4c\u8c46","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"7\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/","url":"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/","name":"\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09 - \u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug","isPartOf":{"@id":"https:\/\/zhaocunwei.co.uk\/#website"},"datePublished":"2023-05-07T00:29:31+00:00","dateModified":"2023-05-07T01:14:19+00:00","author":{"@id":"https:\/\/zhaocunwei.co.uk\/#\/schema\/person\/dfb1dc0fc4a330c41908d477cd99c0b4"},"description":"Faster R-CNN article read in detail\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09","breadcrumb":{"@id":"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/#breadcrumb"},"inLanguage":"zh-CN","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zhaocunwei.co.uk\/index.php\/2023\/05\/07\/summary-the-understanding-and-code-imple\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/zhaocunwei.co.uk\/"},{"@type":"ListItem","position":2,"name":"\u603b\u7ed3\u4e00\u4e0b\uff1aFaster R-CNN\u6a21\u578b\u7684\u7406\u89e3\u548c\u4ee3\u7801\u5b9e\u73b0\uff08In summary, the understanding and code implementation of Faster R-CNN model\uff09"}]},{"@type":"WebSite","@id":"https:\/\/zhaocunwei.co.uk\/#website","url":"https:\/\/zhaocunwei.co.uk\/","name":"\u672c\u7f51\u7ad9\u5206\u4eab\u7f16\u7a0b\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u7684bug","description":"This site shares programming bugs","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zhaocunwei.co.uk\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-CN"},{"@type":"Person","@id":"https:\/\/zhaocunwei.co.uk\/#\/schema\/person\/dfb1dc0fc4a330c41908d477cd99c0b4","name":"\u603b\u662f\u5e78\u798f\u7684\u8001\u8c4c\u8c46","image":{"@type":"ImageObject","inLanguage":"zh-CN","@id":"https:\/\/zhaocunwei.co.uk\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4226cc1ca6640507df1d2d4ba3da7a62?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4226cc1ca6640507df1d2d4ba3da7a62?s=96&d=mm&r=g","caption":"\u603b\u662f\u5e78\u798f\u7684\u8001\u8c4c\u8c46"},"sameAs":["http:\/\/zhaocunwei.co.uk"],"url":"https:\/\/zhaocunwei.co.uk\/index.php\/author\/18500103508163-com\/"}]}},"_links":{"self":[{"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/posts\/478"}],"collection":[{"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/comments?post=478"}],"version-history":[{"count":1,"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/posts\/478\/revisions"}],"predecessor-version":[{"id":479,"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/posts\/478\/revisions\/479"}],"wp:attachment":[{"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/media?parent=478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/categories?post=478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zhaocunwei.co.uk\/index.php\/wp-json\/wp\/v2\/tags?post=478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}