PyTorch 相当于 keras 模型

发布于 2025-01-14 00:32:45 字数 1952 浏览 1 评论 0原文

我正在学习 PyTorch,并尝试将 yolov3 模型(来自 keras)转换为 PyTorch。现在我面临的问题是有一个代码片段我发现很难将其转换为 PyTorch。现在

def yolo_body(inputs, num_anchors, num_classes):
    """Create YOLO_V3 model CNN body in Keras."""
    darknet = Model(inputs, darknet_body(inputs))    
    x, y1 = make_last_layers(darknet.output, 512, num_anchors*(num_classes+5))
    x = compose(
            DarknetConv2D_BN_Leaky(256, (1,1)),
            UpSampling2D(2))(x)
    x = Concatenate()([x,darknet.layers[152].output])
    #---- further code

我想知道 Keras 的 Model 的 pytorch 等价物是什么。我的 darknet_body 实现是

class yolov3:
    ----
    ----
    def darknet_body(self, x):
        """Darknent body having 52 Convolution2D layers"""
        x = self.DarknetConv2D_BN_Leaky(32, (3, 3))(x)
        x = self.resblock_body(x, 64, 1)
        x = self.resblock_body(x, 128, 2)
        x = self.resblock_body(x, 256, 8)
        x = self.resblock_body(x, 512, 8)
        x = self.resblock_body(x, 1024, 4)
        return x

resblock_body 实现是。

class yolov3:
    ----
    ----
    def resblock_body(self, x, num_filters, num_blocks):
        """A series of resblocks starting with a downsampling Convolution2D"""
        # Darknet uses left and top padding instead of 'same' mode
        x = torch.nn.ZeroPad2d(((1, 0), (1, 0)))(x)
        x = self.DarknetConv2D_BN_Leaky(num_filters, (3, 3), strides=(2, 2))(x)
        for i in range(num_blocks):
            y = compose(
                self.DarknetConv2D_BN_Leaky(num_filters // 2, (1, 1)),
                self.DarknetConv2D_BN_Leaky(num_filters, (3, 3)),
            )(x)
            x = torch.add(x, y)
        return x

我还想知道如何获得像 darknet.layers[152] 这样的层号,如 yolo_body 中所做的那样。

谢谢。

I am learning PyTorch and I am trying to convert a yolov3 model (from keras) to PyTorch. Now problem I am facing is that there is a code snippet which I am finding difficult to convert it to PyTorch. That is

def yolo_body(inputs, num_anchors, num_classes):
    """Create YOLO_V3 model CNN body in Keras."""
    darknet = Model(inputs, darknet_body(inputs))    
    x, y1 = make_last_layers(darknet.output, 512, num_anchors*(num_classes+5))
    x = compose(
            DarknetConv2D_BN_Leaky(256, (1,1)),
            UpSampling2D(2))(x)
    x = Concatenate()([x,darknet.layers[152].output])
    #---- further code

Now I want to know what is the pytorch equvivlent of Model from Keras. My darknet_body implementation is

class yolov3:
    ----
    ----
    def darknet_body(self, x):
        """Darknent body having 52 Convolution2D layers"""
        x = self.DarknetConv2D_BN_Leaky(32, (3, 3))(x)
        x = self.resblock_body(x, 64, 1)
        x = self.resblock_body(x, 128, 2)
        x = self.resblock_body(x, 256, 8)
        x = self.resblock_body(x, 512, 8)
        x = self.resblock_body(x, 1024, 4)
        return x

And resblock_body implementation is.

class yolov3:
    ----
    ----
    def resblock_body(self, x, num_filters, num_blocks):
        """A series of resblocks starting with a downsampling Convolution2D"""
        # Darknet uses left and top padding instead of 'same' mode
        x = torch.nn.ZeroPad2d(((1, 0), (1, 0)))(x)
        x = self.DarknetConv2D_BN_Leaky(num_filters, (3, 3), strides=(2, 2))(x)
        for i in range(num_blocks):
            y = compose(
                self.DarknetConv2D_BN_Leaky(num_filters // 2, (1, 1)),
                self.DarknetConv2D_BN_Leaky(num_filters, (3, 3)),
            )(x)
            x = torch.add(x, y)
        return x

I also want to know how can I get the layer number like darknet.layers[152] as done in yolo_body.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文