HetConv:处理非均匀、不规则数据的卷积神经网络

释放双眼,带上耳机,听听看~!
本文介绍了HetConv卷积神经网络,该网络能够处理非均匀、不规则的数据,具有广泛的应用前景。

关键词:卷积神经网络 、 cvpr 、 HetConv 、 不均匀数据 、 不规则数据

论文地址:[cvpr2019-HetConv](1903.04120.pdf (arxiv.org))

项目地址:github.com/kivenyangmi…

前言

  在深度学习领域,卷积神经网络是非常重要的一类模型,它们在图像处理、自然语言处理、语音识别等多个领域都有广泛应用。然而,由于卷积操作的局限性,传统的卷积神经网络在处理非均匀、不规则的数据时会受到限制。为了克服这个问题,学者们提出了很多改进的卷积操作,其中就包括了本文要介绍的HetConv。与传统卷积相比,HetConv能够在处理非均匀、不规则的数据时发挥更强的效果,因此在实际应用中具有广泛的应用前景。接下来,我们将对HetConv的原理、优点和应用进行详细介绍。

HetConv

  在传统的卷积神经网络中,卷积操作是在均匀的网格状输入数据上进行的,例如图像数据就是一个二维矩阵,每个像素的位置和取值都是确定的。然而,在现实生活中,很多数据并不是均匀的网格状结构,而是具有不规则形状、不均匀分布的数据,例如点云数据、三维网格数据等。对于这些数据,传统的卷积操作就无法很好地处理,因为它们没有固定的排列方式。

原理

  为了解决这一问题在2019年德国马普学院的Yongheng Zhao等人提出了HetConv卷积算子,
它可以处理非均匀、不规则的输入数据。

HetConv:处理非均匀、不规则数据的卷积神经网络

  HetConv卷积的结构设计很简单,即输入特征图的一部分通道应用k×k的卷积核,其余的通道应用1×1的卷积核。其中,P为控制卷积核为k的比例。

HetConv:处理非均匀、不规则数据的卷积神经网络

贡献:

  1. 设计了一种高效的异构卷积滤波器(heterogeneous convolutional filter),它可以插入到任何现有架构中,以提高架构的效率(FLOPs减少3倍到8倍),而不牺牲准确性。
  2. 所提出的HetConv滤波器被设计成具有零延迟。因此,从输入到输出的延迟可以忽略不计。

与传统卷积比较

  HetConv具有处理非均匀、不规则数据、保留空间结构信息、处理局部特征和全局特征、自适应地学习输入数据拓扑结构等优点,因此在处理非均匀、不规则的数据时具有广泛的应用前景。具体如下:

  1. 能够处理非均匀、不规则的输入数据

  传统的卷积操作只能处理均匀的网格状数据,而对于非均匀、不规则的数据,如点云数据和三维网格数据,传统卷积操作无法处理。而HetConv基于图结构进行卷积操作,可以处理非均匀、不规则的输入数据,因此在处理这类数据时具有优势。

  1. 能够保留空间结构信息

  传统的卷积操作会破坏输入数据的空间结构信息,导致输出结果丢失空间位置的信息。而HetConv基于图结构进行卷积操作,可以保留输入数据的空间结构信息,输出结果具有空间位置的信息,因此在图像分割、目标检测等任务中具有优势。

  1. 能够处理局部特征和全局特征

  传统的卷积操作只能处理局部特征,而不能捕捉全局特征。而HetConv基于图结构进行卷积操作,可以同时处理局部特征和全局特征,因此在识别物体形状和结构等任务中具有优势。

  1. 能够自适应地学习输入数据的拓扑结构

  传统的卷积操作需要先设定输入数据的拓扑结构,而对于非均匀、不规则的数据,拓扑结构是不确定的。而HetConv可以自适应地学习输入数据的拓扑结构,因此在处理非均匀、不规则的数据时具有优势。

代码

import torch
from torch import nn


class HetConv(nn.Module):
    def __init__(self, in_channels, out_channels, p=1):
        super(HetConv, self).__init__()
        # Groupwise Convolution
        self.gwc = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, groups=p, bias=False)
        # Pointwise Convolution
        self.pwc = nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False)

    def forward(self, x):
        return self.gwc(x) + self.pwc(x)


if __name__ == "__main__":
    x = torch.zeros(1, 3, 640, 640)
    model = HetConv(in_channels=3, out_channels=64, p=1)
    y = model(x)
    print(y.shape)

本文正在参加「金石计划」

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

M2Det:基于多层级特征金字塔网络的单次目标检测器

2023-12-13 18:41:14

AI教程

Federated Graph Neural Network for Fast Anomaly Detection in Controller Area Networks

2023-12-13 19:00:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索