导购类网站怎么做网站建设推荐书籍

news/2025/10/4 11:27:10/文章来源:
导购类网站怎么做,网站建设推荐书籍,网页特效精灵,金安合肥网站建设专业PointNet 是一种深度网络架构#xff0c;它使用点云来实现从对象分类、零件分割到场景语义解析等应用。 它于 2017 年实现#xff0c;是第一个直接将点云作为 3D 识别任务输入的架构。 本文的想法是使用 Pytorch 实现 PointNet 的分类模型#xff0c;并可视化其转换以了解模…PointNet 是一种深度网络架构它使用点云来实现从对象分类、零件分割到场景语义解析等应用。 它于 2017 年实现是第一个直接将点云作为 3D 识别任务输入的架构。 本文的想法是使用 Pytorch 实现 PointNet 的分类模型并可视化其转换以了解模型的工作原理。 如果你不知道点云是什么……它只是对象或场景的 3D 表示通常从 LiDAR光检测和测距传感器收集。 这些传感器发射光脉冲然后测量它们返回传感器所需的时间。 此信息可用于创建对象或场景的 3D 模型如上面的模型。 LiDAR 传感器变得越来越流行你可以在自动驾驶汽车、无人机、测绘飞机甚至某些智能手机中找到它们 1、Pointnet训练数据集 为了简单起见我们将使用著名的 MNIST 数据集我们可以直接使用 Pytorch 下载该数据集。 MNIST 包含 60,000 张手写数字图像从 0 到 9。 PointNet 处理由三个坐标 (x, y, z) 表示的点因此我们将把 2D 图像转换为 3D 点云如下图所示。 MNIST 样本是 28 x 28 像素的灰度图像。 像素值是范围从 0黑色到 255白色的整数。 我们想要将数字的每个像素转换为一个点。 函数transform_img2pc过滤图像中值高于127的像素并获取它们的索引。 import numpy as npdef transform_img2pc(img):img_array np.asarray(img)indices np.argwhere(img_array 127)return indices.astype(np.float32) 一旦我们将像素转换为点我们需要所有点云具有相同数量的点以便我们可以将它们输入到 PointNet 中。 PointNet 的作者使用每个对象 2500 个点我们将绘制每个数字的点的直方图来确定阈值。 from torchvision.datasets import MNIST import matplotlib.pyplot as pltdataset MNIST(root./data, trainTrue, downloadTrue) len_points [] # loop over samples for idx in range(len(dataset)):img,label dataset[idx]pc transform_img2pc(img)len_points.append(len(pc))h plt.hist(len_points) plt.title(Histogram of amount of points per number) 我们将点数固定为 200因为最大点数为 312并且大多数点都在 200 以下。我们可能面临两种情况点云高于 200 点和点云低于此阈值。 当点数超过 200 时我们将对点进行随机采样。相反我们将随机复制现有点。 最后我们将向所有产生均值为零、标准差为 0.05 的高斯噪声的点添加第三个分量 z。 让我们将数据处理包装在自定义 Dataset 类中。 from torch.utils.data import Datasetclass MNIST3D(Dataset):3D MNIST dataset.NUM_CLASSIFICATION_CLASSES 10POINT_DIMENSION 3def __init__(self, dataset, num_points):self.dataset datasetself.number_of_points num_pointsdef __len__(self):return len(self.dataset)def __getitem__(self, idx):img,label dataset[idx]pc transform_img2pc(img)if self.number_of_points-pc.shape[0]0:# Duplicate pointssampling_indices np.random.choice(pc.shape[0], self.number_of_points-pc.shape[0])new_points pc[sampling_indices, :]pc np.concatenate((pc, new_points),axis0)else:# sample pointssampling_indices np.random.choice(pc.shape[0], self.number_of_points)pc pc[sampling_indices, :]pc pc.astype(np.float32)# add znoise np.random.normal(0,0.05,len(pc))noise np.expand_dims(noise, 1)pc np.hstack([pc, noise]).astype(np.float32)pc torch.tensor(pc)return pc, label Dataset存储预处理后的样本及其相应的标签现在我们需要定义一个DataLoader来迭代训练循环中的数据。 下载 MNIST 数据后我们将连接默认分区训练和测试并将数据输入到我们的自定义 MNIST3D 数据集中。 然后我们将数据集分为训练80%、验证10%和测试10%并为每个分区生成一个 DataLoader批量大小为 128。 train_dataset MNIST(root./data/MNIST, downloadTrue, trainTrue) test_dataset MNIST(root./data/MNIST, downloadTrue, trainFalse) dataset torch.utils.data.ConcatDataset([train_dataset, test_dataset])dataset_3d MNIST3D(dataset, number_of_points) l_data len(dataset_3d) train_dataset, val_dataset, test_dataset random_split(dataset_3d,[round(0.8*l_data), round(0.1*l_data), round(0.1*l_data)],generatortorch.Generator().manual_seed(1))train_dataloader DataLoader(train_dataset, batch_size128, shuffleTrue) val_dataloader DataLoader(val_dataset, batch_size128, shuffleTrue) test_dataloader DataLoader(test_dataset, batch_size128, shuffleFalse) 最后我们绘制一些样本来检查点云是否正确生成。 你还可以使用我们笔记本的实现来生成类似上面的很酷的 3D gif。 pc train_dataset[5][0].numpy() label train_dataset[5][1] fig plt.figure(figsize[7,7]) ax plt.axes(projection3d) sc ax.scatter(pc[:,0], pc[:,1], pc[:,2], cpc[:,0] ,s80, markero, cmapviridis, alpha0.7) ax.set_zlim3d(-1, 1) plt.title(fLabel: {label}) 现在数据已经准备好了我们可以专注于模型了 2、Pointnet的体系结构和属性 PointNet由分类网络和分割网络组成。 分类网络以n个点xyz作为输入使用T-Net应用输入和特征变换然后通过最大池化聚合点特征。 输出是 k 个类别中每个类别的分类分数。 分割网络是分类网络的扩展。 它连接全局和局部特征并输出每点分数。 pointNet 的架构受到点集属性的启发它们是一些设计选择的关键……让我们来检查一下 1、无序。 与图像中的像素阵列不同点云是一组没有特定顺序的点。 要求模型需要对点的排列保持不变。解决方案使用最大池化层作为对称函数来聚合所有点的信息。 最大池化如 * 和 是对称函数因为输入的顺序不会改变结果。 2、点之间的交互。 这些点来自具有距离度量的空间。 这意味着点不是孤立的相邻点形成一个有意义的子集。 要求模型需要能够捕获附近点的局部结构。解决方案结合局部和全局特征进行分割。 3、变换下的不变性。 学习到的点集表示对于某些变换应该是不变的。 要求同时旋转和平移点不应修改全局点云类别或点的分割。解决方案使用空间转换器网络尝试在 PointNet 处理数据之前将数据转换为规范形式。 T-Net 是一种用于对齐输入点和点特征的神经网络。 可以在下面的代码中看到 T-Net输入变换和 feature_transform、最大池化MaxPool1d和特征生成局部和全局的使用。 ClassificationPointNet 返回每个点云的对数概率、损失正则化所需的特征变换以及用于绘图目的的最后两个元素tnet_out、ix_maxpool。 在下一节中我们将更详细地介绍 T-Net 的实施、它的工作原理以及提供的好处。 class BasePointNet(nn.Module):def __init__(self, point_dimension):...def forward(self, x, plotFalse):num_points x.shape[1]input_transform self.input_transform(x) # T-Net tensor [batch, 3, 3]x torch.bmm(x, input_transform) # Batch matrix-matrix product x x.transpose(2, 1) tnet_outx.cpu().detach().numpy()x F.relu(self.bn_1(self.conv_1(x)))x F.relu(self.bn_2(self.conv_2(x)))x x.transpose(2, 1)feature_transform self.feature_transform(x) # T-Net tensor [batch, 64, 64]x torch.bmm(x, feature_transform) # local point features [batch, 200, 64]x x.transpose(2, 1)x F.relu(self.bn_3(self.conv_3(x)))x F.relu(self.bn_4(self.conv_4(x)))x F.relu(self.bn_5(self.conv_5(x)))x, ix nn.MaxPool1d(num_points, return_indicesTrue)(x) # max-poolingx x.view(-1, 1024) # global feature vector [batch, 1024]return x, feature_transform, tnet_out, ixclass ClassificationPointNet(nn.Module):def __init__(self, num_classes, dropout0.3, point_dimension3):...def forward(self, x):x, feature_transform, tnet_out, ix_maxpool self.base_pointnet(x)x F.relu(self.bn_1(self.fc_1(x)))x F.relu(self.bn_2(self.fc_2(x)))x self.dropout_1(x)return F.log_softmax(self.fc_3(x), dim1), feature_transform, tnet_out, ix_maxpool 出于空间原因init 函数已被省略但您可以在笔记本中查看它们。 3、训练Pointnet 我们使用经典的 Pytorch 训练循环来训练我们的模型。 我们将学习率设置为 0.001最大 epoch 数设置为 80。您可以在上面的链接中找到 PointNet 的更轻版本在 Google Colab 中实现来使用它。 PointNet 包含多个 MLP因此它具有大量可训练参数 (3.472.339)。 PointNet 的轻量级版本是通过减少每层神经元数量来减少训练时间来实现的从而产生 910.611 个可训练参数。 该模型通过负对数似然损失 (NLL) 和正则化项进行优化使其更加稳定。 NLL 是训练具有多个类别的分类问题时的典型损失。 一旦我们看到损失已经收敛验证损失不会减少我们就可以停止训练并测试我们的模型。 Test Accuracy 0.967 Alert⚠️ 如果模型没有经过完全训练它可能无法保证排列的不变性。 3、可视化 T-Net 的输入和输出 T-Net 在特征提取之前将所有输入集对齐到规范空间。 它是如何做到的 它预测将应用于输入点 (x, y, z) 坐标的 3x3 仿射变换矩阵。 这个想法可以进一步扩展到特征空间的对齐。 在PointNet架构图中可以看到第二个T-Net预测了64x64的特征转换矩阵用于对齐来自不同输入点云的特征。 正如你在下面的代码块中看到的T-Net 由用于点无关特征提取的一维卷积层、最大池化和全连接层组成。 结果是一个变换矩阵我们直接将其应用于输入点的坐标。 class TransformationNet(nn.Module):def __init__(self, input_dim, output_dim):super(TransformationNet, self).__init__()self.output_dim output_dimself.conv_1 nn.Conv1d(input_dim, 64, 1)self.conv_2 nn.Conv1d(64, 128, 1)self.conv_3 nn.Conv1d(128, 1024, 1)self.bn_1 nn.BatchNorm1d(64)self.bn_2 nn.BatchNorm1d(128)self.bn_3 nn.BatchNorm1d(1024)self.bn_4 nn.BatchNorm1d(512)self.bn_5 nn.BatchNorm1d(256)self.fc_1 nn.Linear(1024, 512)self.fc_2 nn.Linear(512, 256)self.fc_3 nn.Linear(256, self.output_dim * self.output_dim)def forward(self, x):num_points x.shape[1]x x.transpose(2, 1)x F.relu(self.bn_1(self.conv_1(x)))x F.relu(self.bn_2(self.conv_2(x)))x F.relu(self.bn_3(self.conv_3(x)))x nn.MaxPool1d(num_points)(x)x x.view(-1, 1024)x F.relu(self.bn_4(self.fc_1(x)))x F.relu(self.bn_5(self.fc_2(x)))x self.fc_3(x)identity_matrix torch.eye(self.output_dim)if torch.cuda.is_available():identity_matrix identity_matrix.cuda()x x.view(-1, self.output_dim, self.output_dim) identity_matrixreturn x 注意 T-Net 通过学习变换矩阵将所有输入集对齐到规范空间 通过绘制 T-Net 输出乘以输入点的结果我们可以看到对输入点云执行的规范变换。 PointNet 的特性之一是它对点的排列具有不变性。 我们来测试一下 我们将打乱点并比较转换和预测。 我们将使点大小更小以更好地识别两种转换之间的差异。 我们可以看到对于这个例子使用不同的点顺序我们得到非常相似的表示和相同的预测。 所有测试样本都会保留它吗 让我们比较所有测试样本上的打乱点和非打乱点之间的预测。 (resultsresults_shuffle) False 我们从 7000 个样本测试集大小中得到 6 个样本在洗牌时得到不同的结果。 我们存储这些样本的索引以比较转换和预测。 在这里你可以看到几个示例 我们发现转换非常相似并且通过查看 T-Net 转换来猜测这些数字时我们也可能是错误的。 您认为为什么同一个模型会预测不同的数字 我们可以绘制对最大池化有贡献的点来获得一个想法。 4、可视化 PointNet 关键点 PointNet 学习通过一组稀疏的关键点作者称为关键点来总结输入点云。 关键点是那些对最大池化特征有贡献的点。 我们存储了最大池化层的索引我们绘制了混洗和非混洗点云的这些点并获得了下图 我们看到临界点集对应于数字的骨架并且在混洗和非混洗点云之间是不同的这导致模型预测一个或另一个类别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day15 课程(继承 )

day15 课程(继承 & )课程:https://www.bilibili.com/video/BV1o4411M71o?spm_id_from=333.788.videopod.episodes&p=292 15.1 了解继承------------------------------------------------ 执行后15.2 扩展…

前端安全障碍深度解析:从原理到实践的全方位防护指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

node菜单服务引起的后台异常表象到运维释放从库的数据库连接及驱动修改配置,重新部署生效

node菜单服务引起的后台异常表象到运维释放从库的数据库连接及驱动修改配置,重新部署生效node菜单服务引起的后台异常表象到运维释放从库的数据库连接及驱动修改配置,重新部署生效 1.刚开始判断是node服务挂了,jenk…

制作网站难还是编程难简约网站后台

目录 linux用户相关linux挂载网络共享文件wsl相关docker相关配置打包镜像导出镜像导入镜像window清理wsl和docker空间window查看网络中计算机的ipv4linux用户相关 添加新用户sudo adduser --home /home/<用户名> <用户名>查看权限id <用户名>添加权限sudo us…

微商本地化发展模式的借鉴与探讨——以开源AI智能名片链动2+1模式S2B2C商城小工具为例

微商本地化发展模式的借鉴与探讨——以开源AI智能名片链动2+1模式S2B2C商城小工具为例pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; …

镇江方圆建设监理咨询有限公司网站丰都县网站

