立即开始使用 3D 图像
一、说明
这个故事介绍了使用这种类型的数据来训练机器学习3D模型。特别是,我们讨论了Kaggle中可用的MNIST数据集的3D版本,以及如何使用Keras训练模型识别3D数字。
3D 数据无处不在。由于我们希望构建AI来与我们的物理世界进行交互,因此使用3D数据来训练我们的模型非常有意义。
二、3D 数据从何而来?
现在看看你周围的物体。它们是占据三维房间的三维实体,您 - 也是一个3D实体 - 此时此刻。如果这个房间里的所有东西都是静态的,我们可以将此环境建模为 3D 空间数据。
建筑扫描 — 来源
3D 数据有多种来源,例如 2D 图像序列和 3D 扫描仪数据。在这个故事中,我们开始使用来自流行MNIST数据集的合成生成的3D版本的点云来处理3D数据。
三、3D MNIST 数据集
以防万一您还不知道,MNIST是著名的2D手写数字图像集。MNIST 中的元素是小型 28x28 灰度图像。在这个故事中,我们将使用MNIST的3D版本:
MNIST 中的原始数字
修改后的3D版本
可以使用此 jupyter 笔记本生成此数据集。
增强型 MNIST 3D 中的 3D 图像是从 MNIST 中的原始 2D 图像中获得的,这些图像经过一组转换修改:
1 - 膨胀:这是堆叠 N 次相同数字图像以从 3D 数字获得 2D 身体的过程。
手写数字的放大版本 3
2 - 噪声:对每个 3D 点应用显著的高斯噪声
具有高斯噪声的相同图像
3 - 着色:MNIST 中的寄存器是灰度图像。为了使事情更具挑战性,让我们将它们转换为包含随机颜色
4 - 旋转:一旦它们是 3D 对象,我们就可以旋转它们,这就是我们要做的
具有不同旋转的相同图像
有关3D MNIST数据集的更多详细信息可以在Kaggle中找到。现在,让我们直接跳到分步过程:
四、获取和加载数据
首先要做的是:从Kaggle下载数据集文件。解压缩文件以获取 3d-mnist.h5。然后,加载数据集
简而言之,train_x 或 test_x 中的每个寄存器都是一个 16x16x16 的立方体。每个立方体保存一个 3D 数字的点云数据。您可以轻松地从数据集中提取任何寄存器:
结果如下:
事实上,这是MNIST中第3个元素的增强181D版本:
现在我们已经加载了数据集,我们可以使用它来训练我们的模型。
4.1 定义模型
我们希望训练一个模型来识别立方体中数字的 3D 表示。在规范 2D 版本的 MNIST 中用于识别手写数字的模型不适合 3D 数据集版本。因此,为了处理3D数据,有必要使用3D转换,例如卷积3D和3D最大池化。实际上,Keras支持这种类型的过滤器。
定义一个3D模型来处理我们的3D数据确实非常简单:
这是一个非常简单的模型,但可以完成这项工作。请记住,您可以在此处获取完整的源代码。
4.2 训练模型
让我们使用随机梯度下降来训练模型。随意使用您喜欢的另一个优化器(adam,RMSProp等):
model = define_model()
model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,optimizer=tensorflow.keras.optimizers.SGD(learning_rate=0.01, momentum=0.9), metrics=['accuracy'])
history = model.fit(train_X_3D, train_y, batch_size=32, epochs=4, verbose=1, validation_split=0.2)
我刚刚运行了这段代码,这是我的输出:
4.3 训练结果
这是我们的第一次审判。仅经过 4 个 epoch,我们在验证集上获得了 96.34% 的准确率!当然,对混淆矩阵进行适当的分析可以更好地理解这种性能。但是,至少在第一次运行中,这些结果是鼓舞人心的!
请注意,验证损失在 4 个 epoch 中一直在减少。显然,这列火车比必要的时间更早完成。下一次,我们可能会设置更高的纪元数量并使用更详细的停止条件。
让我们看看它在测试数据上的表现如何!
4.4 评估模型
以下是我们将如何检查性能:
score = model.evaluate(test_X_3D, test_y, verbose=0)
print('Test accuracy: %.2f%% Test loss: %.3f' % (score[1]*100, score[0]))
这是我们目前的结果:
我不得不说我真的很惊讶。这个简单的模型实现了良好的性能,即使数据几乎没有被噪声、旋转和随机颜色映射所修改。
此外,考虑到数据量和不使用 GPU,训练速度太快了!凉!
我们可以调整超参数和训练优化器,以轻松获得更好的结果。然而,高性能并不是我们的目标。
我们学习了如何使用3D卷积,现在我们知道如何创建简单但功能强大的CNN网络来处理我们的3D数据。
五、下一步是
下一步是训练模型以识别从 4D 图像时间序列生成的 3D 数据中的事件。敬请期待!
相关文章:

