立即开始使用 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 训练模型

让我们使用随机梯度下降来训练模型。随意使用您喜欢的另一个优化器(adamRMSProp等):

ax 复制代码
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 评估模型

以下是我们将如何检查性能:

ax 复制代码
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 数据中的事件。敬请期待!

相关推荐
迅筑科技-RPT2 小时前
达索系统第7代解决方案3D UNIV+RSES——释放企业数据潜能,拥抱更值得信赖的工业AI
3d·ai·达索系统·迅筑科技·3d univ+rses
中科米堆3 小时前
3D扫描仪如何悄悄改变我们的生活?
3d·自动化·3d全尺寸检测
qyr67895 小时前
深度解析:3D细胞培养透明化试剂供应链与主要制造商分布
大数据·人工智能·3d·市场分析·市场报告·3d细胞培养·细胞培养
renhongxia16 小时前
AI算法实战:逻辑回归在风控场景中的应用
人工智能·深度学习·算法·机器学习·信息可视化·语言模型·逻辑回归
cskywit7 小时前
破解红外“魅影”难题:WMRNet 如何以频率分析与二阶差分重塑小目标检测?
人工智能·深度学习
旅途中的宽~7 小时前
【深度学习】通过nohup后台运行训练命令后,如何通过日志文件反向查找并终止进程?
linux·深度学习
zy_destiny8 小时前
【工业场景】用YOLOv26实现桥梁检测
人工智能·深度学习·yolo·机器学习·计算机视觉·目标跟踪
power 雀儿9 小时前
Transformer输入嵌入与绝对位置编码
人工智能·深度学习·transformer
薛不痒9 小时前
深度学习的补充:神经网络处理回归问题(人脸关键点识别)&自然语言处理的介绍
深度学习·神经网络·回归
CG_MAGIC9 小时前
高模到低模烘焙避坑:ZBrush+SP+3D软件通用解决方案
3d·贴图·zbrush·建模教程·渲云渲染