0%

罗依蒙-AI库维护员-交接文档

自动摘要: 前言 在入职至今的两个多月中,我主要负责的内容为AI算法库的整体部署,这个库从开始设计到现在花了一个半月多,主要包括了AI算法库([算法库](http://192.168.1.55/up3d/ ……..

前言

在入职至今的两个多月中,我主要负责的内容为AI算法库的整体部署,这个库从开始设计到现在花了一个半月多,主要包括了AI算法库(算法库)、AI算法库API文档(AI算法库API-V1.3.9)、AI算法库安装文档(AI算法库安装),此外在推进AI库完善的进程中,为更好的了解使用者的体验感受,曾开展过协助体验者使用AI库的项目,并为此编写AI算法库体验表以及问题收集表。

AI算法库实现的现状

当前AI算法库的主要内容从业务上分包括了全冠、部署、分牙以及嵌体四个部分,由于各部分的算法在业务流程上的实现程度相差较大,所以当前的版本仅升级到V1.3.9。全冠生成是算法库中函数实现最细致的一个模块,算法库中包含了全冠生成的全流程实现算法:数据处理、训练、推理以及显示,为更好的满足不同用户的需求,推理与显示的函数分别都实现了单份文件处与批量文件处理,在提供按流程分步实现的函数的同时也提供了一键式全流程实现的函数。部署模块分为两部分:正畸部署与一些常用的部署工具。正畸部署按整体流程分为:分牙、排牙以及牙龈生成,再在其流程内可细分为数据处理、推理或目标实现,以及结果数据优化。部署工具主要包括json与其他格式文件的转换以及将json结果进行渲染。由于分牙模块较为庞杂,最后交由我整理并在AI算法库中实现集成的仅有训练模块。嵌体模块中各个步骤的函数实现都是完整细致的,但是由于层层嵌套以及前后继承的关系,整理过程中没能按照细致流程拆解出来,最后整合出来能让用户直接使用的暂时只有训练以及推理两个模块。在整个AI算法库中,全冠生成、部署模块以及分牙模块的原始函数由@sindre(sindre)提供,并由其完成初步整理,而嵌体模块的函数使用的是@张新霞(zhangxinxia)负责的Dental_Inlay_program中的函数,由于原始代码编写的风格以及模式不尽相同,这两大部分集成后的风格也不太相同。所有代码经整理、修改、测试,最后再集成到AI算法库中。在整理AI算法库的同时,我借鉴open3dAPI文档的格式,编写AI算法库API文档,包括函数功能介绍、参数意义与类型介绍以及返回值介绍,并且在函数库的每个函数下完善其注释。AI算法库API文档整体大纲是按照深度学习实现流程安排的,其主体流程为:数据处理DateProcess、模型搭建Building、模型训练Training、推理Inference、显示Show、部署Deploy,为满足一键式业务实现,添加一键式Run模块,随后在整理每个业务的时候,将其对应步骤的函数分别整理到相应模块下。整理AI算法库的根本目的是为了梳理已有函数,避免同类函数重复编写耗费时间,方便用户使用。为方便用户使用AI算法库,将其打包生成whl文件,并提供相应的安装知道教程,其中包括conda环境确认、环境创建与激活、依赖安装与验证。同时,若用户未安装conda环境,在该文档中添加了相关链接以便用户实现conda环境安装。

AI算法库缺陷

完成程度上来说,AI算法库现有的四个模块中完成度较高的只有全冠生成和部署两块,而部署的函数也不是完全实现了,其中ToothArrange中的结果优化和Orthodontic的数据修复以及分牙排牙显示函数都还未实现。分牙模块只实现分牙定义以及模型训练,其数据处理只给出函数名未实现,而推理、优化和显示等暂未定义。嵌体模块的整个流程实现函数都有,但是由于其对象之间的继承关系与函数调用等过于复杂以及原作者@张新霞(zhangxinxia)暂时不在,不便进行有效交流,最终能够实现用户直接使用的函数仅有训练函数、利用pth文件进行推理以及利用onnx文件进行推理。从函数实现效果角度看,部分函数的实现状况存在一定的问题或是其实际效果与原定效果可能有一定的出入:1.部署模块中ToothSeg对象的_remove_overlapping_triangles函数,原本的注释中表明其实现效果是“删除重叠的三角面片”,而其实际上调用的Delaunay是对共面的三角面片进行处理,个人对该函数的理解是:将原本共面的相邻面片上的点单独取出再组合成三角面片,使这些点形成的图像是凸多边形(延长多边形的任意一边为一条直线,其余的边都在该直线同侧),则一般情况下,会使面片数增加,并无法达到删除重叠面片的目标效果;2.部署模块中ToothSeg对象的optimized函数,在函数理解的过程中发现模型中还存在离散面片,即无邻接面片的面片,而在预处理中已经处理过离群面片了。3.嵌体模块中的train函数会有文件打开报错的情况,由于问题是出在循环内,而且每次打开的文件都是同一份,却会随机出现问题,暂时还为发现问题究竟出在哪里,现暂将checkpoints_dir的默认值设为”C:\“以确保函数能够正常完成(。对于嵌体部分,由于其基础对象的参数众多,用户对对象的个性化操作可以很多,但是这样又会使整个函数调用显得复杂,而且不同步骤调用的子类不同,不便实现像全冠生成那样的一键式函数使用。从技术角度看,在部署类的分牙实现中利用pygco,但由于相关原理只是并不了解,对这里部分的参数的意义不明,处于公式硬套的状态,具体的实现原理并未理解细致。从适用性角度看,原本为了测试AI函数库经由C++调用是否会产生错误而开展的体验活动由于参与的两位体验者过于繁忙,没能完成体验活动,当然,也十分感谢两位体验者积极参与,额外抽出时间为AI库的完善出一份力。由于体验活动未能按流程顺利完成,该算法库能否直接适用与C++以及如何在C++中使用需要在后续的使用过程中测试。

AI算法库的后续期望

在整理算法库的过程中,我的思考方式是:原作者写该函数的目的是什么,函数的实现方式是什么,逻辑上的实现方式或预期结果与实际结果是否相同,在一个函数内部的大致流程理清后再去了解其中调用的各个函数包的函数思想与实现方式,只有揣测清原始目的才能对函数的预期结果进行推测,并与实际结果比较,从而实现函数测试以及后续调整。但是,个人觉得在条件允许的情况下,在发现函数内容存在与预期不符或逻辑有出入的状况下与原作者交流沟通是最有效的。在AI库API文档中,对于部分存在问题或是理解不清的地方,我都有在函数后将问题罗列出来,希望原作者能在问题上回答或是对源码进行修改。对于未完成整理的函数包括分牙模块以及嵌体的细节函数,希望后续能够被完善上去。AI库体验相关的文档保存在部署文档中,包括AI算法库安装文档、AI算法库体验表以及问题收集表,若后续再开展相关体验活动希望能够提供有效帮助。最后,希望AI算法库能够像初始希望的一样,能够实现函数集成,为后续有相关业务需求的编程人员提供方便,能够被大家使用,并不断扩充与优化。

个人遗憾

AI算法库是我全权负责的一个任务,未能将它完成难免会有遗憾,不论是算法库还是API文档都不够完整,虽说手头上现有的函数都有集成到AI库中,但是并没有像预期的那样按照流程一步一步划分细化出来,而且获得的每个原始模块都有其各自的风格,整体上的风格并未实现完全统一。此外,AI库大体上是按照业务划分模块而API文档是按照深度学习流程为大纲划分,原本是希望类似的函数能够合并从而减少函数数量实现简化,而现在AI库中全冠生成和正畸部署是将函数作为对象的方法,嵌体生成中用户使用的函数则独立于对象,没能按照文档大纲实现函数合并,若后续继续整理算法库的话可能需要将大纲再进行调整。在分析整理函数的过程中对一些函数的使用处于简单的认知程度即单纯明白这个函数的作用而不太理解其原理所以对部分函数的分析或是注释可能并不是十分准确。

对AI组的期望

在入职至今的两个半月中,十分感谢各位组员的指导帮助。从我的工作过程中感受到的,我觉得也许可以改变的一些地方,比如对自己写的函数加一些注释,因为每个项目在后续大多都会有其他的人使用或参与进来,添加一些有效的注释有助于他人的理解与使用,能够有效提高合作效率或是接手项目的效率。若是为了保证代码简洁不便添加的话可以在API文档内添加注意事项,特别是一些对输入数据格式等有要求的函数。最后,希望AI组的各位能完成自己的项目,不留遗憾。

资料相关链接

AI算法库API-V1.3.9:https://up3dai.yuque.com/ionwb3/sy/yxi5i5AI算法库:http://192.168.1.55/up3d/AIAI算法库安装:https://up3dai.yuque.com/ionwb3/sy/im0kgmAI算法库体验表:https://up3dai.yuque.com/ionwb3/sy/hilmn9问题收集表:https://up3dai.yuque.com/ionwb3/sy/nwpnpq

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