周 到 黃 敏 陳軍波
(中南民族大學 生物醫學工程學院 湖北武漢 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語言的易用性特點,能夠加速學生將各學科知識直接應用到實踐中去,提升學生的學習熱情,增強學生對專業理解程度和培養學生的自豪感。