【三维几何学习】MeshCNN: A Network with an Edge

news2024/9/23 19:27:16

MeshCNN

  • 引言
  • 一、方法简述
    • 1.1 输入
    • 1.2 卷积
    • 1.3 池化
  • 二、实验分析
  • 三、改进以及应用

在这里插入图片描述

引言

MeshCNN是第一个将网格简化引入到池化操作中的网络:合并顶点降低网格分辨率,类似图像中的平均池化。

主页1:https://ranahanocka.github.io/MeshCNN/
比较详细的讲解2:基于MeshCNN和PyTorch的三维对象分类和分割

一、方法简述

主要有三个内容:输入、卷积和池化
网络结构类似ResNet、UNet,使用交叉熵损失函数,网络初始化、训练策略等具体细节可参考源码

1.1 输入

在这里插入图片描述

边的特征(五维):二面角、两个内角(排序)、两个边长比(排序)。使用排序解决顺序模糊性并保证不变性。
较重要的代码就是构造网格边的GEMM,其计算边特征也是基于此矩阵

def build_gemm(mesh, faces, face_areas):
    """
    gemm_edges: array (#E x 4) of the 4 one-ring neighbors for each edge
    sides: array (#E x 4) indices (values of: 0,1,2,3) indicating where an edge is in the gemm_edge entry of the 4 neighboring edges
    for example edge i -> gemm_edges[gemm_edges[i], sides[i]] == [i, i, i, i]
    """
    ## 具体省略

1.2 卷积

在这里插入图片描述 翻转-> 在这里插入图片描述

其一个边与周围四个边的卷积为 e ⋅ k 0 + ∑ j = 1 4 k j ⋅ e j e\cdot k_0+\sum_{j=1}^4k_j\cdot e^j ek0+j=14kjej。其中 e j e^j ej的计算方式如下:
在这里插入图片描述

# apply the symmetric functions for an equivariant conv
x_1 = f[:, :, :, 1] + f[:, :, :, 3]
x_2 = f[:, :, :, 2] + f[:, :, :, 4]
x_3 = torch.abs(f[:, :, :, 1] - f[:, :, :, 3])
x_4 = torch.abs(f[:, :, :, 2] - f[:, :, :, 4])
f = torch.stack([f[:, :, :, 0], x_1, x_2, x_3, x_4], dim=3)

其对边上不明确的对应关系用一组简单的对称函数。但是个人感觉就对称意义上来说并不如max、avg或者sum。

  • max、avg或sum都可以保证输出与边的顺序无关。但是MeshCNN的方法还是有歧义性: e 1 = ∣ a − c ∣ e^1=|a-c| e1=ac,将网格面翻转 e 1 = ∣ b − d ∣ ? e^1=|b-d|? e1=bd? 起始边的选取会影响其结果 或者说 在三维空间中,顺时针和逆时针都是相对而言的
  • SubdivNet3:Subdivision-Based Mesh Convolution Networks 中的面卷积考虑到了以上情况,使用sum解决了以上问题
  • 还有一种排序式的面卷积网络4:Face-Based CNN on Triangular Mesh with Arbitrary Connectivity,并没有使用对称函数也能取得不错的结果,与SubdivNet3的深度优先遍历不同,其使用广度优先遍历网格面

1.3 池化

在这里插入图片描述
上图已表述清楚,实质上就是边之间的平均池化。但是实现代码略复杂,不仅仅是塌边的顺序和特征平均,还有网格结构的更新,并且要考虑合并是否会出现非流形面。

  • MeshCNN的设置是不允许非流形面的出现:这与可学习的塌边会产生一定的冲突。
  • Face-Based CNN4中的面池化允许非流形面的出现,消融实验表明其确实可以略微提点,但是会限制池化操作。如果产生了太多非流形面,势必会影响后续网格上的卷积和池化。
  • SubdivNet3则更贴近2D图像的池化,并且可以并行。个人感觉比以上方法更优雅,就是需要对网格进行预处理,使其具备细分连接性。

二、实验分析

使用其官方代码,对其结果进行简单复现:

方法SHREC11 Split10Chairs
MeshCNN-复现9395
无池化9193
论文数据9199
  • 试了几次,在SHREC11 分类上比论文中的精度高,在Chairs 上精度较低,也许是训练参数问题(官方没有提供此数据训练参数和预训练模型)
  • 关于池化,由于其池化操作是串行的,计算速度很慢,MeshCNN都是在较低分辨率的网格上进行实验,池化也确实有效。但是继续降低分辨率效果是否会更好?是否就不需要池化操作了?很有意思…

三、改进以及应用

修改输入和池化5:Feature-preserved convolutional neural network for 3D mesh recognition
修改损失函数6:Discriminative feature abstraction by deep L2 hypersphere embedding for 3D mesh CNNs
医疗模型分割应用7:MedMeshCNN - Enabling MeshCNN for Medical Surface Models


  1. https://ranahanocka.github.io/MeshCNN/ ↩︎

  2. 基于MeshCNN和PyTorch的三维对象分类和分割 ↩︎

  3. Subdivision-Based Mesh Convolution Networks ↩︎ ↩︎ ↩︎

  4. Face-Based CNN on Triangular Mesh with Arbitrary Connectivity ↩︎ ↩︎

  5. Feature-preserved convolutional neural network for 3D mesh recognition ↩︎

  6. Discriminative feature abstraction by deep L2 hypersphere embedding for 3D mesh CNNs ↩︎

  7. MedMeshCNN - Enabling MeshCNN for Medical Surface Models ↩︎

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

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

相关文章

Java 练习题:输出纯素数

文章目录纯素数简介任务要求思路解析源码奉上运行效果总结纯素数简介 所谓纯素数就是该数本身不仅是素数,并且该数的每一位都是素数。 例如:23,37是纯素数,但13,29不是。 任务要求 输出55555内所有的纯素数,按每行20个的格式化…

JVM 学习(2)—简单理解Java 四大引用(强、软、弱、虚)

一、Java 引用概述 Java 中出现四种引用是为了更加灵活地管理对象的生命周期,以便在不同场景下灵活地处理对象的回收问题。不同类型的引用在垃圾回收时的处理方式不同,可以用来实现不同的垃圾回收策略。Java 目前将其分成四类,类图如下&…

彻底搞懂inner join,left join,right join

1.inner join A inner join B where 条件, 对于A表中的每一行都会去B表的所有行去查找,去匹配,符合条件的就将这两行连接起来 下面用一个例子来帮助实际理解这句话: 创建下面两个表,customers表orders表 输入以下s…

银行软件测试面试题目总结,希望可以帮到你

目录 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 总结感谢每一个认真阅读我文章的人!!! 重点:配套学习资料和视频教学 一、根据题目要求写出具体LINUX操作命令 1、分别写出一种…

HTML标签——列表标签 之 自定义列表

HTML标签——列表标签 之 自定义列表 目录HTML标签——列表标签 之 自定义列表一、 场景:在网页的底部导航中通常会使用自定义列表实现。二、标签组成:三、案例实操四、运行效果五、显示特点:六、注意点:七、小结一、 场景&#x…

DeepPath: A Reinforcement Learning Method forKnowledge Graph Reasoning

Innovation使用RL学习KG中的关系路径推理使用Supervised Policy Learning解决:KG中关系图大,如试错训练RL,难以收敛使用双向路径搜索,减少中间节点数量IntroductionPRA是一种学习推理路径的方法,使用基于RandomWalk的重…

智能语音信息处理团队18篇论文被语音技术顶会ICASSP 2023接收

近日,ICASSP 2023会议发出了审稿结果通知,语音及语言信息处理国家工程研究中心智能语音信息处理团队共18篇论文被会议接收,论文方向涵盖语音识别、语音合成、话者识别、语音增强、情感识别、声音事件检测等,各接收论文简介见后文。…

FreeRTOS入门(05):事件组

文章目录目的基础说明相关函数使用演示总结目的 事件组是RTOS中相对常用的用于任务间交互的功能,这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章:《FreeRTOS入门(01):基础说明与使用演示》 基础说明…

