玩統計機器學習筆記

卷積神經網路與物件偵測CNNs & Object Detection

從卷積層與池化層的尺寸、參數計算出發,認識經典 CNN 架構的演進,再延伸到 YOLO 與 R-CNN 系列的物件偵測方法。

第 10 章,共 11 章|初版 2019 年 4 月・2026 年 10 月修訂

本章內容
  1. 10.1為什麼用卷積
  2. 10.2卷積層
  3. 10.3池化層與全連接層
  4. 10.4計算範例
  5. 10.5經典架構
  6. 10.6物件偵測
  7. 10.7交併比與非極大值抑制
  8. 10.8兩階段偵測器
  9. 10.9參考資料

影像是維度極高的資料:一張 224×224 的彩色照片就有超過 15 萬個數值。如果用第 7 章的全連接網路直接處理,第一個隱藏層只要有 1,000 個單元,就需要約 1.5 億個權重,不但難以訓練,也完全忽略了「相鄰像素彼此相關」的空間結構。卷積神經網路(Convolutional Neural Network, CNN)改用小型濾波器在影像上滑動,以很少的參數擷取局部特徵,再一層層組合成更抽象的表示,是電腦視覺的基礎架構。

本章前半整理 CNN 的基本元件、尺寸與參數的計算方式,以及幾個經典架構;後半進入物件偵測(object detection)。物件偵測的部分最初整理自一個車輛偵測(car detection)專案的學習筆記,以 YOLO 為主線,依序串起分類、定位、特徵點偵測、滑動視窗、交併比、非極大值抑制與錨框等概念,最後再補充兩階段偵測器 R-CNN 系列作為對照。

10.1為什麼用卷積Why Convolutions

卷積層相較於全連接層,有兩個關鍵的結構優勢:

  • 參數共享(parameter sharing):一個濾波器(filter)就像一個滑動視窗,在整張影像上移動,每個位置都使用同一組權重。能偵測垂直邊緣的特徵偵測器,在影像左上角有用,在右下角通常也一樣有用,因此不需要為每個位置各學一份參數。
  • 連接稀疏性(sparsity of connections):每一個輸出值只與輸入中的一小塊區域(感受野,receptive field)相連,而不是與所有輸入相連。

兩者合起來,使卷積層的參數量只取決於濾波器的大小與數量,與輸入影像的尺寸無關。以本章計算範例的第一層為例:把 32×32×3 的輸入轉換成 28×28×6 的輸出,卷積層只需要 456 個參數;若改用全連接層,則需要 3,072 × 4,704 ≈ 1,445 萬個權重。參數共享還帶來平移等變性(translation equivariance):物體在影像中平移,它在特徵圖上引起的反應也跟著平移,這正是辨識影像時需要的性質。

10.2卷積層Convolution Layer

濾波器與輸出深度

濾波器又稱卷積核(kernel),大小為 f×f×cinf \times f \times c_{\text{in}}:ff 是邊長,常見的有 1、3、5;深度 cinc_{\text{in}} 必須等於輸入的通道數,例如 RGB 影像為 3。濾波器在每個位置與對應的區塊逐元素相乘,再把所有通道的結果加總、加上一個偏差(bias)bb,得到一個數值;滑過整張輸入後,就得到一張二維的特徵圖(feature map),之後通常再套用 ReLU 等非線性激勵函數。

使用 KK 個濾波器,就得到 KK 張特徵圖,疊起來成為深度為 KK 的輸出。換句話說,輸出的深度由濾波器的數量決定,與輸入的通道數無關。每個濾波器看的是同一塊空間區域,但各自學習尋找不同的特徵,例如不同方向的邊緣或不同的顏色組合。

嚴格來說,深度學習中的「卷積」是互相關(cross-correlation):數學上的卷積要先把核翻轉再滑動。由於濾波器的權重是學出來的,翻不翻轉沒有實質差別,各框架都直接實作互相關,但仍沿用「卷積」這個名稱。

