从大三上学期上过软件工程课之后就再也没有接触过全栈式的项目或者工程了,很多的关于前端后端技术的理解还停留在两年前,当时就是粗口咀嚼,消化不算精良,现在更怕是已经跟时代落伍了,所以也不敢讨论太多(T^T)。好在这边只是讨论一下心得,这种东西见仁见智也算是略微减轻了我的压力。
最近一年多的时间里面北航加大了医工结合的力度,我个人也有幸融入其中,我们从医院拿数据然后听医生讲需求最后利用我们的算法实现能让医生满意的效果,甚至是可以推而广之的临床决策系统。其实这个过程跟公司拿项目然后做开发的流程很像:需求分析(获得数据并分析医生的诉求)-设计(根据自己的经验以及搜索引擎寻找可能的实现方案)-实现(尽量保证计算过程中的高效以及一定要保证的计算的稳定性)-测试(在更大的数据集上做交叉验证)-发布(演示给医生)-搜集意见并维护(跟医生不断交流改进使其满意)。
去年做的一个早期青光眼诊断的深度学习的算法,诊断出来的效果还算不错,但是对于医生来讲效果不是最重要的,合理性和可解释性才是最重要的,对纯粹的计算机或者软工的同学们来讲我只要效果好并且稳定那我的这个产品就很不错的,但是对医生来讲一个无法解释的产品即便是做到了100%的准确率也不可能有实用的价值,因为不敢用的,这个细想起来不难理解,如果我的目标用户是普罗大众,那么我只要告诉他们诊断是有病还是没病就好,但是如果我的目标用户是医生,那么我在为什么有病以及为什么没病上边下的功夫才是最关键的。所以从那以后我可能不会再把自己心中的准则(效果好并且稳定)作为实际需求中的主角了,因为场景的各异,交付人群的不同看似相同的目标(有病有否)其实有不同的工作和侧重点。后来我们通过一系列的可视化网络的方法,解释了数据输入和输出的因果关系,该因果关系和临床诊断的指标恰好对应,于是解决了窘境,也算是有惊无险吧。
现在在做一个主动脉疾病诊断的问题,目前是处于分割主动脉的阶段,后续还会有狭窄、畸形的临床疾病的诊断。但是这个分割的过程其实也比较有问题可研究,因为用的数据是三维的CT,所以相较于二维的很多问题可行性和效率都是很大的挑战。同时由于我们人类自身是三维空间的生物在观察三维图像的时候也有比较大的认知障碍,所以经常是束手无策,因为怕解决不了所以总是想找个万全之计,恨不能就有那么一个方法完全能解决当下的所有问题,于是有非常长的一段时间陷入在寻找的迷茫中。直到避无可避了,索性自己动起手来从最简单的区域生长算法开始了分割的进程,动手之后我才发现很多的问题其实都是我意淫的忧虑,不过是为自己懒得动手编织的借口,之前文献中想破脑袋也不懂的很多细节也有了清晰的认识,从动手后的不到一个月的时间就有了初具雏形的方法了,虽然效率还不是很高,但是聊胜于无啊。大三软件工程课上的的敏捷之道告诉我迭代和改进是增量开发不可或缺的过程啊,所以我也能更从容地先想办法打通整个流程,使得它首先能用,然后再着手用得顺溜的问题。这段过程给我的心得是一定要做中学,计算机或者软件的问题没有做的过程是不太可能有学的长进的,想通过只看文献找一个解决问题的silver bullet,那无异于是浪费生命了。