iT邦幫忙

2026 iThome 鐵人賽

DAY 30
0
Software Development

從像素到 Computer Vision:30 天理解數位影像處理系列 第 30

Day 30 | 為什麼 CNN 能取代很多手工特徵?

  • 分享至 

  • xImage
  •  

上一篇最後留下了一個問題:

既然現在很多電腦視覺的任務都使用深度學習技術,那為什麼 CNN 能夠取代過去大量依賴人工設計的特徵?

要回答這個問題,可以先回頭看看我們前面學過的方法。

從人工設計開始

傳統的電腦視覺中,有很大一部分工作是由人先根據經驗設計方法。

例如:

找邊緣?使用 Sobel。

找角點?使用 Harris。

找特徵點?使用 SIFT 或 ORB。

找直線?使用 Hough Transform。

這些方法本身並沒有問題,而且其中不少方法到現在仍然有實際用途。

但它們都有一個共同的限制:

我們必須先決定,要從圖片中找出什麼樣的資訊。

以 SIFT 為例,它會透過一套設計好的流程,從影像中找出具有辨識性的局部特徵。

這些特徵提取方式,是人類根據對影像結構的理解與數學方法所設計出來的。

但如果今天要辨識的是一隻貓,情況就複雜很多。

到底哪些資訊最能代表「貓」?

耳朵?眼睛?毛髮的紋理?身體輪廓?

不同的圖片、角度、光線和背景,都可能讓這個問題變得更難。

這也是學習式方法開始受到重視的原因。

CNN 改變了什麼?

卷積神經網路(CNN),全名是 Convolutional Neural Network。

看到這個名字,應該會覺得有點熟悉。

因為 CNN 裡面的 Convolution,正是我們前面介紹過的 Convolution。

傳統影像處理中,我們通常會先設計一個 Kernel,再使用它處理影像。

例如 Sobel:

-1  0  1
-2  0  2
-1  0  1

這個 Kernel 的目的,是讓影像中某個方向的灰階變化產生較強的反應,因此可以用來偵測邊緣。

CNN 也會使用卷積運算,但差別在於,CNN 中的卷積核參數通常不是人事先設計好的,而是透過訓練從資料中學習出來的。

一開始,這些參數通常會經過初始化。

模型取得訓練資料後,會根據預測結果與正確答案之間的誤差,透過反向傳播計算梯度,再利用梯度下降等最佳化方法更新參數。

經過訓練後,卷積層中的權重會逐漸調整,讓模型能夠學到對目前任務有用的特徵表示。

所以比較精確地說:

傳統方法需要人工設計特徵或特徵提取方法,而 CNN 可以透過資料學習適合目前任務的特徵表示。

這也是兩者最重要的差異。

CNN 學到的特徵,跟我們前面學過的東西有關

CNN 的有趣之處在於,雖然我們沒有直接告訴它「這裡是一條邊緣」,但在許多 CNN 模型中,可以觀察到比較前面的 Layer 傾向學習一些低階視覺特徵。

例如:

  • 邊緣與方向
  • 簡單的紋理
  • 局部形狀

再往後,這些低階特徵會逐漸被組合成更複雜的表示。

例如可能開始對:

  • 眼睛
  • 鼻子
  • 耳朵
  • 車輪
  • 物體的局部結構

產生較強的反應。

到了更深的 Layer,模型則可以利用前面累積的資訊形成更高階的特徵表示,最後用來完成分類、偵測或分割等任務。

所以 CNN 並不是:

第一層學邊緣,第二層學XXX,第三層......。

沒有這麼固定。

不同的模型、資料集、架構與訓練方式,都可能產生不同的特徵表示。

比較合理的理解是:

CNN 會透過多層可學習的運算,逐漸從低階的局部資訊建立更高階的特徵表示。

而這些特徵表示最後會被用來完成我們真正關心的電腦視覺任務。

那 CNN 到底取代了什麼?

我們常常會說,CNN 取代了手工特徵。

但比較精確的說法應該是,CNN 在許多任務中,降低了對人工設計特徵與特徵提取流程的依賴。

例如傳統的 Pipeline 可能會是:

Image
  ↓
人工設計的特徵提取
  ↓
