iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
AI Engineering

從 Pixel 到 AI:30 天影像辨識入門之路系列 第 28 篇

Day28 不用每次從零開始!Transfer Learning 能打贏自己的 CNN 嗎?

  • 分享至 

  • xImage
  •  

昨天我們比較了 2-Layer CNN 和 3-Layer CNN,發現增加一層 Convolution Layer 後,Test Accuracy 從 74.43% 提升到 74.97%。

雖然有小幅改善,但這讓我開始思考:

如果不從零開始訓練 CNN,而是使用已經學過大量圖片的模型,結果會不會更好?

所以今天要介紹 Transfer Learning(遷移學習),看看能不能利用 Pre-trained Model,改善目前的皮膚病灶分類結果。


一、什麼是 Transfer Learning?

前面建立的 CNN,都是從隨機初始化的 Weight 開始訓練。

模型必須自己從 HAM10000 的圖片中,逐漸學習邊緣、顏色、紋理等影像特徵。

但如果有一個模型,已經在大量圖片上訓練過呢?

Transfer Learning 的概念,就是將模型在其他任務中學到的知識,轉移到目前的新任務。

例如某個已經在大量圖片上訓練的模型,學過邊緣、紋理、形狀等影像特徵,我們保留部分已學到的能力,應用到 HAM10000 皮膚病灶分類,這樣就不需要讓模型完全從零開始學習所有影像特徵。

不過,原本模型學習的圖片不一定是醫學影像,因此 Transfer Learning 也不保證一定會比自己建立的 CNN 好。


二、什麼是 Pre-trained Model?

Pre-trained Model(預訓練模型)就是已經使用其他資料完成訓練的模型。

常見的影像分類模型包括:

模型 特點
VGG16 架構較直觀,但參數數量較多
ResNet 使用 Residual Connection,幫助訓練較深的網路
MobileNetV2 相對輕量,適合運算資源有限的環境
EfficientNet 透過架構設計平衡模型規模與效率

這次選擇 MobileNetV2,並使用在 ImageNet 上預訓練的權重。

ImageNet 包含大量一般物體圖片,雖然和皮膚病灶影像不同,但模型已經學到一些可以重複利用的影像特徵。


三、什麼是 Feature Extraction?

Feature Extraction(特徵擷取)是 Transfer Learning 常見的使用方式。

做法是先保留 Pre-trained Model 已經學到的 Weight,不讓它們在訓練過程中改變。

接著,在模型後面加入新的分類層,讓它學習目前的 HAM10000 七種類別。

HAM10000 Image
↓
MobileNetV2
(保留原本的 Weight)
↓
Global Average Pooling
↓
Dense
↓
7-Class Output

在 TensorFlow 中,可以使用:

base_model.trainable = False

這表示先凍結 Pre-trained Model 的參數,因此這個階段主要訓練新加入的分類層,而不是重新訓練整個 MobileNetV2。


四、什麼是 Fine-tuning?

如果只使用 Feature Extraction,模型原本學到的特徵可能不完全適合皮膚病灶圖片。

因此還可以進一步使用 Fine-tuning(微調)。

Fine-tuning 會開放 Pre-trained Model 的部分 Layer,讓模型根據 HAM10000 的圖片,調整原本的 Weight。

Fine-tuning 通常會使用比較小的 Learning Rate,避免更新幅度過大,破壞原本已經學到的特徵。

不過 Fine-tuning 並不保證一定改善結果,也可能因為資料量有限或設定不適合而出現 Overfitting。


五、實際建立 Transfer Learning 模型

這次延續 HAM10000 Dataset,使用 MobileNetV2 進行七類皮膚病灶分類。

與前面自己建立的 CNN 不同,這次使用已經在 ImageNet 上訓練好的模型作為特徵擷取器。

base_model = tf.keras.applications.MobileNetV2(weights="imagenet",include_top=False,input_shape=(160, 160, 3))

base_model.trainable = False

其中:

  • weights="imagenet":載入 ImageNet 預訓練權重
  • include_top=False:移除原本的分類層
  • input_shape:設定輸入圖片尺寸
  • trainable=False:先凍結預訓練模型