步幅與填補

  • 步幅(stride)ss:濾波器每次移動的格數。s=2s = 2 時,輸出的高與寬大約減半。
  • 填補(padding)pp:在輸入的四周補上 pp 圈 0,稱為零填補(zero padding)。它有兩個作用:避免輸出隨層數增加而快速縮小,以及讓邊緣像素也能被濾波器充分使用。

兩種慣用的填補設定:

  • valid:不填補,p=0p = 0,輸出會比輸入小。
  • same:選擇 pp 使輸出的高寬與輸入相同。在 s=1s = 1、ff 為奇數時,p=(f−1)/2p = (f - 1)/2,例如 3×3 濾波器配 p=1p = 1。

輸出尺寸

輸入的高(或寬)為 nn 時,輸出的高(或寬)為:

nout=⌊n+2p−fs⌋+1 n_{\text{out}} = \left\lfloor \frac{n + 2p - f}{s} \right\rfloor + 1

高與寬分別套用同一個公式。分數不能整除時代表濾波器最後一步會超出輸入邊界,這個位置直接捨棄,所以要向下取整。例如 n=7n = 7、f=3f = 3、p=0p = 0、s=2s = 2 時輸出為 ⌊4/2⌋+1=3\lfloor 4/2 \rfloor + 1 = 3;n=8n = 8 時為 ⌊5/2⌋+1=3\lfloor 5/2 \rfloor + 1 = 3,最右側一欄沒有被用到。

參數數量

每個濾波器有 f⋅f⋅cinf \cdot f \cdot c_{\text{in}} 個權重,加上 1 個偏差,因此一個卷積層的參數量為:

Pconv=(f⋅f⋅cin+1)⋅K P_{\text{conv}} = (f \cdot f \cdot c_{\text{in}} + 1) \cdot K

例如輸入有 64 個通道,使用 128 個 3×3 濾波器:(3⋅3⋅64+1)⋅128=73,856(3 \cdot 3 \cdot 64 + 1) \cdot 128 = 73{,}856。這個數字與輸入的高寬無關,無論輸入是 32×32 還是 1,024×1,024 都一樣。

10.3池化層與全連接層Pooling and Fully Connected Layers

池化層

池化層(pooling layer)的目的是降採樣(downsampling):縮小特徵圖的高寬,減少後續的計算量,並讓表示對小幅平移較不敏感。常見的有兩種:

  • 最大池化(max pooling):取視窗內的最大值,最常用。直覺上,只要某個特徵在視窗內任何位置出現過,就把它保留下來。
  • 平均池化(average pooling):取視窗內的平均值。早期的 LeNet-5 使用它;現代網路多半只在最後用全域平均池化(global average pooling),把每張特徵圖平均成一個數值。

池化層有幾個固定的特性:

  • 常見設定為 f=2,s=2f = 2, s = 2(高寬減半),或 f=3,s=2f = 3, s = 2(視窗互相重疊,AlexNet 採用)。
  • 每個通道獨立處理,只改變高與寬,深度不變。
  • 沒有可學習的參數,ff 與 ss 都是事先決定的超參數。
  • 很少使用填補,因為池化的目的本來就是縮小尺寸。輸出尺寸公式與卷積層相同,取 p=0p = 0 即為 ⌊(n−f)/s⌋+1\lfloor (n - f)/s \rfloor + 1。

全連接層

全連接層(fully connected layer, FC)中,每個單元都連接到前一層的所有輸出。CNN 通常在最後幾層把特徵圖攤平(flatten)成向量,接上全連接層與 softmax 輸出層。若第 ll 層有 n[l]n^{[l]} 個單元,前一層有 n[l−1]n^{[l-1]} 個輸出,參數量為:

PFC=n[l]⋅n[l−1]+n[l] P_{\text{FC}} = n^{[l]} \cdot n^{[l-1]} + n^{[l]}

