Notes on CS231n: Convolutional Neural Networks for Visual Recognition Part I

Yuki Liu
Taiwan AI Academy
Published in
13 min readDec 3, 2019

Introduction, Image Classification pipeline

CS231n 是一堂相當熱門的電腦視覺課程,由 Stanford Computer Science 的李飛飛教授主講,以下簡介節錄自此課程的官方網站http://cs231n.stanford.edu/

Computer Vision has become ubiquitous in our society, with applications in search, image understanding, apps, mapping, medicine, drones, and self-driving cars. Core to many of these applications are visual recognition tasks such as image classification, localization and detection. Recent developments in neural network (aka “deep learning”) approaches have greatly advanced the performance of these state-of-the-art visual recognition systems. This course is a deep dive into details of the deep learning architectures with a focus on learning end-to-end models for these tasks, particularly image classification.

2017 春季的課程已在 YouTube 上公開上課影片。從此篇文章開始,將會一一分享影片裡面所學到的內容。

CS231n Spring 2017 主要有 14 堂課程以及 2 次的演講,從電腦視覺的基礎概念開始介紹,奠定基礎分類模型、神經網路和最佳化算法後介紹 CNN、RNN、Generative Model、RL 主要幾個深度學習模型在電腦視覺上的應用。此文將會先介紹基礎的內容(Lecture 1、2):

  1. Introduction
  2. Image Classification pipeline

Lecture 1: Introduction

電腦視覺是一門跨學科的學問,包含物理學、生物學、心理學、電腦科學、數學、及工程。

以下將會簡介一些在電腦視覺領域上較有名的研究歷史發展,以及近期更多電腦視覺所要解決的任務。

A brief history of computer vision

生物視覺機制

  • Hubel & Wiesel, 1959

觀察貓的視覺皮質細胞對哪種刺激會有反應,視覺皮質細胞含有各種神經元,特別有簡單細胞及複雜細胞對 “ 簡單圖樣及其移動的方向 ” 發生強烈的反應。此實驗發現視覺處理始於簡單的結構,進而處理複雜的物件能辨識所看到的物體

機器視覺機制

  • Gemma Frisius, 1545

針孔成像相機如早期生物眼睛構造,從小孔接收光線,透過後面的平面板收集信息且投影成像,也是最早仿造生物視覺的機器。

  • Larry Roberts, 1963

Block world 為最早有關電腦視覺的一篇論文,提出視覺世界從簡單的幾何圖形開始,進而能識別及重建。

  • David Marr, 1970s

Vision 這本書描述作者如何理解視覺,以及如何開發識別視覺世界的演算法 — 從一張拍攝的影像要獲得真實世界的 3D 模型,必須經歷的一些過程。

  1. Primary Sketch:以大部分的邊緣、端點、線條、曲線簡單的結構來表示一張影像。
  2. 2.5-D Sketch:從不連續的深度曲面分割影像。
  3. 3-D Model Representation:各個分層的曲面則可組織出 3D 模型

此種理想的思維影響了電腦視覺領域幾十年,也是一種非常直觀的方式來解構視覺信息並重建視覺世界的物體。

  • Fischler and Elshlager, 1973; Brooks & Binford, 1979

思考如何以簡單的結構辨識及表示真實世界中的物體,分別提出以圓形(Pictorial Structure)及圓柱體(Generalized Cylinder)簡單的物件來組合成複雜的結構。

  • David Lowe, 1987

通過偵測線和邊緣建構影像中的資訊,嘗試解決物體識別的任務。

1960~1989 年間,科學家從有限且簡單的樣本,嘗試物體識別的任務,但很難做出實際有價值的應用。因此,轉而思考另一個機器視覺的任務 — 如何對目標進行分割。

  • Shi & Malik, 1997

提出基於圖學的 Normalized Cut 演算法,將影像中的像素間的關係並分群至有意義的區域,達成影像分割的任務。

另一個在電腦視覺中有所進展的任務是人臉辨識。

  • Viola & Jones, 2001

