自动摘要: |时间|对应版本号|修订人|主要修订内容| ||||| ||V1.0.0|@朱远翔|产品部主观验收 ……..
时间 | 对应版本号 | 修订人 | 主要修订内容 |
---|---|---|---|
V1.0.0 | @朱远翔 | 产品部主观验收 | |
V2.0.0 | @张新霞 | 自测 |
V1.0.0
输入要求
输出
统一使用:迭代457次模型
测试集
公司数据(没有任何联系,相当于测模型泛化性)
特点:
- 参数:
- 学习是隐函数
- 参数网格采样为3000个点
- 采样偏差抖动标准偏差约 0.1
- 效率:
- 在RTX3090显卡上,一次性输入为4w个点,推理时间为9.8s,占用显存23G。
- 部分代码:
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
30logits_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
验收建议:
- 噪声较多,不够平滑
规划
算法部反馈:
根据目前AI组生成的模型来看,我认为可行性非常大。
目前推理生成的模型的优缺点如下:
- 优点:近远中、颊舌侧形态自然,与邻牙吻合度很高,咬合面牙沟牙脊形态较好
- 缺点:近远中、颊舌侧底部形态丢失严重,咬合面噪声较多,非牙沟牙脊区小凸起较多
处理方案:
目前方案有两条:
- 对推理后的模型后处理,消除噪声,尤其小凸起,对牙沟牙脊特征进行增强处理,这一部分之前没有技术储备,但是对于模型的去噪、特征增强等的研究有较丰富的资料可供参考,这一条实现的把握较大
- 基于推理后的模型,只取其主轮廓部分:颊舌侧、近远中的轮廓,咬合面只取其边缘轮廓,沟脊部分采用模板牙经变形匹配到推理后模型的沟脊特征,同时利用推理模型的咬合面中的特征点(基于特征提取方法获取)为约束,限制模型咬合面的变形界限;另外近远中、颊舌侧利用模板变形结果进行补齐
技术要点:
(1)模型去噪
(2)模型特征增强(可选)
(3)基于目标模型的变形
AI组反馈:
- 数据问题:
- 没有参与我司数据训练,造成一些效果不好
- 原因:还未从正畸数据进行裁剪修正
- 措施:计划让算法部提供相应的库,我们尝试使用API进行C++批处理,以促进算法的了解及使用,在批处理完成情况下,让产品部核对数据。
- 细节问题:
- 受硬件资源限制,无法提升体素分辨率
- 在函数设计上,还可以针对牙齿信息进行设计
- 推理问题:
- 在高配资源上,推理速度>9s,很不理想
- 后期可以通过知识蒸馏,迁移等手段提高到一定程度
- 网格生成问题:
- 我们以学习是函数,作用是点–>点,网格生成部分我们借助第三方工具,有一定问题和损失,所以建议AI组只提供点–>点部分,以及处理成网格的方法以供参考。
总结:
综合考虑当下现状,数据制作不易,细节不够完善,建议采用算法部提供的《基于目标模型的变形》方法,
在不考虑推理速度情况下,做第一次尝试,当效果符合真正预期时,针对痛点进行下一阶段探讨及改进!计划:
- 不考虑推理速度快慢,保证在英特尔CPU上能执行—>通用性
- 不考虑其他平台,只保证windows下C++并且x64下可运行 —>降低出错几率
- 保证提供API不大于100MB,不进行加密—>易拓展
- 保证C++调用库推理时,生成误差与python版小于**5% **—->降低工作难度
参考资料
- 为了解决这个问题(输入数据中存在的细节没有保留,人类关节部位的重建不佳),提出了_隐式特征网络_(IF-Nets),它提供连续输出,可以处理多种拓扑,并完成缺失或稀疏输入数据的形状,保留最近学习的隐式函数的良好属性,但至关重要的是,当输入数据中存在细节时,它们也可以保留细节,并且可以重建人的关节。
V2.0.0
输入要求
1、待修复牙模,必须是三颗牙,中间牙缺失,存在左右邻牙(为了尽可能获取牙花特征);2、待修复的牙必须在y轴上,且待修复牙模的中心越接近y轴效果越好;3、远中靠近y轴正向;4、待修复牙咬合面必须朝向z轴正向;5、待修复牙模舌侧靠近x轴正向,颊舌侧位置颠倒也会影响效果;
输出
修复好的单全冠,只有一颗牙。
缺陷
1、对测试数据要求比较高;原因:
- 参与训练的数据形式比较单一,这也是AI的通病,对数据分布的依赖性较强;
2、生成的单冠的mesh不能回到原来位置;原因:
- 采用marching_cubes(),生成的冠没办法回到原来的位置;
- 直接生成点云或者体素可以回到原来的位置,但是不美观。
效果
- 使用marchcubes:
- 使用自定义算法: