0%

全冠生成验收迭代V2

自动摘要: |时间|对应版本号|修订人|主要修订内容| ||||| ||V1.0.0|@朱远翔|产品部主观验收 ……..

时间 对应版本号 修订人 主要修订内容
V1.0.0 @朱远翔 产品部主观验收
V2.0.0 @张新霞 自测

V1.0.0

输入要求

输出

统一使用:迭代457次模型

  1. 测试集

  2. 公司数据(没有任何联系,相当于测模型泛化性)

特点:

  1. 参数:
    1. 学习是隐函数
    2. 参数网格采样为3000个点
    3. 采样偏差抖动标准偏差约 0.1
  2. 效率:
    1. 在RTX3090显卡上,一次性输入为4w个点,推理时间为9.8s,占用显存23G。
  3. 部分代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    logits_list = []
    time_start=time.time()
    ##############################################
    for points in self.grid_points_split:
    with torch.no_grad():
    logits = self.model(points,inputs)
    logits_list.append(logits.squeeze(0).detach().cpu())
    ################################################

    logits = torch.cat(logits_list, dim=0)
    time_end=time.time()
    print('time cost',time_end-time_start,'s')
    return logits.numpy()
    logits = np.reshape(logits.numpy(), (self.resolution,)*3)

    #填充能够检索靠近边界框边界的对象
    logits = np.pad(logits, ((1, 1), (1, 1), (1, 1)), 'constant', constant_values=0)
    threshold = np.log(self.threshold) - np.log(1. - self.threshold)
    vertices, triangles = mcubes.marching_cubes(logits, threshold)

    #删除由于填充而导致的平移
    vertices -= 1

    #缩小到原来的尺度
    step = (self.max - self.min) / (self.resolution - 1)
    vertices = np.multiply(vertices, step)
    vertices += [self.min, self.min, self.min]

    mesh = trimesh.Trimesh(vertices, triangles)
    return mesh

验收建议:

  1. 噪声较多,不够平滑




规划

算法部反馈:

根据目前AI组生成的模型来看,我认为可行性非常大。
目前推理生成的模型的优缺点如下:

  • 优点:近远中、颊舌侧形态自然,与邻牙吻合度很高,咬合面牙沟牙脊形态较好
  • 缺点:近远中、颊舌侧底部形态丢失严重,咬合面噪声较多,非牙沟牙脊区小凸起较多

处理方案:
目前方案有两条:

  1. 对推理后的模型后处理,消除噪声,尤其小凸起,对牙沟牙脊特征进行增强处理,这一部分之前没有技术储备,但是对于模型的去噪、特征增强等的研究有较丰富的资料可供参考,这一条实现的把握较大
  2. 基于推理后的模型,只取其主轮廓部分:颊舌侧、近远中的轮廓,咬合面只取其边缘轮廓,沟脊部分采用模板牙经变形匹配到推理后模型的沟脊特征,同时利用推理模型的咬合面中的特征点(基于特征提取方法获取)为约束,限制模型咬合面的变形界限;另外近远中、颊舌侧利用模板变形结果进行补齐

技术要点:
(1)模型去噪
(2)模型特征增强(可选)
(3)基于目标模型的变形

AI组反馈:

  1. 数据问题:
    1. 没有参与我司数据训练,造成一些效果不好
      1. 原因:还未从正畸数据进行裁剪修正
      2. 措施:计划让算法部提供相应的库,我们尝试使用API进行C++批处理,以促进算法的了解及使用,在批处理完成情况下,让产品部核对数据。
  2. 细节问题:
    1. 受硬件资源限制,无法提升体素分辨率
    2. 在函数设计上,还可以针对牙齿信息进行设计
  3. 推理问题:
    1. 在高配资源上,推理速度>9s,很不理想
    2. 后期可以通过知识蒸馏,迁移等手段提高到一定程度
  4. 网格生成问题:
    1. 我们以学习是函数,作用是点–>点,网格生成部分我们借助第三方工具,有一定问题和损失,所以建议AI组只提供点–>点部分,以及处理成网格的方法以供参考。

总结:

综合考虑当下现状,数据制作不易,细节不够完善,建议采用算法部提供的《基于目标模型的变形》方法,
在不考虑推理速度情况下,做第一次尝试,当效果符合真正预期时,针对痛点进行下一阶段探讨及改进!

计划:

  1. 不考虑推理速度快慢,保证在英特尔CPU上能执行—>通用性
  2. 不考虑其他平台,只保证windowsC++并且x64下可运行 —>降低出错几率
  3. 保证提供API不大于100MB,不进行加密—>易拓展
  4. 保证C++调用库推理时,生成误差与python版小于**5% **—->降低工作难度

参考资料

  1. 为了解决这个问题(输入数据中存在的细节没有保留,人类关节部位的重建不佳),提出了_隐式特征网络_(IF-Nets),它提供连续输出,可以处理多种拓扑,并完成缺失或稀疏输入数据的形状,保留最近学习的隐式函数的良好属性,但至关重要的是,当输入数据中存在细节时,它们也可以保留细节,并且可以重建人的关节。

V2.0.0

输入要求

1、待修复牙模,必须是三颗牙,中间牙缺失,存在左右邻牙(为了尽可能获取牙花特征);2、待修复的牙必须在y轴上,且待修复牙模的中心越接近y轴效果越好;3、远中靠近y轴正向;4、待修复牙咬合面必须朝向z轴正向;5、待修复牙模舌侧靠近x轴正向,颊舌侧位置颠倒也会影响效果;


输出

修复好的单全冠,只有一颗牙。

缺陷

1、对测试数据要求比较高;原因:

  1. 参与训练的数据形式比较单一,这也是AI的通病,对数据分布的依赖性较强;

2、生成的单冠的mesh不能回到原来位置;原因:

  1. 采用marching_cubes(),生成的冠没办法回到原来的位置;
  2. 直接生成点云或者体素可以回到原来的位置,但是不美观。

效果

  1. 使用marchcubes:



  1. 使用自定义算法:

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