楊 珊,易 黎,張萌潔,朱相印,何中海
(電子科技大學(xué) 信息與軟件工程學(xué)院,成都 610054)
基于項目的學(xué)習(xí)(PBL)是以學(xué)生為中心,引入基于項目的教學(xué)模式,對培養(yǎng)具有創(chuàng)新思維、分析和解決問題能力強的學(xué)生具有必然性和現(xiàn)實意義[1]。PBL-F 是針對新生開展的基于項目的學(xué)習(xí)課程。軟件學(xué)院的PBL-F 課程系列,是引導(dǎo)學(xué)生進(jìn)入項目學(xué)習(xí)的重要實踐課程,通常安排在大一第二學(xué)期。以開發(fā)項目為出發(fā)點,要求學(xué)生在16 學(xué)時課堂時間及課后時間解決一個或多個項目問題。學(xué)習(xí)過程中教師是引導(dǎo)者,學(xué)生進(jìn)行小組合作、自主探索,并積極使用多種信息資源,通過自主學(xué)習(xí)來構(gòu)建自己的知識,增加真實的工程體驗[2]
本文通過“基于Python 的圖像分類項目實踐”課程案例的介紹,具體闡述本門新生項目實踐課程教學(xué)的方案設(shè)計、實踐方法,總結(jié)該方法的實現(xiàn)效果。
本課程主要采用Python 語言完成項目,要求學(xué)生掌握基本的語法和數(shù)據(jù)類型、深度學(xué)習(xí)的模型概念、預(yù)訓(xùn)練模型調(diào)用、數(shù)據(jù)集增強以及遷移訓(xùn)練等概念,理解項目實踐的步驟,團隊任務(wù)分工合作的方法,多任務(wù)合作時間合理分配。其中基礎(chǔ)知識內(nèi)容的大量學(xué)習(xí)時間將放在課后以及線上平臺完成。本課程的初衷在于以項目形式,引入學(xué)生學(xué)習(xí)人工智能的相關(guān)概念和基礎(chǔ)知識內(nèi)容,難度較低,多以引導(dǎo)性的方式完成項目,旨在讓學(xué)生體會完整項目的成就感和人工智能神經(jīng)網(wǎng)絡(luò)的趣味性,激發(fā)新生的專業(yè)興趣。
本課程課堂學(xué)時共16 學(xué)時,前4 個學(xué)時為基本語法、深度學(xué)習(xí)及CNN 網(wǎng)絡(luò)基本知識概念掌握,后12 個學(xué)時為項目任務(wù)。任務(wù)分為3 個階段內(nèi)容,如圖1 所示,首先學(xué)生需要在引導(dǎo)下先完成一個小狗種類圖像分類實踐[2](任務(wù)一),然后針對任務(wù)一中選出的預(yù)訓(xùn)練模型[3],進(jìn)行遷移訓(xùn)練(任務(wù)二),以及使用增強數(shù)據(jù)集[4]進(jìn)行遷移訓(xùn)練[5](任務(wù)三)。
圖1 PBL-F 課程實踐任務(wù)要求分解
任務(wù)一主要需要學(xué)生利用深度學(xué)習(xí)框架PaddlePaddle 中PaddleHub 模塊[6]提供的多種CNN模型,完成對50 張小狗種類的分類,并對最終選擇的3 種模型進(jìn)行準(zhǔn)確度、效率等基本指標(biāo)計算,以此掌握圖像分類基本過程。
任務(wù)二需要學(xué)習(xí)PaddleHub 中遷移學(xué)習(xí)finetune 使用方式,構(gòu)建自己的中藥材數(shù)據(jù)集,包括訓(xùn)練集、驗證集和測試集,并使用該訓(xùn)練集對任務(wù)一選擇的某個預(yù)訓(xùn)練模型進(jìn)行遷移訓(xùn)練,最終使用學(xué)生小組自己搜集的另外100 張中藥材圖片,評價模型結(jié)果。
任務(wù)三需要構(gòu)建自己的圖片數(shù)據(jù)集增強庫?;诰€性代數(shù)的知識,編寫圖像增強庫,用于任務(wù)二圖片數(shù)據(jù)集增強。再利用增強后的數(shù)據(jù)集針對任務(wù)二選擇的預(yù)訓(xùn)練模型重新進(jìn)行遷移訓(xùn)練,再通過100 張中藥材圖片評價和比較模型的訓(xùn)練結(jié)果。其中,任務(wù)一作為基礎(chǔ)訓(xùn)練內(nèi)容需要所有同學(xué)都參與完成,任務(wù)二和任務(wù)三的內(nèi)容需要同學(xué)分為3 人一組,合作完成不同功能模塊的內(nèi)容。
本課程項目提供百度AI Studio 在線學(xué)習(xí)和編程平臺,該平臺使用了基于notebook 的交互式編碼環(huán)境,主要功能為文件上傳、代碼編碼運行、markdown 文檔編寫、變量監(jiān)控調(diào)試、性能監(jiān)控、代碼導(dǎo)入、運行狀態(tài)保存,生成版本后提交教師評分等功能。同時編程環(huán)境可以根據(jù)需求選擇GPU 環(huán)境,配置為如下。
1)GPU: tesla V100
2)video mem: 16 GB
3)CPU: 2 cores
4)RAM: 16 GB
5)disk: 100 GB
該環(huán)境每天有8 h 的免費使用時間,便于學(xué)生學(xué)習(xí)實踐和代碼測試。
本課程任務(wù)的設(shè)計和線上線下教學(xué)結(jié)合的方式主要為解決大一學(xué)生對于Python 語言不熟悉,圖像分類入門時間短以及實操環(huán)境難以搭建等困難,同時希望將數(shù)學(xué)知識和程序項目做有效的結(jié)合與實踐。因此本課程任務(wù)有以下4 個特點。
1)通過在AI Studio 平臺設(shè)計各種語法作業(yè),邊學(xué)邊練,使得學(xué)生課后可以快速掌握Python語言。
2)通過3 個任務(wù)的詳細(xì)步驟和子任務(wù)設(shè)計,學(xué)生能夠快速掌握圖像分類方法,和基于預(yù)訓(xùn)練模型進(jìn)行遷移訓(xùn)練的方法。
3)本課程遷移訓(xùn)練任務(wù)部分的實操環(huán)境需要使用到深度學(xué)習(xí)框架和GPU,學(xué)生電腦難以達(dá)到要求。通過選擇基于AIstudio 平臺的開發(fā)環(huán)境,減少環(huán)境部署的壓力和時間。
4)本課程通過兩輪教學(xué)實施發(fā)現(xiàn),學(xué)生對于數(shù)據(jù)集增強函數(shù)內(nèi)部邏輯缺乏深刻的理解。因此設(shè)計任務(wù)三的數(shù)據(jù)增強內(nèi)容,學(xué)生需要自主編寫矩陣乘法函數(shù),完成圖像分類數(shù)據(jù)集增強的幾種基本操作,如翻轉(zhuǎn)、位移、旋轉(zhuǎn)等幾種易于使用矩陣乘法實現(xiàn)的圖片數(shù)據(jù)操作。該任務(wù)模塊設(shè)計將線性代數(shù)知識與實踐內(nèi)容有機結(jié)合,讓學(xué)生對數(shù)學(xué)知識學(xué)以致用,同時深刻理解數(shù)據(jù)集增強的內(nèi)涵。
本課程學(xué)時共16 學(xué)時,前期4 個學(xué)時將用于課堂理論知識的講述,讓學(xué)生對于人工智能、深度學(xué)習(xí)、圖像分類等等名詞形成一定的知識概念,同時通過案例的講解,對任務(wù)本身的解析和組隊任務(wù)的分配,引入實踐任務(wù)平臺,開啟學(xué)生線上學(xué)習(xí)和實踐的入口。
圖像分類基礎(chǔ)練習(xí)要求所有學(xué)生動手參與,這是入門圖像分類的基本訓(xùn)練,也是后期遷移訓(xùn)練和增強遷移訓(xùn)練開展的基礎(chǔ)。該任務(wù)需要識別pet_images 中的50 張小狗圖片,并通過圖片名稱和識別結(jié)果做比較,評價所選的CNN 模型[7]的能力。
1)項目運行時間計算。
2)小狗圖片原始標(biāo)簽提取,如圖片文件collie_03797.jpg 的真實類別是collie。
3)預(yù)訓(xùn)練模型標(biāo)簽提取。
該階段任務(wù)內(nèi)容需要學(xué)生通過閱讀百度飛槳的文檔[8],掌握預(yù)訓(xùn)練模型基本使用方法,得到小狗圖片預(yù)測結(jié)果,并將真實類別和預(yù)測結(jié)果一并存儲。最終得到的某一圖片文件識別結(jié)果如此處所示:{'Beagle_01141.jpg':['beagle','english foxhound',0]}
4)模型評價、結(jié)果比較和展示。
該階段任務(wù)需要對當(dāng)前工作的預(yù)訓(xùn)練模型的識別結(jié)果進(jìn)行計算,得到模型的準(zhǔn)確率、運行時間等各項指標(biāo),并通過統(tǒng)計圖示進(jìn)行展示。如對ResNet、AlexNet、VGG、GoogleNet 和MobileNet[9]5 種預(yù)訓(xùn)練模型的運行時間比較,和模型識別準(zhǔn)確率的比較以及展示。
遷移訓(xùn)練和圖像增強遷移訓(xùn)練需要學(xué)生組成3 人的團隊完成,每個學(xué)生可以根據(jù)難度和自己的能力選擇不同的任務(wù)。3 人分工和難度如下。
1)完成遷移訓(xùn)練主體程序內(nèi)容,仿造任務(wù)一構(gòu)造中草藥數(shù)據(jù)集識別程序(難度:中級)。
2)搜集五種中草藥圖片每種100 張,閱讀遷移訓(xùn)練數(shù)據(jù)集構(gòu)造的文檔,編寫程序處理圖片和數(shù)據(jù)集生成代碼,構(gòu)造為遷移訓(xùn)練可以使用的數(shù)據(jù)集(難度:初級)。
3)學(xué)習(xí)數(shù)據(jù)集增強原理,閱讀示例代碼,不使用numpy 庫自己完成圖片的矩陣乘法運算,為每張中草藥圖片生成翻轉(zhuǎn)、位移、旋轉(zhuǎn)的增強圖片(難度:高級)。
2.3.1 遷移訓(xùn)練任務(wù)
完成遷移訓(xùn)練程序的同學(xué),需要閱讀finetune 程序的代碼,完成部分缺失代碼的編寫,并調(diào)整fine-tune 參數(shù),測試遷移訓(xùn)練的結(jié)果。
fine-tune[10]是遷移學(xué)習(xí)中使用得最多的方式之一。其主要思想是通過對預(yù)訓(xùn)練模型進(jìn)行結(jié)構(gòu)和參數(shù)的微調(diào)來實現(xiàn)模型遷移,從而達(dá)到模型適應(yīng)新領(lǐng)域數(shù)據(jù)的目的。
基于PaddleHub 提供的fine-tune 流程,大約分為以下7 個步驟:
1)導(dǎo)入相關(guān)的包和加載遷移訓(xùn)練模型;
2)準(zhǔn)備數(shù)據(jù)集(分為PaddleHub 自帶數(shù)據(jù)集和自定義數(shù)據(jù)集);
3)生成遷移訓(xùn)練的讀取器(data_reader),調(diào)用接口預(yù)處理數(shù)據(jù)集圖像;
4)進(jìn)行遷移訓(xùn)練運行時參數(shù)配置,包括是否使用GPU 訓(xùn)練、優(yōu)化策略和訓(xùn)練次數(shù)等等;
5)組建訓(xùn)練任務(wù),需要去獲取module 的上下文環(huán)境,在輸出變量中找到特征圖提取層feature_map,然后在這層后面接入一個全連接層,生成訓(xùn)練任務(wù)(task);
6)調(diào)用finetune_and_eval 接口,針對構(gòu)建的訓(xùn)練任務(wù)進(jìn)行遷移訓(xùn)練;
7)訓(xùn)練完成后,使用task 的predict()函數(shù)即可測試當(dāng)前模型對新圖片的分類能力。
2.3.2 自定義數(shù)據(jù)集任務(wù)
自定義數(shù)據(jù)集構(gòu)造的任務(wù),需要額外編寫腳本代碼,處理自己搜集的訓(xùn)練圖片,將其構(gòu)造為可用的命名格式,并且根據(jù)PaddleHub 中預(yù)訓(xùn)練模型fine-tune 接口的要求,按照7:2:1 劃分訓(xùn)練集、測試集和驗證集[11]的圖片,并編寫數(shù)據(jù)集構(gòu)造和數(shù)據(jù)集讀取代碼,以及圖片的標(biāo)簽文檔。
本次任務(wù)選擇中藥材圖片識別任務(wù),后續(xù)課程開展可以規(guī)定任務(wù)類型和范圍,由學(xué)生自主選擇和設(shè)計類似的圖像識別任務(wù),增大學(xué)生的課程參與度。
2.3.3 數(shù)據(jù)集增強矩陣計算任務(wù)
數(shù)據(jù)集增強任務(wù)需要完成以下5 種圖片數(shù)據(jù)增強[12]的任務(wù):水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)、位移、旋轉(zhuǎn)和縮放。深度學(xué)習(xí)對數(shù)據(jù)集的大小有較高的要求。在圖像分類任務(wù)中,圖像數(shù)據(jù)增強是經(jīng)常采用的方法之一,可以減少過擬合的概率,在原始樣本較少的情況下,增加訓(xùn)練樣本的多樣性。
假設(shè)每個原始圖片的寬度是w,高度是h,圖片中的某個點位置是(x0,y0),變換后該圖片的點是(x1,y1)。
1)水平翻轉(zhuǎn)。水平翻轉(zhuǎn)可以轉(zhuǎn)換為找圖片中的點關(guān)于某個軸的對稱點。此時我們的對稱軸應(yīng)該是w/2。因此翻轉(zhuǎn)后的橫坐標(biāo)為x1=w-x0。而y不變,可以得知,y0=y1。由此,可以得到水平翻轉(zhuǎn)的矩陣式:
2)垂直翻轉(zhuǎn)。垂直翻轉(zhuǎn)帶來的是縱坐標(biāo)的變換,翻轉(zhuǎn)后的縱坐標(biāo)為y1=-y0+h。x不變。由此,可以得到水平翻轉(zhuǎn)的矩陣式:
3)位移。位移變換帶來的是縱坐標(biāo)和橫坐標(biāo)的變換,翻轉(zhuǎn)后的橫坐標(biāo)x1=x0+Δx,縱坐標(biāo)y1=y0+Δy,由此,可以得到位移變換的矩陣式:
4)旋轉(zhuǎn)。原始點依舊是(x0,y0),半徑設(shè)為R,變換后該圖片的點是(x1,y1),則x0=Rcosα,y0=Rsinα。
如圖2 所示,(x1,y1)是(x0,y0)以半徑R旋轉(zhuǎn)θ得到,所以x1可以表示為:
圖2 旋轉(zhuǎn)變換示意
同理,y1=y0cosθ-x0sinθ。由此可得旋轉(zhuǎn)的矩陣式為:
5)縮放??s放變換帶來的是縱坐標(biāo)和橫坐標(biāo)的變換,翻轉(zhuǎn)后的橫坐標(biāo)x1=αx0,縱坐標(biāo)y1=αy0,α為變換系數(shù)。因此,可以得到縮放變換的矩陣式為:
可以發(fā)現(xiàn),每種變換的不同之處在于變換矩陣的不同。學(xué)生需要實現(xiàn)每種變換的變換矩陣,然后通過對圖片的每個點進(jìn)行左乘變換矩陣操作即可實現(xiàn)上述5 種圖像增強。
實現(xiàn)效果以垂直變換為例,首先需要將待變換圖片處理為numpy 數(shù)組,代碼1 展示了水平翻轉(zhuǎn)的變換矩陣,代碼2 展示了基于每個圖像點的矩陣乘法實現(xiàn)。
代碼1 水平翻轉(zhuǎn)變換矩陣定義
代碼2 矩陣乘法
通過matrixMul(self.transform,point)對圖片的每個點進(jìn)行循環(huán)處理,最后就可以得到變換后的新坐標(biāo)位置,再將圖片數(shù)組根據(jù)新坐標(biāo)位置重新轉(zhuǎn)換成圖片即可得到變換結(jié)果。水平翻轉(zhuǎn)變換結(jié)果如圖3 所示。
圖3 圖像結(jié)果
項目考核分為平時成績和期末成績兩項分?jǐn)?shù),其中答辯、項目實踐、期末報告團隊三人分?jǐn)?shù)一致?;ピu分?jǐn)?shù)來自于學(xué)生對團隊成員的工作認(rèn)可評價。具體評價方式如表1 所示。
表1 新生項目考核評價設(shè)計
通過細(xì)分考核項內(nèi)容,從學(xué)生的基礎(chǔ)考核、項目完成情況、團隊合作程度、項目匯報情況、報告撰寫情況多個維度考核,體現(xiàn)項目的綜合性特點,更全面考核學(xué)生知識獲得程度。
PBL-F 圖像分類項目課程設(shè)計是大一學(xué)生初步接觸項目的重要銜接課程。本課程教學(xué)過程主要采用的是語法基礎(chǔ)學(xué)練結(jié)合與綜合實踐相結(jié)合的層次化實踐教學(xué)方式,為后續(xù)深入學(xué)習(xí)專業(yè)課程打下基礎(chǔ)。本課程的教學(xué)實踐具有以下4 個方面的意義。
1)側(cè)重培養(yǎng)學(xué)生的實踐能力,內(nèi)容應(yīng)既有理論性,也有工程實用性,旨在鍛煉學(xué)生的動手能力、實際工程能力、團隊協(xié)作能力和匯報能力。
2)實踐環(huán)節(jié)的fine-tune 任務(wù)是中藥材識別任務(wù),后續(xù)可以改進(jìn)為由學(xué)生自主選擇不同識別任務(wù),如害蟲識別、食物識別等,激發(fā)學(xué)生完成課程的興趣,增加課程參與度。
3)學(xué)生通過本項目學(xué)習(xí)實踐預(yù)訓(xùn)練模型相關(guān)基礎(chǔ)技術(shù)和應(yīng)用。在當(dāng)下生成式AI 大模型迅速發(fā)展的社會背景下,從預(yù)訓(xùn)練模型的使用入門進(jìn)行深度學(xué)習(xí),具有學(xué)習(xí)的前瞻性意義。
4)本課程項目在實施過程中將任務(wù)模塊化分工,任何學(xué)生的任務(wù)都是必不可少的環(huán)節(jié),強調(diào)學(xué)生團隊的合作和任務(wù)調(diào)度,增加團隊協(xié)作意識。
通過兩輪的教學(xué)實踐發(fā)現(xiàn),學(xué)生的語法作業(yè)完成度99.3%,基礎(chǔ)的小狗分類實踐完成度為95.2%,fine-tune 任務(wù)完成度為92%,通過代碼和在線平臺運行結(jié)果發(fā)現(xiàn)抄襲現(xiàn)象較少,通過互評發(fā)現(xiàn)學(xué)生項目實際參與度達(dá)到97%。通過兩輪實踐報告發(fā)現(xiàn),大部分學(xué)生基本掌握了相關(guān)領(lǐng)域基礎(chǔ)知識、工程項目設(shè)計方法、團隊分工方法等課程目標(biāo)。上述數(shù)據(jù)證明本課程項目能夠提高學(xué)生實際動手能力和項目實踐能力,同時能在實踐中得到一定的成就感和實際效果反饋,提高專業(yè)學(xué)習(xí)興趣,增強專業(yè)信心。