周 到 黃 敏 陳軍波
(中南民族大學(xué) 生物醫(yī)學(xué)工程學(xué)院 湖北武漢 430074)
生物醫(yī)學(xué)工程是一門理學(xué)、工學(xué)和醫(yī)學(xué)高度交叉的學(xué)科,該專業(yè)的學(xué)生需要使用電子、信息科學(xué)的原理的技術(shù),探索醫(yī)學(xué)與健康的新奧秘,研制新型的醫(yī)學(xué)儀器、設(shè)備與系統(tǒng)。
由于涉及到的領(lǐng)域眾多,生物醫(yī)學(xué)工程專業(yè)開設(shè)的程序設(shè)計(jì)語言類課程通常較為駁雜,以我校為例,開設(shè)的程序設(shè)計(jì)類課程有:C程序設(shè)計(jì),該課程是所有程序設(shè)計(jì)的基礎(chǔ),主要用于單片機(jī)開發(fā)設(shè)計(jì)中,在生物醫(yī)學(xué)信號采集中有重要作用;C++程序設(shè)計(jì),該課程是C程序設(shè)計(jì)的進(jìn)階版,主要用于較為復(fù)雜的系統(tǒng)開發(fā),在醫(yī)學(xué)信息系統(tǒng)設(shè)計(jì)中有重要作用;LabVIEW,該課程主要用于快速搭建PC端的采集分析系統(tǒng),在生物醫(yī)學(xué)信號的實(shí)時采集分析中有重要作用;Matlab,該課程主要用于快速實(shí)現(xiàn)算法模型,在數(shù)字信號處理、數(shù)字圖像處理、醫(yī)學(xué)模式識別中有重要作用。除此之外,還開設(shè)有數(shù)據(jù)結(jié)構(gòu)、微機(jī)原理與接口技術(shù)、Java程序設(shè)計(jì)等與程序設(shè)計(jì)語言相關(guān)的選修課。
雖然說程序的思維是相通的,C語言的學(xué)習(xí)打好基礎(chǔ)后,其他各種程序語言都能觸類旁通,但太多程序語言的切換,大部分學(xué)生的學(xué)習(xí)體驗(yàn)并不好,學(xué)生們反饋每種程序設(shè)計(jì)語言僅學(xué)到了基礎(chǔ)皮毛知識,不能深入學(xué)習(xí)與應(yīng)用,尤其是面臨較為復(fù)雜的設(shè)計(jì)任務(wù)時,學(xué)生往往感覺束手無策。是否存在一門程序語言,可以貫通在生物醫(yī)學(xué)工程專業(yè)的多門核心專業(yè)課教學(xué)中呢?
在實(shí)際的教學(xué)過程中還發(fā)現(xiàn),生物醫(yī)學(xué)工程專業(yè)存在大量的醫(yī)學(xué)影像、生物醫(yī)電(如心電、腦電和肌電)、生化指標(biāo)和病情記錄等數(shù)據(jù),需要對這些生物醫(yī)學(xué)數(shù)據(jù)進(jìn)行基本的分析,再使用人工智能方法進(jìn)一步分析和解讀。例如,在每年的全國大學(xué)生生物醫(yī)學(xué)工程創(chuàng)新設(shè)計(jì)競賽中,都會有一道人工智能類的賽題,學(xué)生會自發(fā)地學(xué)習(xí)Python語言來參賽解題。實(shí)際上,2018年起,Python語言就一直保持在TIOBE編程語言排行榜前3名,Python語言具有代碼易于理解、互動性好、操作靈活、代碼庫豐富和易用性高等特點(diǎn),受到了許多學(xué)生的歡迎。
本文將從單片機(jī)類課程、信號類課程和醫(yī)學(xué)人工智能類課程來探討Python語言在生物醫(yī)學(xué)工程專業(yè)人才培養(yǎng)中的貫穿教學(xué)。
現(xiàn)有的單片機(jī)實(shí)驗(yàn)教學(xué)中,一般選用51單片機(jī)、MSP430或STM32等器件,開發(fā)過程中需要在電腦上先裝好開發(fā)環(huán)境(如Keil等,通常這些開發(fā)環(huán)境還存在版權(quán)問題),程序編寫完成后,還要再編譯,最后將編譯好的二進(jìn)制文件燒錄入單片機(jī)中。整個過程中,任何一個環(huán)節(jié)出錯都需要從頭開始。由于單片機(jī)不同型號的差異巨大,對于沒有單片機(jī)編程經(jīng)驗(yàn)的初學(xué)者,出現(xiàn)問題后的排錯,往往需要相當(dāng)長的時間查閱厚厚的文檔,逐步修訂才能積累經(jīng)驗(yàn)[1]。然而實(shí)際授課時,課堂教學(xué)時間和學(xué)生基礎(chǔ)都非常有限,真正有興趣、精力和時間琢磨的學(xué)生不多,大部分學(xué)生一開始就被各種問題勸退,失去了學(xué)習(xí)熱情。
隨著技術(shù)的發(fā)展,Python語言也有了用于單片機(jī)的版本,2014年,MicroPython發(fā)布,實(shí)現(xiàn)了Python3的基本功能,如今提供了豐富的傳感器和硬件驅(qū)動庫,可以移植到STM32、MSP432等眾多硬件平臺。用戶在使用MicroPython時,通過調(diào)用固件庫對應(yīng)的硬件接口函數(shù),就可以直接驅(qū)動硬件工作,而硬件設(shè)備的具體驅(qū)動方式無需過多了解。例如,在生物醫(yī)學(xué)儀器設(shè)計(jì)中經(jīng)常用到的串口通信,不同類型的單片機(jī)控制串口模塊的寄存器各不相同,需要為學(xué)生們單獨(dú)講解,學(xué)生們記憶起來難度也較大。使用MicroPython固件庫時,則只需要導(dǎo)入UART,初始化串口,就能控制串口的讀和寫。除串口通信外,MicroPython提供了多種硬件平臺的GPIO、SPI、I2C、DAC、ADC、定時器等常用功能,還有大量的第三方硬件模塊驅(qū)動庫,應(yīng)用范圍廣泛。
不難看出,基于MicroPython的單片機(jī)實(shí)驗(yàn)教學(xué),能讓學(xué)生輕松上手,快速實(shí)現(xiàn)硬件底層的訪問和控制,自己動手設(shè)計(jì)并實(shí)現(xiàn)硬件制作,更好地釋放學(xué)生們的創(chuàng)造力。
《數(shù)字信號處理》等信號類課程中,課程的理論性強(qiáng),內(nèi)容較難理解,為幫助學(xué)生更好地掌握相關(guān)概念,通常會使用Matlab作為輔助工具,設(shè)計(jì)實(shí)驗(yàn)課程,強(qiáng)化學(xué)生的學(xué)習(xí)印象,增強(qiáng)學(xué)生動手解決問題的能力。
Matlab是一款集數(shù)值計(jì)算、矩陣分析、信號處理和圖像處理等功能于一體的計(jì)算軟件,功能強(qiáng)大,但有以下幾點(diǎn)問題。首先是Matlab的軟件授權(quán)費(fèi)用價格高,軟件支出費(fèi)用很大。其次是Matlab軟件體積巨大,對計(jì)算機(jī)的性能要求較高,學(xué)校機(jī)房部分較老的機(jī)器上,光是打開新版本的Matlab,就需要花費(fèi)10分鐘以上時間。再者是Matlab提供的大部分函數(shù),實(shí)現(xiàn)方法不開源,無法得知其內(nèi)部實(shí)現(xiàn)方法。最后,Matlab作為一種方便科學(xué)計(jì)算問題的建模工具,學(xué)生學(xué)習(xí)的積極性不高,用完了就忘的現(xiàn)象時有發(fā)生[2]。
近年來,隨著Python語言的快速發(fā)展與壯大,使用Python語言取代Matlab,建立基Python的數(shù)字信號處理實(shí)驗(yàn)教學(xué)平臺將能夠較好地解決以上問題。首先,Python免費(fèi),減輕了軟件投入成本。其次,Python加上信號處理常用的庫,總體量不到200MB,任何老機(jī)器上都能輕松使用,減輕了硬件投入成本。再者,Python是開源軟件,所有函數(shù)都是開源的,有利于問題的追溯。最后,Python具有廣闊的應(yīng)用前景,在《醫(yī)學(xué)人工智能》等生物醫(yī)學(xué)工程相關(guān)的后續(xù)課程中都能用上,學(xué)生學(xué)習(xí)更有動力。
調(diào)研發(fā)現(xiàn),綜合使用Python已有的各種庫,能夠?qū)崿F(xiàn)數(shù)字信號處理的常見變換和方法。例如,Python庫signal.fft實(shí)現(xiàn)了離散傅里葉變換和快速傅里葉變換。而scipy.signal庫中實(shí)現(xiàn)了大部分?jǐn)?shù)字信號處理相關(guān)函數(shù),例如,卷積、互相關(guān)、濾波器的頻率響應(yīng)、無限沖激響應(yīng)濾波器、有限沖激響應(yīng)濾波器、小波變換、峰值查找和頻譜分析等常見的數(shù)字信號處理相關(guān)函數(shù)。
可見,根據(jù)這些基礎(chǔ)函數(shù)構(gòu)建出基于Python的數(shù)字信號處理實(shí)驗(yàn)平臺是可行的。
隨著時代的進(jìn)步,大數(shù)據(jù)分析在個人健康、公共衛(wèi)生、醫(yī)藥研究等各個領(lǐng)域都有迫切的研究需求,生物醫(yī)學(xué)工程專業(yè)的研究熱點(diǎn)之一就是人工智能在生物醫(yī)學(xué)大數(shù)據(jù)上的分析和使用。擬通過開設(shè)《Python與機(jī)器學(xué)習(xí)》《醫(yī)學(xué)人工智能》等課程,讓學(xué)生學(xué)會對心電、腦電、肌電、醫(yī)學(xué)影像等數(shù)據(jù)的分析和處理。
機(jī)器學(xué)習(xí)課程是人工智能領(lǐng)域的基礎(chǔ)課程,需要學(xué)生掌握各類常用算法的實(shí)現(xiàn)與應(yīng)用。理論上,機(jī)器學(xué)習(xí)算法可能用C/C++、Matlab、Python等任意編程語言實(shí)現(xiàn),但相較而言,Python實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的庫scikit-learn,結(jié)構(gòu)最清晰,使用最廣泛,對初學(xué)者最友好。機(jī)器學(xué)習(xí)算法庫scikit-learn中提供了線性模型、貝葉斯模型、決策樹模型、支持向量機(jī)、人工神經(jīng)網(wǎng)絡(luò)等多種分類算法,還提供了特征選擇、聚類算法、模型選擇與評估等其他機(jī)器學(xué)習(xí)中常用的方法。當(dāng)數(shù)據(jù)量不是太大的情況下,用這些機(jī)器學(xué)習(xí)算法能夠解決生物醫(yī)學(xué)數(shù)據(jù)分析中的大部分問題。
近年來,隨著生物醫(yī)學(xué)檢測設(shè)備的普及,造成了生物醫(yī)學(xué)數(shù)據(jù)的劇增,同時,伴隨人工智能領(lǐng)域的飛速發(fā)展,越來越多的深度神經(jīng)網(wǎng)絡(luò)模型被應(yīng)用在生物醫(yī)學(xué)數(shù)據(jù)分析領(lǐng)域中。現(xiàn)有的結(jié)果表明,與傳統(tǒng)的機(jī)器學(xué)習(xí)算法相比,當(dāng)生物醫(yī)學(xué)數(shù)據(jù)量足夠大時,深度神經(jīng)網(wǎng)絡(luò)模型能獲得比機(jī)器學(xué)習(xí)算法更好的效果,甚至達(dá)到與醫(yī)學(xué)專家人工識別相當(dāng)?shù)男ЧR虼耍跈C(jī)器學(xué)習(xí)課程開設(shè)的基礎(chǔ)上,還將開設(shè)基于深度神經(jīng)網(wǎng)絡(luò)的醫(yī)學(xué)人工智能課程。目前有大量基于Python的深度神經(jīng)網(wǎng)絡(luò)開發(fā)平臺和模型可供選擇,最典型的有Pytorch、Tensorflow、PaddlePaddle等深度學(xué)習(xí)框架。這些深度學(xué)習(xí)框架中,Pytorch在學(xué)術(shù)界應(yīng)用最為廣泛,Tensorflow在產(chǎn)業(yè)界應(yīng)用最為廣泛,PadelePaddle是國產(chǎn)深度學(xué)習(xí)框架。綜合考慮這些框架的特性后,在醫(yī)學(xué)人工智能課程中,擬選用Pytorch作為深度學(xué)習(xí)課程的主要框架,在該框架的基礎(chǔ)上,學(xué)生將學(xué)習(xí)醫(yī)學(xué)影像和生物電信號大數(shù)據(jù)的病灶識別、疾病分型等內(nèi)容。
綜上所述,Python語言在生物醫(yī)學(xué)工程專業(yè)人才培養(yǎng)中的貫穿教學(xué)是可行的。借助Python語言,能夠串聯(lián)起生物醫(yī)學(xué)信號從采集,到基本處理,再到高級分析和預(yù)測的整個過程。由于Python語言的易用性特點(diǎn),能夠加速學(xué)生將各學(xué)科知識直接應(yīng)用到實(shí)踐中去,提升學(xué)生的學(xué)習(xí)熱情,增強(qiáng)學(xué)生對專業(yè)理解程度和培養(yǎng)學(xué)生的自豪感。