⭐ 答題得分:0 / 0
CV · L21102 · AI 相關技術應用
電腦視覺(Computer Vision)
CNN→ResNet→YOLO架構演進、3D特徵圖視覺化、語義/實例分割、Vision Transformer(ViT)、遷移學習,對應 iPAS 中級科目一高頻考點
CNN 3D ResNet YOLO ViT 遷移學習
🏗️ CNN 架構演進(LeNet → AlexNet → VGG → ResNet)
從5層到152層:深度學習如何征服影像辨識

卷積神經網路(CNN)的核心優勢:透過卷積核(Filter)自動提取局部特徵(邊緣→紋理→物件),並藉由參數共享大幅減少參數量。ImageNet 大賽(ILSVRC)推動了四代里程碑架構。

LeNet (1998) 5 層 手寫數字辨識 32×32 輸入 錯誤率: ~1% AlexNet (2012) 8 層 · GPU 訓練 ReLU + Dropout ImageNet 首冠 60M 參數 錯誤率: 15.3% VGG (2014) 16-19 層 全用 3×3 卷積核 簡單統一設計 138M 參數 遷移學習基礎 錯誤率: 7.3% ResNet (2015) 50/101/152 層 殘差連結(Skip Connection) 解決梯度消失問題 F(x) + x 直接相加 25M 參數(更少更強) ◀ 超越人類辨識率 錯誤率: 3.57% (人類: 5%)
卷積運算(Convolution)
卷積核(Filter)在輸入影像上滑動,計算點積,提取局部特徵。一個 3×3 卷積核只有9個參數,但可以掃描整張影像,實現參數共享。池化層(Max Pooling)降低維度、增加平移不變性。
▶ 考點:卷積核 / 參數共享 / 平移不變性
AlexNet 的突破
2012年 ImageNet 競賽,AlexNet 以 15.3% 錯誤率大幅領先亞軍(26%),開啟深度學習時代。關鍵創新:GPU 平行訓練、ReLU 激活函數(取代 sigmoid)、Dropout 防過擬合、資料增強。
▶ 考點:ReLU 取代 Sigmoid / GPU 加速
ResNet 殘差連結(核心考點)
深層網路訓練時梯度逐層衰減(梯度消失)。ResNet 引入跳躍連結(Skip Connection):F(x) + x,讓梯度可以直接回傳,解決了訓練100層以上網路的難題。
▶ 考點:ResNet 解決梯度消失 / F(x)+x
📌 iPAS 考試高頻:ResNet 的殘差連結(Skip Connection)解決梯度消失問題,公式為 H(x) = F(x) + x。VGG 全用 3×3 卷積核,AlexNet 首次使用 GPU 訓練。
🎬 卷積運算互動展示
3×3 卷積核滑動計算過程(點擊「下一步」逐步觀看)
📷 輸入矩陣(6×6,模擬灰階影像像素值)和 3×3 卷積核(邊緣偵測 filter)準備就緒。點擊「下一步」開始卷積運算。
🎯 YOLO 物件偵測
一次前向傳播同時偵測多個物件(You Only Look Once)

傳統兩階段偵測(R-CNN系列):先生成候選區域再分類(慢)。YOLO 將偵測視為單一迴歸問題:將影像分割成 S×S 格子,每格預測 B 個邊框(Bounding Box)和類別概率,一次性輸出所有結果。

// YOLO 輸出格式(每個格子預測)
Grid Cell → [x, y, w, h, confidence] × B + class_probabilities

// confidence = P(物件存在) × IoU(預測框, 真實框)
IoU = 交集面積 / 聯集面積 // Intersection over Union

// 非極大值抑制(NMS):過濾重複框
NMS: 保留 confidence 最高的框,抑制 IoU > 閾值的其他框
YOLO vs R-CNN 比較
YOLO:單階段偵測,一次前向傳播完成,速度達 45fps(實時)。
R-CNN:兩階段,先提取候選區(Region Proposal)再分類,精度高但慢(~47秒/張)。
Faster R-CNN:引入 RPN 加速候選區提取。
▶ 考點:YOLO一次前向傳播 / 實時偵測
IoU(交並比)
衡量預測邊界框與真實框的重疊程度。IoU = 交集面積 / 聯集面積。
IoU = 1:完美重疊;IoU = 0:無重疊。
通常 IoU > 0.5 視為正確偵測(True Positive)。
▶ 考點:IoU = 交集/聯集 / 評估偵測準確度
NMS(非極大值抑制)
YOLO 對同一物件可能生成多個重疊框。NMS 解決方法:選最高信心分數的框 → 計算其與其他框的 IoU → 抑制 IoU 超過閾值的重複框 → 重複直到無重疊框。
▶ 考點:NMS 消除重複偵測框
🖼️ 影像分割:語義分割 vs 實例分割
從分類到像素級理解的三個層次
任務類型輸出粒度能區分個體?代表模型應用場景
影像分類全圖標籤ResNet、VGG貓/狗分類
物件偵測邊界框(BBox)YOLO、Faster R-CNN行人偵測、車牌識別
語義分割像素級類別標籤❌(同類視為一體)FCN、U-Net、DeepLab醫療影像邊界、自駕道路分割
實例分割像素級 + 個體區分✅(每個個體分開)Mask R-CNN工廠計件、細胞計數
🏥 iPAS 情境題:「醫療影像需要精確標示腫瘤邊界」→ 語義分割(像素級分類)。「工廠流水線需統計每個瑕疵零件的數量」→ 實例分割(區分個體)。
🔮 3D 卷積層特徵圖視覺化
CNN 前向傳播:輸入→卷積層→池化層→特徵圖堆疊(可拖曳旋轉)
🔮 CNN 特徵圖 3D 視覺化 · 拖曳旋轉
🤖 Vision Transformer(ViT)
將圖片切成 Patch,用 Transformer 處理影像任務

ViT(2020)突破性地將 NLP 的 Transformer 架構直接應用於影像:將影像切割成固定大小的 Patch(如 16×16),展平後加上位置編碼(Position Embedding),送入 Transformer Encoder。

// ViT 處理流程
Image (224×224×3)
Patch Split: 196 個 16×16 patches
Linear Projection: 每個 patch → 768 維向量
+ Position Embedding: 加入位置資訊
Transformer Encoder: Multi-Head Self-Attention
[CLS] Token → 分類輸出

// 注意:ViT 需要大量資料預訓練(如 JFT-300M)
// 資料量不足時,CNN 仍優於 ViT
ViT vs CNN 核心差異
CNN:局部感受野,透過層疊卷積逐漸擴大感知範圍,具備平移不變性,小資料效果好。
ViT:全局 Self-Attention,第一層就能感知全圖關係,需要大量資料。
▶ 考點:ViT 用 Patch+Position Embedding
Patch + Position Embedding
224×224 影像以 16×16 patch 切割 → 196 個 patch。每個 patch 展平後線性投影為向量。由於 Transformer 無位置感知,必須額外加入 Position Embedding(可學習或固定)表示 patch 在圖中的位置。
▶ 考點:196 patches / Position Embedding
遷移學習(Transfer Learning)
在大型資料集(ImageNet)預訓練的模型已學到通用視覺特徵(邊緣、紋理、形狀)。針對特定任務(如醫療X光)只需微調(Fine-tuning)最後幾層,用少量資料即可達到高效果。
▶ 考點:遷移學習節省訓練成本 / Fine-tuning
🎲 資料增強(Data Augmentation)
透過人工變換擴充訓練資料,提升模型泛化能力
增強技術操作方式防止過擬合原因適用場景
水平翻轉左右鏡像讓模型對左右朝向不敏感通用影像分類
隨機裁剪隨機選取部分區域模型學習不同尺度局部特徵物件偵測
顏色抖動調整亮度/對比度/飽和度對光照條件不敏感戶外場景辨識
旋轉/仿射隨機旋轉角度對方向不敏感(但某些任務不適用)醫療影像、衛星圖
Mixup兩張圖線性插值混合增加決策邊界平滑度分類精度提升
CutOut/CutMix遮蓋或置換部分區域迫使模型學習全局特徵增強魯棒性
⚠️ 注意:資料增強要符合任務語意。如醫療X光「不可水平翻轉」(左右肺有別義);文字辨識「不可旋轉180度」(上下顛倒影響語意)。
💻 程式碼考點(PyTorch · torchvision · OpenCV)
📦 torchvision — CNN 模型載入與遷移學習
# 載入預訓練 ResNet50(遷移學習)
import torchvision.models as models
import torch.nn as nn

# 載入 ImageNet 預訓練權重
model = models.resnet50(pretrained=True)

# 凍結所有層(只訓練最後分類頭)
for param in model.parameters():
    param.requires_grad = False

# 替換最後全連接層(適應新任務類別數)
num_classes = 10
model.fc = nn.Linear(model.fc.in_features, num_classes)

# 只有 fc 層的參數會被訓練
optimizer = torch.optim.Adam(model.fc.parameters(), lr=1e-3)
pretrained=True
載入在 ImageNet(1.2M 張、1000類)預訓練的權重。模型已學到通用視覺特徵,可直接用於遷移學習。
▶ 考點:預訓練模型節省訓練成本
requires_grad = False
凍結特徵提取層的梯度更新,只允許最後分類頭學習。適用於目標資料集與預訓練資料集相似的情況。
▶ 考點:凍結層 / 只訓練分類頭
in_features 替換
ResNet50 的 fc 層原為 2048→1000(ImageNet 1000類)。替換為 2048→N 以適應新任務類別數。輸入特徵維度 in_features 保持不變。
▶ 考點:替換分類頭不改特徵提取
🔧 torchvision.transforms — 資料增強管道
from torchvision import transforms

# 訓練集增強(強)
train_transform = transforms.Compose([
    transforms.RandomResizedCrop(224),
    transforms.RandomHorizontalFlip(),    # 50% 機率翻轉
    transforms.ColorJitter(brightness=0.2, contrast=0.2),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                    std=[0.229, 0.224, 0.225]) # ImageNet 均值/標準差
])

# 驗證集(不增強,只標準化)
val_transform = transforms.Compose([
    transforms.Resize(256), transforms.CenterCrop(224),
    transforms.ToTensor(), transforms.Normalize(...)
])
Compose 管道
將多個轉換操作串聯,按順序依次執行。訓練集用隨機增強提升泛化;驗證集只做確定性預處理(不可隨機,否則評估不穩定)。
▶ 考點:訓練增強/驗證不增強
Normalize 標準化
ToTensor() 後像素值為 [0,1]。Normalize 用 ImageNet 的均值(0.485,0.456,0.406)和標準差(0.229,0.224,0.225) 標準化,使輸入分佈穩定,加速收斂。
▶ 考點:ImageNet 均值標準化
RandomHorizontalFlip
以 50% 機率水平翻轉圖片。是最常用且安全的增強方式(對多數任務語意不變)。注意:醫療影像或文字圖片需謹慎使用。
▶ 考點:增強需符合任務語意
🔍 評估指標:mAP(Mean Average Precision)物件偵測
from torchmetrics.detection import MeanAveragePrecision

metric = MeanAveragePrecision(iou_thresholds=[0.5]) # mAP@0.5

# 更新預測結果
metric.update(preds=[{
    'boxes': predicted_boxes,   # [N, 4] 邊界框
    'scores': confidence_scores, # [N] 信心分數
    'labels': predicted_labels  # [N] 類別標籤
}], target=[{
    'boxes': ground_truth_boxes,
    'labels': true_labels
}])

# mAP 計算:所有類別的 AP 平均值
result = metric.compute() # {'map': tensor(0.85), 'map_50': ...}
AP(Average Precision)
對不同信心閾值下的 Precision-Recall 曲線積分。AP = AUC(PR曲線)。mAP 是所有類別 AP 的平均。物件偵測的主要評估指標。
▶ 考點:mAP = 多類別 AP 平均
IoU 閾值
mAP@0.5:預測框與真實框 IoU ≥ 0.5 才算 True Positive(PASCAL VOC 標準)。mAP@0.5:0.95:COCO 標準,更嚴格。
▶ 考點:IoU閾值判斷TP/FP
Precision vs Recall 取捨
降低信心閾值 → Recall ↑(偵測更多物件)但 Precision ↓(誤報增加)。安防場景需高 Recall(不漏偵);醫療篩檢需高 Precision(減少誤診)。
▶ 考點:任務決定 Precision/Recall 優先
🧪 歷屆考題程式題型

以下為常見的 iPAS 程式概念考題:

Q1. 以下 PyTorch 程式碼中,param.requires_grad = False 的目的是?
A. 增加模型參數數量
B. 凍結該層參數,使其在訓練時不更新(遷移學習中保留預訓練知識)✓
C. 將參數轉換為 float32
D. 啟用 GPU 加速計算
Q2. 使用 transforms.Normalize(mean, std) 的主要目的是?
A. 將影像轉換為黑白
B. 隨機翻轉影像以增強資料
C. 使輸入像素值分佈穩定(均值≈0、標準差≈1),加速模型收斂 ✓
D. 調整影像解析度至統一大小
🎯 仿真考題(8 題)