PyTorch3D 立体隐式形状渲染:教你构建场景 3D 结构

混合隐式特征:哈希网格与面元特征的高效3D重建方案 3D重建是计算机视觉与计算机图形学的核心任务,旨在从二维图像恢复三维场景的几何与外观。传统显式方法(如点云、体素)效率高但细节粗糙,而纯隐式方法(如神经辐射场NeRF)虽能生成连续、高保真的结果,却面临训练慢、内存消耗大的瓶颈。其技术价值在于通过高效的显式数据结构来参数化隐式函数,从而在保持高质量的同时,大幅提升计算与存储效率。这一思路在数字孪生、AR/VR内容生成、文化遗产数字化等应用场景中至关重要。本文聚焦的混合隐式特征方案,创新性地结合了哈希网格与面元特征,前者通过多分辨率哈希表实现快速空间编码,后者 阅读详情

内容导读

3D 深度学习一直是机器视觉领域的难点,为了准确高效地建立场景的立体模型,得到相对真实的渲染成果,行业内的一些大厂先后开源了自己的研发成果。

本文首发自微信公众号「PyTorch 开发者社区」

随着计算机视觉领域相关技术的发展,针对 2D 图像的处理效率和精度得到了显著地提升。

但是现实环境中,物体多以 3D 立体结构的形式存在,如何准确地提升 AI 系统对复杂现实环境的感知和理解能力,正确处理 3D 图像, 正在成为日趋关键的技术难点。

2019 年 Facebook AI 发布 Mesh R-CNN 模型进行 3D 目标检测与形状预测

2020 年 1 月 23 日,Facebook AI 发布了 PyTorch3D v0.1.0 版本。PyTorch3D 是 PyTorch 中经过优化的、高效、可重用组件库,它具有 3 大突出特点:高效、模块化和可微分,旨在简化在 PyTorch 中进行 3D 深度学习的难度。

PyTorch3D 中提供了 3D 算子和渲染两大组件。

在 3D 算子中,Fit Mesh 可以利用 3D 损失函数,把初始的通用形状变形为目标形状,并借助一些规则让目标形状变得更为流畅。 而 3D 算子中的光束平差法(Bundle Adjustment),则提供了 cameras、transforms、so3 共计 3 个 API,根据给定相机的视角,形成对照相机视角的映射,从而推断场景的 3D 结构。

渲染则包括纹理网格渲染器(Render Textured Meshes)、DensePose 网格渲染器(Render DensePose Meshed)、彩色点云渲染器(Render Colored Pointclouds)等, 借助这些渲染器,可以进一步优化形成的场景 3D 结构。

2020 年 2 月 6 日,PyTorch3D 相关代码在 GitHub 开源。经过 5 个版本的迭代后,2021 年 2 月 9 日,PyTorch3D 发布第 6 个公开版本 v0.4.0,** 新增隐函数、立体渲染和 NeRF 重新实现等功能,**为 3D 深度学习研究提供了更迅速、更灵活的开源库。

图为 PyTorch3D logo,由 PyTorch3D 的隐式立体渲染器生成的

隐式形状渲染(Implicit Shape Rendering)

隐式形状渲染是指基于输入场景的新视角,生成 3D 场景的真实渲染,其核心思想是利用神经网络与可微分渲染,重建 3D 场景表面的隐式形态, 这使得仅依靠 2D 视图就可以学习 3D 场景中的几何形状。

进行隐式形状渲染需要几个关键组件,包括数据卷的抽象类(abstraction for volume data)以及可微分的隐式形状渲染器。

为了让行业从业者更容易地针对隐式形状渲染进行尝试,PyTorch3D 已经为用户提供了一系列常用的 3D 算子(3D operators)和损失函数,以及一个模块化、可微分的渲染 API。 在指出核心可重用组件的同时,也提供了这些组件经验证的、标准化实现方法。

在 PyTorch3D v0.4.0 中,包括 5 个支持隐式形状渲染的新特性:

1、新增数据卷结构(Volumes data structure),支持 3D 卷的批处理和坐标框架之间的转换;

2、新增多个光线纹理实现方法:

GridRaysampler

MonteCarloRaysampler

