# Deep Learning for Computer Vision ###### tags: `20200808` `DeepLearning` 蕭勝夫 國立中山大學資訊工程系 # Introduction ### Image Procressing vs Compiter vision 影像處理-是利用電腦"修圖",但電腦不會知道影像的內容。 電腦視覺-利用電腦,從影像中「了解」影像的資訊 ### Image as numbers 影像的大小-解析度 做computer vision解析度不用太高,因為電腦要算很久 image pixel values 目前都用8-bit,同樣也是計算太久 (0-255) > Gray 灰階 就只有0-255 > 彩色 通常是3種 RGB (red, green, blue) > 通常都會把整個矩陣都除以255,使數字落在0-1之間,方便計算 ### Convolution 在做computer vision前,第一步是找特徵 最常用的方法是卷積(convolution) - 設計filter > 在例子中,左邊跟右邊特別強化,形成垂直的特徵 > 可以自己設計filter,來尋找特定的特徵 > 機器學習就是讓電腦自己去找特徵 ## traditional image classification 手動設計的功能 - 目前已經有很多演算法可以使用了。在傳統的computer vision中都學這些演算法。 但現在機器學習都自己算了,還比這些模型準... 再用支援向量機來做分類 ### Traditional vs. CNN classification 傳統都是自己找特徵 現在都是靠CNN,用訓練的方式去找 ### Feature Extraction by CNN CNN的概念,是從下面輸入、上面輸出 所以要注意有時候在談botton layer、top layer,botton layer的是靠近最輸入層或是比較低階的特徵,top layer則是比較靠近輸出端的高階特徵 ### Image Classification Challenges 挑戰 1. 角度 2. 亮度 3. 不同的形狀 4. 只有部分的特徵被看到 5. 背景干擾 6. 有好多相同的東西在一個影像中出現 ### Ingredients in Deep Learning 深度學習的起飛- >演算法、資料、計算能力 >CNN+BigData+Accelerators ### Evolution of CNN Image Classification AlexNet 2012冠軍 ### ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 已經到了跟人類錯誤率不相上下的程度,甚至更好 ### Image Classification Results 一般都會在最後一層加一個softmax的演算法,來看top 5 可能性 ### Two Major Categories of Applications CV 一般是2維的影像 Natural Language Process (NLP)基本上是一維的訊號 用在聲音辨識 ### Supervised Learning for Classification and Regression 比較成熟的是監督式學習 > 分類 > 回歸 - 對一個連續的結果,例如要在圖面上找一個臉,用一個綠色的框框 ### Medical Application Examples 在癌症的判定上CNN還是有一些落差 氣胸的判定 ### CV Application Examples Segmentation把物件切出來 Style transfer改變影像的型態 ### Application Scenario 1. Image captioning >自動駕駛、盲人輔助、醫學報告、監視器 2. Image segmentation >醫學影像辨識 3. Style transfer >faceapp 4. 其他 > 異常處理、自動判別 ### Datasets 列出常見的訓練資料集 # Convolutional Neural Network (CNN) ### Artificial Neural Network (ANN)類神經網路 #### Model for Artificial Neuron 重點是找權重、找bais 但通常還要通過一個actiation function #### Non-linear Activation Functions 需要一個非線性的方法來做分類 在CNN中,大部分會用ReLu #### Artificial Neural Network (ANN) 早期的ANN都是Full connected layer(全連結層),不容易算 #### Complexity in ANN 以VGG16而言,最後的3層是FC layer,每一層的參數量太大,計算量太大,設備的記憶體要超級大 #### Softmax 計算M類分類中,每個分類的機率 #### Digit Recognition Using ANN #### Problems with ANN 太多層了、參數太多了 算不完 #### Convolution with Spatial Structure ANN是把每一個pixel都當成一個神經元。 現在的CNN利用一個矩陣來當作特徵的filter來算,這樣每一層只需要這個矩陣大小的參數數量。 這是一個很重大的進步。 ### Convolutional Neural Network (CNN) #### Overview of a Complete CNN Model 前面使用convolution layer來做,後面放幾個fully connected layer來做分類。最後再放一個non-linear activation function. #### Convolution example (stride=1) Stride = 1表示步伐為1,也就是移動1個pixel 輸出的feature大約會是輸入feature的一半 #### Shared Convolution Filter Weights 都使用一個相同的KxK的filter #### Convolution with Spatial Structure 但有時候,如果使用3x3的filter可能不夠大 只能找到一個local的特徵 因此在CNN中,會往前涵蓋一層,如此便可以涵蓋的更完整,使輸出的feature是有考慮到前面的參數 #### Convolutional Layer (1 output channel) 找到一個filter,可以減少參數量,但計算量不會減少,因為每一個pixel都要算 R、G、B用5x5的filter算出來以後,再相加,會輸出為1個新的pixel值 #### Convolution with One Output Feature Map #### Padding 當我們希望輸出層的feature的數量不要減少,則可以在外面用0去圍。 #### Convolutional Layer (6 output channels) output channel或output map都可以,意思依樣 到底要幾個filter?是多大的矩陣?輸出的特徵圖要多少?都是要設計的 #### CNN for Classification CNN = Convolutional (Conv) layers + Pooling layers + Fully Connected (FC) layers Pooling layer的目的是減少輸出的feature的維度 #### Building Blocks of CNN Why ReLu 因為計算量可以很小 有時候是為了要框出特定資料,可以把後面的FC及activation function拿掉,改為regression model ### Training Training的目的,就是找filter內的最佳的係數 Training = forward propagation + backward propagation 檢討的過程 就是在找loss function的最低點 ### Training, Validation, Testing (Inference) validation 是一邊訓練一邊測試 testing 這一組數據,不會用來訓練這個資料 當資料不夠時,可以用cross validation的方式來試驗 要注意,testing的資料,絕不能在training或valitation時出現 ### Stochastic Gradient Descent (SGD) 一般來說會用128筆 training的過程有很多不同的方法來找最佳解 (大部分人家都寫好了,只要把程式呼叫進來就好) 超參數 - 在訓練過程,人工去調整或給定的參數,可能是調整learning rate、可能是調整SGD裡面的一些可控的參數 ### learning rate epoch指的是把一個小的training datasets(如128筆)放進去訓練,然後所有的dataset都被訓練過依次,便是1個epoch。 ### summary of optimization algorithms Adam是人家都寫好的 SGD+Momentum需要人工調整裡面的超參數,要很有經驗的人來調整。 ### dropout 隨機的把一些neuron拿掉,不讓他訓練 因為有時候有一些neuron之間會有相依,因此越訓練會有一些bias出現 通常會拿掉一半,0.5 ### batch normalization 有時候訓練的過程,每一層再產生的feature,會有一些特異的分布,再轉成高斯分布 ### Data augmentation 用同一張影像去做一些調整 鏡射、轉向、擷取特定範圍、光暗、對比等。 這樣可以大幅增加訓練的資料量 ### transfer learning 拿別人的資料、模式與參數,訓練好的 只有修改自己最後面全連結資料 ## Benchmark CNN Models ### CNN representative architectures 這邊用的model大多是用imageNet訓練的 #### AlexNet 輸出的特徵層會越來越多張圖 約6千多萬個參數,到VGG已經到一億三千萬多個參數 #### AlexNet varients 準確率 vs 模型的複雜度 如果刪除掉一些層或依些參數,減少運算的時間,但要犧牲掉準確度,你願意嗎? #### ZFNet #### VGG VGG統一使用3x3filter 大部分的參數量是在fully connected出現 #### GoogleNet (inception V1) 利用一個1x1的filter來降維度 在同一層中,用不同的filter來做,最主要的理由是有時候物件在影像中的大小會不一樣。 為了要減少計算量,在3x3、5x5多插入一層1x1的filter,如此可以大幅減少參數量 後來又出了V2--> V5 #### ResNet 因為在計算的時候,會有梯度消失的問題 因此用一些方法跳過某些層 #### DenseNet 不是只跳1層 但這些都太龐大了,而且錯誤率越來越低 因此開始產生許多light版的 ### Recurrent Neural Network (RNN) CNN是這一層的輸出與輸入有關 RNN是這一層的輸出,除了與輸入有關外,也與這一層的狀態有關 #### LSTM #### GRU ### Generative Adversarial Network (GAN) 生成對抗網路 有一個生成網路(generator network),接著在用一個驗證網路(discriminator network)來判斷,如果是錯的,就回頭修正生成網路,一直修正到generator network 產生出來的結果會很接近真實 #### GAN的forward propagation與backword propagation # Applications in Computer Vision ## image classification 捲積層是找特徵,全連結層是找分類 ### Object Detection Classification + Localization (這個部分也就是regression) Classification會有一個loss function Localization 也會有一個loss function 兩個加起來要最小 有兩種方法 two-stage detector 用兩個神經網路來做,是從2014年的R-CNN > 先用computer vision去抓2000個框出來 > 用DNN來計算這個框框(region proposals) > 在做支援向量機來分類 one-stage detector 用一個神經網路來做,例如YOLO ### Yolo 把影像切成很多網格 有24層捲積層、2層的全連結層 Non-Maxiumn suppression (NMS) 把框到相同物件的框框消掉 ### Yolo v2 1. 可以容許不同大小的框框,加入Anchor Box用k-means去算 2. 改用Darknet-19,最後一個FC改用AvePooling(讓這個不同大小的框框最後都只成為一個數值) ### yolo V3 1. 改用Darknet 59 ## Image Segmentation 除了把物件框出來以外 還想要把物件的輪廓找出來 就是要把圖片中的每一個pixel判斷出來,確認屬於是哪一個物件 輸出時,要回到原來的解析度然後在輸出 downsampling vs unsampling convolution vs unconvolution 解析度變小 vs 解析度增加回到原來 U-Net ## Image Captioning ## Image-to-image Translation (style transfer, image enhancement, …) >Super resolution >用CNN的架構也可以用GAN ## Emotion Recognition 情緒辨識 # Accelerators for CNN ## Nvidia GPU (Graphics Processing Unit) ## ASIC (Application Specific IC)