前項是權重矩陣 W[l]W^{[l]}(大小 n[l]×n[l−1]n^{[l]} \times n^{[l-1]}),後項是偏差向量 b[l]b^{[l]}。

全連接層是參數的大宗。AlexNet 與 VGG 的末端各有三層全連接層,佔了絕大部分參數:VGG-16 約 1.38 億個參數中,約 1.24 億個在全連接層,光是第一個全連接層(7⋅7⋅512=25,0887 \cdot 7 \cdot 512 = 25{,}088 個輸入、4,096 個輸出)就有約 1.03 億個。相對地,激勵值所佔的記憶體則集中在前段高解析度的卷積層。也因此,後來的架構多改以全域平均池化取代大型的全連接層。

1×1 卷積與 Inception 模組

1×1 卷積(1×1 convolution)看似只是把每個像素乘上一個常數,但濾波器的深度等於輸入的通道數,所以它其實是在每個像素位置上,對所有通道做加權組合,相當於「逐像素的全連接層」。它最主要的用途是調整通道數,例如把 28×28×192 壓縮成 28×28×16,同時多加一層非線性。

Inception 模組(Inception module)把 1×1、3×3、5×5 卷積與 3×3 最大池化平行排列,全部使用 same 填補以保持高寬一致,再沿深度方向串接(concatenate)輸出,讓網路自己學習哪一種尺度的特徵有用。為了避免 5×5 卷積的計算量過大,會先用 1×1 卷積作為瓶頸層(bottleneck layer)降低通道數。以 28×28×192 的輸入、產生 32 個通道的 5×5 卷積為例(28⋅28=78428 \cdot 28 = 784):

做法 乘法次數 約
直接 5×5 卷積(192 → 32) 784⋅32⋅(5⋅5⋅192)784 \cdot 32 \cdot (5 \cdot 5 \cdot 192) 1.2 億
先 1×1 卷積(192 → 16) 784⋅16⋅192784 \cdot 16 \cdot 192 240 萬
再 5×5 卷積(16 → 32) 784⋅32⋅(5⋅5⋅16)784 \cdot 32 \cdot (5 \cdot 5 \cdot 16) 1,000 萬

加入瓶頸層後合計約 1,240 萬次乘法,約為原本的十分之一,而且實驗上幾乎不影響表現。

10.4計算範例A Worked Example

以一個小型 CNN 為例,輸入為 32×32×3 的彩色影像,輸出 3 個類別。下表列出每一層的輸出形狀、激勵值數量與參數量:

層 輸出形狀 激勵值 參數量
輸入 32×32×3 3,072 0
卷積 5×5,s=1s=1,K=6K=6 28×28×6 4,704 (5⋅5⋅3+1)⋅6=456(5\cdot5\cdot3+1)\cdot6=456
最大池化 2×2,s=2s=2 14×14×6 1,176 0
全連接 64 64 64 1,176⋅64+64=75,3281{,}176\cdot64+64=75{,}328
全連接 32 32 32 64⋅32+32=2,08064\cdot32+32=2{,}080
Softmax 3 3 3 32⋅3+3=9932\cdot3+3=99

逐層的計算如下:

  1. 卷積層:不填補(valid),輸出邊長為 (32+0−5)/1+1=28(32 + 0 - 5)/1 + 1 = 28;6 個濾波器使深度變成 6。每個濾波器有 5⋅5⋅3=755 \cdot 5 \cdot 3 = 75 個權重加 1 個偏差,共 76 個參數,6 個濾波器合計 456 個。
  2. 池化層:輸出邊長為 (28−2)/2+1=14(28 - 2)/2 + 1 = 14,深度維持 6,沒有參數。
  3. 第一個全連接層:先把 14×14×6 攤平成 1,176 維的向量,連接到 64 個單元,權重 1,176⋅64=75,2641{,}176 \cdot 64 = 75{,}264 個,加上 64 個偏差,共 75,328 個。
  4. 其餘全連接層:64 → 32 有 64⋅32+32=2,08064 \cdot 32 + 32 = 2{,}080 個參數;32 → 3 的 softmax 輸出層有 32⋅3+3=9932 \cdot 3 + 3 = 99 個。