基於 1999 – 2000 年間發展的各式機器學習方法,其中以 AdaBoost 來偵測主要人臉的特徵 — 眼睛及其他器官,進而找到人臉。值得一提的是當時的硬體設備有所限制,但此研究實現的卻是即時的人臉檢測,也是實際能在數位相機上應用的技術。

「如何繼續更好地做物體識別任務」依舊是電腦視覺領域的一大問題。

  • David Lowe, 1999

通常物體識別會因為光線、遮罩、拍攝角度等因素而難以辨識。而 SIFT 算法透過特徵的解析,具有物體的表現性及不變性以解決辨識的問題。因此物體識別的任務從偵測 “ 整個目標 ” 轉移到偵測 “ 特徵 ” 上,這讓辨識的任務變得更加容易。

  • Schmid & Ponce, 2006

Spatial Pyramid Matching 進一步識別的是整張圖的場景,其想法是透過影像各個位置的特徵描述,進而由 SVM 的方法對特徵做識別。

  • Dalal & Triggs, 2005; Felzenswalb, McAllester, Ramanan, 2009

思考如何更好的表示一張影像中的特徵,Histogram of gradients Deformable Part Model 一樣透過各自提出的特徵提取方式,並用機器學習方法來識別所要解決的任務。前者以統計梯度方向作為特徵,後者則多加入更細部的位置資訊作為特徵。

電腦視覺主要的任務在於物體辨識,為了解決這項任務,從了解生物視覺系統開始,一直到如何做特徵擷取。而同時也有其他電腦視覺的任務在發展。

直到 21世紀的早期,才開始真正擁有具有標註的資料集提供衡量物體識別任務的成果,其中包含 20 種標記物體的資料集 PASCAL 及更加龐大的資料集 IMAGENET 有 2 萬 2000 種標記的物體影像。

IMAGENET 的競賽從2010年開始,錯誤率一直持續在下降,甚至到了 2015 年更是比人類的識別錯誤率還要更低。
從 2012 年開始有效的降低識別的錯誤率,而當年獲獎的算法即是使用了一種卷積神經網路的方法,持續到 2015 年的優勝算法依舊是卷積神經網路。

CS231n overview

此課程會先專注在電腦視覺最主要的任務上 — 影像辨識,而更進一步發展出來的問題是如何達到物件偵測 Object detection(有邊界框描述位置)、動作識別 Action classification(多張影像的識別)、圖像摘要(形容多個物件間的關係)等。

另外也有更多電腦視覺的任務正在進行中…

左上:語意分割 (Semantic segmentation) 左下:動作識別 (activity recognition) 右上:三維重建 (3D reconstruction) 右下:虛擬實境 (virtual reality)

影片位址: Lecture 1: Introduction

Lecture 2: Image Classification pipeline

對於影像辨識的任務會面臨種種挑戰:

種內差異 (Intraclass variation)、背景干擾 (Background clutter)、亮度(Illumination)、形變 (Deformation)、遮蓋 (Occlusion)
  • 高解析度的影像需要處理的維度很高,例如一張256*256 大小的彩色影像,則需 256*256*3(RGB channel) = 196608 維來表示。
  • 拍攝角度不同,如同平移過的影像,幾乎所有像素值都會改變,但所要識別的目標並未改變。
  • 同種物體間的差異性,例如材質、形狀、大小、顏色等。
  • 相似材質的背景或與背景融合。
  • 不同的光源及場景影響影像的亮度。
  • 形變、姿勢及位置。
  • 場景的覆蓋或遮罩。

面對這些挑戰應該如何做分類器?先想到輸入照片,經過一連串的判斷,最終輸出為對應的類別。

def classify_image(image):
# Some magic here?
return class_label

最直覺的想法是中間的過程需要做一些特徵的提取,但對於不同的目標會有不同的特徵,也會因為上述的各種干擾而無法找到好的特徵,因此這並非容易的事。

而另一種想法是 Data-Driven Approach,指的是

  1. 先大量蒐集各種影像,並同時賦予標籤
  2. 使用機器學習的方式訓練分類器
  3. 最後驗證在新的影像上