华为OD机试模拟题 用 C++ 实现 - 寻找连续区间(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率…

嵌入式环境配置—VMware 软件安装和虚拟机的创建

目录 一、VMware软件的安装 二、虚拟机的创建 三、Linux操作系统的安装 VMware软件的安装 为什么要虚拟机? 嵌入式Linux开发需要在Linux系统下进行,我们选择了Ubuntu。 1.双系统安装 有问题,一次只能使用一个系统。Ubuntu基本只做编译用。需求&…

Qt之QTableView自定义排序/过滤(QSortFilterProxyModel实现,含源码+注释)

一、效果示例图 1.1 自定义表格排序示例图 本文过滤条件为行索引取余2等于0时返回true,且从下图中可以看到,奇偶行是各自挨在一起的。 1.2 自定义表格过滤示例图 下图添加两列条件(当前数据大于当前列条件才返回true,且多个列…

美团前端常见vue面试题(必备)

v-model 是如何实现的&#xff0c;语法糖实际是什么&#xff1f; &#xff08;1&#xff09;作用在表单元素上 动态绑定了 input 的 value 指向了 messgae 变量&#xff0c;并且在触发 input 事件的时候去动态把 message设置为目标值&#xff1a; <input v-model"sth…

Java程序设计基础学习笔记——类与对象、方法、递归、重载、可变参数、作用域、构造器、this

以下笔记整理自B站UP主韩顺平【零基础 快速学Java】韩顺平 零基础30天学会Java课程OOP面向对象程序设计(Object Oriented Programming)类就是数据类型&#xff0c;有属性和行为&#xff1b;对象是一个具体的实例从类到对象&#xff0c;目前有几种说法&#xff1a;创建一个对象实…

【网络安全入门】零基础小白必看!!!

看到很多小伙伴都想学习 网络安全 &#xff0c;让自己掌握更多的 技能&#xff0c;但是学习兴趣有了&#xff0c;却发现自己不知道哪里有 学习资源◇瞬间兴致全无&#xff01;◇ &#x1f604;在线找人要资料太卑微&#xff0c;自己上网下载又发现要收费0 &#x1f643;差点当…

HttpRunnerManager部署

基于HttpRunner的接口自动化测试平台: HttpRunner, djcelery and Django_. HttpRunner手册: http://cn.httprunner.org/git地址&#xff1a;httprunner/HttpRunnerManager: 基于 HttpRunner 的 Web 测试平台&#xff0c;已停止维护。 (github.com)部署机器&#xff1a;linux部署…

强强角逐,筑梦开源——2022年度启智社区优秀项目及开发者评选结果正式揭晓

2月24日&#xff0c;第四届OpenI/O启智开发者大会在深圳隆重开幕。本届大会以“算网筑基、开源启智、AI赋能”为主题&#xff0c;邀请国内人工智能开源领域领军院士亲自参加&#xff0c;汇聚学术界、产业界的技术专家&#xff0c;围绕中国算力网资源基座、开源社区服务支撑环境…

Tik Tok shop2023年度策略解读

一、TikTok Shop跨境电商数据显示自2022年上半年东南亚开放跨境电商入驻以来&#xff0c;全年GMV月均复合增速近90%&#xff1b;英国市场2022年下半年的平均交易客单价也同比2021年增长超40%&#xff1b;全年多个重要节点跨境GMV增长显著&#xff0c;例如2022年的圣诞季跨境GMV…

ESP32设备驱动-PCF8574IO扩展模块驱动

PCF8574IO扩展模块驱动 1、PCF8574介绍 PCF8574 是一个使用 I2C 协议的 8 位 I/O 端口扩展器。 通过开发板的SDA 和 SCL 引脚来控制多达 8 个数字 I/O 端口。 其中,A0,A1,A2 为地址引脚,P0,P1,P2,P3,P4,P5,P6,P7 为数字端口。PCF8574的地址如下: 在前面的文章,对PCF8574的…

【渐进交互学习网络:轻量级:超分:工业应用】

Progressive Interaction-Learning Network for Lightweight Single-Image Super-Resolution in Industrial Applications &#xff08;工业应用中轻量级单幅图像超分辨率渐进交互学习网络&#xff09; 近年来&#xff0c;基于深度学习&#xff08;DL&#xff09;的工业应用因…

大数据技术之Hive(四)分区表和分桶表、文件格式和压缩

一、分区表和分桶表1.1 分区表partitionhive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录&#xff0c;每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择式选择查询所需要的分区&#xff0c;这样的查询效率辉提高很多。1.1.1 分区表基本语…