自动摘要: 修订历史: 2022年5月19日:添加网络结构,完善部分语言,添加处理图片。2022年5月21日:以20221月全冠源码,重新梳理整个流程,然后去除语言表达错误的语句,修改文档立意。2022年 ……..
修订历史:
2022年5月19日:添加网络结构,完善部分语言,添加处理图片。2022年5月21日:以2022-1月全冠源码,重新梳理整个流程,然后去除语言表达错误的语句,修改文档立意。2022年5月21日:添加左右邻牙保留原因。
背景概述:
Mescheder L, Oechsle M, Niemeyer M, et al. Occupancy networks: Learning 3d reconstruction in function space[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 4460-4470.
全冠生成算法,主要是借助以网格/原始点云的边界特征作为学习为任务,如下图所示。从而将学习全冠生成简化成学习给定的点是否在边界内外。从多维度学习简化到二分类任务。因为学习的是决策边界,所以能很好的还原冠的细节特征。
算法流程
细节概述
数据处理部分:
来自南航全冠数据,待修复体由两颗邻牙一个基台构成,已修复模型由待修复位置对应的三颗牙构成
核心开源库:trimesh
- 源模型(待修复体)处理
- 利用连通体特性,删除待修复区域干扰(中间基台)
- 原因:因为无法获得基台边缘数据,对训练无任何帮助,所以我们认为基台是噪声
- 左右邻牙保留原因:根据南航硕士论文提及–邻牙的牙花对中间牙花在医学上有共性
- 然后取邻牙并体素归一化网格
- 利用连通体特性,删除待修复区域干扰(中间基台)
- 目标模型(已修复体)处理
- 将网格进行均匀采样,然后添加方差为[0.1,0.01]正态分布噪声,然后归一化。(图中绿色部分)
- 原因:这样可以很好的泛化数据,并且能帮助网络更好的表达决策边界
- 将网格进行编码化(隐函数化/占位化/二进制化)(如图所示)
- 并包含在内则设置为1,否则设为0—>图中红绿用01二进制表示
- 可选优化:如果模型由空洞,可以通过每隔一定角度进行光射,通过光线是否穿透模型,来确定是否有孔洞。
- 并包含在内则设置为1,否则设为0—>图中红绿用01二进制表示
- 将网格进行均匀采样,然后添加方差为[0.1,0.01]正态分布噪声,然后归一化。(图中绿色部分)
网络部分
主要借鉴现阶段对点云多尺度,多维度特征提取方法,其实只要处理二分类网络都可以
- 核心思想:将输入的体素特征与边界采样特征进行特征匹配
- 方法:
- 边界采样原始点作为原始特征–>1号特征
- 将输入体素与边界采样点及其邻域点集混合后作为扩展特征–>扩展特征
- 第一层进行3D卷积提取特征+扩展特征—>2号特征
- 第二层将第一层结果进行最大池化再次使用3D卷积提取特征+扩展特征—>3号特征
- 第三层将第二层结果进行最大池化再次使用3D卷积提取特征+扩展特征—->4号特征
- 第四层将第三层结果进行最大池化再次使用3D卷积提取特征+扩展特征—->5号特征
- 然后将前面1,2,3,4,5,扩展特征联合作为一个特征组—>汇总特征
- 通过一维卷积代替全连接进行特征输出
- 注意事项
- 其中3D卷积是一个由卷积核333的3DConv+BN构成,当前采用3个3D卷积层提取特征。
- 使用一维卷积代替全连接,参数共享,同时降低维度,计算速度更快。
- 近似一阶邻域信息采集作为补充特征,主要还是为了泛化边界信息,如数据部分添加正态噪声一样的道理。
- 主要是确定当前边界采样对邻域的重要程度。
- 而整个网络架构考虑的是体素在边界采样中聚焦特定位置的能力。
训练部分:
因为是二分类问题,参考sigmoid+BCE 体系,具体可以百度BCEWithLogitsLoss
- 损失设计
- 主要对比生成的占用率与原始占用率对比, 使用BCEWithLogitsLoss加权重为0.9的算术平均
- 原因:0.9设置主要考虑的占用为1的点的损失权重—牙冠的权重
- 主要对比生成的占用率与原始占用率对比, 使用BCEWithLogitsLoss加权重为0.9的算术平均
- 优化器选择
- 选择学习率0.1的Adam优化器,然后利用损失是否稳定下降作为依据,减少学习率,最高为1e-5
推理部分:
因为我们训练有一个来自待修复体的体素,一个来自目标模型的网格采样,所以推理同样需要这两个条件。
方式一:利用MC特性
- 待修复的体素可依照数据处理部分处理
- 目标模型因为未知,所以我们设立个立方体体素。
- 首先创建一个256256256, 正方体用于裁剪成牙齿
- 为什么不选101010等等,因为正方体应该大于训练牙齿的包围框,不然无法裁剪
- 首先创建一个256256256, 正方体用于裁剪成牙齿
- 通过网络判定哪些是属于牙冠外部的点,内部的点
- 然后通过MC网格重建固定阈值(0.)进行重建
- 因为MC要求是体素
- 注意输出网格是水密的。
方式二:利用OBB特性
- 待修复的体素可依照数据处理部分处理
- 目标模型因为未知,所以我们沿着待修复网格构建OBB包围框,并填充数量为100000(根据需求自行调节)点。
- 通过网络判定哪些是属于牙冠外部的点,内部的点
- 然后大于阈值(0.)选取属于牙冠内部的点
- 注意输出网格是非水密的。
未来改进计划:
- 减少生成,去除邻牙生成
- 将边界采样直接网络内置,不再要求用户输入
- 再次简化网络,去除邻域特征匹配,而采用网格自带属性,如曲率,角度,法线
- 使用ResNet代替现在网络