全部參數合計 456+75,328+2,080+99=77,963456 + 75{,}328 + 2{,}080 + 99 = 77{,}963 個,其中第一個全連接層就佔了約 97%。

10.5經典架構Classic Architectures

CNN 架構的演進,很大程度是由 ImageNet 大規模視覺辨識挑戰賽(ILSVRC)推動的。下表整理幾個里程碑:

年份 架構 重點
1998 LeNet-5 約 6 萬個參數;5×5 卷積搭配平均池化,用於手寫數字辨識
2012 AlexNet 約 6,000 萬個參數;8 層(5 層卷積 + 3 層全連接);ReLU、dropout、局部響應正規化(LRN);拆在 2 張 GPU 上訓練
2014 VGG-16/19 約 1.38 億個參數(VGG-16);只用 3×3 same 卷積與 2×2 最大池化;以 4 張 GPU 訓練 2–3 週
2014 GoogLeNet 22 層;Inception 模組;以全域平均池化取代大型全連接層,參數僅約 500 萬–700 萬
2015 ResNet 殘差連接 y=F(x)+xy = F(x) + x;ImageNet 上訓練了 18–152 層的網路(CIFAR-10 上甚至超過 1,000 層)

AlexNet 與 VGG

AlexNet 在 2012 年大幅領先傳統方法,讓深度學習在電腦視覺領域受到全面關注。它的許多設計後來成為標準做法:以 ReLU 取代 sigmoid/tanh 加快訓練,以 dropout 抑制全連接層的過擬合(見第 9 章)。局部響應正規化則在之後的研究中被發現幫助有限,已少有人使用。

VGG 的設計哲學是「簡單而一致」:所有卷積都是 3×3、步幅 1、same 填補,每經過一次 2×2 最大池化就把高寬減半、通道數加倍。兩層 3×3 卷積的感受野等於一層 5×5,三層等於一層 7×7,但參數更少、非線性更多。名稱中的 16 與 19 指的是有權重的層數,包含末端的 3 層全連接層。VGG 的代價是龐大:前向傳播一張影像約產生 2,400 萬個激勵值,以 32 位元浮點數(4 bytes)計算約 96 MB,反向傳播還要再多約一倍。

GoogLeNet 與 ResNet

GoogLeNet 由多個 Inception 模組堆疊而成,雖有 22 層,參數卻遠少於 AlexNet。關鍵在於大量使用 1×1 瓶頸層,以及在最後以全域平均池化取代大型全連接層,只保留一層線性分類層。

ResNet 處理的是另一個問題:網路加深到一定程度後,連訓練集誤差都會上升。這不是過擬合,而是最佳化變得困難。殘差區塊(residual block)讓一組層學習的不是目標映射 H(x)H(x) 本身,而是殘差 F(x)=H(x)−xF(x) = H(x) - x,輸出為:

y=F(x)+x y = F(x) + x

這條跳躍連接(skip connection)帶來兩個好處:若恆等映射已經足夠好,網路只需要把 FF 推向 0;反向傳播時,梯度也能經由這條捷徑直接往前傳,不必穿過每一層。當 F(x)F(x) 與 xx 的維度不同時,捷徑上會加一個 1×1 卷積做投影。ResNet 在 2015 年以 152 層的網路贏得 ILSVRC,之後成為大多數視覺模型的骨幹(backbone)。

10.6物件偵測Object Detection

分類、定位與偵測

電腦視覺中有三個難度遞增的任務:

  • 影像分類(image classification):判斷影像中是什麼,例如「這是一輛車」。
  • 分類與定位(classification with localization):除了類別,還要用一個邊界框(bounding box)標出單一主要物體的位置。
  • 物件偵測(object detection):影像中可能有多個、不同類別的物體,要全部找出並各自框出。

