【资源记录】Invertible Neural Networks 可逆神经网络是什么,与VAE,GAN的关系;什么是Bits per pixel,Bits per dim

INN

两个很好的讲解视频:

https://www.youtube.com/watch?v=WqP45Iyvd3o 这里的讲者是Analyzing Inverse Problems with Invertible Neural Networks的作者。这文章很适合入门了解INN的概念。

https://www.youtube.com/watch?v=IpbeIwSr7r0 这个是比较综述的,涉及很多文章的内容。其中,我觉得比较值得细看的是 NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATIONDENSITY ESTIMATION USING REAL NVP

 

BPP

另外,在NICE文章中,我看的时候并不知道bits per pixel(bpp)是什么。一查才知道这是评价generative model很重要的指标。详细描述在这篇文章的3.1: A NOTE ON THE EVALUATION OF GENERATIVE MODELS https://arxiv.or

基于PyTorch的可逆神经网络Invertible Neural Network, INN)是一种设计成可以精确地逆向其操作的网络。这意味着对于每个输出,网络都能够推断出一个唯一的输入。在点云特征提取和坐标回归的任务中,使用INN可以有助于模型学习更加精准的特征表达和坐标变换。 以下是一个简化的例子,用于演示如何构建一个基本的可逆神经网络结构,该结构包含可逆层,用于点云数据的特征提取和坐标回归。请注意,这里仅提供一个基本的框架,具体实现可能需要根据你的任务和数据进行调整。 ```python import torch import torch.nn as nn import torch.nn.functional as F class InvertibleBlock(nn.Module): """ 可逆网络层的基本块,假设输入输出维度相等。 """ def __init__(self, dim): super(InvertibleBlock, self).__init__() self.dim = dim # 初始化可逆层中的权重,例如可以使用1x1卷积、可逆矩阵等 self.weight_matrix = nn.Parameter(torch.randn(dim, dim)) def forward(self, x): """ 正向传播,计算输出。 """ # 这里使用了简单的线性变换作为示例,实际应用中应替换为可逆操作 y = torch.matmul(x, self.weight_matrix) return y def inverse(self, y): """ 反向传播,计算输入。 """ # 使用相同的权重矩阵进行反向操作,实际应用中应确保可逆操作的反向一致性 x = torch.matmul(y, torch.inverse(self.weight_matrix)) return x class InvertiblePointNet(nn.Module): """ 点云特征提取和坐标回归的可逆神经网络。 """ def __init__(self): super(InvertiblePointNet, self).__init__() self.invertible_block = InvertibleBlock(dim=3) # 假设点云数据是3维的 # 其他的可逆层或网络结构可以在这里添加 def forward(self, points): """ 对点云数据进行特征提取和坐标回归的正向操作。 """ # 通过一个或多个可逆层进行特征提取和变换 transformed_points = self.invertible_block(points) # 可以添加更多的处理步骤,例如特征提取、聚合等 # 这里简化为直接返回变换后的点云 return transformed_points def inverse(self, transformed_points): """ 根据变换后的点云数据进行反向操作,恢复原始坐标。 """ # 通过相同的可逆层进行坐标恢复 original_points = self.invertible_block.inverse(transformed_points) # 其他的反向操作可以在这里添加 # 这里简化为直接返回恢复后的点云 return original_points # 假设我们有一些点云数据 points = torch.randn(10, 3) # 10个点,每个点3个坐标值 # 创建并使用网络 model = InvertiblePointNet() transformed_points = model(points) original_points = model.inverse(transformed_points) # 确认逆过程是否可以恢复原始数据 assert torch.allclose(points, original_points) ``` 这段代码展示了一个非常基础的可逆神经网络结构,其中包括了一个可逆层的基本块(`InvertibleBlock`)和一个点云处理的网络(`InvertiblePointNet`)。在实际应用中,你可能需要实现更复杂的可逆层,比如基于耦合层(Coupling Layers)的结构,并添加更多的网络层来处理特征提取和点云数据。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值