高煥堂



0引言
遷移學習(Transfer Learning)就像俗稱的“拿來主義”,善用別人已經訓練好模型的參數(智慧),引入到自己的模型里,可以迅速建立1個AI的應用情境。本文以ResNet50為例,說明如何復用(Reuse)已經訓練好的ResNet50的智慧(模型和參數),幫您瞬間探索任何一張圖像的特征(Feature),然后幫您識別出圖片里的人或物的種類,如水牛、斑馬、貓頭鷹或汽車等。
1認識遷移學習:以ResNel50為例
AI的智慧是來自機器的自我學習,通稱為機器學習。它經常需要借助大量的數據來訓練。例如,ResNet50就使用100多萬張圖像而訓練出來的。在訓練的過程中,它去探索每張圖像中的特稱,并且學習歸納和分類。目前的ResNet50可以準確地識別出1000種人或物,如日常生活中常遇到的狗、貓、食物、汽車和各種家居物品等。例如,您可以隨意從百度圖片上截取一張224x224大小的圖片,如圖1。
當您把這圖片提交給Re sNet50,它會瞬間探索并進行分類,然后告訴您:我預測這是大熊貓(Giantpanda)。
2介紹ResNel50模型的結構
目前最常見的AI圖像識別模型是:卷積網路(cNN)模型。這ResNet50就是基于CNN的模型,如圖2。
其中,CNN模型包含兩部分:卷積層(convolutionLayers)與全連接層(Full-Connected Layers)。前者我特別稱之為丫鬟部分;而后者則稱之為格格部分,如圖3。
Conv部分比較復雜,共約有40個層;而FC部分約有10個層。所以稱之為ResNet50模型。
3復用ResNel50智慧的方法
典型的復用(Reuse)步驟如下。
它告訴您了:我預測99%的可能性是大熊貓(Giantpanda)。
5僅復用丫鬟,訓練自己的格格
5.1說明
由于ResNet50是典型的CNN模型,包含卷積層與FC層。在上一節里,使用Excel畫面來操作ResNet50,并復用了全部(卷積層與FC層)的權重,就不必重新訓練,而直接用來辨別圖像里的東西。在本節里,就來介紹另一種用法:只復用它的卷積層(丫鬟)部分,而不復用FC層(格格)部分的權重。也就是,要自己來訓練FC層(格格)部分。
在CNN模型(女DResNet50)里,丫鬟部分負責探索像的特征,然后把這些特征值交給格格,讓格格(依據特征值)來分辨出種類。例如,丫鬟看到一張圖片里的動物特征是:身體黑白條紋、4只腳,然后格格就依據這特征而判斷這很可能是一匹斑馬。
雖然ResNet50里的格格已經有智慧來進行圖像分類(classification)了,而且可以辨識1000種日常生活中的人或物。然而,在一些較狹窄的應用場域里,只需要(更準確)辨識較少的種類時,就需要訓練自己的格格。
剛才提到了,有些場合需要重新訓練格格來分類,但是丫鬟具有的探索像特征的智慧,卻可以復用之。亦即,能借助于ResNet50的丫鬟(即卷積部分)的智慧,幫忙探索我的圖片,來協助訓練新的格格。一旦新格格訓練好了之后,ResNet50原有的丫鬟就能和新格格協同合作,來更精確地區分特定的數據(圖片)集了。由于不必重新訓練丫鬟部分,就能節約許多訓練(丫鬟的)時間。
5.2準備數據,來訓練新格格
茲拿一個較狹小的應用場域,只需要格格來分辨3個種類:斑馬、貓頭鷹和蘑菇。于是,筆者在/oopc/v data/train/文件夾里,準備了150張圖片(皆為224x224),包括50張斑馬、50張貓頭鷹、以及50張蘑菇的圖片。將它們分別放在這3個小文件夾里:
亦即,在/v_data/train/里共有150張圖片,分為3種類(Classes)。接下來,就拿3類的圖像來訓練自己的.格格。于是,繼續使用jjtl8模板,執行jjtl8PY呈現出<工作表2”的畫面,并按下
大約經過5分鐘,就可訓練完畢了。接著點選“工作表3”,并按下“Show”按鈕,就顯示出一張圖片,如下圖。
接著,按下“Prediet”,就把這張圖片提交給ResNet50去識別。此時,就先由(ResNet50原有的)丫鬟先去探索這張圖片的特征,然后把特征值轉交給新格格去分類。最后由格格輸出結果如圖7。
6結語
本文是以ResNet50為例,說明如何借助ResNet50已經訓練好的智慧去識別形形色色的圖像。此外,還可以復用ResNet50里的丫鬟智慧,搭配自己的圖片集,來訓練自己的新格格,更新了ResNet50的智慧。
隨著AI的應用領域愈來愈多,除7ResNet50之外,您還可以通過本文所介紹的“遷移學習”途徑來共享更多的AI模型和智慧。