邊界框通常以中心座標 bx,byb_x, b_y 與高寬 bh,bwb_h, b_w 表示,並以影像的寬高正規化到 0 到 1 之間。對 CC 個類別的定位任務,網路的目標輸出可以寫成一個向量:

y=[pcbxbybhbwc1⋯cC]⊤ y = \begin{bmatrix} p_c & b_x & b_y & b_h & b_w & c_1 & \cdots & c_C \end{bmatrix}^{\top}

其中 pcp_c 表示影像中是否有物體,c1,…,cCc_1, \dots, c_C 表示是哪一類。若 pc=0p_c = 0(只有背景),其餘欄位沒有意義,損失函數只計算 pcp_c 這一項;pc=1p_c = 1 時才計算所有欄位的誤差。實務上各部分常用不同的損失:pcp_c 用邏輯損失、類別用 softmax 交叉熵、座標用平方誤差。

特徵點偵測

特徵點偵測(landmark detection)把同樣的想法推廣:讓網路直接輸出若干個關鍵點的座標 (l1x,l1y),…,(lkx,lky)(l_{1x}, l_{1y}), \dots, (l_{kx}, l_{ky}),例如臉部的眼角與嘴角,或人體姿態估計中的關節位置。要注意的是,每個特徵點在所有訓練資料中的編號順序必須一致,例如第 1 點永遠是左眼外眼角。

滑動視窗與其卷積實作

最直觀的偵測方法是滑動視窗(sliding windows):先訓練一個能判斷「裁切後的小影像是不是車輛」的分類器,再用不同大小的視窗、以某個步幅滑過整張影像,逐一分類。問題在於計算成本:步幅小時視窗數量龐大,每個視窗都要跑一次 CNN;步幅大又會讓定位變得粗糙。

解法是把全連接層改寫成卷積層。一個作用在 5×5×16 特徵圖上、有 400 個單元的全連接層,等價於 400 個 5×5×16 的濾波器,輸出 1×1×400;之後的全連接層則等價於 1×1 卷積。改寫後,網路不再限制輸入尺寸。下表是一個在 14×14×3 視窗上訓練的網路,直接輸入 16×16×3 影像時的結果:

層 14×14×3 輸入 16×16×3 輸入
卷積 5×5,16 個濾波器 10×10×16 12×12×16
最大池化 2×2,s=2s=2 5×5×16 6×6×16
FC 400 → 5×5 卷積,400 個 1×1×400 2×2×400
FC 400 → 1×1 卷積,400 個 1×1×400 2×2×400
Softmax 4 → 1×1 卷積,4 個 1×1×4 2×2×4

輸出的 2×2 中每一格,恰好對應一個 14×14 視窗的分類結果(視窗步幅為 2,等於池化步幅)。四個視窗重疊部分的計算只做一次,這就是滑動視窗的卷積實作(OverFeat, Sermanet et al., 2014)。不過,邊界框的位置與大小仍受限於視窗的格點與尺寸,不夠精確。

YOLO

YOLO(You Only Look Once;Redmon et al.,CVPR 2016,arXiv 2015)把偵測視為一次前向傳播就完成的迴歸問題:

  1. 將影像切成 S×SS \times S 的網格(grid)。
  2. 每個物體只指派給「中心點所在的格子」負責。
  3. 每個格子同時預測邊界框(含 pcp_c 與座標)與類別機率,所有格子的結果在同一次前向傳播中算出。

座標是相對於格子定義的:bx,byb_x, b_y 是中心點在格子內的相對位置,介於 0 與 1 之間;bh,bwb_h, b_w 在本章(沿用 deeplearning.ai 課程的寫法)以格子邊長為單位,可以大於 1,因為物體可能跨越好幾個格子;原始 YOLOv1 論文則以整張影像的寬高正規化 w,hw, h。原始的 YOLO 使用 S=7S = 7,每個格子預測 2 個框與 20 個類別的機率,輸出為 7×7×(2⋅5+20)=7×7×307 \times 7 \times (2 \cdot 5 + 20) = 7 \times 7 \times 30。由於是卷積實作,網格中的格子共用同一次運算,速度足以做即時偵測。

