首页 > 其他分享 >PointNet++论文复现(一)【PontNet网络模型代码详解 - 分类部分】

PointNet++论文复现(一)【PontNet网络模型代码详解 - 分类部分】

时间:2024-03-24 09:32:28浏览次数:31  
标签:权重 ++ PontNet PointNet 卷积 int 共享 连接 输入

PontNet网络模型代码详解 - 分类部分

专栏持续更新中!关注博主查看后续部分!

分类模型的训练:

## e.g., pointnet2_ssg without normal features

python train_classification.py --model pointnet2_cls_ssg --log_dir pointnet2_cls_ssg

python test_classification.py --log_dir pointnet2_cls_ssg

训练和测试

知识补充

PyTorch中,nn.Conv1d和nn.Conv2d是卷积神经网络(CNN)的基本构建模块。用于处理一维和二维数据。

nn.Conv1d的参数:


in_channels (int):输入信号的通道数。

out_channels (int):卷积产生的通道数(即卷积核的数量)。

kernel_size (int or tuple):卷积核的大小。

stride (int or tuple, optional):卷积步长。

padding (int or tuple, optional):输入数据两侧的填充数。

dilation (int or tuple, optional):卷积核元素之间的间距。

groups (int, optional):连接输入和输出通道的分组数。

bias (bool, optional):是否添加偏置项。

一维卷积示例:

import torch

import torch.nn as nn



batchSize=2

num_features=3 # X,Y,Z

num_point=4



input=torch.ones(batchSize,num_features,num_point)

x1=torch.Tensor([1,2,3,1]).reshape(1,4)

input=torch.mul(x1,input)

conv1=nn.Conv1d(3,5,1)

y=conv1(input)

权重共享是卷积神经网络(CNN)的一个关键特性,尤其在处理图像、音频和文本等数据时非常重要。在一维卷积(Conv1D)的上下文中,权重共享具体意味着卷积层中的每个卷积核(或滤波器)在整个输入序列上滑动时使用相同的权重。

权重共享的含义

1、减少参数数量:在传统的全连接网络中,每个输入单元与每个输出单元之间都有一个独立的权重,导致参数数量随输入和输出大小的增长而急剧增加。在卷积网络中,由于使用了权重共享,同一个卷积核在不同位置的计算重复使用相同的权重,大大减少了模型的参数数量。

2、提高效率:权重共享不仅减少了模型的存储需求,也提高了计算效率,因为它减少了需要学习的参数数量。这使得卷积网络能够更快地训练,并减少了过拟合的风险。

3、捕捉局部特征:卷积操作通过卷积核在输入序列上的滑动来捕捉局部特征。权重共享保证了模型在整个序列的不同位置以相同的方式响应相似的模式或特征(输出特征的某一通道数值由一组权重(核)来决定,即该通道的所有值都共享同一组权重),这对于处理图像、音频和序列数据非常有用,因为这些类型的数据通常包含重复出现的局部模式。

一维卷积层和全连接层的区别

权重共享的一维卷积(Conv1D)层和全连接(Fully Connected,FC)层在结构和功能上有显著的区别,这些区别影响了它们在处理数据时的效率和适用性。以下是这两种网络层之间的主要区别:

权重共享与参数数量

权重共享的Conv1D层:在一维卷积层中,同一个卷积核(一组权重)在整个输入序列上滑动以提取特征,这意味着相同的权重被用于输入的不同部分。这种权重共享显著减少了模型的参数数量,因为不需要为输入数据的每个不同位置学习一组独立的权重。

全连接层:在全连接层中,每个输入单元都与每个输出单元连接,并且每个连接都有一个独立的权重。这意味着FC层的参数数量随输入和输出单元的数量线性增长,对于大型数据集或高维数据,会导致参数数量非常庞大,增加了计算成本和过拟合的风险。

局部连接与全局连接

Conv1D层:卷积操作侧重于提取输入序列的局部特征。每个卷积核在输入上滑动,只关注输入的一个局部区域,这有助于捕捉如边缘、纹理等局部模式,这对于时间序列分析、音频处理和文本处理等任务非常有效。

