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