立即开始使用 3D 图像
一、说明 这个故事介绍了使用这种类型的数据来训练机器学习3D模型。特别是,我们讨论了Kaggle中可用的MNIST数据集的3D版本,以及如何使用Keras训练模型识别3D数字。 3D 数据无处不在。由于我们希望构建AI来与我们的物理世界进行交互,因此使用3…...

鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统em
Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目…...

《向量数据库》——怎么安装向量检索库Faiss?
装 Faiss 以下教程将展示如何在 Linux 系统上安装 Faiss: 1. 安装 Conda。 在安装 Faiss 之前,先在系统上安装 Conda。Conda 是一个开源软件包和环境管理系统,可在 Windows、macOS 和 Linux 操作系统上运行。根据以下步骤在 Linux 系统上安装 Conda。 2. 从官网…...
学习pytorch 2 导入查看dataset
学习pytorch 2 2. dataset实战代码数据集 2. dataset实战 B站小土堆视频 代码 from torch.utils.data import Dataset from PIL import Image #import cv2 import osclass MyData(Dataset):def __init__(self, root_dir, label_dir):self.root_dir root_dirself.label_dir …...
三、kubeadm部署单Master节点kubernetes集群
kubeadm部署单Master节点kubernetes集群 一、kubernetes 1.21发布 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sGgnZuno-1691633861803)(kubeadm部署单Master节点kubernetes集群 1.21.0.assets/image-20220119160108054.png)] 1.1 介绍 2021年…...

js-6:typeof和instanceof的区别
1、typeof typeof操作符返回一个字符串,表示未经计算的操作数的类型。 operand表示对象或原始值的表达式,其类型将被返回。 从上面的例子可以看出,前6个都是基础数据类型,虽然typeof null为object,但这只是javascrip…...

SQL SERVER 异地备份到远程共享文件夹异常处理
SQL SERVER 异地备份到远程共享文件夹异常处理 SQL Server 异地备份到远程共享文件夹异常处理 - 灰信网(软件开发博客聚合) -- 允许配置高级选项 EXEC sp_configure show advanced options, 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell EXEC sp…...

服务器数据恢复-RAID5上层Hyper-V虚拟机数据恢复案例
服务器数据恢复环境: 一台Windows Server服务器,部署Hyper-V虚拟化环境,虚拟机的硬盘文件和配置文件存放在一台DELL存储中。该存储中有一组由4块硬盘组建的RAID5阵列,用来存放虚拟机的数据文件,另外还有一块大容量硬盘…...

Easy Rules规则引擎(1-基础篇)
目录 一、序言二、Easy Rules介绍三、定义规则(Rules)1、规则介绍2、编程式规则定义3、声明式规则定义 四、定义事实(Facts)五、定义规则引擎(Rules Engine)1、规则引擎介绍2、InferenceRulesEngine规则引擎示例(1) 定义触发条件(2) 定义规则触发后的执行行为(3) 测试用例 一、…...

