{"id":787,"date":"2024-06-24T17:19:51","date_gmt":"2024-06-24T09:19:51","guid":{"rendered":"http:\/\/ai.gitpp.com\/?p=787"},"modified":"2024-06-24T17:19:51","modified_gmt":"2024-06-24T09:19:51","slug":"%e5%bc%80%e6%ba%90%e5%a5%bd%e9%a1%b9%e7%9b%ae%ef%bc%9a%e5%9c%a8%e6%b5%b7%e4%b8%8a%e6%95%91%e6%8f%b4%e6%95%b0%e6%8d%ae%e9%9b%86%e4%b8%8a%e5%be%ae%e8%b0%83-faster-r-cnn-%e5%b0%8f%e7%89%a9","status":"publish","type":"post","link":"http:\/\/ai.gitpp.com\/index.php\/2024\/06\/24\/%e5%bc%80%e6%ba%90%e5%a5%bd%e9%a1%b9%e7%9b%ae%ef%bc%9a%e5%9c%a8%e6%b5%b7%e4%b8%8a%e6%95%91%e6%8f%b4%e6%95%b0%e6%8d%ae%e9%9b%86%e4%b8%8a%e5%be%ae%e8%b0%83-faster-r-cnn-%e5%b0%8f%e7%89%a9\/","title":{"rendered":"\u5f00\u6e90\u597d\u9879\u76ee\uff1a\u5728\u6d77\u4e0a\u6551\u63f4\u6570\u636e\u96c6\u4e0a\u5fae\u8c03 Faster R-CNN \u2013 \u5c0f\u7269\u4f53\u68c0\u6d4b\uff1aPyTorch"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><br>\u5728\u822a\u62cd\u56fe\u50cf\u4e2d\u68c0\u6d4b\u5c0f\u7269\u4f53\uff0c\u5c24\u5176\u662f\u5bf9\u4e8e\u6d77\u4e0a\u6551\u63f4\u7b49\u5173\u952e\u5e94\u7528\u800c\u8a00\uff0c\u662f\u4e00\u9879\u72ec\u7279\u7684\u6311\u6218\u3002\u53ca\u65f6\u68c0\u6d4b\u6c34\u4e2d\u7684\u4eba\u53ef\u80fd\u610f\u5473\u7740\u751f\u6b7b\u4e4b\u95f4\u7684\u5dee\u522b\u3002\u6211\u4eec\u7684\u7814\u7a76\u91cd\u70b9\u662f\u5fae\u8c03 Faster R-CNN\uff08\u4e00\u79cd\u5f3a\u5927\u7684\u4e24\u9636\u6bb5\u7269\u4f53\u68c0\u6d4b\u5668\uff09\uff0c\u4ee5\u6ee1\u8db3\u8fd9\u4e00\u91cd\u8981\u9700\u6c42\u3002&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_gif\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahNrVZViaSiaX5vPePNmCibNxhGX9xoSqnMe29ENrLTjnGXBxaWDgKoia5Ag\/640?wx_fmt=gif&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1\" alt=\"\u56fe\u7247\" title=\"\u7279\u5f81\u5fae\u8c03 Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><\/figure>\n\n\n\n<p>\u6211\u4eec\u7814\u7a76\u7684\u6838\u5fc3\u662fSeaDroneSee \u6570\u636e\u96c6\uff0c\u8fd9\u662f\u4e00\u7ec4\u91cd\u8981\u7684\u56fe\u50cf\u96c6\u5408\uff0c\u7528\u4e8e\u8bad\u7ec3\u6a21\u578b\u8bc6\u522b\u9047\u9669\u6d77\u5458\u3002\u6211\u4eec\u901a\u8fc7\u5c06\u56fe\u50cf\u9884\u5904\u7406\u4e3a\u5757\u6765\u589e\u5f3a\u6a21\u578b\u7684\u5b66\u4e60\u80fd\u529b\uff0c\u4f7f\u5176\u80fd\u591f\u4e13\u6ce8\u4e8e\u66f4\u5c0f\u3001\u66f4\u8be6\u7ec6\u7684\u533a\u57df\uff0c\u5e76\u663e\u8457\u63d0\u9ad8\u68c0\u6d4b\u51c6\u786e\u6027\u3002\u6b64\u5916\uff0c\u6211\u4eec\u63a2\u7d22\u4e86\u8fd9\u79cd\u65b9\u6cd5\u4e0e SAHI \u7684\u9ad8\u7ea7\u5207\u7247\u6280\u672f\u4e4b\u95f4\u7684\u534f\u540c\u4f5c\u7528\uff0c\u5e76\u6bd4\u8f83\u4e86\u5b83\u4eec\u7684\u6709\u6548\u6027\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u7684\u65b9\u6cd5\u5f3a\u8c03\u4e86\u6570\u636e\u9884\u5904\u7406\u548c&nbsp; \u9ad8\u7ea7\u540e\u5904\u7406\u6280\u672f\u7684\u91cd\u8981\u6027\u3002\u901a\u8fc7\u9488\u5bf9\u5c0f\u7269\u4f53\u68c0\u6d4b\u7684\u5177\u4f53\u6311\u6218\u5b9a\u5236\u8fd9\u4e9b\u6b65\u9aa4\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5b9e\u73b0\u9876\u7ea7\u7ed3\u679c\u5e76\u7a81\u7834\u822a\u7a7a\u5f71\u50cf\u5206\u6790\u7684\u754c\u9650\u3002<\/p>\n\n\n\n<p>\u52a0\u5165\u6211\u4eec\uff0c\u63a2\u7d22\u8fd9\u4e00\u6fc0\u52a8\u4eba\u5fc3\u7684\u5fae\u8c03 Faster R-CNN\u5e94\u7528\uff0c\u4ee5\u5b9e\u73b0\u62ef\u6551\u751f\u547d\u7684\u76ee\u6807\uff01<\/p>\n\n\n\n<p>Faster-RCNN \u5c06\u5982\u4f55\u5904\u7406\u8fd9\u4e2a\u56f0\u96be\u7684\u60c5\u51b5\uff1f\u8981\u67e5\u770b\u68c0\u6d4b\u7ed3\u679c\uff0c\u8bf7\u7ee7\u7eed\u6eda\u52a8\u6216\u7acb\u5373\u5355\u51fb\u6b64\u5904\u3002<\/p>\n\n\n\n<p>\u8981\u8bbf\u95ee\u672c\u6587\u4e2d\u7684\u4ee3\u7801\u5e76\u5c1d\u8bd5\u4f7f\u7528 Pytorch \u81ea\u884c\u5fae\u8c03Faster R-CNN\uff0c\u53ea\u9700\u5355\u51fb\u201c\u4e0b\u8f7d\u4ee3\u7801\u201d\u6309\u94ae\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e3a\u4ec0\u4e48\u8981\u5728 2024 \u5e74\u5bf9 Faster R-CNN \u8fdb\u884c\u5fae\u8c03\uff1f<\/li>\n\n\n\n<li>\u7406\u89e3\u6570\u636e\u96c6<\/li>\n\n\n\n<li>\u8865\u4e01\u521b\u5efa\uff1a\u4f5c\u4e3a\u4e00\u79cd\u9884\u5904\u7406\u6280\u672f<\/li>\n\n\n\n<li>\u4ee3\u7801\u6f14\u7ec3\uff1a\u5fae\u8c03 Faster R-CNN\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u6570\u636e\u7c7b\u51c6\u5907\uff1a\u5fae\u8c03 Faster R-CNN<\/li>\n\n\n\n<li>\u5fae\u8c03 Faster R-CNN PyTorch \u8bad\u7ec3\u914d\u7f6e<\/li>\n\n\n\n<li>\u9884\u6d4b\uff1a\u5fae\u8c03 Faster R-CNN<\/li>\n\n\n\n<li>\u5c06 SAHI \u4e0e\u5fae\u8c03\u7684 Faster R-CNN \u76f8\u7ed3\u5408<\/li>\n\n\n\n<li>\u4f7f\u7528 SAHI \u4e0e\u4e0d\u4f7f\u7528 SAHI \u7684 Fast RCNN \u68c0\u6d4b\u4ee5\u53ca\u4f7f\u7528\u8865\u4e01\u4f5c\u4e3a\u8f93\u5165\u7684 Fast RCNN \u68c0\u6d4b\u7684\u6bd4\u8f83\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u5173\u952e\u8981\u70b9<\/li>\n\n\n\n<li>\u7ed3\u8bba<\/li>\n\n\n\n<li>\u53c2\u8003\uff1a<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e3a\u4ec0\u4e48\u8981\u5728 2024 \u5e74\u5bf9 Faster R-CNN \u8fdb\u884c\u5fae\u8c03\uff1f<\/h2>\n\n\n\n<p>\u5c3d\u7ba1\u51fa\u73b0\u4e86\u6700\u5148\u8fdb\u7684\u3001\u975e\u5e38\u51c6\u786e\u7684\u6216\u4f4e\u5ef6\u8fdf\u7684\u7269\u4f53\u68c0\u6d4b\u7b97\u6cd5\uff0cFaster R-CNN \u4ecd\u7136\u662f\u68c0\u6d4b\u5c0f\u7269\u4f53\u7684\u53ef\u9760\u9009\u62e9\u4e4b\u4e00\u3002\u4e4b\u4e00\uff0c\u8fd9\u4e0e\u6211\u4eec\u7684\u5e94\u7528\u7a0b\u5e8f\u76f8\u8f85\u76f8\u6210\u3002<\/p>\n\n\n\n<p>Faster R-CNN \u5229\u7528\u533a\u57df\u63d0\u8bae\u7f51\u7edc (RPN)\u4e0e\u68c0\u6d4b\u7f51\u7edc\u5171\u4eab\u5168\u56fe\u5377\u79ef\u7279\u5f81\uff0c\u4ece\u800c\u63d0\u9ad8\u751f\u6210\u6f5c\u5728\u7269\u4f53\u8fb9\u754c\u6846\u7684\u6548\u7387\u548c\u51c6\u786e\u6027\u3002\u8fd9\u79cd\u5171\u4eab\u673a\u5236\u5bf9\u4e8e\u6355\u83b7\u5c0f\u7269\u4f53\u7279\u522b\u6709\u76ca\uff0c\u56e0\u4e3a\u5b83\u5141\u8bb8\u7f51\u7edc\u5c06\u66f4\u591a\u7684\u5904\u7406\u80fd\u529b\u7528\u4e8e\u8f83\u5c0f\u611f\u5174\u8da3\u533a\u57df\u4e2d\u7684\u7ec6\u5fae\u7279\u5f81\u548c\u533a\u522b\u3002\u56e0\u6b64\uff0c\u8fd9\u4f7f\u5f97 Faster R-CNN \u64c5\u957f\u5904\u7406\u611f\u5174\u8da3\u7269\u4f53\u8f83\u5c0f\u4e14\u9700\u8981\u7cbe\u786e\u5b9a\u4f4d\u7684\u573a\u666f\uff0c\u8fd9\u5728\u76d1\u6d4b\u548c\u68c0\u6d4b\u5e7f\u9614\u6d77\u57df\u4e2d\u7684\u7269\u4f53\u7b49\u573a\u666f\u4e2d\u81f3\u5173\u91cd\u8981\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiah7CbAlKzItrUSbsScwUmBiamy5AiaSicHAPrvcKZTAE0WvF4ibibaTfAnoZw\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\"\/><figcaption class=\"wp-element-caption\">\u56fe 1\uff1aFaster R-CNN \u7269\u4f53\u68c0\u6d4b\u5668<\/figcaption><\/figure>\n\n\n\n<p>\u60a8\u53ef\u4ee5\u5feb\u901f\u9605\u8bfb\u4ee5\u4e86\u89e3\u6709\u5173Faster-RCNN\u4e2d\u7684\u533a\u57df\u63d0\u8bae\u7f51\u7edc (RPN) \u7684\u66f4\u591a\u4fe1\u606f\u5de5\u4f5c\u539f\u7406\u7684\u66f4\u591a\u4fe1\u606f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7406\u89e3\u6570\u636e\u96c6<\/h2>\n\n\n\n<p>\u65e0\u4eba\u9a7e\u9a76\u98de\u884c\u5668(UAV) \u90e8\u7f72\u901f\u5ea6\u5feb\u3001\u6210\u672c\u76f8\u5bf9\u8f83\u4f4e\uff0c\u4e0e\u4f20\u7edf\u65b9\u6cd5\u76f8\u6bd4\u98ce\u9669\u5c0f\u5f97\u591a\u3002\u5b83\u4eec\u914d\u5907\u5404\u79cd\u4f20\u611f\u5668\uff0c\u53ef\u5168\u9762\u6982\u89c8\u73b0\u573a\uff0c\u5e76\u53ef\u81ea\u4e3b\u8986\u76d6\u5927\u7247\u533a\u57df\u4ee5\u641c\u7d22\u7269\u4f53\u6216\u4eba\u5458\u3002<\/p>\n\n\n\n<p>\u8be5\u9879\u76ee\u65e8\u5728\u5f00\u53d1\u4e00\u79cd\u65e0\u4eba\u673a\uff0c\u4ee5\u534f\u52a9\u4eba\u9053\u4e3b\u4e49\u641c\u6551\u573a\u666f\u3002\u8fd9\u662f\u67ef\u6797\u65af\u822a\u7a7a\u822a\u5929\u516c\u53f8\u548c\u56fe\u5bbe\u6839\u5927\u5b66\u5408\u4f5c\u7684\u6210\u679c\u3002\u4f7f\u7528\u673a\u8f7d\u89c6\u89c9&nbsp;\u4f20\u611f\u5668\u548c\u9065\u6d4b\u6570\u636e\uff0c\u5e2e\u52a9\u641c\u7d22\u611f\u5174\u8da3\u7684\u7269\u4f53\uff0c\u5e76\u5411\u5730\u9762\u7ad9\u7684\u64cd\u4f5c\u5458\u62a5\u544a\u68c0\u6d4b\u5230\u7684\u5f02\u5e38\u60c5\u51b5\u3002<\/p>\n\n\n\n<p>\u4e0b\u9762\u662f\u8be5\u521b\u65b0\u89e3\u51b3\u65b9\u6848\u6240\u6d89\u53ca\u7684\u7ec4\u4ef6\u7684\u8bf4\u660e\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahlZHib9sGQqrf1vaqzbwZDGWM745AR6ZSxgTH7VNnkoVQ39xXwr3iadvA\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"SeaDroneSee-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><\/figure>\n\n\n\n<p>\u60f3\u8c61\u4e00\u4e0b\u8fd9\u6837\u7684\u573a\u666f\uff1a\u4e00\u67b6\u65e0\u4eba\u673a\u5728\u6d77\u6d0b\u4e0a\u7a7a\u7ff1\u7fd4\uff0c\u641c\u5bfb\u5e78\u5b58\u8005\u3002\u8fd9\u5c31\u662fSeaDronesSee\u80cc\u540e\u7684\u76ee\u6807\uff0cSeaDronesSee \u662f\u4e00\u4e2a\u5e9e\u5927\u7684\u6570\u636e\u96c6\uff0c\u65e8\u5728\u8bad\u7ec3\u7528\u4e8e\u641c\u7d22\u548c\u6551\u63f4 (SAR)\u7684\u8ba1\u7b97\u673a\u89c6\u89c9\u7cfb\u7edf\u4efb\u52a1\u3002<\/p>\n\n\n\n<p>\u8be5\u6570\u636e\u96c6\u5c31\u50cf\u662f\u5d4c\u5165\u5f0f\u8ba1\u7b97\u673a\u89c6\u89c9\u7684\u8bad\u7ec3\u573a\u3002\u5b83\u5305\u542b\u771f\u5b9e\u7684\u6d77\u6d0b\u73af\u5883\u89c6\u9891\u7247\u6bb5\uff0c\u5176\u4e2d\u7684\u6311\u6218\u5728\u4e8e\u53d1\u73b0\u6c34\u4e2d\u7684\u4eba\u3002<\/p>\n\n\n\n<p>\u5bf9\u8ba1\u7b97\u673a\u89c6\u89c9\u65e0\u4eba\u673a\u7f16\u7a0b\u611f\u5174\u8da3\uff1f\u67e5\u770b\u6211\u4eec\u7684\u57fa\u672c\u6307\u5357\uff01&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_gif\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahLqok8kYtPe3Jicb71WMbtmJT8u35R7WCpqUGFXg8DUib4oEE62O74nHg\/640?wx_fmt=gif&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1\" alt=\"\u56fe\u7247\" title=\"Drone_Metdata_1-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 2\uff1aSeaDroneSee \u6570\u636e\u96c6<\/figcaption><\/figure>\n\n\n\n<p>SeaDronesSee \u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7269\u4f53\u68c0\u6d4b\uff1a\u8fd9\u6559\u4f1a\u7cfb\u7edf\u8bc6\u522b\u6d69\u701a\u6d77\u6d0b\u4e2d\u7684\u7269\u4f53\uff0c\u4f8b\u5982\u4eba\u3002<\/li>\n\n\n\n<li>\u5355\u76ee\u6807\u8ddf\u8e2a\uff1a\u4e00\u65e6\u53d1\u73b0\u4e00\u4e2a\u4eba\uff0c\u7cfb\u7edf\u5c31\u4f1a\u5b66\u4f1a\u8ddf\u968f\u4ed6\u4eec\uff0c\u5373\u4f7f\u4ed6\u4eec\u56db\u5904\u8d70\u52a8\u3002<\/li>\n\n\n\n<li>\u591a\u76ee\u6807\u8ddf\u8e2a\uff1a\u5b9e\u9645 SAR \u4efb\u52a1\u4e2d\u53ef\u80fd\u4f1a\u6709\u591a\u540d\u5e78\u5b58\u8005\u3002\u6b64\u90e8\u5206\u8bad\u7ec3\u7cfb\u7edf\u540c\u65f6\u8ddf\u8e2a\u6240\u6709\u5e78\u5b58\u8005<\/li>\n<\/ol>\n\n\n\n<p>\u901a\u8fc7\u5206\u6790\u8fd9\u4e9b\u6570\u636e\uff0c\u65e0\u4eba\u673a\u53ef\u4ee5\u66f4\u719f\u7ec3\u5730\u534f\u52a9\u641c\u6551\u4efb\u52a1\uff0c\u6210\u4e3a\u66f4\u667a\u80fd\u7684\u6551\u751f\u5458\u3002<\/p>\n\n\n\n<p>\u672c\u6587\u91cd\u70b9\u5173\u6ce8SeaDroneSee \u6570\u636e\u96c6\u7684\u5bf9\u8c61\u68c0\u6d4b v2 \u5b50\u96c6\uff0c\u5176\u4e2d\u5305\u542b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>8930\u5217\u8f66<\/li>\n\n\n\n<li>1547 \u74e6\u5c14<\/li>\n\n\n\n<li>3750 \u6d4b\u8bd5<\/li>\n<\/ul>\n\n\n\n<p>\u6b64\u7c7b\u6570\u636e\u96c6\u4e2d\u7684\u4e00\u4e2a\u5173\u952e\u6311\u6218\u662f\u5b9e\u73b0\u5bf9\u5bf9\u8c61\u7684\u6807\u7b7e\u7684\u51c6\u786e\u8bc6\u522b\uff0c\u7279\u522b\u662f\u56e0\u4e3a\u8bb8\u591a\u7c7b\u522b\u975e\u5e38\u5c0f\u4e14\u96be\u4ee5\u68c0\u6d4b\u3002<\/p>\n\n\n\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6574\u4e2a\u6570\u636e\u96c6\u4e2d\u7684\u56fe\u50cf\u5c3a\u5bf8\u5e76\u4e0d\u4e00\u81f4\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u6570\u636e\u96c6\u7684\u56fe\u50cf\u5c3a\u5bf8\uff08\u5bbd\uff0c\u9ad8\uff09\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>(5436,3632)<\/li>\n\n\n\n<li>(3840,2160)<\/li>\n\n\n\n<li>(1230,932)<\/li>\n\n\n\n<li>(1231,933)<\/li>\n\n\n\n<li>(3632,5456)<\/li>\n\n\n\n<li>(1920,1080)<\/li>\n<\/ul>\n\n\n\n<p>\u7c7b\u522b\uff1a<br>&nbsp;&nbsp;0\uff1a&#8217;\u5ffd\u7565&#8217;\uff0c&nbsp;&nbsp;1\uff1a&#8217;\u6e38\u6cf3\u8005&#8217;\uff0c2\uff1a&#8217;\u8239&#8217;\uff0c3\uff1a&#8217;\u6c34\u4e0a\u6469\u6258\u8247&#8217;\uff0c4\uff1a&#8217;\u6551\u751f\u8bbe\u5907&#8217;\uff0c5\uff1a\u201c\u6d6e\u6807\u201d<\/p>\n\n\n\n<p>\u201c\u5ffd\u7565\u201d\u533a\u57df\u5305\u542b\u7531\u4e8e\u5206\u8fa8\u7387\u4f4e\u3001\u4eba\u7fa4\u5bc6\u96c6\u6216\u6570\u636e\u96c6\u4e2d\u4e0d\u9700\u8981\u7684\u5bf9\u8c61\uff0c\u56e0\u6b64\u96be\u4ee5\u6ce8\u91ca\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_gif\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahXIGVHk8iaUWwmTiaJKKMfAFlj1pHyjNvCtfkL6kyCjS6T5wnALqjFaTA\/640?wx_fmt=gif&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1\" alt=\"\u56fe\u7247\" title=\"Drone_Metadata_2-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 4\uff1aSeaDroneSee \u6570\u636e\u96c6<\/figcaption><\/figure>\n\n\n\n<p>\u6211\u4eec\u8fd8\u89c2\u5bdf\u5230\u8be5\u6570\u636e\u96c6\u662f\u4e0d\u5e73\u8861\u7684\uff0c\u6e38\u6cf3\u8005\u3001\u6d6e\u6807\u548c\u6551\u751f\u8bbe\u5907\u7b49\u5c0f\u7269\u4f53\u5b9e\u4f8b\u4e4b\u95f4\u5b58\u5728\u660e\u663e\u7684\u7c7b\u522b\u5206\u5e03\u5dee\u5f02\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahEIKrvrQZ1dcXpTFcMBniaftEHlibeYgQBrCLCzLRE7KT64t4MWXMWUUQ\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"\u7c7b\u522b\u5206\u5e03\u56fe-\u5fae\u8c03-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 5\uff1aSeaDroneSee \u7c7b\u522b\u5206\u5e03<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u8865\u4e01\u521b\u5efa\uff1a\u4f5c\u4e3a\u4e00\u79cd\u9884\u5904\u7406\u6280\u672f<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_gif\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahjJHXewtBjjkfLicm9VLv1uczHAkzwyxvUu7ibRAYhjnUKrQZYFQZWOXw\/640?wx_fmt=gif&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1\" alt=\"\u56fe\u7247\" title=\"\u56fe\u50cf\u5757\u5f62\u6210\u5fae\u8c03 Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 6\uff1a\u56fe\u50cf\u5757\u5f62\u6210<\/figcaption><\/figure>\n\n\n\n<p>\u5728\u6211\u4eec\u7684\u6570\u636e\u96c6\u4e2d\uff0c\u6bcf\u5f20\u56fe\u50cf\u90fd\u662f4k\u9ad8\u5206\u8fa8\u7387\u3002\u8fd9\u4e9b\u9ad8\u5206\u8fa8\u7387\u56fe\u50cf\u7684\u89c4\u6a21\u975e\u5e38\u5e9e\u5927\uff0c\u56e0\u6b64\u4f1a\u5e26\u6765\u6311\u6218\uff0c\u56e0\u4e3a\u8fd9\u53ef\u80fd\u4f1a\u589e\u52a0\u8ba1\u7b97\u8d44\u6e90\u548c\u5185\u5b58\u5bb9\u91cf\u3002\u901a\u8fc7\u5c06\u8fd9\u4e9b\u56fe\u50cf\u5206\u6210\u591a\u4e2a\u5757\u5e76\u4fdd\u5b58\uff0c\u6211\u4eec\u53ef\u4ee5\u72ec\u7acb\u5904\u7406\u8fd9\u4e9b\u8f83\u5c0f\u7684\u90e8\u5206\uff0c\u4ece\u800c\u51cf\u5c11\u8ba1\u7b97\u8d1f\u8377\u5e76\u4f7f\u6a21\u578b\u80fd\u591f\u4e13\u6ce8\u4e8e\u66f4\u7cbe\u7ec6\u7684\u7ec6\u8282\u3002\u8fd9\u5728\u6211\u4eec\u68c0\u6d4b\u5c0f\u7269\u4f53\uff08\u4f8b\u5982\u6d69\u701a\u6d77\u6d0b\u4e2d\u975e\u5e38\u8fdc\u7684\u6e38\u6cf3\u8005\u6216\u8239\u53ea\uff09\u7684\u7528\u4f8b\u4e2d\u5c24\u5176\u6709\u76ca\u3002<\/p>\n\n\n\n<p>\u5728\u6211\u4eec\u7684\u65b9\u6cd5\u4e2d\uff0c\u6211\u4eec\u4f7f\u75280.2\u7684\u5757\u91cd\u53e0\u7387\u3002\u8fd9\u79cd\u91cd\u53e0\u53ef\u786e\u4fdd\u5757\u4e4b\u95f4\u4e0d\u4f1a\u4e22\u5931\u5173\u952e\u4fe1\u606f\u3002\u901a\u8fc7\u91cd\u53e0\u533a\u57df\uff0c\u6a21\u578b\u53ef\u4ee5\u4ece\u540c\u4e00\u533a\u57df\u7684\u591a\u4e2a\u89d2\u5ea6\u8fdb\u884c\u5b66\u4e60\uff0c\u5e76\u5b66\u4e60\u8fd9\u4e9b\u5bf9\u8c61\u7684\u663e\u8457\u7279\u5f81\u3002\u6b64\u5916\uff0c\u5757\u521b\u5efa\u53ef\u4ee5\u589e\u52a0\u6570\u636e\u589e\u5f3a\uff0c\u4ece\u800c\u6709\u6548\u589e\u52a0\u8bad\u7ec3\u6837\u672c\u7684\u6570\u91cf\u3002<\/p>\n\n\n\n<p><br>\u73b0\u5728\u731c\u731c\u600e\u4e48\u7740\uff1f\u5c0f\u7269\u4f53\u68c0\u6d4b\u95ee\u9898\u5df2\u6210\u4e3a\u5178\u578b\u7684\u7269\u4f53\u68c0\u6d4b\u95ee\u9898\u3002\u8fd9\u542c\u8d77\u6765\u5f88\u76f4\u89c2\uff0c\u5bf9\u5427\uff1f&nbsp;<\/p>\n\n\n\n<p>\u56fe\u50cf\u8865\u4e01\u521b\u5efa\u53cd\u6620\u4e86\u5377\u79ef\u795e\u7ecf\u7f51\u7edc(CNN)\u7684\u64cd\u4f5c\uff0c\u56e0\u4e3a\u8fd9\u4e24\u79cd\u6280\u672f\u90fd\u6d89\u53ca\u5904\u7406\u56fe\u50cf\u7684\u5c40\u90e8\u533a\u57df\u4ee5\u6709\u6548\u5730\u63d0\u53d6\u548c\u5b66\u4e60\u7279\u5f81\u8868\u793a\u3002<\/p>\n\n\n\n<p>\u4e0b\u8f7d\u4ee3\u7801&nbsp;\u4e3a\u4e86\u8f7b\u677e\u5b66\u4e60\u672c\u6559\u7a0b\uff0c\u8bf7\u70b9\u51fb\u4e0b\u9762\u7684\u6309\u94ae\u4e0b\u8f7d\u4ee3\u7801\u3002\u514d\u8d39\uff01<br><\/p>\n\n\n\n<p>\u4e0b\u8f7d\u4ee3\u7801<\/p>\n\n\n\n<p>http:\/\/www.gitpp.com\/opencv\/learnopencv-cn<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4ee3\u7801\u6f14\u7ec3\uff1a\u5fae\u8c03 Faster R-CNN<\/h2>\n\n\n\n<p>\u8ba9\u6211\u4eec\u9996\u5148\u4f7f\u7528 bash \u547d\u4ee4\u4eceKaggle\u4e0b\u8f7d\u6570\u636e\u96c6\uff0c\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1234<\/td><td><code># !pip install -qq torch torchvision kaggle<\/code><code>#!sudo apt-get install unzip -y<\/code>&nbsp;<code>!sudo apt<\/code><code>-<\/code><code>get install tree<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<\/td><td><code>!kaggle datasets download&nbsp;<\/code><code>-<\/code><code>d ubiratanfilho<\/code><code>\/<\/code><code>sds<\/code><code>-<\/code><code>dataset<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4e0b\u8f7d\u7684\u6570\u636e\u96c6\u7ed3\u6784\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>12345678<\/td><td><code>compressed<\/code><code>\u251c\u2500\u2500 annotations<\/code><code>\u2502&nbsp;&nbsp; \u251c\u2500\u2500 instances_train.json<\/code><code>\u2502&nbsp;&nbsp; \u2514\u2500\u2500 instances_val.json<\/code><code>\u251c\u2500\u2500 images<\/code><code>\u2502&nbsp;&nbsp; \u251c\u2500\u2500 train<\/code><code>\u2502&nbsp;&nbsp; \u2514\u2500\u2500 val<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\u2514\u2500\u2500 test<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u548c<code>instances_train.json<\/code>\u5c06<code>instances_val.json<\/code>\u5305\u542b\u56fe\u50cf ID\u4ee5\u53ca\u65e0\u4eba\u673a\uff08\u6444\u50cf\u673a\u6e90\uff09\u76f8\u5e94\u7684\u65e0\u4eba\u673a\u5143\u6570\u636e\uff0c\u4f8b\u5982\u7eac\u5ea6\u3001\u7ecf\u5ea6\u3001\u901f\u5ea6\u7b49\u3002\u9664\u4e86\u8fd9\u4e9b\u5143\u6570\u636e\u4e4b\u5916\uff0c\u8fd8\u5b58\u5728\u5176\u4ed6\u6ce8\u91ca\uff0c\u4f8b\u5982\u8fb9\u754c\u6846\u548c\u7c7b\u522b\u6216\u7c7b\u522b ID\uff0c\u8fd9\u4e9b\u90fd\u662f\u6211\u4eec\u611f\u5174\u8da3\u7684\u9009\u62e9\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<\/td><td><code>\"annotations\": [{\"id\": 14579, \"image_id\": 3388, \"bbox\": [3619, 1409, 75, 38], \"area\": 2850, \"category_id\": 2}, {\"id\": 14581, \"image_id\": 3389, \"bbox\": [3524, 1408, 73, 37], \"area\": 2701, \"category_id\": 2},<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u5b89\u88c5\u4f9d\u8d56\u9879<\/h2>\n\n\n\n<p>\u6211\u4eec\u5c06\u4f7f\u7528 torchvision \u5e93\u8bbe\u7f6e\u6211\u4eec\u7684\u6a21\u578b\u5fae\u8c03\u7ba1\u9053\u5e76<code>torchmetrics<\/code>\u8ba1\u7b97<code>pycocotools<\/code>\u8bc4\u4f30\u6307\u6807\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>12345<\/td><td><code># !pip install -qq torchvision<\/code><code># !pip install -qq torch<\/code><code>!pip install&nbsp;<\/code><code>-<\/code><code>qq torchmetrics[detection]<\/code><code>!pip install&nbsp;<\/code><code>-<\/code><code>qq pycocotools<\/code><code>!pip install&nbsp;<\/code><code>-<\/code><code>qq tensorboard<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4e3a\u4e86\u4f7f\u6211\u4eec\u7684\u8bad\u7ec3\u4ee3\u7801\u548c\u5b9e\u7528\u7a0b\u5e8f\u9002\u5e94torchvision \u5bf9\u8c61\u68c0\u6d4b\uff0c\u6211\u4eec\u5c06\u7b80\u5355\u5730\u514b\u9686\u5b98\u65b9 torchvision \u5b58\u50a8\u5e93\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<\/td><td><code>!git clone https:<\/code><code>\/<\/code><code>\/<\/code><code>github.com<\/code><code>\/<\/code><code>pytorch<\/code><code>\/<\/code><code>vision.git&nbsp;&nbsp;<\/code><code>#Training Metric Utilities from Torchvision<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u5bfc\u5165\u5e93<\/h2>\n\n\n\n<p>\u7136\u540e\uff0c\u5bfc\u5165\u5fc5\u8981\u7684\u5e93\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d<\/td><td><code>import<\/code>&nbsp;<code>os<\/code><code>import<\/code>&nbsp;<code>gc<\/code><code>import<\/code>&nbsp;<code>json<\/code><code>import<\/code>&nbsp;<code>math<\/code><code>import<\/code>&nbsp;<code>random<\/code><code>import<\/code>&nbsp;<code>requests<\/code><code>import<\/code>&nbsp;<code>zipfile<\/code><code>import<\/code>&nbsp;<code>numpy as np<\/code><code>from<\/code>&nbsp;<code>PIL&nbsp;<\/code><code>import<\/code>&nbsp;<code>Image, ImageDraw, ImageFont, ImageOps, ImageStat<\/code><code>import<\/code>&nbsp;<code>PIL<\/code><code>import<\/code>&nbsp;<code>torch<\/code><code>import<\/code>&nbsp;<code>torch.optim as optim<\/code><code>from<\/code>&nbsp;<code>torch.utils.data&nbsp;<\/code><code>import<\/code>&nbsp;<code>Dataset, DataLoader<\/code><code>from<\/code>&nbsp;<code>torch.utils.tensorboard&nbsp;<\/code><code>import<\/code>&nbsp;<code>SummaryWriter<\/code>&nbsp;<code>import<\/code>&nbsp;<code>matplotlib.pyplot as plt<\/code><code>import<\/code>&nbsp;<code>matplotlib.patches as patches<\/code><code>from<\/code>&nbsp;<code>matplotlib.patches&nbsp;<\/code><code>import<\/code>&nbsp;<code>Patch<\/code><code>import<\/code>&nbsp;<code>logging<\/code><code>from<\/code>&nbsp;<code>tqdm&nbsp;<\/code><code>import<\/code>&nbsp;<code>tqdm<\/code>&nbsp;<code>from<\/code>&nbsp;<code>torchmetrics.detection.mean_ap&nbsp;<\/code><code>import<\/code>&nbsp;<code>MeanAveragePrecision<\/code><code>from<\/code>&nbsp;<code>dataclasses&nbsp;<\/code><code>import<\/code>&nbsp;<code>dataclass<\/code><code>import<\/code>&nbsp;<code>torchvision<\/code><code>from<\/code>&nbsp;<code>vision.references.detection&nbsp;<\/code><code>import<\/code>&nbsp;<code>utils<\/code>&nbsp;<code>import<\/code>&nbsp;<code>torchvision.transforms as T<\/code><code>from<\/code>&nbsp;<code>torchvision.transforms&nbsp;<\/code><code>import<\/code>&nbsp;<code>v2 as Tv2<\/code><code>from<\/code>&nbsp;<code>torchvision&nbsp;<\/code><code>import<\/code>&nbsp;<code>tv_tensors<\/code><code>from<\/code>&nbsp;<code>torchvision.transforms&nbsp;<\/code><code>import<\/code>&nbsp;<code>functional as F<\/code><code>from<\/code>&nbsp;<code>torchvision.transforms.functional&nbsp;<\/code><code>import<\/code>&nbsp;<code>to_pil_image<\/code>&nbsp;<code>import<\/code>&nbsp;<code>torchvision.models.detection as detection<\/code><code>from<\/code>&nbsp;<code>torchvision.models.detection&nbsp;<\/code><code>import<\/code>&nbsp;<code>FasterRCNN<\/code><code>from<\/code>&nbsp;<code>torchvision.models.detection.faster_rcnn&nbsp;<\/code><code>import<\/code>&nbsp;<code>FastRCNNPredictor<\/code><code>from<\/code>&nbsp;<code>torchvision.models.detection.transform&nbsp;<\/code><code>import<\/code>&nbsp;<code>GeneralizedRCNNTransform<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8ba9\u6211\u4eec\u8bbe\u7f6e\u53ef\u91cd\u590d\u6027\u7684\u79cd\u5b50\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e0914<\/td><td><code>def<\/code>&nbsp;<code>set_seeds():<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># fix random seeds<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>SEED_VALUE&nbsp;<\/code><code>=<\/code>&nbsp;<code>42<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>random.seed(SEED_VALUE)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>np.random.seed(SEED_VALUE)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>torch.manual_seed(SEED_VALUE)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>torch.cuda.is_available():<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>torch.cuda.manual_seed(SEED_VALUE)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>torch.cuda.manual_seed_all(SEED_VALUE)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>torch.backends.cudnn.deterministic&nbsp;<\/code><code>=<\/code>&nbsp;<code>True<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>torch.backends.cudnn.benchmark&nbsp;<\/code><code>=<\/code>&nbsp;<code>True<\/code><code>set_seeds()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e0b\u8f7d\u4fee\u8865\u6570\u636e\u96c6<\/h2>\n\n\n\n<p>\u4e3a\u4e86\u8282\u7701\u65f6\u95f4\u5e76\u76f4\u63a5\u8ba1\u7b97\uff0c\u8bf7\u901a\u8fc7\u8fd0\u884c\u4ee5\u4e0b\u811a\u672c\u4e0b\u8f7d\u6211\u4eec\u521b\u5efa\u7684\u8865\u4e01\u3002\u5982\u679c\u60a8\u60f3\u8df3\u8fc7\u8865\u4e01&nbsp;\u521b\u5efa\u7684\u6570\u636e\u96c6\u9884\u5904\u7406\u529f\u80fd\uff0c\u53ef\u4ee5\u4f7f\u7528\u6b64\u811a\u672c\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>12345<\/td><td><code>if<\/code>&nbsp;<code>not<\/code>&nbsp;<code>os.path.exists(<\/code><code>'SeaDroneSee'<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>os.mkdir(<\/code><code>'SeaDroneSee'<\/code><code>)<\/code>&nbsp;<code>!wget&nbsp;<\/code><code>-<\/code><code>O SeaDroneSee<\/code><code>\/<\/code><code>SeaDroneSee.<\/code><code>zip<\/code>&nbsp;<code>\"https:\/\/www.dropbox.com\/scl\/fi\/0oyv9pki57laqgmq7matd\/SeaDroneSee.zip?rlkey=yasyxr0u3450dylv5musks1s0&amp;st=q12t3tc3&amp;dl=1\"<\/code><code>!wget&nbsp;<\/code><code>-<\/code><code>O SeaDroneSee<\/code><code>\/<\/code><code>SeaDroneSee_test.<\/code><code>zip<\/code>&nbsp;<code>\"https:\/\/www.dropbox.com\/scl\/fi\/4qidpahgu9mogam33uxlz\/SeaDroneSee_test.zip?rlkey=1gt6mebuppxg4ehzhicwqafav&amp;st=5g01mcdb&amp;dl=1\"<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e0914151617181920212223<\/td><td><code>def<\/code>&nbsp;<code>download_file(url, save_name):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>not<\/code>&nbsp;<code>os.path.exists(save_name):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Handling potential redirection in requests<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with requests.get(url, allow_redirects<\/code><code>=<\/code><code>True<\/code><code>) as r:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>r.status_code&nbsp;<\/code><code>=<\/code><code>=<\/code>&nbsp;<code>200<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with&nbsp;<\/code><code>open<\/code><code>(save_name,&nbsp;<\/code><code>'wb'<\/code><code>) as f:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>f.write(r.content)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>else<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(<\/code><code>\"Failed to download the file, status code:\"<\/code><code>, r.status_code)<\/code>&nbsp;<code>def<\/code>&nbsp;<code>unzip(zip_file<\/code><code>=<\/code><code>None<\/code><code>, target_dir<\/code><code>=<\/code><code>None<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>try<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with zipfile.ZipFile(zip_file,&nbsp;<\/code><code>'r'<\/code><code>) as z:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>z.extractall(target_dir)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(<\/code><code>\"Extracted all to:\"<\/code><code>, target_dir)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>except<\/code>&nbsp;<code>zipfile.BadZipFile:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(<\/code><code>\"Invalid file or error during extraction: Bad Zip File\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>except<\/code>&nbsp;<code>Exception as e:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(<\/code><code>\"An error occurred:\"<\/code><code>, e)<\/code>&nbsp;<code>save_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>'SeaDroneSee\/SeaDroneSee.zip'<\/code><code>model_ckpt_url&nbsp;<\/code><code>=<\/code>&nbsp;<code>'https:\/\/www.dropbox.com\/scl\/fi\/xmftrum0a8rgjp82j6n65\/model_ckpt.zip?rlkey=aywwl28rbcbiejggdps0durfu&amp;st=dda61bld&amp;dl=1'<\/code><code>model_save_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>'SeaDroneSee\/Model_ckpt.zip'<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>12345<\/td><td><code>download_file(model_ckpt_url, model_save_path)<\/code><code>unzip(zip_file<\/code><code>=<\/code><code>model_save_path, target_dir<\/code><code>=<\/code><code>'SeaDroneSee'<\/code><code>)&nbsp;&nbsp;<\/code><code># Specify target directory for the model checkpoint<\/code><code>unzip(zip_file<\/code><code>=<\/code><code>save_path)<\/code><code>test_save_path<\/code><code>=<\/code>&nbsp;<code>'SeaDroneSee\/SeaDroneSee_test.zip'<\/code><code>unzip(zip_file&nbsp;<\/code><code>=<\/code>&nbsp;<code>test_save_path, target_dir<\/code><code>=<\/code><code>'SeaDroneSee'<\/code><code>)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8981\u521b\u5efa\u5177\u6709\u60a8\u9009\u62e9\u7684\u8865\u4e01&nbsp;\u5927\u5c0f\u3001\u91cd\u53e0&nbsp;\u7387\u548c\u8981\u4fdd\u5b58\u7684\u8865\u4e01\u6570\u91cf\u7684\u8865\u4e01\uff0c\u8bf7\u7ee7\u7eed\u4eab\u53d7\u7406\u89e3\u4ee5\u4e0b\u8865\u4e01\u521b\u5efa\u4ee3\u7801\u90e8\u5206\u7684\u8fc7\u7a0b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahVOiac9S7gHrWXvRWpvTqOsE5s1BX9YAa1VS2nXynb1dgDotzjndgibvQ\/640?wx_fmt=jpeg&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"\u6d41\u7a0b\u56fe-PyTorch-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe\uff1a\u6d41\u7a0b\u56fe&nbsp;\u2014\u2014\u5fae\u8c03 Faster R-CNN \u7ba1\u9053<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u5b9e\u7528\u7a0b\u5e8f\uff1a\u7528\u4e8e\u5fae\u8c03 Faster R-CNN<\/h2>\n\n\n\n<p>\u8ba9\u6211\u4eec\u8fdb\u884c\u7c7b\u6620\u5c04\u5e76\u4e3a\u6bcf\u4e2a\u6807\u7b7e\u6216\u7c7b\u522b ID\u5206\u914d\u552f\u4e00\u7684&nbsp;\u989c\u8272\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718<\/td><td><code>classes_to_idx&nbsp;<\/code><code>=<\/code>&nbsp;<code>{<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>0<\/code><code>:&nbsp;<\/code><code>'ignored'<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>1<\/code><code>:&nbsp;<\/code><code>'swimmer'<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>2<\/code><code>:&nbsp;<\/code><code>'boat'<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>3<\/code><code>:&nbsp;<\/code><code>'jetski'<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>4<\/code><code>:&nbsp;<\/code><code>'life_saving_appliances'<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>5<\/code><code>:&nbsp;<\/code><code>\"buoy\"<\/code><code>}<\/code>&nbsp;<code># Mapping category IDs to colors<\/code><code>category_colors&nbsp;<\/code><code>=<\/code>&nbsp;<code>{<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>0<\/code><code>:&nbsp;<\/code><code>'black'<\/code><code>,&nbsp;&nbsp;&nbsp;<\/code><code># ignored<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>1<\/code><code>:&nbsp;<\/code><code>'red'<\/code><code>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># swimmer<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>2<\/code><code>:&nbsp;<\/code><code>'orange'<\/code><code>,&nbsp;&nbsp;&nbsp;<\/code><code># boat<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>3<\/code><code>:&nbsp;<\/code><code>'blue'<\/code><code>,&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># jetski<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>4<\/code><code>:&nbsp;<\/code><code>'purple'<\/code><code>,&nbsp;&nbsp;<\/code><code># life saving appliances<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>5<\/code><code>:&nbsp;<\/code><code>'yellow'<\/code>&nbsp;&nbsp;&nbsp;<code># buoy<\/code><code>}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u7406\u89e3\u6570\u636e\u96c6\u662f\u4efb\u4f55\u6df1\u5ea6\u5b66\u4e60\u4efb\u52a1\u4e2d\u7684\u5173\u952e\u6b65\u9aa4\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u82b1\u5927\u91cf\u65f6\u95f4\u7814\u7a76\u8be5\u6570\u636e\u96c6\u7684\u4e00\u4e9b\u9884\u5904\u7406\u6280\u672f\u3002<\/p>\n\n\n\n<p>\u4e3a\u4e86\u68c0\u67e5\u548c\u53ef\u89c6\u5316\u57fa\u672c\u4e8b\u5b9e\u6ce8\u91ca\uff0c\u8ba9\u6211\u4eec\u5b9a\u4e49<code>draw_bounding_boxes<\/code>\u6548\u7528\u3002<br>\u5bf9\u8c61\u68c0\u6d4b\u7684\u4e00\u4e2a\u5173\u952e\u65b9\u9762\u662f\u8fb9\u754c\u6846\u683c\u5f0f\uff0c\u5982\u679c\u5904\u7406\u4e0d\u5f53\uff0c\u5b83\u4f1a\u59a8\u788d\u6211\u4eec\u5fae\u8c03 Faster RCNN \u7ba1\u9053\u3002\u7531\u4e8e\u6211\u4eec\u7684\u6570\u636e\u96c6\u6ce8\u91ca\u662f<code>XYWH<\/code>\u683c\u5f0f\uff0c\u6211\u4eec\u9700\u8981\u5c06\u5b83\u4eec\u8f6c\u6362\u4e3a<code>XYXY<\/code>\uff0c\u8fd9\u662f PIL \u7684\u56fe\u50cf\u7ed8\u5236\u51fd\u6570\u7684\u9884\u671f\u683c\u5f0f\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e09<\/td><td><code>def<\/code>&nbsp;<code>draw_bounding_boxes(image, bboxes):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>draw&nbsp;<\/code><code>=<\/code>&nbsp;<code>ImageDraw.Draw(image)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>font_size&nbsp;<\/code><code>=<\/code>&nbsp;<code>int<\/code><code>(<\/code><code>min<\/code><code>(image.size)&nbsp;<\/code><code>*<\/code>&nbsp;<code>0.02<\/code><code>)&nbsp;&nbsp;<\/code><code># Adjust font size based on image size<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>font_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>\"\/usr\/share\/fonts\/truetype\/dejavu\/DejaVuSans-Bold.ttf\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>font&nbsp;<\/code><code>=<\/code>&nbsp;<code>ImageFont.truetype(font_path, font_size)&nbsp;<\/code><code>if<\/code>&nbsp;<code>os.path.exists(font_path)&nbsp;<\/code><code>else<\/code>&nbsp;<code>ImageFont.load_default()<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>bbox, category_id&nbsp;<\/code><code>in<\/code>&nbsp;<code>bboxes:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x, y, w, h&nbsp;<\/code><code>=<\/code>&nbsp;<code>bbox<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x1, y1, x2, y2&nbsp;<\/code><code>=<\/code>&nbsp;<code>x, y, x&nbsp;<\/code><code>+<\/code>&nbsp;<code>w, y&nbsp;<\/code><code>+<\/code>&nbsp;<code>h<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>color&nbsp;<\/code><code>=<\/code>&nbsp;<code>category_colors.get(category_id,&nbsp;<\/code><code>'white'<\/code><code>)&nbsp;&nbsp;<\/code><code># Default to white if category_id is unknown<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>draw.rectangle([x1, y1, x2, y2], outline<\/code><code>=<\/code><code>color, width<\/code><code>=<\/code><code>4<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>draw.text((x1, y1&nbsp;<\/code><code>-<\/code>&nbsp;<code>font_size),&nbsp;<\/code><code>str<\/code><code>(category_id), fill<\/code><code>=<\/code><code>color, font<\/code><code>=<\/code><code>font)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>image<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8be5\u5b9e\u7528\u7a0b\u5e8f\u91c7\u7528\u6216<code>load_annotations<\/code>\u7684\u8def\u5f84\u6765\u52a0\u8f7d\u5b83\u4eec\u5e76\u8fd4\u56de\u5b83\u4eec\u7684\u6ce8\u91ca\u3002&nbsp;<code>instances_train.json<\/code><code>instaces_val.json<\/code><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1234<\/td><td><code>def<\/code>&nbsp;<code>load_annotations(annotation_path):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with&nbsp;<\/code><code>open<\/code><code>(annotation_path,&nbsp;<\/code><code>'r'<\/code><code>) as f:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>json.load(f)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>annotations<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u52a0\u8f7d\u5b83\u4eec\u4e4b\u540e\uff0c\u6211\u4eec\u5c06\u4f7f\u7528\u6765\u81ea\u6ce8\u91ca\u7684\u56fe\u50cf ID \u8fed\u4ee3\u6bcf\u4e2a\u8fb9\u754c\u6846\u3002\u7136\u540e\u4f7f\u7528 matplotlib\uff0c\u6211\u4eec\u5c06\u7ed8\u5236\u8bad\u7ec3\u548c\u9a8c\u8bc1\u56fe\u50cf\u4ee5\u53ca\u5b83\u4eec\u7684\u57fa\u672c\u4e8b\u5b9e\u6ce8\u91ca\uff0c\u4ee5\u83b7\u5f97\u6211\u4eec\u9009\u62e9\u7684\u4efb\u610f\u6570\u91cf\u7684\u6837\u672c\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d\u4e09\u5341\u4e03\u4e09\u5341\u516b\u4e09\u5341\u4e5d<\/td><td><code>def<\/code>&nbsp;<code>visualize_samples(image_dir, annotation_path, num_samples<\/code><code>=<\/code><code>5<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>load_annotations(annotation_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>images_info&nbsp;<\/code><code>=<\/code>&nbsp;<code>annotations[<\/code><code>'images'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bboxes_info&nbsp;<\/code><code>=<\/code>&nbsp;<code>annotations[<\/code><code>'annotations'<\/code><code>]<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>images_with_bboxes&nbsp;<\/code><code>=<\/code>&nbsp;<code>{}<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>bbox&nbsp;<\/code><code>in<\/code>&nbsp;<code>bboxes_info:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_id&nbsp;<\/code><code>=<\/code>&nbsp;<code>bbox[<\/code><code>'image_id'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>image_id&nbsp;<\/code><code>not<\/code>&nbsp;<code>in<\/code>&nbsp;<code>images_with_bboxes:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>images_with_bboxes[image_id]&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>images_with_bboxes[image_id].append((bbox[<\/code><code>'bbox'<\/code><code>], bbox[<\/code><code>'category_id'<\/code><code>]))<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Shuffle list of images<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>random.shuffle(images_info)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Visualize samples<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.figure(figsize<\/code><code>=<\/code><code>(<\/code><code>15<\/code><code>, num_samples&nbsp;<\/code><code>*<\/code>&nbsp;<code>5<\/code><code>))<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>sample_count&nbsp;<\/code><code>=<\/code>&nbsp;<code>0<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>image_info&nbsp;<\/code><code>in<\/code>&nbsp;<code>images_info:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>sample_count &gt;<\/code><code>=<\/code>&nbsp;<code>num_samples:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>break<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(image_dir, image_info[<\/code><code>'file_name'<\/code><code>])<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>not<\/code>&nbsp;<code>os.path.exists(image_path):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>continue<\/code>&nbsp;&nbsp;<code># Skip this image if the file does not exist<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image&nbsp;<\/code><code>=<\/code>&nbsp;<code>Image.<\/code><code>open<\/code><code>(image_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_id&nbsp;<\/code><code>=<\/code>&nbsp;<code>image_info[<\/code><code>'id'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># print(f\"Img ID: {image_id} Image Dimension: {image.size}\")<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>image_id&nbsp;<\/code><code>in<\/code>&nbsp;<code>images_with_bboxes:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bboxes&nbsp;<\/code><code>=<\/code>&nbsp;<code>images_with_bboxes[image_id]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image&nbsp;<\/code><code>=<\/code>&nbsp;<code>draw_bounding_boxes(image, bboxes)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.subplot(num_samples,&nbsp;<\/code><code>1<\/code><code>, sample_count&nbsp;<\/code><code>+<\/code>&nbsp;<code>1<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.imshow(image)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.axis(<\/code><code>'off'<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.title(f<\/code><code>\"Image ID: {image_id}\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>sample_count&nbsp;<\/code><code>+<\/code><code>=<\/code>&nbsp;<code>1<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.tight_layout()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.show()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u6570\u636e\u6e05\u7406<\/h2>\n\n\n\n<p>\u8ba9\u6211\u4eec\u68c0\u67e5\u6574\u4e2a\u8bad\u7ec3\u548c\u9a8c\u8bc1\u56fe\u50cf\u6837\u672c\uff0c\u5e76\u7ed8\u5236\u5b83\u4eec\u7684\u771f\u5b9e\u6ce8\u91ca\uff0c\u7136\u540e\u5c06\u5b83\u4eec\u4fdd\u5b58\u5230\u6211\u4eec\u7684\u78c1\u76d8\u4e2d\uff0c\u4ee5\u4f9b\u624b\u52a8\u76ee\u89c6\u68c0\u67e5\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b<\/td><td><code># Directories<\/code><code>image_dir&nbsp;<\/code><code>=<\/code>&nbsp;<code>'compressed\/images\/train'<\/code><code>output_dir&nbsp;<\/code><code>=<\/code>&nbsp;<code>'compressed\/train_gt\/bbox_ann_images'<\/code><code>annotation_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>'compressed\/annotations\/instances_train.json'<\/code><code># Create the output directory if it doesn't exist<\/code><code>if<\/code>&nbsp;<code>not<\/code>&nbsp;<code>os.path.exists(output_dir):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>os.makedirs(output_dir)<\/code>&nbsp;<code># Process all images according to annotations<\/code><code>def<\/code>&nbsp;<code>process_and_save_annotated_images(image_dir, output_dir, annotations):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>{}<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>annot&nbsp;<\/code><code>in<\/code>&nbsp;<code>annotations[<\/code><code>'annotations'<\/code><code>]:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_annotations.setdefault(annot[<\/code><code>'image_id'<\/code><code>], []).append(annot)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>image_id, annots&nbsp;<\/code><code>in<\/code>&nbsp;<code>image_annotations.items():<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(image_dir, f<\/code><code>\"{image_id}.jpg\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>os.path.exists(image_path):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image&nbsp;<\/code><code>=<\/code>&nbsp;<code>Image.<\/code><code>open<\/code><code>(image_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotated_image&nbsp;<\/code><code>=<\/code>&nbsp;<code>draw_bounding_boxes(image, annots, category_colors)&nbsp;&nbsp;<\/code><code># Pass all annotations for the image<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>output_image_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(output_dir, f<\/code><code>\"annotated_{image_id}.jpg\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotated_image.save(output_image_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(f<\/code><code>\"Saved annotated image to {output_image_path}\"<\/code><code>)<\/code>&nbsp;<code># Load annotations<\/code><code>annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>load_annotations(annotation_path)<\/code>&nbsp;<code># Annotate and save images<\/code><code>process_and_save_annotated_images(image_dir, output_dir, annotations)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u901a\u8fc7\u4ed4\u7ec6\u89c2\u5bdf\u6211\u4eec\u4fdd\u5b58\u7684\u6240\u6709\u56fe\u50cf\uff0c\u6211\u4eec\u53d1\u73b0\u5927\u7ea673 \u4e2a\u79fb\u52a8\u7269\u4f53\u6837\u672c\u7684\u771f\u5b9e\u8fb9\u754c\u6846\u6ce8\u91ca\u5b58\u5728\u504f\u79fb\u6216\u9519\u8bef\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u6587\u4ef6\u540d\u624b\u52a8\u5220\u9664\u5b83\u4eec\uff0c\u56e0\u4e3a\u8fd9\u4f1a\u7ed9\u5fae\u8c03 Faster R-CNN \u6a21\u578b\u5e26\u6765\u566a\u97f3\u3002&nbsp;<\/p>\n\n\n\n<p>\u6df1\u5ea6\u5b66\u4e60\u7684\u4e00\u4e2a\u8457\u540d\u539f\u5219\u662f\u89e3\u51b3\u201c\u5783\u573e\u8fdb\u5783\u573e\u51fa\u201d\uff08GIGO&nbsp;\u539f\u5219\uff09\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahotjsNicHkCWqyibwmGFshbp1PsIyXKrBWH5jBRJlJL4OZ2iaQbIUh5Q8g\/640?wx_fmt=jpeg&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"offset_annotated-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 7\uff1a\u6570\u636e\u96c6\u4e2d\u7684\u504f\u79fb\u56fe\u50cf\u6ce8\u91ca<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324<\/td><td><code># List of file names to remove<\/code><code>train_file_remove_list&nbsp;<\/code><code>=<\/code>&nbsp;<code>[<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>3391<\/code><code>,&nbsp;<\/code><code>3392<\/code><code>,&nbsp;<\/code><code>3393<\/code><code>,&nbsp;<\/code><code>3413<\/code><code>,&nbsp;<\/code><code>3414<\/code><code>,&nbsp;<\/code><code>3415<\/code><code>,&nbsp;<\/code><code>3416<\/code><code>,&nbsp;<\/code><code>3417<\/code><code>,&nbsp;<\/code><code>6952<\/code><code>,&nbsp;<\/code><code>6957<\/code><code>,&nbsp;<\/code><code>7002<\/code><code>,&nbsp;<\/code><code>7000<\/code><code>,&nbsp;<\/code><code>6999<\/code><code>,&nbsp;<\/code><code>7023<\/code><code>,&nbsp;<\/code><code>7046<\/code><code>,&nbsp;<\/code><code>7093<\/code><code>,&nbsp;<\/code><code>7092<\/code><code>,&nbsp;<\/code><code>7091<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>7527<\/code><code>,&nbsp;<\/code><code>7558<\/code><code>,&nbsp;<\/code><code>7611<\/code><code>,&nbsp;<\/code><code>7631<\/code><code>,&nbsp;<\/code><code>7987<\/code><code>,&nbsp;<\/code><code>7988<\/code><code>,&nbsp;<\/code><code>8091<\/code><code>,&nbsp;<\/code><code>8097<\/code><code>,&nbsp;<\/code><code>8098<\/code><code>,&nbsp;<\/code><code>8099<\/code><code>,&nbsp;<\/code><code>8113<\/code><code>,&nbsp;<\/code><code>8114<\/code><code>,&nbsp;<\/code><code>8422<\/code><code>,&nbsp;<\/code><code>8438<\/code><code>,&nbsp;<\/code><code>8441<\/code><code>,&nbsp;<\/code><code>8443<\/code><code>,&nbsp;<\/code><code>10246<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>10260<\/code><code>,&nbsp;<\/code><code>10263<\/code><code>,&nbsp;<\/code><code>10264<\/code><code>,&nbsp;<\/code><code>10265<\/code><code>,&nbsp;<\/code><code>10266<\/code><code>,&nbsp;<\/code><code>10269<\/code><code>,&nbsp;<\/code><code>10271<\/code><code>,&nbsp;<\/code><code>10330<\/code><code>,&nbsp;<\/code><code>10348<\/code><code>,&nbsp;<\/code><code>10369<\/code><code>,&nbsp;<\/code><code>10368<\/code><code>,&nbsp;<\/code><code>10379<\/code><code>,&nbsp;<\/code><code>11785<\/code><code>,&nbsp;<\/code><code>11814<\/code><code>,&nbsp;<\/code><code>11828<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>11862<\/code><code>,&nbsp;<\/code><code>11865<\/code><code>,&nbsp;<\/code><code>11869<\/code><code>,&nbsp;<\/code><code>11877<\/code><code>,&nbsp;<\/code><code>11887<\/code><code>,&nbsp;<\/code><code>11891<\/code><code>,&nbsp;<\/code><code>11908<\/code><code>,&nbsp;<\/code><code>11910<\/code><code>,&nbsp;<\/code><code>12001<\/code><code>,&nbsp;<\/code><code>12003<\/code><code>,&nbsp;<\/code><code>12195<\/code><code>,&nbsp;<\/code><code>12312<\/code><code>,&nbsp;<\/code><code>12327<\/code><code>,&nbsp;<\/code><code>12332<\/code><code>,&nbsp;<\/code><code>12417<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>13035<\/code><code>,&nbsp;<\/code><code>15809<\/code><code>,&nbsp;<\/code><code>15808<\/code><code>,&nbsp;<\/code><code>15913<\/code><code>,&nbsp;<\/code><code>15914<\/code><code>,&nbsp;<\/code><code>16140<\/code><code>,&nbsp;<\/code><code>16270<\/code><code>,&nbsp;<\/code><code>16271<\/code><code>]<\/code>&nbsp;<code>val_file_remove_list&nbsp;<\/code><code>=<\/code>&nbsp;<code>[<\/code><code>10465<\/code><code>]<\/code>&nbsp;<code># Directory containing the images<\/code><code>image_dir&nbsp;<\/code><code>=<\/code>&nbsp;<code>'.\/compressed\/images\/train'<\/code>&nbsp;<code># Iterate over the file list and attempt to remove each file<\/code><code>for<\/code>&nbsp;<code>file_id&nbsp;<\/code><code>in<\/code>&nbsp;<code>train_file_remove_list:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>file_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(image_dir, f<\/code><code>\"{file_id}.jpg\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>os.path.exists(file_path):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>try<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>os.remove(file_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(f<\/code><code>\"Removed: {file_path}\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>except<\/code>&nbsp;<code>OSError as e:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(f<\/code><code>\"Error removing {file_path}: {e}\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>else<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(f<\/code><code>\"File does not exist: {file_path}\"<\/code><code>)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u6570\u636e\u9884\u5904\u7406\uff1a\u8865\u4e01\u521b\u5efa<\/h2>\n\n\n\n<p>\u5982\u524d\u6240\u8ff0\uff0c\u6211\u4eec\u5c06\u5ffd\u7565\u67d0\u4e9b\u56fe\u50cf\u4e2d\u8499\u7248\u526a\u5207\u533a\u57df\u5185\u7684\u8fb9\u754c\u6846\u6ce8\u91ca\u3002\u6211\u4eec\u5c06\u901a\u8fc7\u5e73\u5747\u8499\u7248\u526a\u5207\u533a\u57df\u5185\u8fb9\u754c\u6846\u5185\u7684\u50cf\u7d20\u989c\u8272\u6765\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u4ece\u800c\u5c06\u8fd9\u4e9b\u8fb9\u754c\u6846\u4ece\u6ce8\u91ca\u6587\u4ef6\u4e2d\u6392\u9664\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e09141516<\/td><td><code>def<\/code>&nbsp;<code>is_bbox_ignored(image, bbox, threshold<\/code><code>=<\/code><code>10<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Check if the entire region inside a bounding box is predominantly black.<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>Args:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image (PIL.Image): The image to check.<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bbox (list): The bounding box [x, y, width, height].<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>threshold (int): The threshold below which a region is considered black.<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>Returns:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bool: True if the region is predominantly black, False otherwise.<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x, y, w, h&nbsp;<\/code><code>=<\/code>&nbsp;<code>bbox<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>cropped_image&nbsp;<\/code><code>=<\/code>&nbsp;<code>image.crop((x, y, x&nbsp;<\/code><code>+<\/code>&nbsp;<code>w, y&nbsp;<\/code><code>+<\/code>&nbsp;<code>h))<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>stat&nbsp;<\/code><code>=<\/code>&nbsp;<code>ImageStat.Stat(cropped_image)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>avg_color&nbsp;<\/code><code>=<\/code>&nbsp;<code>stat.mean&nbsp;&nbsp;<\/code><code># Average color (R, G, B)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Check if all color channels are below the threshold<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>all<\/code><code>(channel &lt; threshold&nbsp;<\/code><code>for<\/code>&nbsp;<code>channel&nbsp;<\/code><code>in<\/code>&nbsp;<code>avg_color)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4e3a\u4e86\u5728\u6570\u636e\u52a0\u8f7d\u5668\u4e2d\u7684\u6240\u6709\u56fe\u50cf\u4e2d\u4fdd\u6301\u5bbd\u5ea6\u5927\u4e8e\u9ad8\u5ea6\u7684\u4e00\u81f4\u7eb5\u6a2a&nbsp;\u6bd4\uff0c\u6211\u4eec\u5c06\u628a\u9ad8\u5ea6\u5927\u4e8e\u5176\u5bbd\u5ea6\u7684\u56fe\u50cf\u8f6c\u6362\u4e3a\u5bbd\u5ea6\u5927\u4e8e\u5176\u9ad8\u5ea6\u7684\u56fe\u50cf\u3002<\/p>\n\n\n\n<p>\u5982\u679c\u56fe\u50cf\u7684\u9ad8\u5ea6\u5927\u4e8e\u5176\u5bbd\u5ea6\uff0c\u90a3\u4e48\u4f7f\u7528 PIL\uff0c\u6211\u4eec\u5c06\u9006\u65f6\u9488\u65cb\u8f6c\u56fe\u50cf90 \u5ea6\uff0c\u5e76\u5728\u5fc5\u8981\u65f6\u586b\u5145\u5269\u4f59\u533a\u57df\uff0c\u4ee5\u4f7f\u7528 expand=True \u53c2\u6570\u4fdd\u6301\u7eb5\u6a2a\u6bd4\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1234567<\/td><td><code>def<\/code>&nbsp;<code>check_and_rotate_image(image):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Rotate the image if its height is greater than its width and return the image and a flag indicating rotation.\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>width, height&nbsp;<\/code><code>=<\/code>&nbsp;<code>image.size<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>height &gt; width:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image&nbsp;<\/code><code>=<\/code>&nbsp;<code>image.rotate(<\/code><code>90<\/code><code>, expand<\/code><code>=<\/code><code>True<\/code><code>)&nbsp;&nbsp;<\/code><code># Rotates 90 counter-clockwise<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>image,&nbsp;<\/code><code>True<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>image,&nbsp;<\/code><code>False<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u63a5\u4e0b\u6765\u662f\u5173\u952e\u7684\u4e00\u6b65\uff0cbbox\u4f1a\u6839\u636e\u56fe\u50cf\u7684\u65cb\u8f6c\u8fdb\u884c\u8c03\u6574\u3002\u5f53\u6211\u4eec\u9006\u65f6\u9488\u65cb\u8f6c\u56fe\u50cf\u65f6\uff0c\u65b0\u7684\u5c3a\u5bf8\u4f1a\u76f8\u5bf9\u8c03\u6574\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d<\/td><td><code>def<\/code>&nbsp;<code>adjust_bbox_for_rotation(bbox, image_width, image_height):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Adjust bounding boxes for 90 degree counter clockwise rotation.\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x, y, w, h&nbsp;<\/code><code>=<\/code>&nbsp;<code>bbox<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_x&nbsp;<\/code><code>=<\/code>&nbsp;<code>y<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_y&nbsp;<\/code><code>=<\/code>&nbsp;<code>image_width&nbsp;<\/code><code>-<\/code>&nbsp;<code>(x&nbsp;<\/code><code>+<\/code>&nbsp;<code>w)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_w&nbsp;<\/code><code>=<\/code>&nbsp;<code>h<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_h&nbsp;<\/code><code>=<\/code>&nbsp;<code>w<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>[new_x, new_y, new_w, new_h]<\/code>&nbsp;<code>def<\/code>&nbsp;<code>rotate_image_and_adjust_bbox(image, annotations, original_dims):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Rotate image and adjust bounding boxes accordingly.\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>rotated_image&nbsp;<\/code><code>=<\/code>&nbsp;<code>image.rotate(<\/code><code>90<\/code><code>, expand<\/code><code>=<\/code><code>True<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>original_width, original_height&nbsp;<\/code><code>=<\/code>&nbsp;<code>original_dims<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>ann&nbsp;<\/code><code>in<\/code>&nbsp;<code>annotations:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x, y, w, h&nbsp;<\/code><code>=<\/code>&nbsp;<code>ann[<\/code><code>'bbox'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_x&nbsp;<\/code><code>=<\/code>&nbsp;<code>y<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_y&nbsp;<\/code><code>=<\/code>&nbsp;<code>original_width&nbsp;<\/code><code>-<\/code>&nbsp;<code>(x&nbsp;<\/code><code>+<\/code>&nbsp;<code>w)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_w&nbsp;<\/code><code>=<\/code>&nbsp;<code>h<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_h&nbsp;<\/code><code>=<\/code>&nbsp;<code>w<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_ann&nbsp;<\/code><code>=<\/code>&nbsp;<code>ann.copy()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_ann[<\/code><code>'bbox'<\/code><code>]&nbsp;<\/code><code>=<\/code>&nbsp;<code>[new_x, new_y, new_w, new_h]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_annotations.append(new_ann)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>rotated_image, new_annotations<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9884\u5904\u7406\u7684\u4e3b\u8981\u65b9\u9762\u662f\u8865\u4e01\u521b\u5efa\u903b\u8f91\u3002\u6211\u4eec\u4e4b\u524d\u76f4\u89c2\u5730\u7406\u89e3\u4e86\u8fd9\u4e00\u70b9\uff1b\u73b0\u5728\uff0c\u8ba9\u6211\u4eec\u5728\u4ee3\u7801\u4e2d\u5b9e\u73b0\u5b83\u3002<\/p>\n\n\n\n<p>\u6b64\u51fd\u6570\u5c06\u521b\u5efa\u5c3a\u5bf8\u4e3a\u56fe\u50cf\u4e00\u534a\u3001\u91cd\u53e0\u7387\u4e3a 0.2 \u7684\u8865\u4e01\u3002\u901a\u8fc7\u5728\u56fe\u50cf\u4e0a\u6ed1\u52a8\uff0c\u6211\u4eec\u5c06\u83b7\u5f97\u56db\u4e2a\u8865\u4e01\u3002\u7136\u540e\u4fdd\u5b58\u8fd9\u4e9b\u8865\u4e01\uff0c\u5e76\u8fd4\u56de\u5b83\u4eec\u7684\u5750\u6807\u4f4d\u7f6e\uff08\u5de6\u3001\u4e0a\u3001\u53f3\u3001\u4e0b\uff09\u3002\u8fd9\u5bf9\u4e8e\u8c03\u6574\u76f8\u5bf9\u4e8e\u539f\u59cb\u56fe\u50cf\u4e2d\u6bcf\u4e2a\u8865\u4e01\u7684\u8fb9\u754c\u6846\u81f3\u5173\u91cd\u8981\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324<\/td><td><code>def<\/code>&nbsp;<code>create_patches(image, output_dir, image_filename, overlap_ratio<\/code><code>=<\/code><code>0.2<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Create image patches and handle image rotation if necessary.\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image, was_rotated&nbsp;<\/code><code>=<\/code>&nbsp;<code>check_and_rotate_image(image)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>width, height&nbsp;<\/code><code>=<\/code>&nbsp;<code>image.size<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_width&nbsp;<\/code><code>=<\/code>&nbsp;<code>int<\/code><code>(width&nbsp;<\/code><code>\/<\/code>&nbsp;<code>2<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_height&nbsp;<\/code><code>=<\/code>&nbsp;<code>int<\/code><code>(height&nbsp;<\/code><code>\/<\/code>&nbsp;<code>2<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>overlap_width&nbsp;<\/code><code>=<\/code>&nbsp;<code>int<\/code><code>(patch_width&nbsp;<\/code><code>*<\/code>&nbsp;<code>overlap_ratio)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>overlap_height&nbsp;<\/code><code>=<\/code>&nbsp;<code>int<\/code><code>(patch_height&nbsp;<\/code><code>*<\/code>&nbsp;<code>overlap_ratio)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patches&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>i&nbsp;<\/code><code>in<\/code>&nbsp;<code>range<\/code><code>(<\/code><code>2<\/code><code>):&nbsp;&nbsp;<\/code><code># Three rows<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>j&nbsp;<\/code><code>in<\/code>&nbsp;<code>range<\/code><code>(<\/code><code>2<\/code><code>):&nbsp;&nbsp;<\/code><code># Three columns<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>left&nbsp;<\/code><code>=<\/code>&nbsp;<code>i&nbsp;<\/code><code>*<\/code>&nbsp;<code>(patch_width&nbsp;<\/code><code>-<\/code>&nbsp;<code>overlap_width)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>top&nbsp;<\/code><code>=<\/code>&nbsp;<code>j&nbsp;<\/code><code>*<\/code>&nbsp;<code>(patch_height&nbsp;<\/code><code>-<\/code>&nbsp;<code>overlap_height)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>right&nbsp;<\/code><code>=<\/code>&nbsp;<code>left&nbsp;<\/code><code>+<\/code>&nbsp;<code>patch_width<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bottom&nbsp;<\/code><code>=<\/code>&nbsp;<code>top&nbsp;<\/code><code>+<\/code>&nbsp;<code>patch_height<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch&nbsp;<\/code><code>=<\/code>&nbsp;<code>image.crop((left, top, right, bottom))<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_filename&nbsp;<\/code><code>=<\/code>&nbsp;<code>f<\/code><code>'{os.path.splitext(image_filename)[0]}_{i}_{j}.jpg'<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(output_dir, patch_filename)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch.save(patch_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patches.append((patch_filename, left, top, right, bottom, was_rotated))<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>patches<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u7136\u540e\u6839\u636e\u9762\u7247\u5750\u6807\u8c03\u6574\u8fd9\u4e9b\u8fb9\u754c\u6846\u3002\u6211\u4eec\u9650\u5236\u8fd9\u4e9b\u503c\u4ee5\u786e\u4fdd\u65b0\u6ce8\u91ca\u4e0d\u8d85\u8fc7\u9762\u7247\u5c3a\u5bf8\u3002\u6211\u4eec\u8fd8\u786e\u4fdd\u4e0d\u4f1a\u4fdd\u5b58\u4efb\u4f55\u975e\u6b63\u8fb9\u754c\u6846\u503c\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d\u4e09\u5341\u4e03<\/td><td><code>def<\/code>&nbsp;<code>adjust_bbox_for_patch(bbox, patch_coords):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Adjust the bounding box to the coordinates of the patch with enhanced error handling.\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>left, top, right, bottom&nbsp;<\/code><code>=<\/code>&nbsp;<code>patch_coords<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x, y, w, h&nbsp;<\/code><code>=<\/code>&nbsp;<code>bbox<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x1, y1, x2, y2&nbsp;<\/code><code>=<\/code>&nbsp;<code>x, y, x&nbsp;<\/code><code>+<\/code>&nbsp;<code>w, y&nbsp;<\/code><code>+<\/code>&nbsp;<code>h<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>logging.debug(f<\/code><code>\"Original bbox: {bbox}\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>logging.debug(f<\/code><code>\"Patch coordinates: {patch_coords}\"<\/code><code>)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Ensure the bounding box intersects with the patch<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>x2 &lt;<\/code><code>=<\/code>&nbsp;<code>left&nbsp;<\/code><code>or<\/code>&nbsp;<code>x1 &gt;<\/code><code>=<\/code>&nbsp;<code>right&nbsp;<\/code><code>or<\/code>&nbsp;<code>y2 &lt;<\/code><code>=<\/code>&nbsp;<code>top&nbsp;<\/code><code>or<\/code>&nbsp;<code>y1 &gt;<\/code><code>=<\/code>&nbsp;<code>bottom:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># logging.warning(\"Bounding box does not intersect with the patch.\")<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>None<\/code>&nbsp;&nbsp;<code># No intersection<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Clamp the bounding box to the patch boundaries<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>clamped_x1&nbsp;<\/code><code>=<\/code>&nbsp;<code>max<\/code><code>(x1, left)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>clamped_y1&nbsp;<\/code><code>=<\/code>&nbsp;<code>max<\/code><code>(y1, top)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>clamped_x2&nbsp;<\/code><code>=<\/code>&nbsp;<code>min<\/code><code>(x2, right)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>clamped_y2&nbsp;<\/code><code>=<\/code>&nbsp;<code>min<\/code><code>(y2, bottom)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>adjusted_width&nbsp;<\/code><code>=<\/code>&nbsp;<code>clamped_x2&nbsp;<\/code><code>-<\/code>&nbsp;<code>clamped_x1<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>adjusted_height&nbsp;<\/code><code>=<\/code>&nbsp;<code>clamped_y2&nbsp;<\/code><code>-<\/code>&nbsp;<code>clamped_y1<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Check for non-positive dimensions<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>adjusted_width &lt;<\/code><code>=<\/code>&nbsp;<code>0<\/code>&nbsp;<code>or<\/code>&nbsp;<code>adjusted_height &lt;<\/code><code>=<\/code>&nbsp;<code>0<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>logging.warning(<\/code><code>\"Adjusted bounding box has non-positive dimensions.\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>None<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Check if adjusted bounding box exceeds patch size<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>adjusted_width &gt; (right&nbsp;<\/code><code>-<\/code>&nbsp;<code>left)&nbsp;<\/code><code>or<\/code>&nbsp;<code>adjusted_height &gt; (bottom&nbsp;<\/code><code>-<\/code>&nbsp;<code>top):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>logging.warning(<\/code><code>\"Adjusted bounding box exceeds patch dimensions.\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>None<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>adjusted_bbox&nbsp;<\/code><code>=<\/code>&nbsp;<code>[clamped_x1&nbsp;<\/code><code>-<\/code>&nbsp;<code>left, clamped_y1&nbsp;<\/code><code>-<\/code>&nbsp;<code>top, adjusted_width, adjusted_height]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>logging.debug(f<\/code><code>\"Adjusted bbox: {adjusted_bbox}\"<\/code><code>)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>adjusted_bbox<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4ee5\u4e0b\u51fd\u6570\u7ed3\u5408\u4e86\u6240\u6709\u6ce8\u91ca\u5b9e\u7528\u7a0b\u5e8f\u5e76\u8fd4\u56de\u6bcf\u4e2a\u8865\u4e01\u5185\u7684\u5b9e\u4f8b\u6ce8\u91ca\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d\u4e09\u5341\u4e03<\/td><td><code>def<\/code>&nbsp;<code>get_annotations_for_patches(image, annotations, patches, original_image_id):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Adjust annotations for each patch.\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotation_id&nbsp;<\/code><code>=<\/code>&nbsp;<code>0<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>patch_filename, left, top, right, bottom, was_rotated&nbsp;<\/code><code>in<\/code>&nbsp;<code>patches:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_coords&nbsp;<\/code><code>=<\/code>&nbsp;<code>(left, top, right, bottom)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_annots&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>ann&nbsp;<\/code><code>in<\/code>&nbsp;<code>annotations:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>ann[<\/code><code>'image_id'<\/code><code>] !<\/code><code>=<\/code>&nbsp;<code>original_image_id:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>continue<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bbox&nbsp;<\/code><code>=<\/code>&nbsp;<code>ann[<\/code><code>'bbox'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>was_rotated:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bbox&nbsp;<\/code><code>=<\/code>&nbsp;<code>adjust_bbox_for_rotation(bbox, right&nbsp;<\/code><code>-<\/code>&nbsp;<code>left, bottom&nbsp;<\/code><code>-<\/code>&nbsp;<code>top)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Check if the bbox should be ignored<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>is_bbox_ignored(image, bbox):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>continue<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>adjusted_bbox&nbsp;<\/code><code>=<\/code>&nbsp;<code>adjust_bbox_for_patch(bbox, patch_coords)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>adjusted_bbox:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_ann&nbsp;<\/code><code>=<\/code>&nbsp;<code>{<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"id\"<\/code><code>: annotation_id,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"image_id\"<\/code><code>: patch_filename,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"bbox\"<\/code><code>: adjusted_bbox,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"area\"<\/code><code>: (adjusted_bbox[<\/code><code>2<\/code><code>]&nbsp;<\/code><code>*<\/code>&nbsp;<code>adjusted_bbox[<\/code><code>3<\/code><code>]),<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"category_id\"<\/code><code>: ann[<\/code><code>'category_id'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>}<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_annots.append(new_ann)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotation_id&nbsp;<\/code><code>+<\/code><code>=<\/code>&nbsp;<code>1<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>patch_annots:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patch_annotations.extend(patch_annots)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>patch_annotations<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u73b0\u5728\uff0c\u662f\u65f6\u5019\u6574\u5408&nbsp;\u6240\u6709\u8fd9\u4e9b\u9884\u5904\u7406&nbsp;\u6b65\u9aa4\u4e86\u3002\u6211\u4eec\u5c06\u9996\u5148\u8bfb\u53d6\u6ce8\u91ca\u6587\u4ef6\uff0c\u5bf9\u5176\u8fdb\u884c\u8fed\u4ee3\uff0c\u65cb\u8f6c\u56fe\u50cf\u5c3a\u5bf8\uff0c\u521b\u5efa\u8865\u4e01\uff0c\u6700\u540e\u8c03\u6574\u8fb9\u754c\u6846\u5e76\u5c06\u5b83\u4eec\u4fdd\u5b58\u5230\u8bad\u7ec3\u548c\u9a8c\u8bc1\u96c6\u7684\u8f93\u51fa\u76ee\u5f55\u4e2d\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d\u4e09\u5341\u4e03\u4e09\u5341\u516b<\/td><td><code>def<\/code>&nbsp;<code>process_images_and_annotations(base_dir):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotation_files&nbsp;<\/code><code>=<\/code>&nbsp;<code>[<\/code><code>'instances_train.json'<\/code><code>,<\/code><code>'instances_val.json'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_dirs&nbsp;<\/code><code>=<\/code>&nbsp;<code>[<\/code><code>'train'<\/code><code>,<\/code><code>'val'<\/code><code>]<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>all_new_annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>{<\/code><code>\"annotations\"<\/code><code>: []}<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>annotation_file, image_dir&nbsp;<\/code><code>in<\/code>&nbsp;<code>zip<\/code><code>(annotation_files, image_dirs):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotation_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(base_dir,&nbsp;<\/code><code>'annotations'<\/code><code>, annotation_file)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with&nbsp;<\/code><code>open<\/code><code>(annotation_path,&nbsp;<\/code><code>'r'<\/code><code>) as f:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>json.load(f)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>image_info&nbsp;<\/code><code>in<\/code>&nbsp;<code>annotations[<\/code><code>'images'<\/code><code>]:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_filename&nbsp;<\/code><code>=<\/code>&nbsp;<code>image_info[<\/code><code>'file_name'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(base_dir,&nbsp;<\/code><code>'images'<\/code><code>, image_dir, image_filename)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>not<\/code>&nbsp;<code>os.path.exists(image_path):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>continue<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>original_dims&nbsp;<\/code><code>=<\/code>&nbsp;<code>(image_info[<\/code><code>'width'<\/code><code>], image_info[<\/code><code>'height'<\/code><code>])<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image&nbsp;<\/code><code>=<\/code>&nbsp;<code>Image.<\/code><code>open<\/code><code>(image_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>image_info[<\/code><code>'height'<\/code><code>] &gt; image_info[<\/code><code>'width'<\/code><code>]:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>rotated_image, image_annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>rotate_image_and_adjust_bbox(image.copy(), annotations[<\/code><code>'annotations'<\/code><code>], original_dims)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>else<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>rotated_image&nbsp;<\/code><code>=<\/code>&nbsp;<code>image.copy()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>annotations[<\/code><code>'annotations'<\/code><code>]<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>output_dir&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(base_dir,&nbsp;<\/code><code>'output_patches'<\/code><code>,&nbsp;<\/code><code>'images'<\/code><code>, image_dir)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>os.makedirs(output_dir, exist_ok<\/code><code>=<\/code><code>True<\/code><code>)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>patches&nbsp;<\/code><code>=<\/code>&nbsp;<code>create_patches(rotated_image, output_dir, image_filename)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>new_annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>get_annotations_for_patches(rotated_image, image_annotations, patches, image_info[<\/code><code>'id'<\/code><code>])<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>all_new_annotations[<\/code><code>\"annotations\"<\/code><code>].extend(new_annotations)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotation_dir&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(base_dir,&nbsp;<\/code><code>'output_patches'<\/code><code>,&nbsp;<\/code><code>'annotations'<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>os.makedirs(annotation_dir, exist_ok<\/code><code>=<\/code><code>True<\/code><code>)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotations_output_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(base_dir,&nbsp;<\/code><code>'output_patches'<\/code><code>,&nbsp;<\/code><code>'annotations'<\/code><code>, f<\/code><code>'instances_patches_{image_dir}.json'<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with&nbsp;<\/code><code>open<\/code><code>(annotations_output_path,&nbsp;<\/code><code>'w'<\/code><code>) as f:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>json.dump(all_new_annotations, f, indent<\/code><code>=<\/code><code>4<\/code><code>)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>12<\/td><td><code>base_dir&nbsp;<\/code><code>=<\/code>&nbsp;<code>'.\/compressed\/'<\/code><code>process_images_and_annotations(base_dir)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u73b0\u5728\uff0c\u5728<code>instances_patches_train.json<\/code>\u548c<code>instances_patches_val.json<\/code>\u5355\u4e2a\u56fe\u50cf\u4e2d\u7684\u56db\u4e2a\u8865\u4e01\u7684\u6ce8\u91ca\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123<\/td><td><code>\"annotations\": [<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>{\"id\": 0,\"image_id\": \"3390_0_1.jpg\",\"bbox\":&nbsp;&nbsp; 1863,&nbsp; 542,57,&nbsp; 36&nbsp; ],&nbsp; \"area\": 2052, \"category_id\": 2},<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>{ \"id\": 0,\"image_id\": \"3399_0_2.jpg\",\"bbox\": [1731,288, 70,35 ], \"area\": 2450, \"category_id\": 2 },<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahKcDH985nn7mPXr5QZjBczOlOTNlIRS2hsjpFvVFbhfb3mz73pSDEEA\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"\u8865\u4e01\u6837\u672c\u5fae\u8c03 Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 8\uff1a\u8865\u4e01\u521b\u5efa\u793a\u4f8b<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u6570\u636e\u7c7b\u51c6\u5907\uff1a\u5fae\u8c03 Faster R-CNN<\/h2>\n\n\n\n<p>\u6b64\u884c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u540d\u4e3aDatasetConfig\u7684\u6570\u636e\u7c7b\uff0c\u7528\u4e8e\u5b58\u50a8\u6570\u636e\u96c6\u7684\u914d\u7f6e\u53c2\u6570\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1234567<\/td><td><code>@dataclass<\/code><code>class<\/code>&nbsp;<code>DatasetConfig:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>root:&nbsp;<\/code><code>str<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotations_file:&nbsp;<\/code><code>str<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>train_img_size:&nbsp;<\/code><code>tuple<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>subset:&nbsp;<\/code><code>str<\/code>&nbsp;<code>=<\/code>&nbsp;<code>'train'<\/code>&nbsp;&nbsp;<code># Default to 'train'<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>transforms:&nbsp;<\/code><code>any<\/code>&nbsp;<code>=<\/code>&nbsp;<code>None<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8fd9\u91cc\u7684<code>CustomAerialDataset<\/code>\u7c7b\u65e8\u5728\u5904\u7406\u822a\u7a7a\u56fe\u50cf\u6570\u636e\u96c6\u5e76\u6267\u884c\u8bf8\u5982\u52a0\u8f7d\u56fe\u50cf\u3001\u5904\u7406\u6ce8\u91ca\u548c\u51c6\u5907\u7528\u4e8e\u5fae\u8c03 Faster R-CNN \u6a21\u578b\u7684\u6570\u636e\u7b49\u4efb\u52a1\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u5176\u4e3b\u8981\u529f\u80fd\u7684\u7b80\u8981\u6982\u8ff0\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8be5\u7c7b\u91c7\u7528<code>DatasetConfig<\/code>\u5305\u542b\u6839\u76ee\u5f55\u3001\u56fe\u50cf\u5927\u5c0f\u3001\u5b50\u96c6\uff08\u8bad\u7ec3\/\u9a8c\u8bc1\/\u6d4b\u8bd5\uff09\u548c\u4efb\u4f55\u8f6c\u6362\u7684\u5bf9\u8c61\u3002<\/li>\n\n\n\n<li>\u5b83\u521d\u59cb\u5316\u56fe\u50cf\u548c\u6ce8\u91ca\u7684\u8def\u5f84\u5e76\u8c03\u7528\u65b9\u6cd5\u6765\u52a0\u8f7d\u5b83\u4eec\u3002<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e0914<\/td><td><code>class<\/code>&nbsp;<code>CustomAerialDataset(Dataset):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>def<\/code>&nbsp;<code>__init__(<\/code><code>self<\/code><code>, config: DatasetConfig):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.root&nbsp;<\/code><code>=<\/code>&nbsp;<code>config.root<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.transforms&nbsp;<\/code><code>=<\/code>&nbsp;<code>config.transforms<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.train_img_size&nbsp;<\/code><code>=<\/code>&nbsp;<code>config.train_img_size<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.subset&nbsp;<\/code><code>=<\/code>&nbsp;<code>config.subset<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.annotations_file&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(<\/code><code>self<\/code><code>.root,&nbsp;<\/code><code>'annotations'<\/code><code>, f<\/code><code>'instances_patches_{self.subset}.json'<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.imgs&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.img_annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>{}<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>._load_images()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>._load_annotations()<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>def<\/code>&nbsp;<code>__len__(<\/code><code>self<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>len<\/code><code>(<\/code><code>self<\/code><code>.imgs)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0\u8be5<code>_load_images<\/code>\u65b9\u6cd5\u626b\u63cf\u6307\u5b9a\u7684\u5b50\u96c6\u76ee\u5f55\u5e76\u5c06\u6709\u6548\u7684\u56fe\u50cf\u6587\u4ef6\u8def\u5f84\u9644\u52a0\u5230<code>imgs<\/code>\u5217\u8868\u4e2d\u3002<\/li>\n\n\n\n<li>\u6bcf\u4e2a\u56fe\u50cf\u6700\u521d\u90fd\u88ab\u8d4b\u4e88\u4e00\u4e2a\u7a7a\u7684\u6ce8\u91ca\u3002<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e09<\/td><td><code>class<\/code>&nbsp;<code>CustomAerialDataset(Dataset):<\/code><code>...&nbsp;&nbsp;&nbsp;<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>def<\/code>&nbsp;<code>_load_images(<\/code><code>self<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Load all images from the subset directory<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>images_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(<\/code><code>self<\/code><code>.root,&nbsp;<\/code><code>'images'<\/code><code>,&nbsp;<\/code><code>self<\/code><code>.subset)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>image_filename&nbsp;<\/code><code>in<\/code>&nbsp;<code>os.listdir(images_path):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(images_path, image_filename)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>os.path.isfile(image_path)&nbsp;<\/code><code>and<\/code>&nbsp;<code>image_path.endswith((<\/code><code>'.png'<\/code><code>,&nbsp;<\/code><code>'.jpg'<\/code><code>,&nbsp;<\/code><code>'.jpeg'<\/code><code>)):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.imgs.append(image_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_id&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.basename(image_path)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Initialize empty annotations for each image<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>image_id&nbsp;<\/code><code>not<\/code>&nbsp;<code>in<\/code>&nbsp;<code>self<\/code><code>.img_annotations:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.img_annotations[image_id]&nbsp;<\/code><code>=<\/code>&nbsp;<code>{<\/code><code>'boxes'<\/code><code>: [],&nbsp;<\/code><code>'labels'<\/code><code>: []}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0\u7136\u540e\u8be5<code>_load_annotations<\/code>\u65b9\u6cd5\u8bfb\u53d6\u5305\u542b\u8fb9\u754c\u6846\u6ce8\u91ca\u7684 JSON \u6587\u4ef6\u3002<\/li>\n\n\n\n<li>\u5b83\u5c06\u6bcf\u4e2a\u6ce8\u91ca\u4e0e\u5176\u5bf9\u5e94\u7684\u56fe\u50cf\u8fdb\u884c\u5339\u914d\uff0c\u5e76\u5b58\u50a8\u8fb9\u754c\u6846\u5750\u6807\u548c\u7c7b\u522b ID\u3002<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e09<\/td><td><code>class<\/code>&nbsp;<code>CustomAerialDataset(Dataset):<\/code><code>...<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>def<\/code>&nbsp;<code>_load_annotations(<\/code><code>self<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with&nbsp;<\/code><code>open<\/code><code>(<\/code><code>self<\/code><code>.annotations_file,&nbsp;<\/code><code>'r'<\/code><code>) as f:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>data&nbsp;<\/code><code>=<\/code>&nbsp;<code>json.load(f)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>annotation&nbsp;<\/code><code>in<\/code>&nbsp;<code>data[<\/code><code>'annotations'<\/code><code>]:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_id&nbsp;<\/code><code>=<\/code>&nbsp;<code>annotation[<\/code><code>\"image_id\"<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bbox&nbsp;<\/code><code>=<\/code>&nbsp;<code>annotation[<\/code><code>\"bbox\"<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>category_id&nbsp;<\/code><code>=<\/code>&nbsp;<code>annotation[<\/code><code>\"category_id\"<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>image_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(<\/code><code>self<\/code><code>.root,&nbsp;<\/code><code>'images'<\/code><code>,&nbsp;<\/code><code>self<\/code><code>.subset, image_id)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>image_id&nbsp;<\/code><code>in<\/code>&nbsp;<code>self<\/code><code>.img_annotations:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.img_annotations[image_id][<\/code><code>'boxes'<\/code><code>].append(bbox)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>self<\/code><code>.img_annotations[image_id][<\/code><code>'labels'<\/code><code>].append(category_id)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8fd9\u00a0<code>__getitem__<\/code>\u65b9\u6cd5\u901a\u8fc7\u7d22\u5f15\u68c0\u7d22\u56fe\u50cf\u53ca\u5176\u6ce8\u91ca\u3002<\/li>\n\n\n\n<li>\u5982\u679c\u56fe\u50cf\u4e2d\u6ca1\u6709\u5b9e\u4f8b\uff0c\u5b83\u4f1a\u901a\u8fc7\u8fd4\u56de\u96f6\u5f20\u91cf\u548c\u865a\u62df\u76ee\u6807\u6765\u5904\u7406\u4e22\u5931\u7684\u56fe\u50cf\u3002\u8fd9\u6837\u505a\u662f\u56e0\u4e3a\u5728\u679a\u4e3e\u4e00\u6279\u56fe\u50cf\u53ca\u5176\u5bf9\u5e94\u7684\u76ee\u6807\u65f6\uff0c\u635f\u5931\u8ba1\u7b97\u9700\u8981\u4e00\u4e2a\u5f62\u72b6\u4e3a(\u00a0N\u00a0,4)\u7684\u76ee\u6807\u3002\u5047\u8bbe\u6211\u4eec\u53ea\u662f\u4f20\u9012\u6ca1\u6709\u5b9e\u4f8b\u7684\u56fe\u50cf\uff0c\u8fd9\u5c06\u5f15\u53d1\u9519\u8bef\uff0c\u4f8b\u5982\u9884\u671f\u5f62\u72b6\u4e3a (N,4) \u7684\u5f20\u91cf\uff0c\u4f46\u6536\u5230\u7684\u662f torch.size([0])\u3002<\/li>\n\n\n\n<li>\u7136\u540e\u5c06\u56fe\u50cf\u8c03\u6574\u4e3a\u6307\u5b9a\u7684\u5c3a\u5bf8\uff0c\u5e76\u76f8\u5e94\u5730\u7f29\u653e\u8fb9\u754c\u6846\u4ee5\u51cf\u5c11\u8bad\u7ec3\u65f6\u95f4\u548c GPU \u5c0f\u65f6\u6570\u3002<\/li>\n\n\n\n<li>\u8fd9\u91cc\u7684\u76ee\u6807\u5c06\u662f\u76d2\u5b50\u5f20\u91cf\u7684\u5b57\u5178\u53ca\u5176\u5206\u522b\u5177\u6709\u6570\u636e\u7c7b\u578b<code>float32<\/code>\u548c\u7684\u7b49\u6548\u6807\u7b7e\u5f20\u91cf<code>int64<\/code>\u3002<\/li>\n\n\n\n<li>\u65e0\u8bba torch.transforms.function \u8fdb\u884c\u4ec0\u4e48\u8f6c\u6362\uff0c\u90fd\u5c06\u5e94\u7528\u4e8e\u56fe\u50cf\u548c\u76ee\u6807\uff0c\u4ee5\u786e\u4fdd\u6267\u884c\u6709\u6548\u7684\u589e\u5f3a\uff0c\u4ece\u800c\u63d0\u9ad8\u6a21\u578b\u6027\u80fd\u3002<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d\u4e09\u5341\u4e03<\/td><td><code>class<\/code>&nbsp;<code>CustomAerialDataset(Dataset):<\/code><code>...<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>def<\/code>&nbsp;<code>__getitem__(<\/code><code>self<\/code><code>, idx):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>img_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>self<\/code><code>.imgs[idx]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>not<\/code>&nbsp;<code>os.path.exists(img_path):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Return a default image (like a zero tensor) and a dummy target<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>default_img&nbsp;<\/code><code>=<\/code>&nbsp;<code>torch.zeros(<\/code><code>3<\/code><code>,&nbsp;<\/code><code>*<\/code><code>self<\/code><code>.train_img_size)&nbsp;&nbsp;<\/code><code># Assuming 3 color channels<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>default_target&nbsp;<\/code><code>=<\/code>&nbsp;<code>{<\/code><code>'boxes'<\/code><code>: torch.tensor([[<\/code><code>0<\/code><code>,&nbsp;<\/code><code>0<\/code><code>,&nbsp;<\/code><code>0<\/code><code>,&nbsp;<\/code><code>0<\/code><code>]], dtype<\/code><code>=<\/code><code>torch.float32),<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>'labels'<\/code><code>: torch.tensor([<\/code><code>0<\/code><code>], dtype<\/code><code>=<\/code><code>torch.int64)}&nbsp;&nbsp;<\/code><code># Background<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>default_img, default_target<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>img&nbsp;<\/code><code>=<\/code>&nbsp;<code>Image.<\/code><code>open<\/code><code>(img_path).convert(<\/code><code>\"RGB\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>orig_width, orig_height&nbsp;<\/code><code>=<\/code>&nbsp;<code>img.size<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>scale_x&nbsp;<\/code><code>=<\/code>&nbsp;<code>self<\/code><code>.train_img_size[<\/code><code>0<\/code><code>]&nbsp;<\/code><code>\/<\/code>&nbsp;<code>orig_width<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>scale_y&nbsp;<\/code><code>=<\/code>&nbsp;<code>self<\/code><code>.train_img_size[<\/code><code>1<\/code><code>]&nbsp;<\/code><code>\/<\/code>&nbsp;<code>orig_height<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>img&nbsp;<\/code><code>=<\/code>&nbsp;<code>img.resize(<\/code><code>self<\/code><code>.train_img_size, Image.BILINEAR)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>img&nbsp;<\/code><code>=<\/code>&nbsp;<code>F.to_tensor(img)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotations&nbsp;<\/code><code>=<\/code>&nbsp;<code>self<\/code><code>.img_annotations[os.path.basename(img_path)]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>annotations[<\/code><code>'boxes'<\/code><code>]:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>scaled_boxes&nbsp;<\/code><code>=<\/code>&nbsp;<code>[[<\/code><code>max<\/code><code>(<\/code><code>0<\/code><code>,&nbsp;<\/code><code>min<\/code><code>(bbox[<\/code><code>0<\/code><code>]&nbsp;<\/code><code>*<\/code>&nbsp;<code>scale_x,&nbsp;<\/code><code>self<\/code><code>.train_img_size[<\/code><code>0<\/code><code>])),<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>max<\/code><code>(<\/code><code>0<\/code><code>,&nbsp;<\/code><code>min<\/code><code>(bbox[<\/code><code>1<\/code><code>]&nbsp;<\/code><code>*<\/code>&nbsp;<code>scale_y,&nbsp;<\/code><code>self<\/code><code>.train_img_size[<\/code><code>1<\/code><code>])),<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>max<\/code><code>(<\/code><code>0<\/code><code>,&nbsp;<\/code><code>min<\/code><code>((bbox[<\/code><code>0<\/code><code>]&nbsp;<\/code><code>+<\/code>&nbsp;<code>bbox[<\/code><code>2<\/code><code>])&nbsp;<\/code><code>*<\/code>&nbsp;<code>scale_x,&nbsp;<\/code><code>self<\/code><code>.train_img_size[<\/code><code>0<\/code><code>])),<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>max<\/code><code>(<\/code><code>0<\/code><code>,&nbsp;<\/code><code>min<\/code><code>((bbox[<\/code><code>1<\/code><code>]&nbsp;<\/code><code>+<\/code>&nbsp;<code>bbox[<\/code><code>3<\/code><code>])&nbsp;<\/code><code>*<\/code>&nbsp;<code>scale_y,&nbsp;<\/code><code>self<\/code><code>.train_img_size[<\/code><code>1<\/code><code>]))]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>bbox&nbsp;<\/code><code>in<\/code>&nbsp;<code>annotations[<\/code><code>'boxes'<\/code><code>]]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>labels&nbsp;<\/code><code>=<\/code>&nbsp;<code>annotations[<\/code><code>'labels'<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>else<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>scaled_boxes&nbsp;<\/code><code>=<\/code>&nbsp;<code>[[<\/code><code>0<\/code><code>,&nbsp;<\/code><code>0<\/code><code>,&nbsp;<\/code><code>0<\/code><code>,&nbsp;<\/code><code>0<\/code><code>]]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>labels&nbsp;<\/code><code>=<\/code>&nbsp;<code>[<\/code><code>0<\/code><code>]<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>boxes&nbsp;<\/code><code>=<\/code>&nbsp;<code>torch.tensor(scaled_boxes, dtype<\/code><code>=<\/code><code>torch.float32)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>labels&nbsp;<\/code><code>=<\/code>&nbsp;<code>torch.tensor(labels, dtype<\/code><code>=<\/code><code>torch.int64)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>target&nbsp;<\/code><code>=<\/code>&nbsp;<code>{<\/code><code>'boxes'<\/code><code>: boxes,&nbsp;<\/code><code>'labels'<\/code><code>: labels}<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>self<\/code><code>.transforms:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>img, target&nbsp;<\/code><code>=<\/code>&nbsp;<code>self<\/code><code>.transforms(img, target)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>img, target<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u5982\u679c\u6307\u5b9a\u4e86\u8f6c\u6362\uff0c\u5219\u5b83\u4eec\u4f1a\u5728\u8fd4\u56de\u4e4b\u524d\u5e94\u7528\u4e8e\u56fe\u50cf\u53ca\u5176\u6ce8\u91ca\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1234567<\/td><td><code>def<\/code>&nbsp;<code>get_transform(train):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>transforms&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># if train:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># transforms.append(Tv2.RandomHorizontalFlip(0.5))<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>transforms.append(Tv2.ToDtype(torch.<\/code><code>float<\/code><code>, scale<\/code><code>=<\/code><code>True<\/code><code>))<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>transforms.append(Tv2.ToPureTensor())<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>Tv2.Compose(transforms)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u6211\u4eec\u5b9a\u4e49\u7684CustomAerialDataset\u7c7b\u4e3a\u51c6\u5907\u6570\u636e\u52a0\u8f7d\u5668\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5f3a\u5927\u7684\u6846\u67b6\uff0c\u786e\u4fdd\u6b63\u786e\u52a0\u8f7d\u548c\u683c\u5f0f\u5316\u56fe\u50cf\u548c\u6ce8\u91ca\u4ee5\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002<\/p>\n\n\n\n<p>\u7136\u540e\uff0c\u521d\u59cb\u5316\u8bad\u7ec3\u548c\u9a8c\u8bc1\u914d\u7f6e\u3002\u6211\u4eec\u5c06\u8bad\u7ec3\u548c\u9a8c\u8bc1\u7684\u5927\u5c0f\u8c03\u6574\u4e3a(384,216)\u56fe\u50cf\u5927\u5c0f\uff0c\u5373(W, H)\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e09141516171819<\/td><td><code>root&nbsp;<\/code><code>=<\/code>&nbsp;<code>\"SeaDroneSee\/output_patches\"<\/code>&nbsp;<code># Configuration for training and validation datasets<\/code><code>train_config&nbsp;<\/code><code>=<\/code>&nbsp;<code>DatasetConfig(root,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotations_file<\/code><code>=<\/code><code>'',&nbsp;&nbsp;<\/code><code># This is now set based on subset in the __init__<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>train_img_size<\/code><code>=<\/code><code>(<\/code><code>384<\/code><code>,&nbsp;<\/code><code>216<\/code><code>),<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>subset<\/code><code>=<\/code><code>'train'<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>transforms<\/code><code>=<\/code><code>get_transform(train<\/code><code>=<\/code><code>True<\/code><code>))<\/code><code>val_config&nbsp;<\/code><code>=<\/code>&nbsp;<code>DatasetConfig(root,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>annotations_file<\/code><code>=<\/code><code>'',<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>train_img_size<\/code><code>=<\/code><code>(<\/code><code>384<\/code><code>,&nbsp;<\/code><code>216<\/code><code>),<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>subset<\/code><code>=<\/code><code>'val'<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>transforms<\/code><code>=<\/code><code>get_transform(train<\/code><code>=<\/code><code>False<\/code><code>))<\/code>&nbsp;<code>train_dataset&nbsp;<\/code><code>=<\/code>&nbsp;<code>CustomAerialDataset(train_config)<\/code><code>val_dataset&nbsp;<\/code><code>=<\/code>&nbsp;<code>CustomAerialDataset(val_config)<\/code>&nbsp;<code>print<\/code><code>(f<\/code><code>\"Length of Train Dataset: {len(train_dataset)}\"<\/code><code>)<\/code><code>print<\/code><code>(f<\/code><code>\"Length of Validation Dataset: {len(val_dataset)}\"<\/code><code>)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u521b\u5efa\u8865\u4e01\u540e\uff0c\u5171\u670935270 \u5f20\u8bad\u7ec3\u56fe\u50cf\u548c6188 \u5f20\u9a8c\u8bc1\u56fe\u50cf\uff0c\u5b83\u4eec\u5c06\u6210\u4e3a\u5fae\u8c03 Faster R-CNN \u6a21\u578b\u7684\u6700\u7ec8\u8f93\u5165\u56fe\u50cf\u96c6\u3002<\/p>\n\n\n\n<p>\u73b0\u5728\uff0c\u8ba9\u6211\u4eec\u5b9a\u4e49\u4e00\u4e2a\u81ea\u5b9a\u4e49\u65b9\u6cd5&nbsp;<code>collate function<\/code>&nbsp;\u5904\u7406\u6ca1\u6709\u6ce8\u91ca\u7684\u56fe\u50cf\u3002\u6211\u4eec\u8fd8\u9700\u8981\u4f20\u9012\u8fd9\u4e9b\u7a7a\u5b9e\u4f8b\u56fe\u50cf\uff0c\u56e0\u4e3a\u5b83\u4eec\u53ef\u4ee5\u63d0\u9ad8\u6a21\u578b\u7684\u6027\u80fd\u5e76\u907f\u514d\u8bef\u62a5\uff08\u6b64\u5904<code>Background<\/code>\u88ab\u8bef\u8ba4\u4e3a\u662f\u5bf9\u8c61\u5b9e\u4f8b\uff09\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112<\/td><td><code>def<\/code>&nbsp;<code>collate_fn(batch):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>imgs, targets&nbsp;<\/code><code>=<\/code>&nbsp;<code>zip<\/code><code>(<\/code><code>*<\/code><code>batch)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>imgs&nbsp;<\/code><code>=<\/code>&nbsp;<code>torch.stack(imgs, dim<\/code><code>=<\/code><code>0<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>real_targets&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>target&nbsp;<\/code><code>in<\/code>&nbsp;<code>targets:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Filter out dummy boxes<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>mask&nbsp;<\/code><code>=<\/code>&nbsp;<code>target[<\/code><code>'boxes'<\/code><code>].<\/code><code>sum<\/code><code>(dim<\/code><code>=<\/code><code>1<\/code><code>) &gt;&nbsp;<\/code><code>0<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>real_targets.append({<\/code><code>'boxes'<\/code><code>: target[<\/code><code>'boxes'<\/code><code>][mask],&nbsp;<\/code><code>'labels'<\/code><code>: target[<\/code><code>'labels'<\/code><code>][mask]})<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>imgs, real_targets<\/code>&nbsp;<code>train_data_loader&nbsp;<\/code><code>=<\/code>&nbsp;<code>DataLoader(train_dataset, batch_size<\/code><code>=<\/code><code>10<\/code><code>, shuffle<\/code><code>=<\/code><code>True<\/code><code>, collate_fn<\/code><code>=<\/code><code>collate_fn, num_workers<\/code><code>=<\/code><code>12<\/code><code>)<\/code><code>val_data_loader&nbsp;<\/code><code>=<\/code>&nbsp;<code>DataLoader(val_dataset, batch_size<\/code><code>=<\/code><code>10<\/code><code>, shuffle<\/code><code>=<\/code><code>False<\/code><code>, collate_fn<\/code><code>=<\/code><code>collate_fn, num_workers<\/code><code>=<\/code><code>12<\/code><code>)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8ba9\u6211\u4eec\u53ef\u89c6\u5316\u6765\u81eatrain_data_loader\u7684\u6837\u672c\uff0c\u4ee5\u68c0\u67e5\u6211\u4eec\u7684\u81ea\u5b9a\u4e49\u6570\u636e\u6570\u636e\u96c6\u7c7b\u662f\u5426\u5b9a\u4e49\u6b63\u786e\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d\u4e09\u5341\u4e03\u4e09\u5341\u516b\u4e09\u5341\u4e5d4041\u56db\u5341\u4e8c43<\/td><td><code>def<\/code>&nbsp;<code>show_image_with_boxes(img, targets, ax, category_colors):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Plot an image with its bounding boxes on an axis object.\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Convert tensor image to PIL for display if needed<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>isinstance<\/code><code>(img, torch.Tensor):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>img&nbsp;<\/code><code>=<\/code>&nbsp;<code>to_pil_image(img)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(img.size)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>ax.imshow(img)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Check and plot each bounding box with class-specific color<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>'boxes'<\/code>&nbsp;<code>in<\/code>&nbsp;<code>targets&nbsp;<\/code><code>and<\/code>&nbsp;<code>'labels'<\/code>&nbsp;<code>in<\/code>&nbsp;<code>targets:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>boxes&nbsp;<\/code><code>=<\/code>&nbsp;<code>targets[<\/code><code>'boxes'<\/code><code>].cpu().numpy()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>labels&nbsp;<\/code><code>=<\/code>&nbsp;<code>targets[<\/code><code>'labels'<\/code><code>].cpu().numpy()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>bbox, label&nbsp;<\/code><code>in<\/code>&nbsp;<code>zip<\/code><code>(boxes, labels):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>w&nbsp;<\/code><code>=<\/code>&nbsp;<code>bbox[<\/code><code>2<\/code><code>]<\/code><code>-<\/code><code>bbox[<\/code><code>0<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>h&nbsp;<\/code><code>=<\/code>&nbsp;<code>bbox[<\/code><code>3<\/code><code>]<\/code><code>-<\/code><code>bbox[<\/code><code>1<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>color&nbsp;<\/code><code>=<\/code>&nbsp;<code>category_colors.get(label,&nbsp;<\/code><code>'gray'<\/code><code>)&nbsp;&nbsp;<\/code><code># Use gray for unmapped classes<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>rect&nbsp;<\/code><code>=<\/code>&nbsp;<code>patches.Rectangle((bbox[<\/code><code>0<\/code><code>], bbox[<\/code><code>1<\/code><code>]), w, h, linewidth<\/code><code>=<\/code><code>2<\/code><code>, edgecolor<\/code><code>=<\/code><code>color, facecolor<\/code><code>=<\/code><code>'none'<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>ax.add_patch(rect)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>ax.text(bbox[<\/code><code>0<\/code><code>], bbox[<\/code><code>1<\/code><code>],&nbsp;<\/code><code>str<\/code><code>(label), color<\/code><code>=<\/code><code>'white'<\/code><code>, fontsize<\/code><code>=<\/code><code>12<\/code><code>, bbox<\/code><code>=<\/code><code>dict<\/code><code>(facecolor<\/code><code>=<\/code><code>color, alpha<\/code><code>=<\/code><code>0.5<\/code><code>))<\/code>&nbsp;<code>def<\/code>&nbsp;<code>visualize_samples(data_loader, category_colors, num_samples<\/code><code>=<\/code><code>20<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>\"\"\"Visualize a specified number of samples from a DataLoader in a single column.\"\"\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>num_rows&nbsp;<\/code><code>=<\/code>&nbsp;<code>num_samples&nbsp;&nbsp;<\/code><code># All samples in a single column<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>num_cols&nbsp;<\/code><code>=<\/code>&nbsp;<code>1<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>fig, axs&nbsp;<\/code><code>=<\/code>&nbsp;<code>plt.subplots(nrows<\/code><code>=<\/code><code>num_rows, ncols<\/code><code>=<\/code><code>num_cols, figsize<\/code><code>=<\/code><code>(<\/code><code>15<\/code><code>,&nbsp;<\/code><code>25<\/code>&nbsp;<code>*<\/code>&nbsp;<code>num_rows&nbsp;<\/code><code>\/<\/code><code>\/<\/code>&nbsp;<code>4<\/code><code>))&nbsp;&nbsp;<\/code><code># Adjust height based on rows<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>samples_visualized&nbsp;<\/code><code>=<\/code>&nbsp;<code>0<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>images, targets&nbsp;<\/code><code>in<\/code>&nbsp;<code>data_loader:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>i, ax&nbsp;<\/code><code>in<\/code>&nbsp;<code>enumerate<\/code><code>(axs.flat):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>samples_visualized &gt;<\/code><code>=<\/code>&nbsp;<code>num_samples:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>break<\/code>&nbsp;&nbsp;<code># Stop after displaying the desired number of samples<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>show_image_with_boxes(images[i], targets[i], ax, category_colors)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>ax.axis(<\/code><code>'off'<\/code><code>)&nbsp;&nbsp;<\/code><code># Turn off axis for cleaner look<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>samples_visualized&nbsp;<\/code><code>+<\/code><code>=<\/code>&nbsp;<code>1<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># If enough samples visualized, break the loop to avoid extra iterations<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>samples_visualized &gt;<\/code><code>=<\/code>&nbsp;<code>num_samples:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>break<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.tight_layout()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.show()<\/code><code>visualize_samples(train_data_loader, category_colors, num_samples<\/code><code>=<\/code><code>4<\/code><code>)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahczCjSEKWVQt2m9JEl7uh3W5YUVbIDVwJ6m9qw0Ibvqicia31e5ErfcxA\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"\u6570\u636e\u52a0\u8f7d\u5668-\u53ef\u89c6\u5316-\u5fae\u8c03-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 9\uff1aDataloader \u793a\u4f8b\u53ef\u89c6\u5316<\/figcaption><\/figure>\n\n\n\n<p>\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u4e00\u5207\u90fd\u5f88\u597d\uff0c\u76f8\u5e94\u7684\u8fb9\u754c\u6846\u4e5f\u5f97\u5230\u4e86\u5b8c\u7f8e\u7684\u7f29\u653e\u3002\u73b0\u5728\u4ece\u6570\u636e\u51c6\u5907\u8f6c\u5411\u6a21\u578b\u51c6\u5907\uff0c\u8fd9\u662f\u5fae\u8c03 Faster R-CNN \u6216\u4efb\u4f55\u6df1\u5ea6\u5b66\u4e60\u8bad\u7ec3\u7684\u53e6\u4e00\u4e2a\u5173\u952e\u65b9\u9762\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5fae\u8c03 Faster R-CNN PyTorch \u8bad\u7ec3\u914d\u7f6e<\/h2>\n\n\n\n<p>\u6211\u4eec\u5c06\u8fdb\u884c50 \u4e2a\u65f6\u671f\u7684\u5fae\u8c03\uff0c\u5e76\u5c06<code>best_map<\/code>\u521d\u59cb\u5316\u4e3a\uff0c<code>-inf<\/code>\u4ee5\u4fdd\u8bc1\u7b2c\u4e00\u4e2a\u8ba1\u7b97\u7684\u8bc4\u4f30\u6307\u6807\u59cb\u7ec8\u8d85\u8fc7\u8be5\u503c\uff0c\u786e\u4fdd\u521d\u59cb\u6a21\u578b\u6743\u91cd\u88ab\u89c6\u4e3a\u6700\u4f73\u57fa\u7ebf\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1234<\/td><td><code>num_epochs&nbsp;<\/code><code>=<\/code>&nbsp;<code>50<\/code><code>best_map&nbsp;<\/code><code>=<\/code>&nbsp;<code>-<\/code><code>float<\/code><code>(<\/code><code>'inf'<\/code><code>)&nbsp;<\/code><code># Training loop<\/code><code># print(best_map)<\/code><code>DEVICE&nbsp;<\/code><code>=<\/code>&nbsp;<code>torch.device(<\/code><code>'cuda'<\/code><code>)&nbsp;<\/code><code>if<\/code>&nbsp;<code>torch.cuda.is_available()&nbsp;<\/code><code>else<\/code>&nbsp;<code>torch.device(<\/code><code>'cpu'<\/code><code>)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u6211\u4eec\u6709\u56db\u4e2a\u57fa\u4e8eCOCO\u6570\u636e\u96c6\u8bad\u7ec3\u7684\u68c0\u6d4b\u4e3b\u5e72\u6a21\u578b\uff0c\u8fd9\u4e9b\u6a21\u578b\u6765\u81eatorchvision \u6a21\u578b\uff0c\u7528\u4e8e\u5fae\u8c03 Faster R-CNN\u3002\u6211\u4eec\u5c06\u5229\u7528\u8fd9\u4e9b\u9884\u8bad\u7ec3\u6743\u91cd\u5728\u66f4\u5c11\u7684\u5468\u671f\u5185\u5b9e\u73b0\u975e\u5e38\u597d\u7684\u68c0\u6d4b\u7cbe\u5ea6\u3002<\/p>\n\n\n\n<p>\u4f46\u662f\uff0c\u5982\u679c\u60a8\u613f\u610f\u5c1d\u8bd5\u7684\u8bdd\uff0c\u8fd8\u6709\u5176\u4ed6\u5bf9\u8c61\u68c0\u6d4b\u67b6\u6784\uff0c\u4f8b\u5982SSD\u3001RetinaNet\u7b49\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahoQfVWlD8dKbKjI3yAr1KGCppRglZFXhXss59WeBFWHnMicMZHicibPDuQ\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"torchvision-\u6a21\u578b\u5361-\u5fae\u8c03-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe10\uff1aTorchvision\u6a21\u578b\u5361<\/figcaption><\/figure>\n\n\n\n<p>\u4e3a\u4e86\u9002\u5e94\u6211\u4eec\u7684 Google&nbsp;Colab T4&nbsp;GPU\u5185\u5b58\uff0c\u6211\u4eec\u5c06\u9009\u62e9\u4e00\u4e2a\u8f7b\u91cf\u7ea7\u7684Mobilenet V3 Large\u4e3b\u5e72\uff0c\u5b83\u5728MSCOCO\u6570\u636e\u96c6\u4e0a\u5177\u6709\u5927\u7ea619.4M \u4e2a\u53c2\u6570\u30014.49 GFLOPS \u548c32.8 Box mAP\u3002<\/p>\n\n\n\n<p>\u7531\u4e8e\u6211\u4eec\u7684\u6570\u636e\u96c6\u5305\u542b\u516d\u4e2a&nbsp;\u7c7b\u522b\uff0c\u6211\u4eec\u5c06\u4fee\u6539\u9884\u8bad\u7ec3\u5206\u7c7b\u5934\u7684\u6700\u540e\u4e00\u5c42\u4ee5\u53cd\u6620 SeaDroneSee \u4e2d\u7684\u7c7b\u522b\u6570\u91cf\u3002\u6211\u4eec\u8fd8\u5c06\u4f7f\u7528\u52a8\u91cf\u4e3a0.9\u7684SGD \u4f18\u5316\u5668\u3001\u521d\u59cb\u5b66\u4e60\u7387\u4e3a 5e-4\uff0c\u5e76\u4f7f\u7528 StepLR\u6bcftotal_epochs\/2\u8c03\u6574\u4e00\u6b21\u5b66\u4e60\u7387\uff08\u5373\u5728\u7b2c 25 \u4e2a\u65f6\u671f\uff0c\u603b\u5171 50 \u4e2a\u65f6\u671f\uff09\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324<\/td><td><code>def<\/code>&nbsp;<code>get_model(num_classes):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>model&nbsp;<\/code><code>=<\/code>&nbsp;<code>detection.fasterrcnn_mobilenet_v3_large_fpn(weights<\/code><code>=<\/code><code>\"DEFAULT\"<\/code><code>)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>#Get the number of input features for the classifier<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>in_features&nbsp;<\/code><code>=<\/code>&nbsp;<code>model.roi_heads.box_predictor.cls_score.in_features<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>#Replace pretrained head with new one<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>model.roi_heads.box_predictor&nbsp;<\/code><code>=<\/code>&nbsp;<code>FastRCNNPredictor(in_features,num_classes)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>model<\/code>&nbsp;<code>num_classes&nbsp;<\/code><code>=<\/code>&nbsp;<code>6<\/code><code>model&nbsp;<\/code><code>=<\/code>&nbsp;<code>get_model(num_classes)<\/code><code>model.to(DEVICE)<\/code>&nbsp;<code>print<\/code><code>(model)<\/code><code># print(model.fc1(x).size())<\/code><code>params&nbsp;<\/code><code>=<\/code>&nbsp;<code>[p&nbsp;<\/code><code>for<\/code>&nbsp;<code>p&nbsp;<\/code><code>in<\/code>&nbsp;<code>model.parameters()&nbsp;<\/code><code>if<\/code>&nbsp;<code>p.requires_grad]<\/code><code>optimizer&nbsp;<\/code><code>=<\/code>&nbsp;<code>optim.SGD(params,lr<\/code><code>=<\/code><code>0.0005<\/code><code>,momentum<\/code><code>=<\/code><code>0.9<\/code><code>,weight_decay<\/code><code>=<\/code><code>0.0005<\/code><code>)<\/code><code># and a learning rate scheduler<\/code><code>lr_scheduler&nbsp;<\/code><code>=<\/code>&nbsp;<code>torch.optim.lr_scheduler.StepLR(<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>optimizer,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>step_size<\/code><code>=<\/code><code>num_epochs<\/code><code>\/<\/code><code>\/<\/code><code>2<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>gamma<\/code><code>=<\/code><code>0.1<\/code><code>)<\/code><code>scaler&nbsp;<\/code><code>=<\/code>&nbsp;<code>torch.cuda.amp.GradScaler()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4e3a\u4e86\u8282\u7701\u8ba1\u7b97\u548c\u8bad\u7ec3\u65f6\u95f4\uff0c\u6211\u4eec\u5c06\u4f7f\u7528 CUDA\u81ea\u52a8\u6df7\u5408\u7cbe\u5ea6 (AMP)&nbsp;\u3002\u8fd9\u53ef\u4ee5\u901a\u8fc7<code>torch.cuda.amp.GradScaler()<\/code>\u5bf9\u67d0\u4e9b\u8ba1\u7b97\u4f7f\u7528\u8f83\u4f4e\u7cbe\u5ea6\uff0816 \u4f4d\uff09\u6765\u5b9e\u73b0\u6df7\u5408\u7cbe\u5ea6\uff0c\u540c\u65f6\u5bf9\u5173\u952e\u90e8\u5206\u4fdd\u6301\u5355\u7cbe\u5ea6\uff0832 \u4f4d\uff09\u4ee5\u786e\u4fdd\u51c6\u786e\u6027\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u5c06\u4f7f\u7528TensorBoard\u901a\u8fc7\u548c\u76d1\u63a7\u6240\u6709\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6307\u6807\u4ee5\u53ca\u9a8c\u8bc1\u9884\u6d4b\u3002\u5bf9\u4e8e\u6570\u636e\u52a0\u8f7d\u5668\u4e2d\u7684\u6bcf\u4e2a\u6279\u6b21\uff0c\u56fe\u50cf\u548c\u76ee\u6807\u90fd\u4f1a\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u8bbe\u5907\uff08CUDA\u6216 CPU\uff09\u3002\u5c06\u6a21\u578b\u8bbe\u7f6e\u4e3a\u8bad\u7ec3\u6a21\u5f0f\uff0c\u5e76\u8ba1\u7b97\u9884\u6d4b\u548c\u635f\u5931\u3002\u7136\u540e\u4f7f\u7528\u4f18\u5316\u5668\u548c\u5b66\u4e60\u7387\u8c03\u5ea6\u7a0b\u5e8f\u53cd\u5411\u4f20\u64ad\u635f\u5931\u3002\u5bf9\u4e8e\u591a GPU \u8bad\u7ec3\uff0c\u635f\u5931\u5728\u6240\u6709 GPU \u4e0a\u53d6\u5e73\u5747\u503c\u3002\u6211\u4eec\u7684\u8bad\u7ec3\u7ba1\u9053\u6709\u6548\u5730\u4f7f\u7528\u4e86\u6765\u81ea torchvision \u5b9e\u7528\u7a0b\u5e8f\u7684\u6307\u6807\u8bb0\u5f55\u5668\u6765\u663e\u793a\u6bcf\u4e2a\u65f6\u671f\u7ed3\u675f\u65f6\u7684\u6307\u6807\u3002<code>torch.utils.tensorboard<\/code><code>add_scalar<\/code><code>add_figure<\/code><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d\u4e09\u5341\u4e03\u4e09\u5341\u516b\u4e09\u5341\u4e5d4041\u56db\u5341\u4e8c43\u56db\u5341\u56db\u56db\u5341\u4e94\u56db\u5341\u516d\u56db\u5341\u4e03<\/td><td><code># Initialize TensorBoard writer<\/code><code>writer&nbsp;<\/code><code>=<\/code>&nbsp;<code>SummaryWriter(log_dir<\/code><code>=<\/code><code>'runs\/aerial_detection'<\/code><code>)<\/code>&nbsp;<code>def<\/code>&nbsp;<code>train_one_epoch(model, data_loader, device, optimizer, print_freq, epoch, scaler<\/code><code>=<\/code><code>None<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>model.train()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>metric_logger&nbsp;<\/code><code>=<\/code>&nbsp;<code>utils.MetricLogger(delimiter<\/code><code>=<\/code><code>\"&nbsp; \"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>metric_logger.add_meter(<\/code><code>\"lr\"<\/code><code>, utils.SmoothedValue(window_size<\/code><code>=<\/code><code>1<\/code><code>, fmt<\/code><code>=<\/code><code>\"{value:.6f}\"<\/code><code>))<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>header&nbsp;<\/code><code>=<\/code>&nbsp;<code>f<\/code><code>\"Training Epoch {epoch}:\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>model.to(device)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with tqdm(data_loader, desc<\/code><code>=<\/code><code>header) as tq:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>lr_scheduler&nbsp;<\/code><code>=<\/code>&nbsp;<code>None<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>i, (images, targets)&nbsp;<\/code><code>in<\/code>&nbsp;<code>enumerate<\/code><code>(tq):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>images&nbsp;<\/code><code>=<\/code>&nbsp;<code>[img.to(device)&nbsp;<\/code><code>for<\/code>&nbsp;<code>img&nbsp;<\/code><code>in<\/code>&nbsp;<code>images]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>targets&nbsp;<\/code><code>=<\/code>&nbsp;<code>[{k: v.to(device)&nbsp;<\/code><code>for<\/code>&nbsp;<code>k, v&nbsp;<\/code><code>in<\/code>&nbsp;<code>t.items()}&nbsp;<\/code><code>for<\/code>&nbsp;<code>t&nbsp;<\/code><code>in<\/code>&nbsp;<code>targets]<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with torch.cuda.amp.autocast(enabled<\/code><code>=<\/code><code>scaler&nbsp;<\/code><code>is<\/code>&nbsp;<code>not<\/code>&nbsp;<code>None<\/code><code>):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>loss_dict&nbsp;<\/code><code>=<\/code>&nbsp;<code>model(images, targets)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>losses&nbsp;<\/code><code>=<\/code>&nbsp;<code>sum<\/code><code>(loss&nbsp;<\/code><code>for<\/code>&nbsp;<code>loss&nbsp;<\/code><code>in<\/code>&nbsp;<code>loss_dict.values())<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>loss_value&nbsp;<\/code><code>=<\/code>&nbsp;<code>losses.item()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>optimizer.zero_grad()<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>scaler&nbsp;<\/code><code>is<\/code>&nbsp;<code>not<\/code>&nbsp;<code>None<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>scaler.scale(losses).backward()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>scaler.step(optimizer)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>scaler.update()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>else<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>losses.backward()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>optimizer.step()<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>lr_scheduler&nbsp;<\/code><code>is<\/code>&nbsp;<code>not<\/code>&nbsp;<code>None<\/code><code>:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>lr_scheduler.step()<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>metric_logger.update(loss<\/code><code>=<\/code><code>losses,&nbsp;<\/code><code>*<\/code><code>*<\/code><code>loss_dict)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>metric_logger.update(lr<\/code><code>=<\/code><code>optimizer.param_groups[<\/code><code>0<\/code><code>][<\/code><code>\"lr\"<\/code><code>])<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Update tqdm postfix to display loss on the progress bar<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>tq.set_postfix(loss<\/code><code>=<\/code><code>losses.item(), lr<\/code><code>=<\/code><code>optimizer.param_groups[<\/code><code>0<\/code><code>][<\/code><code>\"lr\"<\/code><code>])<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Log losses to TensorBoard<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>writer.add_scalar(<\/code><code>'Loss\/train'<\/code><code>, losses.item(), epoch&nbsp;<\/code><code>*<\/code>&nbsp;<code>len<\/code><code>(data_loader)&nbsp;<\/code><code>+<\/code>&nbsp;<code>i)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>k, v&nbsp;<\/code><code>in<\/code>&nbsp;<code>loss_dict.items():<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>writer.add_scalar(f<\/code><code>'Loss\/train_{k}'<\/code><code>, v.item(), epoch&nbsp;<\/code><code>*<\/code>&nbsp;<code>len<\/code><code>(data_loader)&nbsp;<\/code><code>+<\/code>&nbsp;<code>i)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>print<\/code><code>(f<\/code><code>\"Average Loss: {metric_logger.meters['loss'].global_avg:.4f}\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>writer.add_scalar(<\/code><code>'Loss\/avg_train'<\/code><code>, metric_logger.meters[<\/code><code>'loss'<\/code><code>].global_avg, epoch)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u968f\u540e\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u5c06\u6a21\u578b\u8bbe\u7f6e\u4e3a\u8bc4\u4f30&nbsp;\u6a21\u5f0f\u6765\u5b9a\u4e49\u8bc4\u4f30\u51fd\u6570\u3002\u4f7f\u7528<code>torch.no_grad<\/code>\uff0c\u4e0d\u4f1a\u53d1\u751f\u68af\u5ea6\u8ba1\u7b97\u6216\u6743\u91cd\u66f4\u65b0\u3002\u57fa\u4e8e\u5176<code>mAP50<\/code>\u6216<code>mAP50-95<\/code>\uff08\u5e73\u5747\u7cbe\u5ea6\uff09\u8bc4\u4f30\u5bf9\u8c61\u68c0\u6d4b\u6a21\u578b\u3002\u4e3a\u6b64\uff0ctorchmetrics \u5e93\u7684MeanAveragePrecision\u7c7b\u5f88\u6709\u7528\u3002\u6211\u4eec\u5c06\u9884\u6d4b\u548c\u57fa\u672c\u4e8b\u5b9e\u4ece\u9a8c\u8bc1\u6570\u636e\u52a0\u8f7d\u5668\u4f20\u9012\u7ed9\u5b83\u3002<\/p>\n\n\n\n<p>\u4e3a\u7b80\u5355\u8d77\u89c1\uff0c\u5e73\u5747\u51c6\u786e\u7387 (AP) \u662f\u51c6\u786e\u7387-\u53ec\u56de\u7387\u66f2\u7ebf\u4e0b\u7684\u9762\u79ef\u3002\u5e73\u5747\u51c6\u786e\u7387 (mAP)\u662f\u6240\u6709\u68c0\u6d4b\u5230\u7684\u7c7b\u522b\u7684 AP \u7684\u5e73\u5747\u503c\u3002<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mAP&nbsp;=&nbsp;1\/n * sum(AP)\uff0c\u5176\u4e2dn\u662f\u7c7b\u522b\u7684\u6570\u91cf\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db\u4e09\u5341\u4e94\u4e09\u5341\u516d\u4e09\u5341\u4e03\u4e09\u5341\u516b\u4e09\u5341\u4e5d4041\u56db\u5341\u4e8c43\u56db\u5341\u56db\u56db\u5341\u4e94\u56db\u5341\u516d\u56db\u5341\u4e03\u56db\u5341\u516b49505152<\/td><td><code>def<\/code>&nbsp;<code>evaluate(model, data_loader, device, epoch, save_dir):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>model.<\/code><code>eval<\/code><code>()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>metric&nbsp;<\/code><code>=<\/code>&nbsp;<code>MeanAveragePrecision(iou_type<\/code><code>=<\/code><code>\"bbox\"<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>total_iou&nbsp;<\/code><code>=<\/code>&nbsp;<code>0<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>total_detections&nbsp;<\/code><code>=<\/code>&nbsp;<code>0<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>header&nbsp;<\/code><code>=<\/code>&nbsp;<code>\"Validation:\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>total_steps&nbsp;<\/code><code>=<\/code>&nbsp;<code>len<\/code><code>(data_loader)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>samples&nbsp;<\/code><code>=<\/code>&nbsp;<code>[]<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>with torch.no_grad(), tqdm(total<\/code><code>=<\/code><code>total_steps, desc<\/code><code>=<\/code><code>header) as progress_bar:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>i, (images, targets)&nbsp;<\/code><code>in<\/code>&nbsp;<code>enumerate<\/code><code>(data_loader):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>images&nbsp;<\/code><code>=<\/code>&nbsp;<code>[img.to(device)&nbsp;<\/code><code>for<\/code>&nbsp;<code>img&nbsp;<\/code><code>in<\/code>&nbsp;<code>images]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>targets&nbsp;<\/code><code>=<\/code>&nbsp;<code>[{k: v.to(device)&nbsp;<\/code><code>for<\/code>&nbsp;<code>k, v&nbsp;<\/code><code>in<\/code>&nbsp;<code>t.items()}&nbsp;<\/code><code>for<\/code>&nbsp;<code>t&nbsp;<\/code><code>in<\/code>&nbsp;<code>targets]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>outputs&nbsp;<\/code><code>=<\/code>&nbsp;<code>model(images)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Convert outputs for torchmetrics<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>preds&nbsp;<\/code><code>=<\/code>&nbsp;<code>[<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>{<\/code><code>\"boxes\"<\/code><code>: out[<\/code><code>\"boxes\"<\/code><code>],&nbsp;<\/code><code>\"scores\"<\/code><code>: out[<\/code><code>\"scores\"<\/code><code>],&nbsp;<\/code><code>\"labels\"<\/code><code>: out[<\/code><code>\"labels\"<\/code><code>]}<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>out&nbsp;<\/code><code>in<\/code>&nbsp;<code>outputs<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>]<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>targs&nbsp;<\/code><code>=<\/code>&nbsp;<code>[<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>{<\/code><code>\"boxes\"<\/code><code>: tgt[<\/code><code>\"boxes\"<\/code><code>],&nbsp;<\/code><code>\"labels\"<\/code><code>: tgt[<\/code><code>\"labels\"<\/code><code>]}<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>tgt&nbsp;<\/code><code>in<\/code>&nbsp;<code>targets<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>]<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># Update metric for mAP calculation<\/code>&nbsp;&nbsp;&nbsp;&nbsp;<code>num_cols&nbsp;<\/code><code>=<\/code>&nbsp;<code>1<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>fig, axs&nbsp;<\/code><code>=<\/code>&nbsp;<code>plt.subplots(nrows<\/code><code>=<\/code><code>num_rows, ncols<\/code><code>=<\/code><code>num_cols, figsize<\/code><code>=<\/code><code>(<\/code><code>15<\/code><code>,&nbsp;<\/code><code>25<\/code>&nbsp;<code>*<\/code>&nbsp;<code>num_rows&nbsp;<\/code><code>\/<\/code><code>\/<\/code>&nbsp;<code>4<\/code><code>))&nbsp;&nbsp;<\/code><code># Adjust height based on rows<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>idx, (img, output)&nbsp;<\/code><code>in<\/code>&nbsp;<code>enumerate<\/code><code>(<\/code><code>zip<\/code><code>(images, outputs)):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>if<\/code>&nbsp;<code>idx &gt;<\/code><code>=<\/code>&nbsp;<code>num_samples:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>break<\/code>&nbsp;&nbsp;<code># Stop after displaying the desired number of samples<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>show_image_with_boxes(img.cpu(), output, axs[idx], category_colors)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>axs[idx].axis(<\/code><code>'off'<\/code><code>)&nbsp;&nbsp;<\/code><code># Turn off axis for cleaner look<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.tight_layout()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>plt.show()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4ece\u4e00\u6279Val\u6570\u636e\u52a0\u8f7d\u5668\u4e2d\u9009\u62e9\u4e00\u4e9b\u6837\u672c\uff0c\u5e76\u7ed8\u5236\u7ed3\u679c\u56fe\u8868\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahfT0pLyGaBLNay5otkKOVYia7wHiadnO2FLticJt3S7J8AM3TtEomhCXpQ\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"\u9884\u6d4b-1-\u5fae\u8c03-Faster-R_CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 13\uff1a\u9a8c\u8bc1\u6837\u672c\u7684\u9884\u6d4b<\/figcaption><\/figure>\n\n\n\n<p>\u6211\u4eec\u53ef\u4ee5\u770b\u5230\uff0c\u4f7f\u7528\u8865\u4e01\u5bf9 Faster R-CNN \u8fdb\u884c\u5fae\u8c03\u7684\u7ed3\u679c\u975e\u5e38\u597d\uff1b\u5b83\u751a\u81f3\u53ef\u4ee5\u6355\u83b7\u975e\u5e38\u5c0f\u7684\u5b9e\u4f8b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5c06 SAHI \u4e0e\u5fae\u8c03\u7684 Faster R-CNN \u76f8\u7ed3\u5408<\/h2>\n\n\n\n<p>\u4f20\u7edf\u7269\u4f53\u68c0\u6d4b\u6a21\u578b\u901a\u5e38\u96be\u4ee5\u5904\u7406\u5c0f\u7269\u4f53\uff0c\u56e0\u4e3a\u5b83\u4eec\u7684\u5c3a\u5bf8\u6709\u9650\uff0c\u800c\u4e14\u56fe\u50cf\u4e2d\u53ef\u7528\u7684\u4e0a\u4e0b\u6587\u4fe1\u606f\u4e5f\u6709\u9650\u3002\u8fd9\u5c31\u662fSAHI\u53d1\u6325\u4f5c\u7528\u7684\u5730\u65b9\uff0c\u5b83\u4ee5\u5176\u51fa\u8272\u7684\u7ed3\u679c\u800c\u5927\u653e\u5f02\u5f69\u3002SAHI \u901a\u8fc7\u91c7\u7528\u4e13\u95e8\u5173\u6ce8\u589e\u5f3a\u6570\u636e\u96c6\u4ee5\u7a81\u51fa\u663e\u793a\u8fd9\u4e9b\u5c0f\u5b9e\u4f8b\u7684\u6280\u672f\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u5b83\u901a\u8fc7\u4f7f\u7528\u8bf8\u5982\u5c06\u56fe\u50cf\u5207\u6210\u66f4\u5c0f\u7684\u5757\u7b49\u65b9\u6cd5\u6765\u589e\u5f3a\u8bad\u7ec3\u8fc7\u7a0b\uff0c\u5728\u8fd9\u4e9b\u5757\u4e2d\uff0c\u5c0f\u7269\u4f53\u53d8\u5f97\u66f4\u52a0\u7a81\u51fa\u4e14\u66f4\u5bb9\u6613\u68c0\u6d4b\u3002<\/p>\n\n\n\n<p>\u8981\u4e86\u89e3\u6709\u5173\u5207\u7247\u8f85\u52a9\u8d85\u63a8\u7406&nbsp;(SAHI)\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u5c06\u6b64\u5185\u5bb9\u52a0\u5165\u4e66\u7b7e\u4ee5\u4f9b\u65e5\u540e\u4f7f\u7528\u3002<\/p>\n\n\n\n<p>\u8ba9\u6211\u4eec\u5b89\u88c5\u5e76\u5bfc\u5165 SAHI \u4f9d\u8d56\u9879\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<\/td><td><code>!pip install&nbsp;<\/code><code>-<\/code><code>qq&nbsp;<\/code><code>-<\/code><code>U sahi<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456<\/td><td><code>from<\/code>&nbsp;<code>sahi&nbsp;<\/code><code>import<\/code>&nbsp;<code>AutoDetectionModel<\/code><code>from<\/code>&nbsp;<code>sahi.predict&nbsp;<\/code><code>import<\/code>&nbsp;<code>get_sliced_prediction, predict, get_prediction<\/code><code>from<\/code>&nbsp;<code>sahi.utils.<\/code><code>file<\/code>&nbsp;<code>import<\/code>&nbsp;<code>download_from_url<\/code><code>from<\/code>&nbsp;<code>sahi.prediction&nbsp;<\/code><code>import<\/code>&nbsp;<code>visualize_object_predictions<\/code><code>from<\/code>&nbsp;<code>sahi.utils.cv&nbsp;<\/code><code>import<\/code>&nbsp;<code>read_image<\/code><code>from<\/code>&nbsp;<code>IPython.display&nbsp;<\/code><code>import<\/code>&nbsp;<code>Image<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u6211\u4eec\u5c06\u9009\u62e9torchvision\u4f5c\u4e3a\u6a21\u578b&nbsp;\u7c7b\u578b\uff0c\u5e76\u4f7f\u7528SAHI \u7684\u6a21\u5757\u3002\u6211\u4eec\u9996\u5148\u5c06\u7f6e\u4fe1\u5ea6\u9608\u503c\u8bbe\u7f6e\u4e3a0.7\uff0c\u5e76\u5c06\u56fe\u50cf\u5927\u5c0f\u8bbe\u7f6e\u4e3a\u8f93\u5165\u56fe\u50cf\u7684\u6700\u957f\u5c3a\u5bf8\uff0c\u56e0\u4e3a\u6211\u4eec\u7684\u56fe\u50cf\u5177\u6709\u77e9\u5f62\u5c3a\u5bf8\u3002<code>AutoDetectionModel<\/code><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>12345678<\/td><td><code>detection_model&nbsp;<\/code><code>=<\/code>&nbsp;<code>AutoDetectionModel.from_pretrained(<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>model_type<\/code><code>=<\/code><code>'torchvision'<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>model<\/code><code>=<\/code><code>model,&nbsp;<\/code><code>#Faster RCNN Model<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>confidence_threshold<\/code><code>=<\/code><code>0.7<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>image_size<\/code><code>=<\/code><code>5436<\/code><code>,&nbsp;<\/code><code>#Image's longest dimension<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>device<\/code><code>=<\/code><code>\"cpu\"<\/code><code>,&nbsp;<\/code><code># or \"cuda:0\"<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>load_at_init<\/code><code>=<\/code><code>True<\/code><code>,<\/code><code>)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4f7f\u7528\u5207\u7247\u9ad8\u5ea6\u548c\u5207\u7247\u5bbd\u5ea6\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236\u6ed1\u52a8\u7a97\u53e3\u7684\u5c3a\u5bf8\u3002\u7531\u4e8e\u6211\u4eec\u7684\u6a21\u578b\u662f\u5728\u56fe\u50cf\u5c3a\u5bf8\u4e00\u534a\u5927\u5c0f\u7684\u5757\u5c3a\u5bf8\u4e0a\u8fdb\u884c\u8bad\u7ec3\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u5c06\u76f8\u5e94\u5730\u9009\u62e9\u5207\u7247\u5bbd\u5ea6\u548c\u5207\u7247\u9ad8\u5ea6\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>12345678910<\/td><td><code>img_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>'test\/7882.jpg'<\/code><code>img_filename_temp&nbsp;<\/code><code>=<\/code>&nbsp;<code>img_path.split(<\/code><code>'\/'<\/code><code>)[<\/code><code>1<\/code><code>]<\/code><code>img_filename&nbsp;<\/code><code>=<\/code>&nbsp;<code>img_filename_temp.split(<\/code><code>'.'<\/code><code>)[<\/code><code>0<\/code><code>]<\/code>&nbsp;<code># print(img_filename)<\/code><code>img_pil&nbsp;<\/code><code>=<\/code>&nbsp;<code>PIL.Image.<\/code><code>open<\/code><code>(img_path)<\/code><code>W,H&nbsp;<\/code><code>=<\/code>&nbsp;<code>img_pil.size<\/code><code># print(W)<\/code><code>s_h,s_w&nbsp;<\/code><code>=<\/code>&nbsp;<code>H<\/code><code>\/<\/code><code>2<\/code><code>,W<\/code><code>\/<\/code><code>2<\/code><code>s_h ,s_w&nbsp;<\/code><code>=<\/code>&nbsp;<code>int<\/code><code>(s_h),<\/code><code>int<\/code><code>(s_w)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8fd4\u56de\u68c0\u6d4b\u5230\u7684\u5bf9\u8c61\u5b9e\u4f8b\u53ca\u5176\u3001\u548c<code>get_sliced_prediction<\/code>\u7684\u5217\u8868\u3002\u5728\u8fd9\u91cc\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u7c7b id \u662f\u6b63\u786e\u7684\uff0c\u4f46\u76f8\u5e94\u7684\u6807\u7b7e id \u4e0e COCO \u7c7b\u4e00\u81f4\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u5b9a\u4e49\u4e00\u4e9b\u6267\u884c\u7c7b\u6620\u5c04\u7684\u81ea\u5b9a\u4e49\u51fd\u6570\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u5e76\u7ed8\u5236\u4e0e\u7c7b\u522b id \u5339\u914d\u7684\u8fb9\u754c\u6846\u3002<code>bbox<\/code><code>score<\/code><code>category id<\/code><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789<\/td><td><code>result&nbsp;<\/code><code>=<\/code>&nbsp;<code>get_sliced_prediction(<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>img_path,<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>detection_model,<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>slice_height<\/code><code>=<\/code><code>s_h,<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>slice_width<\/code><code>=<\/code><code>s_w,<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>overlap_height_ratio<\/code><code>=<\/code><code>0.2<\/code><code>,<\/code><code>&nbsp;&nbsp;&nbsp;<\/code><code>overlap_width_ratio<\/code><code>=<\/code><code>0.2<\/code><code>,<\/code><code>)<\/code><code>result.object_prediction_list<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>12345<\/td><td><code>[ObjectPrediction&lt;<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bbox: BoundingBox: &lt;(1754.8331298828125, 1062.62841796875, 1823.0999755859375, 1103.5548362731934), w: 68.266845703125, h: 40.92641830444336&gt;,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>mask: None,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>score: PredictionScore: &lt;value: 0.9949936270713806&gt;,<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>category: Category: &lt;id: 1, name: person&gt;&gt;]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u8be5<code>custom draw_bounding_boxes()<\/code>\u5b9e\u7528\u7a0b\u5e8f\u63a5\u6536\u56fe\u50cf\u5e76<code>object_prediction_list<\/code>\u4ece SAHI \u4e2d<code>get_sliced_predictions<\/code>\u7ed8\u5236\u51fa\u4ee4\u4eba\u8d4f\u5fc3\u60a6\u76ee\u7684\u9884\u6d4b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112\u5341\u4e091415161718192021222324\u4e8c\u5341\u4e94\u4e8c\u5341\u516d\u4e8c\u5341\u4e03\u4e8c\u5341\u516b\u4e8c\u5341\u4e5d\u4e09\u534131\u4e09\u5341\u4e8c33\u4e09\u5341\u56db<\/td><td><code>def<\/code>&nbsp;<code>draw_bounding_boxes(image, object_prediction_list):<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>draw&nbsp;<\/code><code>=<\/code>&nbsp;<code>ImageDraw.Draw(image)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>font_size&nbsp;<\/code><code>=<\/code>&nbsp;<code>int<\/code><code>(<\/code><code>min<\/code><code>(image.size)&nbsp;<\/code><code>*<\/code>&nbsp;<code>0.008<\/code><code>)&nbsp;&nbsp;<\/code><code># Adjust font size based on image size<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>font_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>\"\/usr\/share\/fonts\/truetype\/dejavu\/DejaVuSans-Bold.ttf\"<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>font&nbsp;<\/code><code>=<\/code>&nbsp;<code>ImageFont.truetype(font_path, font_size)&nbsp;<\/code><code>if<\/code>&nbsp;<code>os.path.exists(font_path)&nbsp;<\/code><code>else<\/code>&nbsp;<code>ImageFont.load_default()<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>for<\/code>&nbsp;<code>prediction&nbsp;<\/code><code>in<\/code>&nbsp;<code>object_prediction_list:<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>bbox&nbsp;<\/code><code>=<\/code>&nbsp;<code>prediction.bbox.to_xywh()<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>category_id&nbsp;<\/code><code>=<\/code>&nbsp;<code>prediction.category.<\/code><code>id<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x, y, w, h&nbsp;<\/code><code>=<\/code>&nbsp;<code>bbox<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>x1, y1, x2, y2&nbsp;<\/code><code>=<\/code>&nbsp;<code>x, y, x&nbsp;<\/code><code>+<\/code>&nbsp;<code>w, y&nbsp;<\/code><code>+<\/code>&nbsp;<code>h<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>color&nbsp;<\/code><code>=<\/code>&nbsp;<code>category_colors.get(category_id,&nbsp;<\/code><code>'white'<\/code><code>)&nbsp;&nbsp;<\/code><code># Default to white if category_id is unknown<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>draw.rectangle([x1, y1, x2, y2], outline<\/code><code>=<\/code><code>color, width<\/code><code>=<\/code><code>6<\/code><code>)<\/code><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code># draw.text((x1, y1 - font_size), str(classes_to_idx[category_id]), fill=color, font=font)<\/code>&nbsp;<code>&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code>return<\/code>&nbsp;<code>image<\/code>&nbsp;<code># Draw bounding boxes<\/code><code>image_with_bboxes&nbsp;<\/code><code>=<\/code>&nbsp;<code>draw_bounding_boxes(img_pil, result.object_prediction_list)<\/code>&nbsp;<code># Define the output path<\/code><code>output_directory&nbsp;<\/code><code>=<\/code>&nbsp;<code>'sahi_ouput_data'<\/code><code>output_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>os.path.join(output_directory, f<\/code><code>'result_{img_filename}.png'<\/code><code>)<\/code>&nbsp;<code># Create the directory if it doesn't exist<\/code><code>os.makedirs(output_directory, exist_ok<\/code><code>=<\/code><code>True<\/code><code>)<\/code>&nbsp;&nbsp;<code># Save the resulting image<\/code><code>output_path&nbsp;<\/code><code>=<\/code>&nbsp;<code>f<\/code><code>'sahi_ouput_data\/result_{img_filename}.png'<\/code><code>image_with_bboxes.save(output_path)<\/code>&nbsp;<code># Display the image (optional, if running in an environment that supports it)<\/code><code>image_with_bboxes.show()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u4f7f\u7528 SAHI \u4e0e\u4e0d\u4f7f\u7528 SAHI \u7684 Fast RCNN \u68c0\u6d4b\u4ee5\u53ca\u4f7f\u7528\u8865\u4e01\u4f5c\u4e3a\u8f93\u5165\u7684 Fast RCNN \u68c0\u6d4b\u7684\u6bd4\u8f83<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6bd4\u8f83 1\uff1a\u4f7f\u7528 Mobilenet v3 \u5927\u578b\u4e3b\u5e72\u7f51\u7edc\u5fae\u8c03 Faster R-CNN<\/h3>\n\n\n\n<p>\u539f\u59cb\u56fe\u50cf\u524d\u5411\u4f20\u9012<\/p>\n\n\n\n<p>\u8ba9\u6211\u4eec\u76f4\u63a5\u5c06\u539f\u59cb\u56fe\u50cf\u8c03\u6574\u5927\u5c0f\u4ee5\u8bad\u7ec3\u56fe\u50cf\u5927\u5c0f (382,216)\uff0c\u65e0\u9700 SAHI\u6216\u65e0\u9700 Patch Creation\uff0c\u5373\u53ef\u5c06\u5176\u4f20\u9012\u7ed9\u4f7f\u7528 Mobilenet v3 Large \u6a21\u578b\u8fdb\u884c\u5fae\u8c03\u7684 Faster R-CNN\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiah7UVibmziaNWDGVTVkJz6MS2icAIPmV33gty7sbAkfHdExTxjoLfnoBR6g\/640?wx_fmt=jpeg&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"7882_fwd_pass-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 15\uff1atest-7882.jpg \u524d\u5411\u4f20\u9012 \u2013 \u5fae\u8c03 Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahwhKOKpwnAiaHzE6srY5pK1LfibUrEUeGIr6icWicWoT0DbSKOetU4Bffwg\/640?wx_fmt=jpeg&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"1070_fwd-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 16\uff1a\u6d4b\u8bd5 \u2013 1070.jpg \u524d\u5411\u4f20\u9012 \u2013 \u5fae\u8c03 Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahyZ0lvQoh61VgnyUsvvRGn6BeeBDERM7JYR3rtC6OffbaficpDGKq7PQ\/640?wx_fmt=jpeg&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"2843_fwd_pass-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 17\uff1a\u6d4b\u8bd5 \u2013 2843.jpg \u524d\u5411\u4f20\u9012 \u2013 \u5fae\u8c03 Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u6a21\u578b\u5b8c\u5168\u9519\u8fc7\u4e86\u8bb8\u591a\u5b9e\u4f8b\u5e76\u4e14\u8868\u73b0\u975e\u5e38\u5dee\u3002<\/p>\n\n\n\n<p>\u4f7f\u7528 Patches \u4f5c\u4e3a\u8f93\u5165\u7684 Faster R-CNN Mobilenet v3 \u5927\u578b\u63a8\u7406<\/p>\n\n\n\n<p>\u73b0\u5728\uff0c\u5728\u6267\u884c\u4e0e Faster R-CNN \u6a21\u578b\u5fae\u8c03\u671f\u95f4\u6267\u884c\u7684\u76f8\u540c\u7684\u9884\u5904\u7406\u6b65\u9aa4\uff08\u4f8b\u5982\u8865\u4e01\u521b\u5efa\u548c\u8c03\u6574\u5927\u5c0f\u4ee5\u8bad\u7ec3\u56fe\u50cf\u5927\u5c0f\uff09\u4e4b\u540e\uff0c\u5b83\u80fd\u591f\u6355\u83b7\u51e0\u4e4e\u6240\u6709\u5b9e\u4f8b\uff0c\u800c\u53ea\u6709\u5c11\u6570\u5b9e\u4f8b\u672a\u88ab\u53d1\u73b0\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahASRxNluSjdEas7AELqFDTvxibxC6dPqia9CsPht2Rs79KLLaClwAa1Mw\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"7882_with_patches-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 18\uff1a\u6d4b\u8bd5 \u2013 7882.jpg \u4f5c\u4e3a\u8865\u4e01 \u2013 \u5fae\u8c03 Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahL8sYMLBnUweXZk5MmQZsnXxvtVMibezIcuiaPDT9mibSwDKfh93XncmbQ\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"1070_with_patches-Fine-tuning-Faster-R-CNN-2 \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 19\uff1a\u6d4b\u8bd5 \u2013 1070.jpg \u4f5c\u4e3a\u8865\u4e01 \u2013 \u5fae\u8c03 Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahUicpQmxLv5WaibtAIWg1icy9n5h5SWRu9nufia1rM9ibmuggXeMNTaZpK3w\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"2843_with_patches-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 20\uff1a\u6d4b\u8bd5 \u2013 2843.jpg \u4f5c\u4e3a\u8865\u4e01 \u2013 Fine-tuning Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<p>\u4f7f\u7528 SAHI \u8fdb\u884c Faster R-CNN Mobilenet v3 \u5927\u89c4\u6a21\u63a8\u7406<\/p>\n\n\n\n<p>\u73b0\u5728\uff0cSAHI \u7684\u5f3a\u5ea6\u5df2\u4f7f\u68c0\u6d4b\u7ed3\u679c\u975e\u5e38\u6e05\u6670\uff0c\u8fb9\u754c\u6846\u5b8c\u7f8e\u5bf9\u9f50\u3002\u6211\u4eec\u53ef\u4ee5\u6ce8\u610f\u5230\uff0c\u65e0\u8bba\u6709\u6ca1\u6709 SAHI\uff0c\u73ed\u7ea7\u6e38\u6cf3\u8fd0\u52a8\u5458\u68c0\u6d4b\u5230\u7684\u5b9e\u4f8b\u90fd\u4e0d\u540c\uff0c\u8fd9\u8868\u660e\u4ed6\u4eec\u7684\u6280\u672f\u5b58\u5728\u5dee\u5f02\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahuHBkiaaPwlWqC8icOm6nGZ3yZgOdoiaZ9IvjnTkTJjZlDIV9VdMibM1qNA\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"SAHI-7882-Finetuning-Faster-R-CNN-1 \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 21\uff1a\u4f7f\u7528 SAHI \u6d4b\u8bd5 \u2013 7882.jpg<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahSlLydib10wyHVoVJIIscFWmUBdFTeiakmdNwMsC4ibCLviaCsOQ5NhHmMg\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"1070-\u4f7f\u7528 SAHI \u8fdb\u884c\u5fae\u8c03-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 22\uff1a\u4f7f\u7528 SAHI \u7684 test-1070.jpg<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiaheicSHEaKGiaT5bqRzTia1f0JbVfmC0z4YbYQb6n9ayjT0DGDuugv5te6A\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"SAHI-2843-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 23\uff1a\u4f7f\u7528 SAHI \u7684 test-2843.jpg<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u6bd4\u8f83 2\uff1a\u4f7f\u7528 Resnet v2 Backbone \u5bf9 Faster R-CNN \u8fdb\u884c\u5fae\u8c03<\/h3>\n\n\n\n<p>\u539f\u59cb\u56fe\u50cf\u524d\u5411\u4f20\u9012<\/p>\n\n\n\n<p>\u4e0e\u6211\u4eec\u7684\u6bd4\u8f83 1 \u90e8\u5206\u76f8\u540c\uff0c\u8ba9\u6211\u4eec\u76f4\u63a5\u5c06\u539f\u59cb\u56fe\u50cf\u8c03\u6574\u5927\u5c0f\u4ee5\u8bad\u7ec3\u56fe\u50cf\u5927\u5c0f (382,216)\uff08\u65e0\u9700 SAHI\u6216\u65e0\u9700 Patch Creation \uff09\uff0c\u5e76\u5c06\u5176\u4f20\u9012\u7ed9\u4f7f\u7528Resnet50 v2\u6a21\u578b\u5fae\u8c03\u7684 Faster R-CNN&nbsp;\uff0c\u5e76\u67e5\u770b\u7ed3\u679c\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahtPQTp3c022sIibvteHMTqAibhkOgIu6VOtM7EUp10yYcYppAlyfTy7iag\/640?wx_fmt=jpeg&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"7832_fwd_pass-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 24\uff1atest-7832.jpg \u524d\u5411\u4f20\u9012<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahDuUp25jfvJqYhhOhyadibKbU1bPslfxiaqchPboyXaxiaVqHG4UGB1WeQ\/640?wx_fmt=jpeg&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"6166_fwd_pass-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 25\uff1a\u6d4b\u8bd5 \u2013 6166.jpg \u524d\u5411\u4f20\u9012<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahrUCTbLiapXeaUfQNwCpcTuqKia60oQ9kCZqDpd5TuvylKTibrwKZzibrsg\/640?wx_fmt=jpeg&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"1669_fwd_pass-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 26\uff1a\u6d4b\u8bd5 \u2013 1669.jpg \u524d\u5411\u4f20\u9012<\/figcaption><\/figure>\n\n\n\n<p>\u901a\u8fc7\u5c06\u8865\u4e01\u4f5c\u4e3a\u8f93\u5165\u6765\u52a0\u5feb R-CNN Resnet50 v2 \u63a8\u7406\u901f\u5ea6<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahjfibcvxuXSVAl6KQakNGwicDonGibB3bMRxGaHwV3bhNDvZyP3ZczlaQg\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"7832_with_patches-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 27\uff1a\u6d4b\u8bd5 \u2013 7832.jpg \u4f5c\u4e3a\u8865\u4e01 \u2013 Fine-tuning Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahCgJuqqiaWdwcg8MWT5YbBicbVPq3wEnMQaABtpQUiaxa5QGticckyibjG3g\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"6166_with_patches-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 28\uff1a\u6d4b\u8bd5 \u2013 6166.jpg \u4f5c\u4e3a\u8865\u4e01 \u2013 \u5fae\u8c03 Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahBxxteSQSqpDBnpGCFuo49XhwLbedXw5oAVgjCoxSfUbtibFSjmQ19xw\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"1669_with_patches-Fine-tuning-Faster-R-CNN-1 \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 29\uff1a\u6d4b\u8bd5 \u2013 1669.jpg \u4f5c\u4e3a\u8865\u4e01 \u2013 Fine-tuning Faster R-CNN<\/figcaption><\/figure>\n\n\n\n<p>\u4f7f\u7528 SAHI \u5b9e\u73b0\u66f4\u5feb\u7684 R-CNN Resnet50 v2 \u63a8\u7406<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahnQia9Wjx4h4FibFmy1uJ8pF5hXiaFHQKuV6gO4fyicsMZtQ5ibFTgwE4n7g\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"7832_sahi-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 30\uff1a\u4f7f\u7528 SAHI \u6d4b\u8bd5 \u2013 7832.jpg<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahqnxJRFnVlW5cOicjVAfyrX18brKeqlDDaRKIPYZPLZCDWUtRib6BAribQ\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"6166_SAHI-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 31\uff1a\u4f7f\u7528 SAHI \u6d4b\u8bd5 \u2013 6166.jpg<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/mmbiz.qpic.cn\/mmbiz_png\/ciaOAxzQ9MXIZ0iciaSaENUFfpnIc9mBMiahCiciboK0QbHBkCnzdaVKe8FiaMibkRLGUmldroeT0W0UUjM1J9PSwLmYDQ\/640?wx_fmt=png&amp;from=appmsg&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1\" alt=\"\u56fe\u7247\" title=\"1669_SAHI-Fine-tuning-Faster-R-CNN \u2013 LearnOpenCV\u00a0\"\/><figcaption class=\"wp-element-caption\">\u56fe 32\uff1a\u4f7f\u7528 SAHI \u6d4b\u8bd5 &#8211; 1669.jpg<\/figcaption><\/figure>\n\n\n\n<p>\u901a\u8fc7\u5fae\u8c03 Faster R-CNN Resnet50v2\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u9884\u6d4b\u7ed3\u679c\u4e0e\u5fae\u8c03\u7684 Faster R-CNN Mobilenet \u76f8\u6bd4\u6709\u663e\u8457\u6539\u5584\u3002Faster R-CNN Resnet50v2 \u7684\u9644\u52a0\u53c2\u6570\u5927\u5c0f\u548c mAP \u65e0\u7591\u4f7f\u5176\u6210\u4e3a 2024 \u5e74\u7684\u6709\u529b\u7ade\u4e89\u8005\u3002<\/p>\n\n\n\n<p>\u7ed3\u679c\u4ee4\u4eba\u5370\u8c61\u6df1\u523b\uff0c\u5bf9\u5427\uff1f\u5411\u4e0a\u6eda\u52a8\u4ee5\u4e86\u89e3\u6709\u5173\u5b9e\u9645\u4ee3\u7801\u5b9e\u73b0\u7684\u66f4\u591a\u4fe1\u606f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5173\u952e\u8981\u70b9<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Patch Work \u53d1\u6325\u4e86\u795e\u5947\u7684\u4f5c\u7528\uff1a\u6211\u4eec\u5c06\u8bad\u7ec3\u56fe\u50cf\u5206\u6210\u591a\u4e2a\u5757\uff0c\u8ba9\u5b83\u4e13\u6ce8\u4e8e\u7ec6\u8282\u3002\u8fd9\u4e2a\u6280\u5de7\u5e2e\u52a9\u5b83\u66f4\u597d\u5730\u770b\u5230\u5fae\u5c0f\u7269\u4f53\u3002\u5373\u4f7f\u6ca1\u6709 SAHI \u7684\u5e2e\u52a9\uff0c\u6211\u4eec\u7ecf\u8fc7\u5fae\u8c03\u7684 Faster R-CNN \u4e5f\u51e0\u4e4e\u50cf\u9e70\u773c\u4e00\u6837\u654f\u9510\uff0c\u51e0\u4e4e\u5b8c\u7f8e\u5339\u914d SAHI \u7684\u7ed3\u679c\u3002<\/li>\n\n\n\n<li>SAHI\u00a0\u7684\u65b9\u6cd5\uff1a\u6b64\u5916\uff0c\u5c06\u6211\u4eec\u7ecf\u8fc7\u5fae\u8c03\u7684 Faster R-CNN \u6a21\u578b\u4e0e SAHI \u96c6\u6210\uff0c\u663e\u8457\u63d0\u9ad8\u4e86\u68c0\u6d4b\u51c6\u786e\u7387\u3002SAHI \u5c06\u56fe\u50cf\u5207\u6210\u66f4\u5c0f\u90e8\u5206\u7684\u5148\u8fdb\u6280\u672f\u6539\u53d8\u4e86\u6e38\u620f\u89c4\u5219\uff0c\u6709\u6548\u5730\u51cf\u5c11\u4e86\u8bef\u62a5\u5e76\u5b9e\u73b0\u4e86\u8fd1\u4e4e\u5b8c\u7f8e\u7684\u8fb9\u754c\u6846\u5b9e\u4f8b\u3002\u8fd9\u79cd\u7ec4\u5408\u5c55\u793a\u4e86\u6570\u636e\u51c6\u5907\u548c\u5f3a\u5927\u7684\u540e\u5904\u7406\u6280\u672f\u7684\u5f3a\u5927\u534f\u540c\u4f5c\u7528\u3002<\/li>\n\n\n\n<li>\u6570\u636e\u8d28\u91cf\u81f3\u5173\u91cd\u8981\uff1a\u6211\u4eec\u7684\u5b9e\u9a8c\u5f3a\u8c03\u4e86\u6570\u636e\u51c6\u5907\u548c\u9884\u5904\u7406\u7684\u91cd\u8981\u6027\uff0c\u5e76\u8bc1\u660e\u4e86\u6df1\u601d\u719f\u8651\u7684\u6570\u636e\u589e\u5f3a\u7684\u4ef7\u503c\u3002\u4e00\u5207\u90fd\u4e0e\u57fa\u7840\u5de5\u4f5c\u6709\u5173\uff01<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7ed3\u8bba<\/h2>\n\n\n\n<p>\u6211\u4eec\u7814\u7a76\u7684\u76ee\u7684\u662f\u5f3a\u8c03\u5728 SeaDronesSee \u7b49\u5177\u6709\u6311\u6218\u6027\u7684\u6570\u636e\u96c6\u4e2d\u7cbe\u5fc3\u51c6\u5907\u6570\u636e\u7684\u91cd\u8981\u6027\u3002\u5c3d\u7ba1 Faster R-CNN \u7684\u5ef6\u8fdf\u548c GFLOPS \u5f88\u9ad8\uff0c\u4f46\u4e8b\u5b9e\u8bc1\u660e\uff0c\u5373\u4f7f\u5728 2024 \u5e74\uff0c\u5b83\u4e5f\u662f\u4e00\u4e2a\u6709\u4ef7\u503c\u7684\u5019\u9009\u8005\u3002\u901a\u8fc7\u63a2\u7d22\u5ef6\u8fdf\u66f4\u4f4e\u3001\u5b9e\u65f6\u5904\u7406\u548c\u51c6\u786e\u5ea6\u66f4\u9ad8\u7684\u8f7b\u91cf\u7ea7\u6a21\u578b\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u6539\u8fdb\u6b64\u5b9e\u9a8c\u3002\u65e0\u4eba\u673a\u548c\u673a\u5668\u4eba\u5f00\u53d1\u4eba\u5458\u53ef\u4ee5\u4f7f\u7528\u6211\u4eec\u7684\u7814\u7a76\u7ed3\u679c\u6765\u6539\u8fdb\u548c\u589e\u5f3a\u5176\u5173\u952e\u4efb\u52a1\u7684\u68c0\u6d4b\u7cfb\u7edf\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u7684\u7814\u7a76\u6709\u4ec0\u4e48\u5f71\u54cd\uff1f\u901a\u8fc7\u66f4\u597d\u7684\u68c0\u6d4b\u548c\u54cd\u5e94\u80fd\u529b\uff0c\u6709\u53ef\u80fd\u633d\u6551\u65e0\u6570\u751f\u547d\u3002\u8fd9\u624d\u662f\u771f\u6b63\u7684\u8d85\u7ea7\u82f1\u96c4\u6551\u63f4\u4efb\u52a1\u3002<\/p>\n\n\n\n<p>\u786e\u5b9e\u5982\u6b64\uff0c\u8ba9\u6211\u4eec\u4e00\u8d77\u5b9e\u73b0\u5b83\u5427\uff01\u2019<\/p>\n\n\n\n<p>http:\/\/www.gitpp.com\/opencv\/learnopencv-cn<\/p>\n\n\n\n<p>\u6e90\u4ee3\u7801\uff1a<\/p>\n\n\n\n<p>http:\/\/www.gitpp.com\/opencv\/learnopencv-cn\/tree\/master\/Exploring-Slicing-Aided-Hyper-Inference<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u822a\u62cd\u56fe\u50cf\u4e2d\u68c0\u6d4b\u5c0f\u7269\u4f53\uff0c\u5c24\u5176\u662f\u5bf9\u4e8e\u6d77\u4e0a\u6551\u63f4\u7b49\u5173\u952e\u5e94\u7528\u800c\u8a00\uff0c\u662f\u4e00\u9879\u72ec\u7279\u7684\u6311\u6218\u3002\u53ca\u65f6\u68c0\u6d4b\u6c34\u4e2d\u7684\u4eba\u53ef\u80fd\u610f\u5473\u7740\u751f\u6b7b\u4e4b\u95f4 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,18],"tags":[41],"class_list":["post-787","post","type-post","status-publish","format-standard","hentry","category-7","category-cv","tag-r-cnn"],"blocksy_meta":"","_links":{"self":[{"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/posts\/787","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/comments?post=787"}],"version-history":[{"count":1,"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/posts\/787\/revisions"}],"predecessor-version":[{"id":788,"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/posts\/787\/revisions\/788"}],"wp:attachment":[{"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/media?parent=787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/categories?post=787"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/ai.gitpp.com\/index.php\/wp-json\/wp\/v2\/tags?post=787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}