周 到 黄 敏 陈军波
(中南民族大学 生物医学工程学院 湖北武汉 430074)
生物医学工程是一门理学、工学和医学高度交叉的学科,该专业的学生需要使用电子、信息科学的原理的技术,探索医学与健康的新奥秘,研制新型的医学仪器、设备与系统。
由于涉及到的领域众多,生物医学工程专业开设的程序设计语言类课程通常较为驳杂,以我校为例,开设的程序设计类课程有:C程序设计,该课程是所有程序设计的基础,主要用于单片机开发设计中,在生物医学信号采集中有重要作用;C++程序设计,该课程是C程序设计的进阶版,主要用于较为复杂的系统开发,在医学信息系统设计中有重要作用;LabVIEW,该课程主要用于快速搭建PC端的采集分析系统,在生物医学信号的实时采集分析中有重要作用;Matlab,该课程主要用于快速实现算法模型,在数字信号处理、数字图像处理、医学模式识别中有重要作用。除此之外,还开设有数据结构、微机原理与接口技术、Java程序设计等与程序设计语言相关的选修课。
虽然说程序的思维是相通的,C语言的学习打好基础后,其他各种程序语言都能触类旁通,但太多程序语言的切换,大部分学生的学习体验并不好,学生们反馈每种程序设计语言仅学到了基础皮毛知识,不能深入学习与应用,尤其是面临较为复杂的设计任务时,学生往往感觉束手无策。是否存在一门程序语言,可以贯通在生物医学工程专业的多门核心专业课教学中呢?
在实际的教学过程中还发现,生物医学工程专业存在大量的医学影像、生物医电(如心电、脑电和肌电)、生化指标和病情记录等数据,需要对这些生物医学数据进行基本的分析,再使用人工智能方法进一步分析和解读。例如,在每年的全国大学生生物医学工程创新设计竞赛中,都会有一道人工智能类的赛题,学生会自发地学习Python语言来参赛解题。实际上,2018年起,Python语言就一直保持在TIOBE编程语言排行榜前3名,Python语言具有代码易于理解、互动性好、操作灵活、代码库丰富和易用性高等特点,受到了许多学生的欢迎。
本文将从单片机类课程、信号类课程和医学人工智能类课程来探讨Python语言在生物医学工程专业人才培养中的贯穿教学。
现有的单片机实验教学中,一般选用51单片机、MSP430或STM32等器件,开发过程中需要在电脑上先装好开发环境(如Keil等,通常这些开发环境还存在版权问题),程序编写完成后,还要再编译,最后将编译好的二进制文件烧录入单片机中。整个过程中,任何一个环节出错都需要从头开始。由于单片机不同型号的差异巨大,对于没有单片机编程经验的初学者,出现问题后的排错,往往需要相当长的时间查阅厚厚的文档,逐步修订才能积累经验[1]。然而实际授课时,课堂教学时间和学生基础都非常有限,真正有兴趣、精力和时间琢磨的学生不多,大部分学生一开始就被各种问题劝退,失去了学习热情。
随着技术的发展,Python语言也有了用于单片机的版本,2014年,MicroPython发布,实现了Python3的基本功能,如今提供了丰富的传感器和硬件驱动库,可以移植到STM32、MSP432等众多硬件平台。用户在使用MicroPython时,通过调用固件库对应的硬件接口函数,就可以直接驱动硬件工作,而硬件设备的具体驱动方式无需过多了解。例如,在生物医学仪器设计中经常用到的串口通信,不同类型的单片机控制串口模块的寄存器各不相同,需要为学生们单独讲解,学生们记忆起来难度也较大。使用MicroPython固件库时,则只需要导入UART,初始化串口,就能控制串口的读和写。除串口通信外,MicroPython提供了多种硬件平台的GPIO、SPI、I2C、DAC、ADC、定时器等常用功能,还有大量的第三方硬件模块驱动库,应用范围广泛。
不难看出,基于MicroPython的单片机实验教学,能让学生轻松上手,快速实现硬件底层的访问和控制,自己动手设计并实现硬件制作,更好地释放学生们的创造力。
《数字信号处理》等信号类课程中,课程的理论性强,内容较难理解,为帮助学生更好地掌握相关概念,通常会使用Matlab作为辅助工具,设计实验课程,强化学生的学习印象,增强学生动手解决问题的能力。
Matlab是一款集数值计算、矩阵分析、信号处理和图像处理等功能于一体的计算软件,功能强大,但有以下几点问题。首先是Matlab的软件授权费用价格高,软件支出费用很大。其次是Matlab软件体积巨大,对计算机的性能要求较高,学校机房部分较老的机器上,光是打开新版本的Matlab,就需要花费10分钟以上时间。再者是Matlab提供的大部分函数,实现方法不开源,无法得知其内部实现方法。最后,Matlab作为一种方便科学计算问题的建模工具,学生学习的积极性不高,用完了就忘的现象时有发生[2]。
近年来,随着Python语言的快速发展与壮大,使用Python语言取代Matlab,建立基Python的数字信号处理实验教学平台将能够较好地解决以上问题。首先,Python免费,减轻了软件投入成本。其次,Python加上信号处理常用的库,总体量不到200MB,任何老机器上都能轻松使用,减轻了硬件投入成本。再者,Python是开源软件,所有函数都是开源的,有利于问题的追溯。最后,Python具有广阔的应用前景,在《医学人工智能》等生物医学工程相关的后续课程中都能用上,学生学习更有动力。
调研发现,综合使用Python已有的各种库,能够实现数字信号处理的常见变换和方法。例如,Python库signal.fft实现了离散傅里叶变换和快速傅里叶变换。而scipy.signal库中实现了大部分数字信号处理相关函数,例如,卷积、互相关、滤波器的频率响应、无限冲激响应滤波器、有限冲激响应滤波器、小波变换、峰值查找和频谱分析等常见的数字信号处理相关函数。
可见,根据这些基础函数构建出基于Python的数字信号处理实验平台是可行的。
随着时代的进步,大数据分析在个人健康、公共卫生、医药研究等各个领域都有迫切的研究需求,生物医学工程专业的研究热点之一就是人工智能在生物医学大数据上的分析和使用。拟通过开设《Python与机器学习》《医学人工智能》等课程,让学生学会对心电、脑电、肌电、医学影像等数据的分析和处理。
机器学习课程是人工智能领域的基础课程,需要学生掌握各类常用算法的实现与应用。理论上,机器学习算法可能用C/C++、Matlab、Python等任意编程语言实现,但相较而言,Python实现机器学习算法的库scikit-learn,结构最清晰,使用最广泛,对初学者最友好。机器学习算法库scikit-learn中提供了线性模型、贝叶斯模型、决策树模型、支持向量机、人工神经网络等多种分类算法,还提供了特征选择、聚类算法、模型选择与评估等其他机器学习中常用的方法。当数据量不是太大的情况下,用这些机器学习算法能够解决生物医学数据分析中的大部分问题。
近年来,随着生物医学检测设备的普及,造成了生物医学数据的剧增,同时,伴随人工智能领域的飞速发展,越来越多的深度神经网络模型被应用在生物医学数据分析领域中。现有的结果表明,与传统的机器学习算法相比,当生物医学数据量足够大时,深度神经网络模型能获得比机器学习算法更好的效果,甚至达到与医学专家人工识别相当的效果。因此,在机器学习课程开设的基础上,还将开设基于深度神经网络的医学人工智能课程。目前有大量基于Python的深度神经网络开发平台和模型可供选择,最典型的有Pytorch、Tensorflow、PaddlePaddle等深度学习框架。这些深度学习框架中,Pytorch在学术界应用最为广泛,Tensorflow在产业界应用最为广泛,PadelePaddle是国产深度学习框架。综合考虑这些框架的特性后,在医学人工智能课程中,拟选用Pytorch作为深度学习课程的主要框架,在该框架的基础上,学生将学习医学影像和生物电信号大数据的病灶识别、疾病分型等内容。
综上所述,Python语言在生物医学工程专业人才培养中的贯穿教学是可行的。借助Python语言,能够串联起生物医学信号从采集,到基本处理,再到高级分析和预测的整个过程。由于Python语言的易用性特点,能够加速学生将各学科知识直接应用到实践中去,提升学生的学习热情,增强学生对专业理解程度和培养学生的自豪感。