''' Memorize all data and labels '''
def train(images, labels):
# Machine learning!
return classifier
''' Predict the label of the most similar training image '''
def predict(classifier, test_image):
# Use classifier to predict labels
return test_labels

所以 Data-Driven 的想法變成兩部分,先記憶所有資料及其對應的標籤,在測試時找到訓練集中最像的照片,則預測為同一類。此概念即是 1-Nearest Neighbors 的作法。

K-Nearest Neighbors, K=1 的結果。

想像每張圖片在高維空間上成為一點,而顏色代表他的類別,則可以看到每個位置將會被預測為哪一類。但 K=1 時,表示參考的圖片僅有一張,因此很容易會因為雜訊而誤判,如同上圖中綠色區域裡的黃色點,或崎嶇的紅藍邊界。所以增加參考的點數會讓模型更可以抗雜訊。

結果則由最近幾個參考點來表決。K=5 時,結果相對其他兩者,邊界更平滑。

但也並非 K 越大就越好,因為 K 越大,則可能選定的參考點是有一定距離,就沒有參考價值了。

另外的問題是,應該如何判斷兩張照片的相似程度?最簡單的想法是計算每個像素點間的 L1 或 L2 norm。

(K=1 時)L1 distance 較容易會有垂直以及水平的邊界線,對於 L2 distance邊界則為兩兩中垂線構成。

對於如何選擇 K 以及 distance metric,是相當依賴所要解決的問題,也就是資料集以及識別的種類。

通常調整要決定的超參數會有以下的做法:

調整超參數的想法,應如何切分資料集
  1. 將所有資料去做訓練,則以 K-nearest neighbor方法,選用 K=1 必定會有最小的誤差;而以其他方法也無法驗證模型的好壞,可能已產生過擬合的情況卻無法發覺。
  2. 將資料集切分成訓練集(train set)及測試集(test set),並以測試集的結果調整超參數,則無法判定模型的好壞(因為是以有答案的測試集去調整模型)。
  3. 將資料集切分成訓練集(train set)、驗證集(validation set)及測試集(test set),並以驗證集的結果調整超參數,再以測試集來評估模型的好壞,對於整個流程是最完整的想法。
  4. 將資料切成好幾等份以及測試集,以前面輪流一份作為驗證集,其餘為訓練集,最後平均結果。此方法避免太依賴其中一份驗證集的資料去作調參,但對於龐大資料集的訓練並非是一件有效率的事。

實際上,在做影像辨識時並不會用使用 K-Nearest Neighbor 的算法,因為衡量相似程度時,通常是以 L1 或 L2 norm 去計算之間的差距。但有相同的誤差值,卻可能對於影像有很大的不同。

遮罩、平移或改變色調,可能得到相同的的 L2 distance

另一個原因是,在高維度空間中,若要有好的結果,就必須要有密布整個空間的資料點,這樣最近的點才具有參考性。但往往很難拿到如此大量的影像資料。

還有什麼方法可以做影像辨識呢?下面會從最簡單的 Linear model 講起。

Linear Classification

線性的分類器是類神經網路的基礎,其想法很簡單,透過一個線性函數得到分別屬於各個類別的分數。

影像作為 x 輸入,透過權重 W 以及偏差 b 得到各個類別的分數

實際作法是將影像拉成一條向量,再與權重 W 做矩陣乘法,得到的便是對應各個類別的分數。

從矩陣乘法的操作可以看到,權重 W 第 n 列 (row) 的數值會決定第 n 個類別的分數,每個值對應的也是影像中每個像素的權重。為了解釋 W 所看重的區域,可以將列向量重新排列至與影像相同的形狀。下圖則為在資料集 CIFAR-10 上所看到的權重圖。

W 所顯示的有些能隱約看出各類別的特徵

找到的線性函數則可在高維空間成一個高維平面,透過這個平面去切割空間,判定各個點所屬的類別為何。

但是通常資料的分布成非線性,以線性分類器來說就無法很好地逼近每個類別的界線。還有另一個問題是,如何判斷權重是好是壞?下一課則會說明如何評估模型的好壞以及如何找到好的權重值。

影片位址: Lecture 2: Image Classification pipeline

--

--