NDCGridRaysampler

3、新增多个 Raymarcher 实现方法:

AbsorptionOnlyRaymarcher

EmissionAbsorptionRaymarcher

4、新增隐式渲染器(ImplicitRenderer)和体积渲染器(VolumeRenderer)API,构成 Raysampler 和 Raymarcher

5、新增多个效用函数,如点云到体积的可微分转换。

利用 PyTorch3D 生成的甜甜圈 3D 图像

要使用这些新组件,可以借助一个模块化、文档完备的 NeRF 重新实现。
NeRF 是一个深度学习模型, 由 Google Research 团队开发,旨在借助神经辐射场(Neural Radiance Fields)表示场景,从而进行视图合成(View Synthesis)。
NeRF 仅使用非结构化图像集合,就能合成复杂的 3D 场景图。

而改良版的 NeRF 重新实现,性能得到了极大提升,在保证输出图像质量的同时,比正式版本运行得更快。

使用 PyTorch3D 的 NeRF 重新实现功能,生成了形状和光影复杂的 3D 图像示例

教程(Fit Textured Volume)

我们基于 PyTorch3D GitHub 官方教程 Fit Textured Volume,进行了汉化和整理,演示如何在 PyTorch3D 中,利用可微分立体渲染,依据给定场景的一组视图,预测场景的立体结构。

用 Raymarching 构建场景 3D 立体结构

本教程将介绍:

  • 如何创建一个可微分的立体渲染器;
  • 如何创建一个立体模型(包括如何使用 Volumes 类);
  • 使用可微分的立体渲染器,根据图像拟合立体结构;
  • 将预测的立体结构可视化。

备注:限于篇幅有限,本文仅展示部分代码,完整代码请移步:

https://openbayes.com/console/openbayes/containers/oAYzp70wwPk/overview

0. 安装和导入模块

确保已安装 torch 和 torchvision 。

如果没有安装 pytorch3d ,请使用以下代码安装。

1. 生成场景及 mask 的图像

以下代码将生成本次训练数据。它会通过 fit_textured_mesh.ipynb 教程,从多个角度渲染奶牛图像,并返回以下内容:

一系列由奶牛网格渲染器生成的图像及其剪影的张量;与所有摄像机镜头一一对应的渲染器。

备注:在 generate_cow_renders 函数中实现网格渲染的工作原理请参考:
fit_textured_mesh.ipynb

target_cameras, target_images, target_silhouettes = generate_cow_renders(num_views=40)
print(f'Generated {len(target_images)} images/silhouettes/cameras.')

2. 初始化体积渲染器

初始化体积渲染器会从目标图像的每个像素发出一条射线,并沿射线采样一组间隔均匀的点。与每个射线点相对应的密度值和色值,可通过查询场景的体积模型中的相应位置获得。
渲染器由一个 raymarcher 和一个 raysampler 构成。

raysampler 负责从图像像素中发射射线,并沿着射线对点进行取样。此处使用的是 NDCGridRaysampler ,它符合标准的 PyTorch3D 坐标网格规范。

raymarcher 获得射线采样的密度和颜色,并将所有射线渲染成光线源像素的颜色和不透明度值。此处使用的是 EmissionAbsorptionRaymarcher ,它实现了标准的 Emission-Absorption Raymarching 算法。

# render_size 表示渲染图像各个边的像素大小,将其设置为与目标图像尺寸一致
# 也就是说将其渲染成与基准图像一样的尺寸
render_size = target_images.shape[1]

# 渲染场景以(0,0,0)为中心,被限定在一个边长约等于 3.0 (国际单位)的边框内。
volume_extent_world = 3.0

# 1) 实例化 raysampler
# 此处 NDCGridRaysampler 会生成一矩形图像网格的射线,其坐标遵循 pytorch3d 坐标规定
# 由于此处设定的体积是 128^3,因此取样 n_pts_per_ray=150
# 大致相当于每个体素都有一个射线点
# 进一步设置 min_depth=0.1,因为相机平面内的所有表面都超过了 0.1 单位
raysampler = NDCGridRaysampler(
    image_width=render_size,
    image_height=render_size,
    n_pts_per_ray=150,
    min_depth=0.1,
    max_depth=volume_extent_world,
)


