Leo Yeh's Blog

SAS 深度學習 (5)

教學目標

初步了解如何透過 DLPy 套件使用卷積神經網路來解決電腦視覺問題的基本概念。

重點概念

首先卷積神經網路 (Convolutional neural network,CNN),簡稱 CNN,主要是屬於神經網路的類別之一,其廣泛用於電腦視覺中的影像識別和分類,CNN 主要是由多個圖層和多個神經元所組成,其主要將影像資料作為輸入,並且 CNN 允許使用結構化資訊,以利在計算上更有效,並且使用更少的記憶體,典型的 CNN 將由許多不同的層組成,每種類型的層皆有特定的屬性和功能,其中主要的圖層類型,分別為:

  1. 輸入層 (Input Layer):主要儲存分類影像的原始像素值,像是 CIFAR-10 資料集中的每個影像的高度為 32,寬度為 32,深度為 3 個顏色通道,分別為藍色,綠色和紅色。
  2. 卷積層 (Convolution Layer):主要將卷積運算應用於輸入,其還計算連接到輸入中的局部區域的神經元的輸出,卷積反映了單個神經元對視覺刺激的反應,請注意卷積層執行繁重工作,並且需要大量且複雜的運算。此外卷積層能夠使用濾波器來測量輸入路徑與特徵的相似程度,所謂過濾器則是在訓練期間學習的權重向量,過濾器通常具有較小的寬度和高度,當然其與輸入具有相同的深度,像是對於彩色影像而言,對於藍色,綠色和紅色的三個顏色通道,濾鏡深度為 3,而對於黑白圖像,濾鏡深度為 1,同時我們以一定的步幅 (Stride) 在圖像上滑動濾鏡合併點積運算,所謂步幅就是我們每次移動窗口時滑動的像素數,並且透過點積運算建立一個稱為卷積特徵,像是激活圖譜 (Activation map) 或特徵圖譜 (Feature map) 的新矩陣。
  3. 池化層 (Pooling Layer):主要匯整通過逐漸減小影像表達的空間維度,此時需要計算參數來簡化卷積層的輸出,其通常放置在連續的卷積層之間,並且沿高度和寬度大小進行下取樣操作,以利減小影像呈現時的大小,透過池化層將能夠明顯減少了需要分析的參數數量,從而減少了計算數量,同時更有助於緩解過度擬合的常見挑戰,其中最大池化是最受歡迎的池化方案,因此搭配使用卷積層和池化層來加速運算效率。
  4. 完全連接層 (Fully Connected Layer):主要傳統的分層連接進行對應,透過矩陣乘法計算激活和偏移,以及為每個傳入的資訊附加參數,此外完全連接層中的神經元與前一層中的所有激活具有完全連接,所以包括大量的參數。
  5. 輸出層 (Output Layer):主要與特定的損失函數相關聯,損失函數計算預測中的誤差,其中的神經元連接到前一層中的所有激活,就像神經網路中的完全連接層一樣。此外其中的 softmax 函數主要採用分數向量,並且將其轉換為 0 至 1 之間的值的向量,其總和為 1 ,因此應用 softmax 作為激活函數將能夠確保來自完全連接層的輸出機率之和為 1。

然而除了上述主要的圖層類型之外,在 SAS 深度學習應用中還有支援不同圖層應用,像是 Batch Normalization Layer、Concatenation Layer、Residual Layer、Keypoints Layer、Object Detection Layer、Projection Layer、Segmentation Layer、Shuffle Layer、Transposed Convolution Layer、… 等圖層,其中透過批次正規化圖層 (Batch Normalization Layer) 主要能夠解決收斂問題,此外合併層 (Concatenation Layer) 和剩餘層 (Residual Layer) 又稱為跳過層 (Skip-Layer) 連接主要能夠幫助神經網路記住早期學到的潛在特徵,至於詳細資訊請參考官方文件

接著在 SAS Viya 分析平台中,除了提供 SAS Scripting Wrapper for Analytics Transfer (SWAT) 用於各種通用程式語言使用 SAS Viya 函數的軟體套件,更提供深度學習套件功能的進階 Python 函式庫 DLPy,所謂 DLPy 主要提供了一種方便的方法應用深度學習的功能來解決電腦視覺文字分析時間序列預測的問題,至於其特色主要為:

  1. 載入和建構影像,文字,語音和時間序列資料的深度學習模型。
  2. 提供 Keras 風格和 PyTorch 風格的進階 API 使用語法。
  3. 提供了許多預定義的神經網絡架構模型和提供預先訓練過的權重,像是 LeNet、VGG、ResNet、DenseNet、Darknet、Inception、YoloV2 、Tiny_Yolo、… 等。
  4. 提供內建模型分析和資料視覺化工具,像是熱圖和特徵圖,以利使用者能夠針對深度學習模型進行分析,更深入了解電腦視覺問題中黑匣子的神秘面紗。
  5. 提供深度學習相關任務的多種支援功能,像是神經網路視覺化、特徵圖、預測結果、資料分割、資料增強、模型部署、… 等。
  6. 輕鬆建立特定任務的模型,每個深度學習套件皆需要很多技巧來定義不同任務的模型,因此為特定任務創建了預先定義模型,以利盡最大努力消除這種負擔。
  7. 輕鬆整合開源程式碼的套件,將能夠讓使用者從 SAS Viya 分析平台獲取資料至本地客戶端,並且將其轉換為流行的資料格式,像是 DataFrame,轉換之後的資料就能夠無縫的應用至其它開源程式碼套件中的模型,像是 scikit-learn。
  8. 提供匯入和匯出 ONNX 格式的深度學習模型。

再來透過 SAS 官方影片的展示,我們能夠初步了解資料科學家將能夠透過 DLPy 套件完成以下任務,分別為:

  1. 建立用於特徵提取的複雜模型,像是 ResNet 模型。
  2. 使用模型用於影像分割和物體追蹤,像是 U-Net 模型。
  3. 使用模型用於物體檢測,像是 R-CNN 模型 (VGG16)。
  4. 使用模型用於影像分類,像是 ShuffleNet 模型和 MobileNet 模型。
  5. 使用多任務模型用於影像標記的深度學習,以利獲得產品推薦。

然而 DLPy 深度學習套件能夠將對所建立用於電腦視覺問題的模型匯入和匯出為 ONNX 格式的深度學習模型,至於相關操作,請參考 SAS 官方影片

最後為什麼要使用卷積神經網路呢?相較於傳統前饋神經網路不能很好地擴展到完整影像,而透過 CNN 的容量將能夠透過改變其深度和寬度來控制 CNN 對影像的性質,像是統計的平穩性和像素依賴性的局部性做出了強有力且大多數正確的假設。此時與具有相似大小的層的標準前饋神經網路相比,其主要能夠透過影像輸入的架構來最小化神經元的數量,與完全連接的網路相比,其僅將每個神經元連接到輸入的局部區域,此時局部區域的大小主要由濾波器大小定義,因此與完全連接的網絡相比,使用較小的局部區域,將能夠顯著減少神經元連接和權重的數量,所以更容易訓練並且它們的效能不會更差,像是在 20 世紀後期 Yann LeCun 和其同事開發一種名為 LeNet 的卷積神經網路來識別手寫數字,其中 LeNet 在前兩層的不同位置對相同的濾波器使用相同的權重,與完全連接的神經網路相比,卷積神經網路明顯的減少了需要學習的參數數量。

相關資源

⬅️ Go back