——如何培养核心人才&#xff0c;使企业持续保持竞争力 【客户行业】环保行业 【问题类型】人才培养 【客户背景】 某环保有限公司成立于2002年&#xff0c;位于南方某二线城市&#xff0c;是一家以处理废弃物、废旧资源为主的设备制造的民营企业&#xff0c;拥有从事专业…

微服务网关深度设计:从Spring Cloud Gateway到Envoy,流量治理与安全认证实战指南 - 指南

微服务网关深度设计:从Spring Cloud Gateway到Envoy,流量治理与安全认证实战指南 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

网站无法做301重定向免费做流程图的网站

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

Docker 部署 RAGFlow 全流程教程

本文介绍开源下一代RAG系统RAGFlow的特点(检索增强生成、插件化设计等),详解其Docker部署前的软硬件准备、环境参数设置、镜像下载(含版本选择)、容器启动(含仓库克隆原因)、配置文件说明、搜索引擎切换及常见问…

搜狗网站优化软件网站与手机app是一体吗

spock 集成测试在Grails单元测试中&#xff0c;可以轻松使用Grails随附的Spock框架来模拟或存根协作者&#xff08;例如服务&#xff09;。 “ 测试”一章对模拟协作者&#xff0c; doWithSpring / doWithConfig回调方法&#xff0c;在测试中模拟bean的FreshRuntime批注进行了…