# 2) 实例化 raymarcher.
# 此处用的是标准 EmissionAbsorptionRaymarcher 
# 它会沿着每条射线前进
# 将每条射线都渲染成一个单一的 3D 颜色向量和一个不透明度标量
raymarcher = EmissionAbsorptionRaymarcher()

# 最后,用 raysampler 和 raymarcher 实例化体积渲染器
renderer = VolumeRenderer(
    raysampler=raysampler, raymarcher=raymarcher,
)

3. 初始化体积模型

接下来实例化场景的体积模型。这会使得 3D 空间量化为体积像素,其中每个体素都用体素 RGB 颜色的 3D 向量,和描述体素不透明度的密度标量(范围在[0-1]之间,数字越大不透明越高)来表示。

为了保证密度和颜色的取值范围在 [0-1] 之间,我们会在对数空间中表示体积颜色和密度。模型运行 forward 函数时, log-space 值会通过 sigmoid 函数传递,从而使得 log-space 值处于正确的取值范围。

此外, VolumeModel 还包含渲染器对象。这个对象在整个优化过程中保持不变。

本部分代码还定义了 huber 损失函数,它可以计算出渲染色和 mask 之间的差异。

4. 体积拟合

这一步,我们用可微分渲染来进行体积拟合。

为了拟合体积,我们从 target_camera 的视角进行渲染,并将渲染结果与观察到的 target_images 和 target_silhouettes 进行对比。

这种对比是通过评估的 target_images/rendered_images 和 target_silhouettes/rendered_silhouettes 之间的平均 huber(smooth-l1)误差来完成的。

5. 将优化后的场景体积进行可视化

最后,旋转场景体积的 y 轴,从多个视点进行渲染,将优化后的体积进行可视化。

def generate_rotating_volume(volume_model, n_frames = 50):
    logRs = torch.zeros(n_frames, 3, device=device)
    logRs[:, 1] = torch.linspace(0.0, 2.0 * 3.14, n_frames, device=device)
    Rs = so3_exponential_map(logRs)
    Ts = torch.zeros(n_frames, 3, device=device)
    Ts[:, 2] = 2.7
    frames = []
    print('Generating rotating volume ...')
    for R, T in zip(tqdm(Rs), Ts):
        camera = FoVPerspectiveCameras(
            R=R[None], 
            T=T[None], 
            znear = target_cameras.znear[0],
            zfar = target_cameras.zfar[0],
            aspect_ratio = target_cameras.aspect_ratio[0],
            fov = target_cameras.fov[0],
            device=device,
        )
        frames.append(volume_model(camera)[..., :3].clamp(0.0, 1.0))
    return torch.cat(frames)
    
with torch.no_grad():
    rotating_volume_frames = generate_rotating_volume(volume_model, n_frames=7*4)

image_grid(rotating_volume_frames.clamp(0., 1.).cpu().numpy(), rows=4, cols=7, rgb=True, fill=True)
plt.show()

6. 结论

本教程中演示了如何优化场景的 3D 立体构造,使已知视点的体积渲染与每个视点的观测图像相匹配。

教程中的渲染是使用 NDCGridRaysampler 和 EmissionAbsorptionRaymarcher 构成的 PyTorch3D 立体渲染器完成的。

为 2D 图像构建有纹理的立体形状

完整教程请查看: https://openbayes.com/console/openbayes/containers/oAYzp70wwPk/overview

参考:

https://ai.facebook.com/blog/-introducing-pytorch3d-an-open-source-library-for-3d-deep-learning/

https://github.com/facebookresearch/pytorch3d

在这里插入图片描述

Bundle Adjustment算法:原理、应用及编程实现 Bundle Adjustment算法:原理、应用及编程实现Bundle Adjustment(捆绑调整)是一种用于多视图立体重建的优化算法,用于精确估计相机姿态和三维点云的位置。在计算机视觉领域,Bundle Adjustment被广泛应用于三维重建、SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)、增强现实等任务。本篇文章将详细介绍Bundle Adjustment的原理和应用,并提供相应的编程实现。以下是Python示例代码。 阅读详情