接著再加入新的分類層,讓模型學習 HAM10000 的七種類別。

需要注意,MobileNetV2 有自己的影像前處理方式,因此不能直接把前面 CNN 使用的 Normalization 設定原封不動套用。


六、實際比較不同模型

這次我們可以分成三個階段:

模型一:3-Layer CNN 從零開始訓練

模型二:MobileNetV2 Feature Extraction

模型三:MobileNetV2 Feature Extraction + Fine-tuning

這次我主要想觀察:

使用 Pre-trained Model,是否真的能比自己建立的 CNN 有更好的分類表現?

比較時使用相同的 HAM10000 資料切分,並根據不同模型的需求進行適當的影像前處理。


七、比較 Validation Loss

https://ithelp.ithome.com.tw/upload/images/20261011/201692510trhVBnkQX.png

這次將 MobileNetV2 的 Feature Extraction 和 Fine-tuning 兩個階段進行比較。

從曲線可以看到,Feature Extraction 階段的 Validation Loss 從約 0.78 逐漸下降到 0.66 左右,但後期仍有一些波動。

進入 Fine-tuning 後,Validation Loss 進一步下降,最低約為 0.63,比 Feature Extraction 階段更低。

這表示在這次實驗中,解凍部分預訓練 Layer,讓模型進一步學習 HAM10000 的影像特徵,確實改善了 Validation Loss。

不過 Fine-tuning 的 Validation Loss 仍有波動,因此不能認為解凍越多 Layer 就一定越好。


八、比較 Test Data

最後使用相同的 Test Data,比較三種模型的分類結果:

模型 Test Loss Test Accuracy
3-Layer CNN 0.6831 73.16%
MobileNetV2(Feature Extraction) 0.6586 77.58%
MobileNetV2(Fine-tuning) 0.6452 78.58%

從結果可以看到,MobileNetV2 在 Feature Extraction 階段就達到 77.58% 的 Test Accuracy,比原本的 3-Layer CNN 高出約 4.42 個百分點。

進一步 Fine-tuning 後,Test Accuracy 提升到 78.58%,Test Loss 也從 0.6586 降低到 0.6452。

這次實驗中,Fine-tuning 後的 MobileNetV2 在三種模型中有最高的 Test Accuracy 和最低的 Test Loss。

不過這不代表 Transfer Learning 一定比自己建立的 CNN 好,實際效果仍然會受到資料、模型架構及訓練設定影響。


Day28 小結

今天透過 MobileNetV2,實際比較了從零開始訓練 CNN、Feature Extraction,以及 Fine-tuning 三種方式。

實驗結果中,使用 Pre-trained Model 後,Test Accuracy 從 73.16% 提升到 77.58%,進一步 Fine-tuning 後則達到 78.58%。

這讓我發現,利用模型已經學到的影像特徵,再針對目前的資料進行調整,確實有機會比完全從零開始訓練得到更好的結果。

不過模型的整體 Accuracy 提升,不代表所有皮膚病灶類別都辨識得更好,仍然需要考慮 Class Imbalance 與不同類別的預測情況。

下一篇,我們將整理前面嘗試過的各種模型調整方法,看看哪些方法帶來改善,以及如何選擇適合目前資料的模型。


Day28 小結

今天認識了 Transfer Learning,以及兩種常見的使用方式:Feature Extraction 和 Fine-tuning。

Feature Extraction 先保留 Pre-trained Model 的權重,只訓練新的分類層;Fine-tuning 則進一步調整部分預訓練 Layer,讓模型有機會更適合目前的資料。

不過:

Pre-trained Model 並不保證一定比從零開始建立的 CNN 更好,仍然需要透過實驗比較。

下一篇,我們將整理前面嘗試過的模型調整方法,看看哪些設定真正帶來改善,以及如何選擇適合目前資料的模型。


上一篇
Day27 CNN 疊越深真的越強嗎?改變模型架構實驗看看
下一篇
Day29 到底怎麼調模型?從 Baseline 到最佳模型的完整調校實戰
系列文
從 Pixel 到 AI:30 天影像辨識入門之路 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言