工程业绩在建设厅网站都能查到在线教育自助网站建设平台

基于人工电场算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于人工电场算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于人工电场优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

济南网站建设首选传承网络成都游戏软件开发公司有哪些

学习了博主的介绍&#xff08;深度学习中的FLOPs介绍及计算(注意区分FLOPS)-CSDN博客&#xff09;后&#xff0c;对我不理解的内容做了一点补充。 链接放到下边啦 https://blog.csdn.net/qq_41834400/article/details/120283103 FLOPs&#xff1a;注意s小写&#xff0c;是floa…

信用网站标准化建设商品网站做推广

目录 引入 一、Matplotlib模块&#xff08;常用&#xff09; 1、绘图流程&常用图 ​编辑 2、绘制子图&添加标注 ​编辑 3、面向对象画图 4、Pylab模块应用 二、Seaborn模块&#xff08;常用&#xff09; 1、常用图 2、代码示例 ​编辑 ​编辑 ​编辑 ​…

微信做模板下载网站中信建设有限责任公司 乔峰手机

基本思想希尔排序&#xff08;Shells Sort&#xff09;&#xff0c;以发明人命名&#xff0c;又称为缩小增量排序&#xff0c;也是一种插入排序算法。主要思想&#xff1a;直接插入排序算法时间和待排数据有关&#xff0c;其平均复杂度是O(n^2)&#xff0c;但是在待排数据已经有…

国外做做网站西安做网站程序

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 水位管理和分配优先级 页面分配…

深入解析:从零起步学习Redis || 第四章:Cache Aside Pattern(旁路缓存模式)以及优化策略

深入解析:从零起步学习Redis || 第四章:Cache Aside Pattern(旁路缓存模式)以及优化策略pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

K6的CI/CD集成在云原生应用的性能测试应用 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Python生态最优秀的webapp框架有哪些? - 教程

Python生态最优秀的webapp框架有哪些? - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

沈阳设计网站wordpress小白能学会吗

目录 接口断言介绍接口断言方式介绍响应状态码断言 课程目标 掌握什么是接口断言。了解接口断言的多种方式。掌握如何对响应状态码完成断言。 思考 这两段代码是完整的接口自动化测试代码吗&#xff1f; …省略… when().get(“https://httpbin.ceshiren.com/get?namead&…

做网上夫妻去哪个网站网站制作对公司的作用

注&#xff1a; &#xff08;1&#xff09;ddt数据驱动中&#xff0c;测试用例的执行次数是由data&#xff08;&#xff09;传参的个数决定。传几个参数&#xff0c;就是执行几次测试用例。 &#xff08;2&#xff09;如果传的是多个元组&#xff08;列表&#xff09;,那么可…