相关推荐

Marching_Cubes算法原理

Marching_Cubes算法原理。根据体数据提取等值面~

Pytorch3d 使用pytorch3d.renderer.PerspectiveCameras

使用自己的相机参数,记得设置in_ndc=False。主要区别在于image_size=部分的写法。

so 1280

实践指南——【SPSS操作解析】线性混合效应模型在重复测量数据中的应用

本文详细解析了线性混合效应模型在重复测量数据分析中的应用,并提供了SPSS操作指南。文章阐述了该模型如何通过区分固定效应与随机效应,有效处理数据非独立性和缺失值问题,从而获得更可靠的统计推断。

oo7890的博客 551

Pytorch中实现CUDA加速【来自AI葵 pytorch-cppcuda-tutorial】

【本教程主要参考自kwea123】 GitHub - kwea123/pytorch-cppcuda-tutorial: tutorial for writing custom pytorch cpp+cuda kernel, applied on volume rendering (NeRF) 目的 实现GPU加速计算,场景有非平行运算和大量串行运算两种,本教程主要针对第一种如体素渲染的应用。 非平行运算:像体素渲染那样的,由于每次采样点个数不一样,计算过程有差别,但有相似性又需要大量重复计算。(对比像神

RobinA380的博客 1382

Xshell 连接 VMware虚拟机操作 截图和使用

vmwareVMware总部位于美国加州帕洛阿尔托(Palo Alto),是全球云基础架构和移动商务解决方案厂商,提供基于VMware的解决方案,企业通过数据中心改造和公有云整合业务,借助企业安全转型维系客户信任,实现任意云端和设备上运行、管理、连接及保护任意应用Xshell(安全终端模拟软件)Xshell [1]是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。

小 tom的博客 802

unet学习笔记(milesial/Pytorch-UNet)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 unet学习笔记(milesial/Pytorch-UNet)原理讲解unet_parts.py内容predict.py内容 所用到的代码Pytorch-UNet/predict.py at master · milesial/Pytorch-UNet ·GitHub 原理讲解 蓝/白色框表示 feature map; 蓝色箭头表示 3x3 卷积,用于特征提取; 灰色箭头表示skip-connection,用于特征融合; 红色箭头.

weixin_67138138的博客 2553

3D视觉入门:PointNet实现点云分类的Pytorch版本(计算机视觉丨深度学习丨三维重建丨OpenCV丨机器学习)

无序性:设点云集合为 ( S = {p_1, p_2, \dots, p_n} ),满足 ( S = {\pi(p_1), \pi(p_2), \dots, \pi(p_n)} ) 对任意排列 ( \pi ) 成立,要求模型输出与输入顺序无关。稀疏性:三维空间中采样点分布密度 ( \rho§ ) 服从非均匀分布,传统体素化方法会导致信息丢失与计算冗余。非结构化:点间缺乏显式连接关系,无法直接应用基于网格的局部特征提取算子。

2501_91798322的博客 1034

【AI Agent系列】【阿里AgentScope框架】深入源码:Msg是如何转变成模型需要的Prompt形式的?多模态Prompt如何构建?

前面咱们学习AgentScope,在使用Agent来对话时,输入为一个 Msg 对象,不能是字符串,然后在Agent内部,会将Msg对象转换为模型接受的Prompt。那 AgentScope 如何根据 Msg 形成相应模型接收的Prompt结构的?如何使用 Msg 带入更多的参数,传递给大模型呢?

同学小张的博客 1534

Ideogram-4-nf4 多语言文本渲染:为什么它在OCR测试中领先

Ideogram-4-nf4是Ideogram AI推出的首个开源权重文本到图像生成模型,以其卓越的多语言文本渲染能力在OCR测试中表现突出。这款前沿的图像生成模型采用完全从头训练的Diffusion Transformer架构,在9.3B参数规模下实现了业界领先的文本渲染质量,特别是在多语言文字生成方面展现出惊人能力。😊 ## 📊 为什么Ideogram-4-nf4在OCR测试中领先?

gitblog_00960的博客 413

Qt垂直滚动条QVerticalScrollBar详解:从基础到实战的控件开发指南

本文系统解析Qt中QVerticalScrollBar的用法,从基础概念到进阶技巧。主要内容包括:1)基础认知:介绍其继承关系、作用及典型应用场景;2)核心用法:创建方法、关键属性配置和信号槽连接;3)进阶技巧:自定义样式表美化外观,以及与自定义内容区域的联动实现;4)实战注意事项,如避免循环触发和高DPI适配等。文章强调掌握QVerticalScrollBar对提升Qt滚动类功能开发效率的重要性,并建议通过自定义文本编辑器实践巩固知识点。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 759