錨框

如果每個格子只輸出一組預測,就無法處理兩個中心點落在同一格的物體,例如站在車子前方的行人。錨框(anchor box)預先定義幾種不同形狀的參考框,例如瘦高的、扁寬的,每個格子對每一個錨框各輸出一組預測。訓練時,每個物體指派給「中心點所在的格子」與「形狀和它的 IoU 最高的錨框」這一組。

使用 AA 個錨框、CC 個類別時,輸出的形狀為 S×S×A×(5+C)S \times S \times A \times (5 + C)。例如 3×3 網格、2 個錨框、3 個類別,輸出就是 3×3×2×83 \times 3 \times 2 \times 8,也可以寫成 3×3×163 \times 3 \times 16。錨框也讓每一組輸出專門負責某一類形狀,使預測更穩定。錨框最早用於 Faster R-CNN,YOLOv2(Redmon & Farhadi, 2017)將它引入 YOLO,並以 k-means 對訓練資料中的邊界框分群來挑選錨框的形狀。若同一格中的物體數多於錨框數,或兩個物體對應到同一個錨框,這個做法仍處理不好,不過網格夠細時這種情況很少見。

YOLO 的完整推論流程是:前向傳播得到所有格子、所有錨框的預測 → 以 pcp_c 乘上類別機率作為每個框的分數,捨棄分數過低的框 → 對每個類別分別做非極大值抑制(見下一節),得到最後的偵測結果。

10.7交併比與非極大值抑制IoU and Non-Max Suppression

交併比

交併比(Intersection over Union, IoU)衡量兩個邊界框的重疊程度,定義為交集面積除以聯集面積:

IoU⁡(A,B)=area⁡(A∩B)area⁡(A∪B)=area⁡(A∩B)area⁡(A)+area⁡(B)−area⁡(A∩B) \operatorname{IoU}(A, B) = \frac{\operatorname{area}(A \cap B)}{\operatorname{area}(A \cup B)} = \frac{\operatorname{area}(A \cap B)}{\operatorname{area}(A) + \operatorname{area}(B) - \operatorname{area}(A \cap B)}

IoU 介於 0(完全不重疊)與 1(完全重合)之間。在偵測中它有三個用途:評估預測框是否正確(IoU ≥ 0.5 常被視為「定位正確」,需要更精確時可提高門檻)、在非極大值抑制中判斷兩個框是否指向同一個物體,以及在訓練時把物體指派給錨框。常見的評估指標平均精確率均值(mean Average Precision, mAP)也建立在 IoU 門檻之上。

以左上角與右下角座標表示邊界框時,計算方式如下。注意交集的寬高可能為負(兩框不重疊),要取 0:

def iou(box_a, box_b):
    """box = (x1, y1, x2, y2),分別為左上角與右下角座標。"""
    x1 = max(box_a[0], box_b[0])
    y1 = max(box_a[1], box_b[1])
    x2 = min(box_a[2], box_b[2])
    y2 = min(box_a[3], box_b[3])
    inter = max(0, x2 - x1) * max(0, y2 - y1)
    area_a = (box_a[2] - box_a[0]) * (box_a[3] - box_a[1])
    area_b = (box_b[2] - box_b[0]) * (box_b[3] - box_b[1])
    return inter / (area_a + area_b - inter)

非極大值抑制

一個物體往往被好幾個相鄰的格子或錨框同時偵測到,產生多個高度重疊的框。非極大值抑制(non-max suppression, NMS)的作用是對每個物體只保留最有把握的那一個框。對每個類別分別執行:

  1. 捨棄分數低於門檻(例如 0.6)的框。
  2. 在剩下的框中,選出分數最高的一個,列為輸出。
  3. 移除所有與它的 IoU 大於或等於門檻(例如 0.5)的其他框,因為它們很可能框的是同一個物體。
  4. 重複步驟 2 與 3,直到沒有剩餘的框。