全连接层:在全连接层中,每个输入都与输出的每个单元连接,这意味着全连接层在处理输入时考虑了所有的全局信息。这使得FC层能够学习输入单元之间的复杂和非局部的关系,但也使其对于高维数据效率低下。

参数共享与空间不变性

Conv1D层的参数共享:通过在整个输入序列上重复使用相同的权重,卷积层能够对输入数据的平移表现出某种程度的不变

标签:权重,++,PontNet,PointNet,卷积,int,共享,连接,输入
From: https://blog.csdn.net/qq_43700729/article/details/136928096

相关文章

  • c++学习路线
    学习C++可以按照以下路线进行:基础知识:了解C++语言的基本语法和特性学习C++的数据类型、控制流和函数熟悉面向对象编程的概念和用法类和对象:学习如何定义类和对象理解类的构造函数、析构函数和成员函数掌握类的继承、多态和封装特性STL库:熟悉STL(标准模板库)的常用容器,......
  • C++U4- 04 - 新递推2
     排列 公式 单选 组合数 单选 递推练习[直线分割平面问题]   【参考代码】#include<iostream>usingnamespacestd;inta[1010];//a[i]:第i条直线最多能将这个圆分割成的部分数intmain(){//1、定义变量n,进行输入,数组a进行存储......
  • C++必知必会 C++11实用特性
    文章目录前言nullptr和NULLconst和constexprauto和decltypelambda表达式function和bind右值引用移动语义move智能指针前言C++11开始添加了很多好用的新特性,个人认为想要真正掌握这些特性还是需要多读代码,多应用这些特性,本文只记录了一些个人用过的,并结合自己的使用......
  • 【华为OD机试】真题A卷-连接器问题(C++)
    一、题目描述【华为OD机试】真题A卷-连接器问题(C++)题目描述:有一组区间[a0,b0],[a1,b1],…(a,b表示起点,终点),区间有可能重叠、相邻,重叠或相邻则可以合并为更大的区间;给定一组连接器[x1,x2,x3,…](x表示连接器的最大可连接长度,即x>=gap),可用于将分离的区间连接起来,但两个分离区间之间只......
  • 突破编程_C++_C++11新特性(lambda表达式的基础知识)
    1Lambda表达式简介1.1Lambda表达式的定义与概念Lambda表达式是C++11引入的一种函数对象的匿名表示方法,它的定义与概念基于数学中的λ演算。Lambda表达式为程序员提供了一种更加简洁、灵活的方式来定义轻量级的、临时的、内联的函数对象,通常用于函数式编程的场景......
  • 跳马【华为OD机试JAVA&Python&C++&JS题解】
    一.题目马是象棋(包括中国象棋和国际象棋)中的棋子,走法是每步直一格再斜一格,即先横着或直着走一格,然后再斜着走一个对角线,可进可退,可越过河界,俗称“马走‘日’字。给顶m行n列的棋盘(网格图),棋盘上只有有棋子象棋中的棋子“马”,并且每个棋子有等级之分,等级为k的马可以跳1~k......
  • C++ [NOIP2008 普及组] ISBN 号码
    文章目录一、题目描述[NOIP2008普及组]ISBN号码题目描述输入格式输出格式样例#1样例输入#1样例输出#1样例#2样例输入#2样例输出#2提示二、参考代码一、题目描述[NOIP2008普及组]ISBN号码题目描述每一本正式出版的图书都有一个ISBN号码与之对应,IS......
  • C++ 三角函数
    文章目录一、题目描述三角函数题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示二、参考代码一、题目描述三角函数题目描述输入一组勾股数a,b......
  • C++ 最长连号
    文章目录一、题目描述最长连号题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示数据规模与约定二、参考代码一、题目描述最长连号题目描述输入长度为nn......
  • 字符串翻转(C++)
    示例:        翻转前:tobeornottobe        翻转后:otebrotonoteb基本思路:        利用strtok字符串切割函数拿到每一部分,存储到一个字符串数组中,再将每一个字符串数组倒置。最后顺序输出。程序代码:#include<iostrem>#include<string>#......