Linux 上安装部署Nacos
标题:在Linux上安装和部署Nacos Nacos是一个开源的分布式服务发现和配置管理平台,它可以帮助开发人员实现微服务架构中的服务注册、发现和动态配置管理。 步骤1:准备工作 在开始安装Nacos之前,确保您已经具备以下条件࿱…...
电动机的启动
1电动机启动分类 电动机启动方式包括:全压直接启动、自耦减压启动、Y-Δ 启动、软启动器、变频器。其中软启动器和变频器启动为潮流。当然也不是一定要使用软启动器和变频器启动,在运用的时候根据实际情况,从经济和适用性自行考虑选择。 2电…...

python性能分析,logging性能,print性能,文件写入性能对比
先说结论,没想到的是print性能比logging性能好,输出到控制台会极大降低程序性能,以下是我的性能对比结果: 运行情况是python后台运行并输出到日志,命令是 python3 test.py > /opt/testtime.log 2>&1 &...
[GIN-debug] [ERROR] listen tcp: address 8080: missing port in address
学习Golang_gin框架的第一天 遇到一下报错 : [GIN-debug] [ERROR] listen tcp: address 8080: missing port in address 错误代码 : package mainimport "github.com/gin-gonic/gin"func main() {router : gin.Default()router.GET("/index", func…...

PHP codeigniter4 搭配Nginx
> 主要是为了用Nginx运行PHP环境 1. Nginx 官方文档的配置 default.conf This configuration enables URLs without “index.php” in them and using CodeIgniter’s “404 - File Not Found” for URLs ending with “.php”. server {listen 80;listen [::]:80;se…...

AWS——04篇(AWS之Amazon S3(云中可扩展存储)-02——EC2访问S3存储桶)
AWS——04篇(AWS之Amazon S3(云中可扩展存储)-02——EC2访问S3存储桶) 1. 前言2. 创建EC2实例 S3存储桶3. 创建IAM角色4. 修改EC2的IAM 角色5. 连接EC2查看效果5.1 连接EC25.2 简单测试5.2.1 查看桶内存储情况5.2.2 复制本地文件…...

.netcore下grpc概述
一、什么是grpc 是一种与语言无关的高性能远程过程调用 (RPC) 框架。基于http/2标准设计,提供了头部压缩、tcp连接上的多路复用、流量控制、流式处理(客户端流/服务端流/双向流)。提供统一使用的.proto文件,它定义 grpc 服务和消…...
Address already in use
netstat -tunllp netstat -tunllp 命令是用来查看系统上所有的网络连接和监听端口,包括 TCP 和 UDP 连接。这个命令的选项含义如下: -t: 显示 TCP 连接-u: 显示 UDP 连接-n: 不进行主机名和服务名的解析,直接显示数字形式的 IP 地址和端口号…...

♥ vue中$set用法详细讲解
♥ vue中$set用法详细讲解 1、认识 在vue中,并不是任何时候数据都是双向绑定的。 官方文档介绍 使用场景 当数据没有被双向绑定的时候,我们就需要使用set了 举个例子: vue的data里边声明或者已经赋值过的对象或者数组(数组里…...

岩土工程仪器多通道振弦传感器信号转换器应用于桥梁安全监测
岩土工程仪器多通道振弦传感器信号转换器应用于桥梁安全监测 桥梁作为交通运输的重要节点,其安全性一直备受关注。不同于其他建筑物,桥梁所处的环境复杂多变,同时,其所需承受的负荷也相对较大,这就需要对桥梁的安全进…...

企业权限管理(六)-订单详情
订单详情查询 跳转到订单详情页面orders-show.jsp <button type"button" class"btn bg-olive btn-xs" onclick"location.href${pageContext.request.contextPath}/orders/findById.do?id${orders.id}">详情</button>OrdersControl…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器
从本章节开始,进入到函数有多个参数的情况,前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参,ECX是整型的第一个参数的寄存器,那么多个参数的情况下函数如何传参,下面展开介绍参数为整型时候的几种情…...