YOLOv9改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题

本文记录的是改进YOLOv9的损失函数,将其替换成Slide Loss,并详细说明了优化原因,注意事项等。Slide Loss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本相对稀疏,可尝试使用Slide Loss来提高模型在处理复杂样本时的性能。

Limiiiing的博客 2600

Face3D.ai Pro与PyTorch3D结合:高级3D面部编辑技术

本文介绍了如何在星图GPU平台自动化部署🎭 Face3D.ai Pro镜像,实现高级3D面部编辑功能。该镜像结合PyTorch3D,支持从单张照片生成高质量3D人脸模型,并应用于影视特效、游戏角色创建等场景,大幅简化3D内容制作流程。

weixin_35755562的博客 360

【ComfyUI】FluxKontext 身形调优与体态增强

AI身形调优与体态增强解决方案 该工作流通过Flux系列模型实现人物体态的智能化增强,主要特点包括: 采用UNet主体模型+双文本编码器+身形增强LoRA的架构组合 通过ReferenceLatent保持原始姿态的同时强化胸腰臀比例 完整工作流包含图像加载、文本编码、潜空间映射等8个核心节点 支持自动化的前后效果对比展示 应用优势: 保持人物自然姿态的前提下实现局部强化 支持通过Prompt精确控制增强方向 适用于摄影后期、角色美化等创作场景 输出效果稳定且风格统一 使用方

Mr数据杨 1298

3D建模新体验:FaceRecon-3D让自拍变立体人脸

本文介绍了如何在星图GPU平台上一键自动化部署🎭 FaceRecon-3D镜像,实现单张自拍照片的快速3D人脸重建。该系统能生成高质量的3D模型和UV纹理贴图,可广泛应用于虚拟角色创建、影视特效制作等场景,为用户提供便捷高效的3D建模新体验。

weixin_35751412的博客 85

AutoClip AI视频剪辑工具:Docker一键部署指南

摘要:AutoClip是一个基于Docker容器化部署的智能视频剪辑系统,采用微服务架构设计,包含Web界面、后端API、异步任务处理和Redis缓存等组件。系统支持一键快速部署,提供完整的监控和日志功能,最低要求4GB内存和10GB存储空间。部署过程仅需三个步骤:克隆代码、配置环境变量、启动容器服务。生产环境支持性能调优、数据持久化和网络安全管理。该系统解决了环境配置难题,实现"一次配置,到处运行"的目标,适合需要自动化视频处理的用户。

wjianwei666的专栏 1008

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

FaceRecon-3D作品集:看看AI如何还原真实人脸

本文介绍了如何在星图GPU平台上一键自动化部署🎭 FaceRecon-3D - 单图3D人脸重建系统镜像,实现从单张2D照片快速生成精细3D人脸模型。该系统可广泛应用于虚拟角色创建、游戏开发和虚拟试妆等场景,为用户提供高效、高质量的3D建模解决方案。

weixin_35756690的博客 1087

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

FaceRecon-3D多场景落地:直播平台虚拟形象实时3D建模技术方案

本文介绍了如何在星图GPU平台上自动化部署FaceRecon-3D单图3D人脸重建系统镜像,实现直播场景中虚拟形象的快速创建。该技术通过单张照片即可在几秒内生成高质量3D人脸模型,并实时驱动虚拟形象表情,大幅降低了直播行业使用3D虚拟形象的技术门槛和成本。

weixin_42284380的博客 298

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

FaceRecon-3D对比测评:看看它重建的3D人脸多精细

