0%

全冠生成改进简要V2

自动摘要: |版本号|作者|发布日期|修订| ||||| |V1.0.0|[@](https://www.yuque. ……..

版本号 作者 发布日期 修订
V1.0.0 @叶子扬 初始版
V2.0.0 @朱远翔 源码重构版
V2.1.0 @Sindre Yang(sindre) 针对单牙源码重构版
V2.1.1 @Sindre Yang(sindre) 针对不同分辨率实验
V2.1.2 @Sindre Yang(sindre) 加入多注意力机制
V2.2.0 @Sindre Yang(sindre) 加入网格封闭算法,重构所有代码

V0.0.1

特点:

  • 尝试使用模板牙进行非刚性变形,达到目的
  • 根据人脸变形,零件变形,肢体约束变形获得框架
  • 修改提取数据格式 ,尝试进行个例牙冠变形成功,进行算法移植
  • 主要构建 :
    • chamfer_distance,
    • mesh_edge_loss,
    • mesh_laplacian_smoothing,
    • mesh_normal_consistency,
    • point_mesh_edge_distance
    • 达到变形效果,但牙冠过于光滑,考虑分离

V0.0.2

特点:

  • 继续尝试非刚性变化,完成刚性配准问题
  • 使用open3d高度优化的icp完成刚性配准
  • 将模型进行牙花,牙体分离,只对牙体进行处理

缺陷:

  1. 变形基本完成,但泛化性有问题

V0.0.2

特点:

  • 尝试基于参数可变形模型的方法,将第一次迭代约束加入,达到端到端非刚性配准
  • 对牙花变形进行约束

参考:

  • 使用https://github.com/HavenFeng/photometric_optimization进行魔改

缺陷:

  1. pytorch_point3d 有40多个依赖,部分移植出现问题;

V1.0.0

特点:

  1. 加入由@Sindre Yang(sindre)向南航索要的全冠数据,基于IFNET完成训练,并生成出牙齿形态;

缺陷:

  1. 只能看到初步形态,存在大量噪声;
  2. 代码凌乱;

V2.0.0

特点:

  1. 基于V1.0.0进行完全重构;
  2. 通过大量实验,获得较好参数,能比较完美的生成牙齿形态及牙花;
  3. 代码清晰,流畅;

缺陷:

  1. 存在部分噪声点;
  2. 位置未对齐;
  3. 泛化性较弱;

V2.1.0

特点:

  1. 只生成单牙,不再生成三颗牙;
  2. 提高推理数据,并通过实验,确定生成单牙分辫率在161616,323232即可
  3. 推理速度3090上,约500ms~800ms;

缺陷:

  1. 位置未对齐;
  2. 泛化性较弱;

V2.1.1

特点:

  1. 在16~256分辨率依次对比生成单牙,生成3颗牙效果,并总结了无需生成三颗牙;
  2. 重构推理代码,使其更简单生成点云,网格;

缺陷:

  1. 位置未对齐;
  2. 泛化性较弱;

V2.1.2

特点:

  1. 在32分辨率下加入混合注意力(空间注意力,通道注意力)
  2. 拟合效果非常好,没有噪声,泛化性稍微强些;

缺陷:

  1. 位置未对齐;
  2. 速度及其慢,3090上约为3min;

V2.2.0

特点:

  1. 对32位单牙生成,加入网格封闭算法,把底座封闭,为了更好生成;
  2. 再次重构代码,解决位置生成问题;
  3. 加入多进程处理;
  4. 加入自定义重建算法,去除mc重建算法;

缺陷:

  1. 泛化性较弱;

概述

针对v1.0对推理模型摆放的位置要求比较准确且严格的问题,提出了从训练数据集@张新霞(zhangxinxia)和推理数据位置调整@sindre(sindre)两个方面来改进。

具体实施

训练数据集

1、验证阶段:利用分牙数据,提取4,5,6号牙,不做位置调整,直接训练模型,测试结果是可以生成冠,但是由于数据不够规范,生成的冠的形态不好,但证实可以利用小幅度的调整训练数据的位置来缓解推理数据对位置的敏感性。下图是生成的冠的形态,从图中可以看出单冠被拉长了;
2、训练阶段一:利用南航数据(因为南航数据比较规范),随机在 x, y, z 三个方向分别旋转[-5,5], [-10,10], [-180,180]的角度进行数据扩增,作为训练数据来训练模型;训练精度为7000+的效果;
3、训练阶段二:基于训练阶段一的效果,再决定是否执行训练阶段二,将分牙数据调整为z轴向上,做同样的数据增强操作,混合训练阶段一的数据一起作为训练集。

推理数据位置的调整

@sindre(sindre) 利用关键点的识别来确定待推理模型的咬合面方向?

欢迎关注我的其它发布渠道