Feature
  ↓
Classifier
  ↓
Result

而深度學習則可以直接從影像開始學習:

Image
  ↓
CNN
  ↓
Learned Features
  ↓
Prediction

中間的特徵不是消失了。

相反地,CNN 正是在學習如何從影像中建立這些特徵表示。

差別只是以前需要人先決定「應該提取什麼特徵」,現在則可以讓模型從資料中自己找出對任務有用的特徵。

這也是深度學習帶來的重大改變。

那傳統影像處理還重要嗎?

回到昨天探討的問題:

傳統影像處理還重要嗎?

答案還是很明確:

重要。

CNN 的出現,不代表 Sobel、Morphology、Hough Transform 或其他傳統方法都沒有用了。

在很多實際系統裡,傳統影像處理仍然很有價值。

例如影像前處理、二值化、去除雜訊、形態學處理、幾何分析等工作,有時候使用傳統方法就能有效解決。

而且它們通常具有:

  • 計算成本低
  • 行為容易理解
  • 參數容易控制
  • 不需要大量訓練資料

等優點。

所以真正需要思考的不是:

CNN 和傳統影像處理哪一個比較厲害?

而是:

面對一個問題,哪一種方法比較適合?

這 30 天,我們到底學了什麼?

回頭看看這 30 天的內容。

一開始,我們先從最基本的東西認識圖片:

  • Pixel
  • Resolution
  • Color Space
  • Histogram

先知道一張圖片到底是由什麼組成的。

接著開始處理圖片:

  • Convolution
  • Filter
  • Sharpen
  • Edge Detection
  • Morphology
  • Fourier Transform

這個階段主要是在處理影像本身,讓我們可以把需要的資訊留下來,或把不需要的資訊去掉。

再往後,我們開始從圖片裡面找特徵:

  • Connected Component
  • Corner Detection
  • SIFT
  • ORB
  • Hough Transform

到了這裡,問題開始從「怎麼處理圖片」慢慢變成「怎麼從圖片裡找到有用的資訊」。

最後再看到 CNN,就能把前面的內容串起來。

以前需要人類根據經驗設計特徵與特徵提取方法。

現在則可以讓模型直接從資料中學習適合任務的特徵表示。

這也是從數位影像處理進一步走向現代電腦視覺的其中一條路。

為什麼會想寫這個系列?

其實我在學數位影像處理的時候,也常常遇到一個問題。

公式看得懂、程式也可能寫得出來,但就是不知道:

這東西到底在幹嘛?

所以這個系列沒有一開始就塞很多數學公式,而是想先把每個東西的概念弄清楚。

知道 Edge Detection 是在找什麼,再回頭看 Sobel。

知道 Convolution 在做什麼,再去理解 Kernel。

知道 CNN 也是利用 Convolution 進行特徵提取,再去理解它為什麼能夠從資料中學習特徵。

把這些東西串起來之後,原本看起來零散的演算法,才慢慢變成一條完整的路。

今天總結

這 30 天,我們從 Pixel 開始,一路走到 CNN。

從最基本的影像資料,到影像處理、特徵偵測,再到讓模型自己學習特徵表示。

回頭看會發現,這些方法其實都在面對同一個問題:

我們要怎麼從一張圖片裡取得有用的資訊?

傳統影像處理提供了很多經典的方法,讓我們可以直接操作影像、分析影像。

深度學習技術則讓模型能夠從資料中學習複雜的特徵表示,降低對人工設計特徵的依賴。

兩者之間並不是單純的新方法把舊方法淘汰的關係。

理解前面的 Pixel、Histogram、Convolution、Edge、Corner 和 Feature,反而會讓後面學 CNN 時更容易知道它到底在做什麼。

這 30 天,我們只是把數位影像處理的基礎走過一遍。

接下來,才是真正進入 Computer Vision 的下一段路。

CNN、Object Detection、Segmentation、3D Vision、模型部署,還有更多實際的問題,都還在後面。

這個系列到這裡結束,謝謝各位看到這裡的讀者們。


上一篇
Day 29 | 傳統影像處理與深度學習的分工
系列文
從像素到 Computer Vision:30 天理解數位影像處理30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言