{"id":9091,"date":"2022-10-13T09:44:21","date_gmt":"2022-10-13T01:44:21","guid":{"rendered":"http:\/\/139.9.1.231\/?p=9091"},"modified":"2022-10-13T09:44:22","modified_gmt":"2022-10-13T01:44:22","slug":"hrnet","status":"publish","type":"post","link":"http:\/\/139.9.1.231\/index.php\/2022\/10\/13\/hrnet\/","title":{"rendered":"HRNet \u8bba\u6587\u548c\u4ee3\u7801\u8be6\u89e3"},"content":{"rendered":"\n<p class=\"has-yellow-background-color has-background\">github\uff1a<a href=\"https:\/\/github.com\/HRNet\/HRNet-Semantic-Segmentation\" target=\"_blank\" rel=\"noreferrer noopener\"> https:\/\/github.com\/HRNet\/HRNet-Semantic-Segmentation<\/a><\/p>\n\n\n\n<p class=\"has-light-pink-background-color has-background\">Paper:\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Farxiv.org%2Fabs%2F1908.07919\" target=\"_blank\">https:\/\/arxiv.org\/abs\/1908.07919<\/a><\/p>\n\n\n\n<p>High-Resoultion Net(HRNet)\u7531\u5fae\u8f6f\u4e9a\u6d32\u7814\u7a76\u9662\u548c\u4e2d\u79d1\u5927\u63d0\u51fa\uff0c\u53d1\u8868\u5728<strong>CVPR2019<\/strong><\/p>\n\n\n\n<p>\u6458\u8981\uff1a\u9ad8\u5206\u8fa8\u7387\u8868\u793a\u5bf9\u4e8e\u4f4d\u7f6e\u654f\u611f\u7684\u89c6\u89c9\u95ee\u9898\u5341\u5206\u91cd\u8981\uff0c\u6bd4\u5982\u76ee\u6807\u68c0\u6d4b\u3001\u8bed\u4e49\u5206\u5272\u3001\u59ff\u6001\u4f30\u8ba1\u3002\u4e3a\u4e86\u8fd9\u4e9b\u4efb\u52a1\u4f4d\u7f6e\u4fe1\u606f\u66f4\u52a0\u7cbe\u51c6\uff0c\u5f88\u5bb9\u6613\u60f3\u5230\u7684\u505a\u6cd5\u5c31\u662f\u7ef4\u6301\u9ad8\u5206\u8fa8\u7387\u7684feature map\uff0c\u4e8b\u5b9e\u4e0aHRNet\u4e4b\u524d\u51e0\u4e4e\u6240\u6709\u7684\u7f51\u7edc\u90fd\u662f\u8fd9\u4e48\u505a\u7684\uff0c\u901a\u8fc7\u4e0b\u91c7\u6837\u5f97\u5230\u5f3a\u8bed\u4e49\u4fe1\u606f\uff0c\u7136\u540e\u518d\u4e0a\u91c7\u6837\u6062\u590d\u9ad8\u5206\u8fa8\u7387\u6062\u590d\u4f4d\u7f6e\u4fe1\u606f(\u5982\u4e0b\u56fe\u6240\u793a)\uff0c\u7136\u800c\u8fd9\u79cd\u505a\u6cd5\uff0c\u4f1a\u5bfc\u81f4\u5927\u91cf\u7684\u6709\u6548\u4fe1\u606f\u5728\u4e0d\u65ad\u7684\u4e0a\u4e0b\u91c7\u6837\u8fc7\u7a0b\u4e2d\u4e22\u5931\u3002<strong>\u800cHRNet\u901a\u8fc7\u5e76\u884c\u591a\u4e2a\u5206\u8fa8\u7387\u7684\u5206\u652f\uff0c\u52a0\u4e0a\u4e0d\u65ad\u8fdb\u884c\u4e0d\u540c\u5206\u652f\u4e4b\u95f4\u7684\u4fe1\u606f\u4ea4\u4e92\uff0c\u540c\u65f6\u8fbe\u5230\u5f3a\u8bed\u4e49\u4fe1\u606f\u548c\u7cbe\u51c6\u4f4d\u7f6e\u4fe1\u606f\u7684\u76ee\u7684\u3002<\/strong><\/p>\n\n\n\n<p>     \u6a21\u578b\u7684\u4e3b\u8981\u7279\u70b9\u662f\u5728\u6574\u4e2a\u8fc7\u7a0b\u4e2d\u7279\u5f81\u56fe\uff08Feature Map\uff09\u59cb\u7ec8\u4fdd\u6301\u9ad8\u5206\u8fa8\u7387\uff0c\u8fd9\u4e0e\u4e4b\u524d\u4e3b\u6d41\u65b9\u6cd5\u601d\u8def\u4e0a\u6709\u5f88\u5927\u7684\u4e0d\u540c\u3002\u5728HRNet\u4e4b\u524d\uff0c2D\u4eba\u4f53\u59ff\u6001\u4f30\u8ba1\u7b97\u6cd5\u662f\u91c7\u7528\uff08Hourglass\/CPN\/Simple Baseline\/MSPN\u7b49\uff09<strong>\u5c06\u9ad8\u5206\u8fa8\u7387\u7279\u5f81\u56fe\u4e0b\u91c7\u6837\u81f3\u4f4e\u5206\u8fa8\u7387\uff0c\u518d\u4ece\u4f4e\u5206\u8fa8\u7387\u7279\u5f81\u56fe\u6062\u590d\u81f3\u9ad8\u5206\u8fa8\u7387\u7684\u601d\u8def\uff08\u5355\u6b21\u6216\u91cd\u590d\u591a\u6b21\uff09<\/strong>\uff0c\u4ee5\u6b64\u8fc7\u7a0b\u5b9e\u73b0\u4e86\u591a\u5c3a\u5ea6\u7279\u5f81\u63d0\u53d6\u7684\u4e00\u4e2a\u8fc7\u7a0b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"951\" height=\"219\" src=\"http:\/\/139.9.1.231\/wp-content\/uploads\/2022\/10\/image-45.png\" alt=\"\" class=\"wp-image-9103\" srcset=\"http:\/\/139.9.1.231\/wp-content\/uploads\/2022\/10\/image-45.png 951w, http:\/\/139.9.1.231\/wp-content\/uploads\/2022\/10\/image-45-300x69.png 300w, http:\/\/139.9.1.231\/wp-content\/uploads\/2022\/10\/image-45-768x177.png 768w\" sizes=\"(max-width: 951px) 100vw, 951px\" \/><\/figure>\n\n\n\n<p>    HRNet\u5728\u6574\u4e2a\u8fc7\u7a0b\u4e2d\u4fdd\u6301\u7279\u5f81\u56fe\u7684\u9ad8\u5206\u8fa8\u7387\uff0c\u4f46\u591a\u5c3a\u5ea6\u7279\u5f81\u63d0\u53d6\u662f\u59ff\u6001\u4f30\u8ba1\u6a21\u578b\u4e00\u5b9a\u8981\u5b9e\u73b0\u7684\u8fc7\u7a0b\uff0c\u90a3\u4e48HRNet\u662f\u5982\u4f55\u5b9e\u73b0\u591a\u5c3a\u5ea6\u7279\u5f81\u63d0\u53d6\u7684\u5462\uff1f<strong>\u6a21\u578b\u662f\u901a\u8fc7\u5728\u9ad8\u5206\u8fa8\u7387\u7279\u5f81\u56fe\u4e3b\u7f51\u7edc\u9010\u6e10\u5e76\u884c\u52a0\u5165\u4f4e\u5206\u8fa8\u7387\u7279\u5f81\u56fe\u5b50\u7f51\u7edc\uff0c\u4e0d\u540c\u7f51\u7edc\u5b9e\u73b0\u591a\u5c3a\u5ea6\u878d\u5408\u4e0e\u7279\u5f81\u63d0\u53d6\u5b9e\u73b0\u7684\u3002<\/strong><\/p>\n\n\n\n<p><strong>\u7279\u70b9\u4e0e\u4f18\u52bf\uff1a<\/strong><\/p>\n\n\n\n<p>\uff081\uff09\u4f5c\u8005\u63d0\u51fa\u7684\u65b9\u6cd5\u662f\u5e76\u884c\u8fde\u63a5\u9ad8\u5206\u8fa8\u7387\u4e0e\u4f4e\u5206\u8fa8\u7387\u7f51\u7edc\uff0c\u800c\u4e0d\u662f\u50cf\u4e4b\u524d\u65b9\u6cd5\u90a3\u6837\u4e32\u884c\u8fde\u63a5\u3002\u56e0\u6b64\uff0c\u5176\u65b9\u6cd5\u80fd\u591f\u4fdd\u6301\u9ad8\u5206\u8fa8\u7387\uff0c\u800c\u4e0d\u662f\u901a\u8fc7\u4e00\u4e2a\u4f4e\u5230\u9ad8\u7684\u8fc7\u7a0b\u6062\u590d\u5206\u8fa8\u7387\uff0c\u56e0\u6b64\u9884\u6d4b\u7684heatmap\u53ef\u80fd\u5728\u7a7a\u95f4\u4e0a\u66f4\u7cbe\u786e\u3002<\/p>\n\n\n\n<p>\uff082\uff09\u672c\u6587\u63d0\u51fa\u7684\u6a21\u578b\u878d\u5408\u76f8\u540c\u6df1\u5ea6\u548c\u76f8\u4f3c\u7ea7\u522b\u7684\u4f4e\u5206\u8fa8\u7387\u7279\u5f81\u56fe\u6765\u63d0\u9ad8\u9ad8\u5206\u8fa8\u7387\u7684\u7279\u5f81\u56fe\u7684\u8868\u793a\u6548\u679c\uff0c\u5e76\u8fdb\u884c\u91cd\u590d\u7684\u591a\u5c3a\u5ea6\u878d\u5408\u3002<\/p>\n\n\n\n<p><strong>\u7f3a\u70b9<\/strong>\uff1a\u56e0\u4e3a\u7279\u5f81\u56fe\u5206\u8fa8\u7387\u8fc7\u5927\uff0c\u800c\u4e14\u6570\u91cf\u591a\uff0c\u8fd9\u6837\u80af\u5b9a\u4f1a\u5bfc\u81f4\u5de8\u989d\u7684\u8017\u65f6\u8ba1\u7b97\uff0c\u5bf9\u663e\u5b58\u5bf9\u786c\u4ef6\u8981\u6c42\u66f4\u9ad8\u4e86<\/p>\n\n\n\n<h2><strong>HRNet\u7ed3\u6784\u7ec6\u8282<\/strong><\/h2>\n\n\n\n<p><strong>Backbone\u8bbe\u8ba1<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/pic3.zhimg.com\/v2-b0e1db00397f31a681ada535469ff4b6_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u6211\u5c06HRNet\u6574\u4e2abackbone\u90e8\u5206\u8fdb\u884c\u4e86\u62c6\u89e3\uff0c\u5206\u62104\u4e2astage\uff0c\u6bcf\u4e2astage\u5206\u6210\u84dd\u8272\u6846\u548c\u6a59\u8272\u6846\u4e24\u90e8\u5206\u3002\u5176\u4e2d\u84dd\u8272\u6846\u90e8\u5206\u662f\u6bcf\u4e2astage\u7684\u57fa\u672c\u7ed3\u6784\uff0c\u7531\u591a\u4e2abranch\u7ec4\u6210\uff0cHRNet\u4e2dstage1\u84dd\u8272\u6846\u4f7f\u7528\u7684\u662fBottleNeck\uff0cstage2&amp;3&amp;4\u84dd\u8272\u6846\u4f7f\u7528\u7684\u662fBasicBlock\u3002\u5176\u4e2d\u6a59\u8272\u6846\u90e8\u5206\u662f\u6bcf\u4e2astage\u7684\u8fc7\u6e21\u7ed3\u6784\uff0cHRNet\u4e2dstage1\u6a59\u8272\u6846\u662f\u4e00\u4e2aTransitionLayer\uff0cstage2&amp;3\u6a59\u8272\u6846\u662f\u4e00\u4e2aFuseLayer\u548c\u4e00\u4e2aTransitionLayer\u7684\u53e0\u52a0\uff0cstage4\u6a59\u8272\u6846\u662f\u4e00\u4e2aFuseLayer\u3002<\/p>\n\n\n\n<p>\u89e3\u91ca\u4e00\u4e0b\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u8bbe\u8ba1\uff0c<strong>FuseLayer\u662f\u7528\u6765\u8fdb\u884c\u4e0d\u540c\u5206\u652f\u7684\u4fe1\u606f\u4ea4\u4e92\u7684\uff0cTransitionLayer\u662f\u7528\u6765\u751f\u6210\u4e00\u4e2a\u4e0b\u91c7\u6837\u4e24\u500d\u5206\u652f\u7684\u8f93\u5165feature map\u7684<\/strong>\uff0cstage1\u6a59\u8272\u6846\u663e\u7136\u6ca1\u529e\u6cd5\u505aFuseLayer\uff0c\u56e0\u4e3a\u524d\u4e00\u4e2astage\u53ea\u6709\u4e00\u4e2a\u5206\u652f\uff0cstage4\u6a59\u8272\u6846\u540e\u9762\u63a5neck\u548chead\u4e86\uff0c\u663e\u7136\u4e5f\u4e0d\u518d\u9700\u8981TransitionLayer\u4e86\u3002<\/p>\n\n\n\n<p><strong>\u6574\u4e2abackbone\u7684\u6784\u5efa\u6d41\u7a0b\u53ef\u4ee5\u603b\u7ed3\u4e3a\uff1amake_backbone -&gt; make_stages -&gt; make_branches<\/strong><\/p>\n\n\n\n<p>\u6709\u5173backbone\u6784\u5efa\u76f8\u5173\u7684\u770b\u6e90\u7801\uff0c\u4e3b\u8981\u8bb2\u4e00\u4e0b<strong>FuseLayer<\/strong>\u3001<strong>TransitionLayer<\/strong>\u548c<strong>Neck<\/strong>\u7684\u8bbe\u8ba1<\/p>\n\n\n\n<p class=\"has-light-pink-background-color has-background\"><strong>FuseLayer\u8bbe\u8ba1<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" src=\"https:\/\/pic1.zhimg.com\/80\/v2-ba35e3f77adfe1b4a3a950f1d4333664_720w.webp\" alt=\"\" width=\"179\" height=\"284\"\/><\/figure><\/div>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" src=\"https:\/\/pic4.zhimg.com\/v2-c2cdf1aa8881dc7de7efa24b88863d13_r.jpg\" alt=\"\" width=\"686\" height=\"207\"\/><\/figure>\n\n\n\n<p>FuseLayer\u90e8\u5206\u4ee5\u7eff\u8272\u6846\u4e3a\u4f8b\uff0c\u878d\u5408\u524d\u4e3apre\uff0c\u878d\u5408\u540e\u4e3apost\uff0c\u9759\u6001\u6784\u5efa\u4e00\u4e2a\u4e8c\u7ef4\u77e9\u9635\uff0c\u7136\u540e\u5c06pre\u548cpost\u5bf9\u5e94\u8fde\u63a5\u7684\u64cd\u4f5c\u4e00\u4e00\u586b\u5165\u8fd9\u4e2a\u4e8c\u7ef4\u77e9\u9635\u4e2d\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0a\u56fe\u4e3a\u4f8b\uff0c\u56fe1\u7684pre1\u548cpost1\u7684\u64cd\u4f5c\u4e3a\u7a7a\uff0cpre2\u548cpost1\u7684\u64cd\u4f5c\u4e3a2\u500d\u4e0a\u91c7\uff0cpre3\u548cpost1\u7684\u64cd\u4f5c\u4e3a4\u500d\u4e0a\u91c7\uff1b\u56fe2\u7684pre1\u548cpost2\u7684\u64cd\u4f5c\u4e3a3&#215;3\u5377\u79ef\u4e0b\u91c7\uff0cpre2\u548cpost2\u7684\u64cd\u4f5c\u4e3a\u7a7a\uff0cpre3\u548cpost2\u7684\u64cd\u4f5c\u4e3a2\u500d\u4e0a\u91c7\uff1b\u56fe3\u7684pre1\u548cpost3\u7684\u64cd\u4f5c\u4e3a\u8fde\u7eed\u4e24\u4e2a3&#215;3\u5377\u79ef\u4e0b\u91c7\uff0cpre2\u548cpost3\u7684\u64cd\u4f5c\u4e3a3&#215;3\u5377\u79ef\u4e0b\u91c7\uff0cpre3\u548cpost\u7684\u64cd\u4f5c\u4e3a\u7a7a\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/pic3.zhimg.com\/v2-7c0eb439d64cee8f37a4e013a059fd8e_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u524d\u5411\u8ba1\u7b97\u65f6\u7528\u4e00\u4e2a\u4e8c\u91cd\u5faa\u73af\u5c06\u6784\u5efa\u597d\u7684\u4e8c\u7ef4\u77e9\u9635\u4e00\u4e00\u89e3\u5f00\uff0c\u5c06\u5bf9\u5e94\u540c\u4e00\u4e2apost\u7684pre\u8f6c\u6362\u540e\u8fdb\u884c\u878d\u5408\u76f8\u52a0\u3002\u6bd4\u5982post1 = f11(pre1) + f12(pre2) + f13(pre3)<\/p>\n\n\n\n<p>FuseLayer\u7684\u6574\u4f53code\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def _make_fuse_layers(self):\n  fuse_layers = &#91;]\n  for post_index, out_channel in enumerate(self.out_channels&#91;:len(self.in_channels)]):\n      fuse_layer = &#91;]\n      for pre_index, in_channel in enumerate(self.in_channels):\n          if pre_index &gt; post_index:\n              fuse_layer.append(nn.Sequential(\n                  nn.Conv2d(in_channel, out_channel, 1, 1, 0, bias=False),\n                  nn.BatchNorm2d(out_channel, momentum=0.1),\n                  nn.Upsample(scale_factor=2**(pre_index-post_index), mode='nearest')))\n          elif pre_index &lt; post_index:\n              conv3x3s = &#91;]\n              for cur_index in range(post_index - pre_index):\n                  out_channels_conv3x3 = out_channel if cur_index == post_index - pre_index - 1 else in_channel\n                  conv3x3 = nn.Sequential(\n                      nn.Conv2d(in_channel, out_channels_conv3x3, 3, 2, 1, bias=False),\n                      nn.BatchNorm2d(out_channels_conv3x3, momentum=0.1)\n                  )\n                  if cur_index &lt; post_index - pre_index - 1:\n                      conv3x3.add_module('relu_{}'.format(cur_index), nn.ReLU(False))\n                  conv3x3s.append(conv3x3)\n              fuse_layer.append(nn.Sequential(*conv3x3s))\n          else:\n              fuse_layer.append(None)\n      fuse_layers.append(nn.ModuleList(fuse_layer))\n  return nn.ModuleList(fuse_layers)\n\ndef forward(self, x):\n  x_fuse = &#91;]\n  for post_index in range(len(self.fuse_layers)):\n      y = 0\n      for pre_index in range(len(self.fuse_layers)):\n          if post_index == pre_index:\n              y += x&#91;pre_index]\n          else:\n              y += self.fuse_layers&#91;post_index]&#91;pre_index](x&#91;pre_index])\n      x_fuse.append(self.relu(y))<\/code><\/pre>\n\n\n\n<p><strong>TransitionLayer\u8bbe\u8ba1<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" src=\"https:\/\/pic2.zhimg.com\/80\/v2-a9818b676ad73f685e10ccf2701a0b45_720w.webp\" alt=\"\" width=\"-118\" height=\"-187\"\/><\/figure><\/div>\n\n\n\n<p>TransitionLayer\u4ee5\u9ec4\u8272\u6846\u4e3a\u4f8b\uff0c\u9759\u6001\u6784\u5efa\u4e00\u4e2a\u4e00\u7ef4\u77e9\u9635\uff0c\u7136\u540e\u5c06pre\u548cpost\u5bf9\u5e94\u8fde\u63a5\u7684\u64cd\u4f5c\u4e00\u4e00\u586b\u5165\u8fd9\u4e2a\u4e00\u7ef4\u77e9\u9635\u4e2d\u3002\u5f53pre1&amp;post1\u3001pre2&amp;post2\u3001pre3&amp;post3\u7684\u901a\u9053\u6570\u5bf9\u5e94\u76f8\u540c\u65f6\uff0c\u4e00\u7ef4\u77e9\u9635\u586b\u5165None\uff1b\u901a\u9053\u6570\u4e0d\u76f8\u540c\u65f6\uff0c\u5bf9\u5e94\u4f4d\u7f6e\u586b\u5165\u4e00\u4e2a\u8f6c\u6362\u5377\u79ef\u3002post4\u6bd4\u8f83\u7279\u6b8a\uff0c<strong>\u8fd9\u4e00\u90e8\u5206\u4ee3\u7801\u548c\u56fe\u4f8b\u4e0d\u592a\u4e00\u81f4<\/strong>\uff0c\u56fe\u4f8b\u662fpre1&amp;pre2&amp;pre3\u90fd\u8fdb\u884c\u4e0b\u91c7\u7136\u540e\u8fdb\u884c\u878d\u5408\u76f8\u52a0\u5f97\u5230post4\uff0c\u800c\u4ee3\u7801\u4e2dpost4\u901a\u8fc7pre3\u4e0b\u91c7\u5f97\u5230\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/pic4.zhimg.com\/v2-debc2fe5911eea270c27bad6c4f8d397_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>TransitionLayer\u6574\u4f53code\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def _make_transition_layers(self):\n  num_branches_pre = len(self.in_channels)\n  num_branches_post = len(self.out_channels)\n  transition_layers = &#91;]\n  for post_index in range(num_branches_post):\n      if post_index &lt; len(self.in_channels):\n          if self.in_channels&#91;post_index] != self.out_channels&#91;post_index]:\n              transition_layers.append(nn.Sequential(\n                  nn.Conv2d(self.in_channels&#91;post_index], self.out_channels&#91;post_index], 3, 1, 1, bias=False),\n                  nn.BatchNorm2d(self.out_channels&#91;post_index], momentum=0.1),\n                  nn.ReLU(inplace=True)\n              ))\n          else:\n              transition_layers.append(None)\n      else:\n          conv3x3s = &#91;]\n          for pre_index in range(post_index + 1 - num_branches_pre):\n              in_channels_conv3x3 = self.in_channels&#91;-1]\n              out_channels_conv3x3 = self.out_channels&#91;post_index] if pre_index == post_index - \\\n                  num_branches_pre else in_channels_conv3x3\n              conv3x3s.append(nn.Sequential(\n                  nn.Conv2d(in_channels_conv3x3, out_channels_conv3x3, 3, 2, 1, bias=False),\n                  nn.BatchNorm2d(out_channels_conv3x3, momentum=0.1),\n                  nn.ReLU(inplace=True)\n              ))\n          transition_layers.append(nn.Sequential(*conv3x3s))\n  return nn.ModuleList(transition_layers)\n\ndef forward(self, x):\n  x_trans = &#91;]\n  for branch_index, transition_layer in enumerate(self.transition_layers):\n      if branch_index &lt; len(self.transition_layers) - 1:\n          if transition_layer:\n              x_trans.append(transition_layer(x&#91;branch_index]))\n          else:\n              x_trans.append(x&#91;branch_index])\n      else:\n          x_trans.append(transition_layer(x&#91;-1]))<\/code><\/pre>\n\n\n\n<p><strong>Neck\u8bbe\u8ba1<\/strong><\/p>\n\n\n\n<p>\u6211\u628aHRNet\u6240\u63cf\u8ff0\u7684make_head\u8fc7\u7a0b\u7406\u89e3\u6210make_neck(\u56e0\u4e3a\u4e00\u822c\u610f\u4e49\u4e0a\u5c06\u6700\u540e\u7684fc\u5c42\u7406\u89e3\u6210head\u66f4\u4e3a\u6e05\u6670\uff0c\u8fd9\u4e2a\u5728\u5f88\u591a\u5f00\u6e90code\u4e2d\u90fd\u662f\u8fd9\u6837\u5b50\u62c6\u89e3\u7684)\u3002\u4e0b\u9762\u7740\u91cd\u8bb2\u89e3\u4e00\u4e0bHRNet\u7684neck\u8bbe\u8ba1\u3002<\/p>\n\n\n\n<p>HRNet\u7684backbone\u8f93\u51fa\u6709\u56db\u4e2a\u5206\u652f\uff0cpaper\u4e2d\u7ed9\u51fa\u4e86\u51e0\u79cd\u65b9\u5f0f\u5bf9\u8f93\u51fa\u5206\u652f\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/pic1.zhimg.com\/80\/v2-bf8eea60cf775c5053229f75a235398c_720w.webp\" alt=\"\"\/><\/figure>\n\n\n\n<p>(a)\u56fe\u662fHRNetV1\u7684\u64cd\u4f5c\u65b9\u5f0f\uff0c\u53ea\u4f7f\u7528\u5206\u8fa8\u7387\u6700\u9ad8\u7684feature map\u3002<\/p>\n\n\n\n<p>(b)\u56fe\u662fHRNetV2\u7684\u64cd\u4f5c\u65b9\u5f0f\uff0c\u5c06\u6240\u6709\u5206\u8fa8\u7387\u7684feature map(\u5c0f\u7684\u7279\u5f81\u56fe\u8fdb\u884cupsample)\u8fdb\u884cconcate\uff0c\u4e3b\u8981\u7528\u4e8e\u8bed\u4e49\u5206\u5272\u548c\u9762\u90e8\u5173\u952e\u70b9\u68c0\u6d4b\u3002<\/p>\n\n\n\n<p>(c)\u56fe\u662fHRNetV2p\u7684\u64cd\u4f5c\u65b9\u5f0f\uff0c\u5728HRNetV2\u7684\u57fa\u7840\u4e0a\uff0c\u4f7f\u7528\u4e86\u4e00\u4e2a\u7279\u5f81\u91d1\u5b57\u5854\uff0c\u4e3b\u8981\u7528\u4e8e\u76ee\u6807\u68c0\u6d4b\u3002<\/p>\n\n\n\n<p>\u800c\u5728\u56fe\u50cf\u5206\u7c7b\u4efb\u52a1\u4e0a\uff0cHRNet\u6709\u53e6\u4e00\u79cd\u7279\u6b8a\u7684neck\u8bbe\u8ba1<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/pic2.zhimg.com\/v2-5122cb02cf6777a7bf0d690283c98101_r.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>HRNet\u7684neck\u53ef\u4ee5\u5206\u6210\u4e09\u4e2a\u90e8\u5206\uff0cIncreLayer(\u6a59\u8272\u6846)\uff0cDownsampLayer(\u84dd\u8272\u6846)\u548cFinalLayer(\u7eff\u8272\u6846)\u3002\u5bf9\u6bcf\u4e2abackbone\u7684\u8f93\u51fa\u5206\u652f\u8fdb\u884c\u5347\u7ef4\u64cd\u4f5c\uff0c\u7136\u540e\u6309\u7167\u5206\u8fa8\u7387\u4ece\u5927\u5230\u5c0f\u4f9d\u6b21\u8fdb\u884c\u4e0b\u91c7\u6837\u540c\u65f6\u4ece\u4e0a\u5230\u4e0b\u9010\u7ea7\u878d\u5408\u76f8\u52a0\uff0c\u6700\u540e\u7528\u4e00\u4e2a1x1conv\u5347\u7ef4\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def _make_neck(self, in_channels):\n  head_block = Bottleneck\n  self.incre_channels = &#91;32, 64, 128, 256]\n  self.neck_out_channels = 2048\n\n  incre_modules = &#91;]\n  downsamp_modules = &#91;]\n  num_branches = len(self.in_channels)\n  for index in range(num_branches):\n      incre_module = self._make_layer(head_block, in_channels&#91;index], incre_channels&#91;index], 1, stride=1)\n      incre_modules.append(incre_module)\n      if index &lt; num_branches - 1:\n          downsamp_in_channels = self.incre_channels&#91;index] * incre_module.expansion\n          downsamp_out_channels = self.incre_channels&#91;index+1] * incre_module.expansion\n          downsamp_module = nn.Sequential(\n              nn.Conv2d(in_channels=downsamp_in_channels, out_channels=downsamp_out_channels,\n                        kernel_size=3, stride=2, padding=1),\n              nn.BatchNorm2d(downsamp_out_channels, momentum=0.1),\n              nn.ReLU(inplace=True)\n          )\n          downsamp_modules.append(downsamp_module)\n  incre_modules = nn.ModuleList(incre_modules)\n  downsamp_modules = nn.ModuleList(downsamp_modules)\n  final_layer = nn.Sequential(\n      nn.Conv2d(in_channels=self.out_channels&#91;-1] * 4, out_channels=2048,\n                kernel_size=1, stride=1, padding=0),\n      nn.BatchNorm2d(2048, momentum=0.1),\n      nn.ReLU(inplace=True)\n  )\n  return incre_modules, downsamp_modules, fine_layer\n\ndef forward(self, x):\n  y = self.incre_modules&#91;0](x&#91;0])\n  for index in range(len(self.downsamp_modules)):\n      y = self.incre_modules&#91;index+1](x&#91;index+1]) + self.downsamp_modules&#91;index](y)\n  y = self.final_layer(y)\n  y = F.avg_pool2d(y, kernel_size=y.size()&#91;2:]).view(y.size(0), -1)<\/code><\/pre>\n\n\n\n<p><strong>\u8fd8\u6709\u51e0\u4e2a\u5c0f\u7ec6\u8282<\/strong><\/p>\n\n\n\n<ol><li>BN\u5c42\u7684momentom\u90fd\u8bbe\u7f6e\u4e3a0.1<\/li><li>stem\u4f7f\u7528\u7684\u662f\u4e24\u5c42stried\u4e3a2\u7684conv3x3<\/li><li>FuseLayer\u7684ReLU\u7684inplace\u90fd\u8bbe\u7f6e\u4e3aFalse<\/li><\/ol>\n","protected":false},"excerpt":{"rendered":"<p>github\uff1a https:\/\/github.com\/HRNet\/HRNet-Semantic-Segment &hellip; <a href=\"http:\/\/139.9.1.231\/index.php\/2022\/10\/13\/hrnet\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">HRNet \u8bba\u6587\u548c\u4ee3\u7801\u8be6\u89e3<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,24,25,9],"tags":[],"_links":{"self":[{"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/posts\/9091"}],"collection":[{"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/comments?post=9091"}],"version-history":[{"count":28,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/posts\/9091\/revisions"}],"predecessor-version":[{"id":9122,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/posts\/9091\/revisions\/9122"}],"wp:attachment":[{"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/media?parent=9091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/categories?post=9091"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/139.9.1.231\/index.php\/wp-json\/wp\/v2\/tags?post=9091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}