# CLNet **Repository Path**: chuyongwei/clnet ## Basic Information - **Project Name**: CLNet - **Description**: 对于CLNet的解析仓库 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-06 - **Last Updated**: 2025-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 我的笔记 ## 日志 算了不写了,自己领悟吧 模型的感悟 参数方面 + `out`获取的临时结果 + `w0`,`w1`获取的权值 具体的运算过程: 1. 9临近运算,然后下提取出最后一次高权值的点位的数据,本模型包含,0,1次的权值, 返回高权的对,每次的权值,提取后的权值0,1,2, 2. 将数据做一些归回生成新的数据对的集,去做6临近计算 3. 6临近计算,同9临近计算,下提取本模型包含,0,1次的权值,特征值(训练的结果), 这次返回,。。。,和估计值 4. 加权八点运算计算此次的结果 代办 - [ ] 模型的各种细节 - [ ] 数据文件 ## 大体框架 + main.py : 入口文件:用于导入配置,数据集和模型 + train.py : 训练文件,设置优化器和loss函数,以及checkout.pth中的训练记录提取装载 + train中的循环体如下 + 获取数据迭代器的头 + train_step(): 一次训练 + 验证 + 训练完成一次后将所需的记录保存入日志 + model.py :模型设计 1. 设计一个模型,里边放入ds1和ds2,一个是9临近,一个是6临近 2. 设计BLOCK模型,真正的模型,根据自己设计的模块做设计 3. 每个节点做一个模块要起一个帅气的名字,一般的话有残差块,全局块之类的 ## 局部解释 ### 残差网络 这个类 ResNet_Block 定义了一个残差块(Residual Block),是残差网络(ResNet)中的基本构建模块。残差块通过引入“跳跃连接”(skip connection)来缓解深层神经网络中的梯度消失问题,从而使得网络可以更深。以下是对该类的详细解释: 类定义 继承自 nn.Module:ResNet_Block 继承自 PyTorch 中的 nn.Module,这是所有神经网络模块的基类. 初始化方法 __init__: 参数: inchannel:输入通道数,表示输入特征图的通道数. outchannel:输出通道数,表示输出特征图的通道数. pre:一个布尔值,用于决定是否使用 self.right 路径进行前处理. 初始化过程: super(ResNet_Block, self).__init__():调用基类的初始化方法. self.pre = pre:保存 pre 参数的值. self.right:定义一个简单的卷积路径,只包含一个 1x1 卷积层,用于调整输入特征图的通道数. self.left:定义一个更复杂的卷积路径,包含两个 1x1 卷积层和相应的归一化层与激活函数,用于提取特征. 第一个卷积层后接 nn.InstanceNorm2d 和 nn.BatchNorm2d,分别进行实例归一化和批量归一化,然后是 ReLU 激活函数. 第二个卷积层后接 nn.InstanceNorm2d 和 nn.BatchNorm2d,但没有激活函数. 前向传播方法 forward: 参数:x,输入特征图. 过程: x1 = self.right(x) if self.pre is True else x:如果 pre 为 True,则通过 self.right 路径对输入进行处理,否则直接使用输入 x. out = self.left(x):通过 self.left 路径对输入进行处理,提取特征. out = out + x1:将 self.left 路径的输出与 x1 相加,实现跳跃连接. return torch.relu(out):对相加后的结果应用 ReLU 激活函数,并返回最终的输出. 应用场景 残差网络构建:这个残差块可以用于构建残差网络,通过堆叠多个残差块来构建更深层的网络结构. 特征提取:在计算机视觉任务中,如图像分类、目标检测等,残差块可以有效地提取图像特征. 缓解梯度消失:通过跳跃连接,残差块使得深层网络的训练变得更加稳定,能够训练更深的网络模型. ### DGCNN_Block 这个类 DGCNN_Block 定义了一个基于动态图卷积神经网络(Dynamic Graph Convolutional Neural Network, DGCNN)的块。DGCNN 是一种用于处理点云数据的深度学习架构,通过构建动态图来捕捉点云中的局部几何结构。以下是对该类的详细解释: 类定义 继承自 nn.Module:DGCNN_Block 继承自 PyTorch 中的 nn.Module,这是所有神经网络模块的基类. 初始化方法 __init__: 参数: knn_num:KNN(K-Nearest Neighbors)的邻居数量,默认为9。表示每个点在构建图时考虑的最近邻居数量. in_channel:输入通道数,默认为128。表示输入特征的通道数. 断言:assert self.knn_num == 9 or self.knn_num == 6,确保 knn_num 只能是6或9. 卷积层定义: 根据 knn_num 的值,定义不同的卷积层序列 self.conv: 如果 knn_num == 9,则定义一个包含两个卷积层的序列,每个卷积层后面都接有批量归一化层和ReLU激活函数。第一个卷积层的卷积核大小为 (1, 3),步长为 (1, 3),第二个卷积层的卷积核大小为 (1, 3). 如果 knn_num == 6,则定义一个包含两个卷积层的序列,第一个卷积层与 knn_num == 9 的情况相同,第二个卷积层的卷积核大小为 (1, 2). 前向传播方法 forward: 参数:features,输入特征张量,形状为 (B, C, N, K),其中 B 是批量大小,C 是通道数,N 是点的数量,K 是邻居数量. 过程: B, _, N, _ = features.shape:获取输入特征张量的形状信息. out = get_graph_feature(features, k=self.knn_num):调用 get_graph_feature 函数,根据输入特征和KNN邻居数量构建图特征。这个函数通常会计算每个点与其最近邻居之间的特征差值,以捕捉局部几何结构. out = self.conv(out):将图特征通过定义的卷积层序列进行处理,提取更高级的特征. 返回处理后的特征 out. 应用场景 点云处理:DGCNN_Block 适用于处理点云数据,如3D物体分类、分割等任务。通过构建动态图和图卷积操作,能够有效捕捉点云中的局部几何信息. 特征提取:在点云特征提取过程中,DGCNN_Block 可以作为网络的一部分,用于提取具有判别性的特征,为后续的分类或分割任务提供支持.