本文介绍了如何在星图GPU平台上一键自动化部署🎭 FaceRecon-3D - 单图3D人脸重建系统镜像,实现从单张照片快速生成精细3D人脸模型。该技术可广泛应用于虚拟形象制作、游戏角色生成及个性化表情包开发等场景,大幅降低3D内容创作门槛,提升数字内容生产效率。

weixin_31688273的博客 369

FaceRecon-3D商业应用:电商3D商品展示实战案例

本文介绍了如何在星图GPU平台自动化部署🎭 FaceRecon-3D - 单图3D人脸重建系统镜像,实现电商领域的3D商品展示应用。该技术能够从单张照片快速生成高精度3D人脸模型,典型应用于虚拟试妆、眼镜试戴等场景,显著提升用户体验和购买转化率。

weixin_42388898的博客 335

小白也能玩转3D建模:FaceRecon-3D快速入门

本文介绍了如何在星图GPU平台自动化部署🎭 FaceRecon-3D - 单图 3D 人脸重建系统镜像,实现从单张照片快速生成3D人脸模型。该系统简化了传统3D建模流程,用户只需上传照片即可自动完成重建,适用于虚拟角色创建、游戏建模、虚拟试妆等应用场景,大幅降低了3D人脸重建的技术门槛。

weixin_42510201的博客 329

FaceRecon-3D效果展示:看AI如何还原你的3D面部细节

本文介绍了如何在星图GPU平台上自动化部署🎭 FaceRecon-3D - 单图 3D 人脸重建系统镜像,仅需上传一张普通自拍,即可在数秒内生成高保真UV纹理贴图,广泛应用于3D数字人建模、动画绑定及AIGC内容创作等专业场景。

weixin_26805451的博客 106

3D点云技术解析:从基础概念到前沿应用场景

本文系统解析了3D点云技术,从其作为记录三维世界形状与结构的离散点集基础概念讲起,对比了点云、网格和体素三种3D数据形式的特点。文章重点探讨了3D点云在自动驾驶、工业检测、数字孪生、文化遗产保护及机器人感知等前沿应用场景中的核心作用,并介绍了从预处理到深度学习的关键处理流程与工具,展望了多模态融合与神经渲染等未来趋势。

weixin_29064103的博客 447

FaceRecon-3D入门必看:从照片到3D模型的魔法

本文介绍了如何在星图GPU平台上一键自动化部署🎭 FaceRecon-3D - 单图 3D 人脸重建系统镜像,实现从单张照片快速生成高精度3D人脸模型。该技术可广泛应用于游戏角色制作、影视数字替身创建及虚拟试妆等场景,大幅降低3D内容创作的技术门槛与时间成本。

weixin_33481022的博客 97

3D打印人脸模型:用FaceRecon-3D轻松搞定

本文介绍了如何在星图GPU平台上一键自动化部署🎭 FaceRecon-3D镜像,实现单张图片的3D人脸重建。该系统能将普通照片快速转换为精细的3D模型,适用于3D打印个性化人脸模型、虚拟形象创建等场景,极大降低了3D建模的技术门槛和应用成本。

weixin_33298352的博客 331

FaceRecon-3D创意玩法:用自拍制作个性化3D头像

本文介绍了如何在星图GPU平台上一键自动化部署🎭 FaceRecon-3D - 单图3D人脸重建系统镜像,快速将自拍照片转化为精细的3D头像模型。该技术可广泛应用于个性化虚拟头像制作、游戏角色创建及社交媒体形象设计,为用户提供高效、便捷的3D内容生成体验。

weixin_35899324的博客 423

FaceRecon-3D新手指南:轻松制作3D人脸模型

本文介绍了如何在星图GPU平台自动化部署🎭 FaceRecon-3D - 单图3D人脸重建系统镜像,快速实现从2D照片生成精细3D人脸模型。该工具可应用于虚拟形象制作、游戏角色开发等场景,通过简单的可视化界面操作,用户无需专业知识即可轻松创建专业级3D人脸资产。

weixin_36064575的博客 414
上一篇: 她们用实力,打破了科技圈的女性职场天花板
下一篇: 人脸识别对动画无效,迪士尼打造动画专用人脸识别库
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值