兩個門檻都是需要依應用調整的超參數:IoU 門檻設得太低,彼此靠近的不同物體可能被誤刪;設得太高,則同一物體會留下重複的框。

10.8兩階段偵測器Two-Stage Detectors: the R-CNN Family

YOLO 屬於單階段(one-stage)偵測器。另一條路線先提出「可能有物體」的候選區域(region proposals),再對每個區域做分類與邊界框修正,稱為兩階段(two-stage)偵測器。R-CNN 系列的演進,可以濃縮成三個步驟:先提出區域、再改成一次卷積處理所有區域,最後連區域提議也由網路端到端完成。

  • R-CNN(Girshick et al.,CVPR 2014,arXiv 2013):以選擇性搜尋(selective search)演算法提出約 2,000 個候選區域,把每個區域縮放成固定大小,各自通過 CNN 擷取特徵,再用 SVM 分類並以迴歸修正邊界框。準確度大幅提升,但非常慢:每個區域都要跑一次完整的 CNN,重疊區域被重複計算。
  • Fast R-CNN(Girshick,ICCV 2015):整張影像只卷積一次,得到共用的特徵圖;再把候選區域投影到特徵圖上,以 RoI 池化(RoI pooling)切成固定大小(例如 7×7),接上全連接層,同時輸出類別與邊界框修正,兩者可以一起訓練。此時的瓶頸只剩下候選區域仍由選擇性搜尋產生。
  • Faster R-CNN(Ren et al.,NIPS 2015):加入區域提議網路(Region Proposal Network, RPN),與偵測網路共用卷積特徵,在特徵圖的每個位置以多個錨框預測「是否有物體」與框的修正量。區域提議本身也由網路學習,整個流程成為端到端(end-to-end)的模型。
方法 候選區域 卷積計算 核心改進
R-CNN 選擇性搜尋 每個區域各做一次 以 CNN 特徵分類候選區域
Fast R-CNN 選擇性搜尋 整張影像一次 RoI 池化、共用特徵圖
Faster R-CNN RPN(網路學習) 整張影像一次 端到端,含區域提議

一般而言,兩階段偵測器的準確度較高,尤其在小物體上;單階段偵測器速度快,適合即時應用。兩條路線後來互相借鏡(例如 YOLO 引入錨框),差距已明顯縮小。

10.9參考資料References

  • Goodfellow, Bengio & Courville, Deep Learning, MIT Press, 2016,第 9 章 Convolutional Networks。
  • Stanford CS231n, Convolutional Neural Networks for Visual Recognition(課程講義)。
  • deeplearning.ai, Convolutional Neural Networks(Coursera 深度學習專項課程第四門課)。
  • LeCun, Bottou, Bengio & Haffner, "Gradient-Based Learning Applied to Document Recognition", Proceedings of the IEEE, 1998。
  • Krizhevsky, Sutskever & Hinton, "ImageNet Classification with Deep Convolutional Neural Networks", NIPS 2012。
  • Simonyan & Zisserman, "Very Deep Convolutional Networks for Large-Scale Image Recognition", ICLR 2015。
  • Lin, Chen & Yan, "Network in Network", ICLR 2014;Szegedy et al., "Going Deeper with Convolutions", CVPR 2015。
  • He, Zhang, Ren & Sun, "Deep Residual Learning for Image Recognition", CVPR 2016。
  • Sermanet et al., "OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks", ICLR 2014。
  • Redmon, Divvala, Girshick & Farhadi, "You Only Look Once: Unified, Real-Time Object Detection", CVPR 2016;Redmon & Farhadi, "YOLO9000: Better, Faster, Stronger", CVPR 2017。
  • Girshick et al., "Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation", CVPR 2014;Girshick, "Fast R-CNN", ICCV 2015;Ren, He, Girshick & Sun, "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks", NIPS 2015。