## Unit One:Basics Of AI Visual Algorithms
本單元主要在介紹AI視覺演算法,以及闡述三個基本的問題:電腦是如何分類照片的?電腦是如何偵測物件的?AI視覺演算法的發展如何?
對電腦而言,圖片(graphics)其實就是一組像素,每一個像素含有一個數值。而AI就是利用神經網路去學習每個物件的特徵,以判斷該物件究竟為何。
陳老師也講解了近年來具有代表性的神經網絡及其演進,包含:
AlexNet(2012年,5層CNN+3層Fully-Connected Layers)
VGG(2014年,16層CNN+3層Fully-Connected Layers)
GOOGLENET(2014年,21層CNN+1層Fully-Connected Layer)
ResNet(2015年,151層CNN+1層Fully-Connected Layer)
大抵上有CNN層不停增加,而Fully-Connected層逐漸減少的趨勢。陳老師也講解了ILSVRC競賽中,從2010至2015年的AI神經演算法有Error rate的逐漸降低以及CNN層的不斷上升。
後細部講解AlexNet:它有61個mega的Weights以及724個mega量的乘加運算數量,並且AlexNet會在經過CONV Layers後萃取出feature,接著透過進到幾層Fully-Connected Layers去判斷特徵以及做出分類之結果(透過許多filters/channels/strides)。
而陳老師也提到GOOGLENET比起其他神經層,多了Inception的Layers以及ResNet提出了Residual layer來在神經網絡運算時,bypass通道出來,以解決神經層過深而造成梯度消失的問題,是個提升精確度相當關鍵的技術。
主觀心得:了解了許多AI視覺演算法的基本知識,對於AI以及機器學習知識相當淺薄的我來說,本單元有讓我初步了解類神經網路相關的知識,也讓我對神經網路要怎麼判別objects有了很大的興趣。
## Unit Two:How Does A Computer Classify Pictures?
本單元主要在講解電腦是如何偵測(detect)物件的。除了要判斷物件的類別以外,電腦也必須要知道每一個物件的位置在哪裡。
當前的AI視覺演算法中用來分類物件的方式有三:RCNN、YOLO以及SSD。
RCNN:全名叫Region-based CNN,它會提出很多個可能的區域(regions),並且在每個區域中進行CNN運算,透過計算來決定哪個區域中真的有物件存在(Selective Search+deep net+SVM+regression)。其缺點就是運算速度很慢,也是一個two-staged的演算法。因為RCNN起初太慢,所以後來就有人做Faster RCNN,把region proposal的部分和特徵擷取全都整合在同一個deep net,加快運算處理速度。
YOLO:全名叫You Only Look Once,本質上是有人將兩階段演算法中的兩階段合成一階段,透過計算出很多bounding boxes(即物件可能存在的位置搭配一張grid圖),透過機率來為不同方格打分數,將bounding boxes和grid整合起來就能達到物鑑偵測的效果。YOLO後來有加入batch normalization、ResNet的技術以及Multiscale等等。
SSD:跟YOLO相似度很高,也加入了Multiscale的feature maps,此外它還拿掉了一層FC layer,結構上採用了VGG-16的神經網路。
## Unit Three:How Does A Computer Detect Objects?
本單元主要講述AI視覺演算還可以在其他哪些領域有所應用。除了物件的分類、偵測以外,AI視覺演算法還可以做物件的切割,體現了演算法在空間域中的應用。此外,AI視覺演算法還可以進行行為分析,這樣的分析包含了空間域以及時間域方面的相關運算。
當前常見的物件切割的神經網路通常包含以下以個部分:
Downsampling path:用來萃取比較粗的特徵
Upsampling path:將上述萃取出的較粗的特徵,還原其解析度
Multi-scale detection:多尺寸的偵測
Post-process(後處理):用以refine演算法的預測結果,通常使用CRF的演算法(Condition Random Field)
相關做切割的AI演算法例子有:
DeepLab V1~V3 & V3+ (2015)
Dilated Convolutions (2016)
而行為分析中,需要同時計算時間域&空間域的特徵,例如一次輸入7張連續的畫面,則在時間域運算中就要一次擷取多張畫面的特徵,我們稱之為三維的CNN網路。最後在做影像之合成時,也要用到AI視覺化演算法來幫忙。
此外,AI視覺化演算法還可以做instance segmentation,它採用Binary Mask的R-CNN,能夠判斷每一個pixel的地方究竟是不是屬於這個object裡面。
而Motion的部分,是採用RPN(Region Proposal Network)來萃取。
## Unit Four:How To Evaluate Performance Of AI Visual Algorithms?
本單元介紹許多判斷AI視覺演算法的效能指標,例如TP、FP、TN、FN等等,以及由這些指標所組成的準確度(Precision)和召回率(Recall)指標,進而在利用這兩個指標形成一個負荷指標──mAP(mean Average Precision),陳老師接著介紹有哪些參數會影響上述指標。
1. TP: stands for True Positive
2. FP: stands for False Positive
3. TN: stands for True Negative
4. FN: stands for False Negative
我們可以將上述四個指標(TP~FN)繪製成一個2x2的矩陣,由實際值(Actual)和預測結果(Predicitve)來做劃分(such that a 2-by-2 matrix can be formed),來顯示物件實際存在的地方,我們的AI視覺演算法究竟有沒有成功預測到。
精確度(Precision):=TP/(TP+FP)
召回率(Recall):=TP/(TP+FN),因為分母代表所有真實存在物件的位置
通常,對於一個AI視覺演算法,精確度和召回率成反向關係,繪圖會繪出一個凸型反向曲線。
有人會結合精確度和召回率,將精確度對召回率做0~1的積分,或者離散地切割召回率,看各個召回率對應到的精確度的值,將那些值做平均,都會得到AP(Average Precision),而不同物件的AP做平均就是第一段提到的mAP。現在許多研究者都習慣用mAP來看一個神經網路的效能高低。
此外還有兩個重要的參數:IOU(Intersection over Union)和confidence threshold:
IOU:(ground truth和我們預測出來的方框的交集)/(它們的聯集)
confidence threshold:對於每個我們預測出來的框都對應到一個信心指數,而對信心指數去過濾,濾掉某個檻以上或以下的框就是confidence threshold.
陳老師最後提到一些上述指標的計算的issues以及一些modified的情況,以及一些實務上計算的例子。
## Unit Five:How To Obtain An Accurate AI Algorithm?
本單元在講述如何獲得一個精準的AI演算法,主要分為兩個階段:Training phase和Inference(推論) phase。大部分的應用都屬於Inference phase,Training phase比較像後台運算。
Training phase:蒐集有限的樣本數和資料進行訓練,屬於close-loop的演算法,也就是演算法是迴圈式的每一次迴圈運算完都會回傳一個error值,用以告訴我們如何去調整權重。因為是在後台使用雲端或者具有強力計算能力的處理器,所以可以容許叫長的延遲。也因此,需要能夠高速運算的電腦(高單價), with 間歇性的訓練去計算權重。
Inference phase:因為隨著情況改變,樣本情況和樣本數就改變了,所以在這個階段樣本數是無窮多的,也就對應到了open-loop的演算法。因為是應用層面,所以容許的延遲就會比較低。低單價, with連續式的物件偵測和推論。
陳老師接著用images當作資料來源去對上述兩phases的情況做舉例:raw images & Labeling Information會在training phase中進行運算處理,得出權重;而new images/vides會在inference phase中加進來,藉由我們訓練出來的權重去做推論。
根據目前的市場調查,未來有一些應用逐漸重要化:
Data labeling services:資料標註服務
Autonomous Vehicle:自駕車
Security:例如保全、人臉辨識和身份辨識等等
Biomedical imaging:影像判別,幫助醫生節省大量時間
Smart robots
Industry 4.0:工業自動化
接著陳老師有對training更進一步的說明:我們可以將輸入視為x,輸出視為y,透過一個黑盒子去計算(y=f(x))。神經網路就是利用權重W去對input x進行計算,此外還會有bias的調整,算出來之後跟標準值做比較,相減得到的error就會feedback回去調整權重W。
## Unit Six:Advances Of Obtaining An Accurate AI Algrithm.
本單元介紹了gradient descent,也就是梯度下降法。此法主要就是為了在訓練神經網路的時候,讓訓練過程中的error盡量降到最低的方法。陳老師在本結提到了許多概念,例如:微分、learning rate、local minimum、global minimum等等。
微分:在training的過程中,透過對函數的微分去修改模型的參數,目的是為了走到使得loss最低的點。
Learning rate:在將模型參數往gradient的反向調整時,調整的比例就稱為learning rate.
Local minimum:讓loss funciton有區域極小值,但注意:這通常不是全範圍的極小值,這也是在極小化loss function時會遇到的pitfall.
Global minimum: 讓loss funciton有全域極小值,也是我們的目標。
NOTE:可以利用Momentum來降低困在local minimum的機率。
## Unit Seven:How Well Are Modern AI Visual Algorithms Doing?
本單元主要在講解神經網路中的generalization。Generalization是指神經網路在對於它以前沒有看過的inputs時,面對這樣的inputs”能夠表現得多好”。在訓練的過程會出現兩種error:
Training error:利用訓練出來的權重W去算出來的output和標準答案差了多少,這部分就是可以透過Unit6的gradient descent來漸小化的。
Test error:又稱為generalization error, 實際在做推論的時候,用權重對輸入資料算出來的結果和標準答案的差值。注意到這邊的輸入資料是神經網路以前沒看過的資料,故此error不同於上述的training error。
陳老師進一步講解什麼是神經網路的capacity。Capacity是指一個模型可以去適應到廣泛不同情況的方程式的能力。若一個模型的capacity是低的,則就必須要去很努力的fit訓練集,所以有可能訓練的週期數就會拉的很長。相反的,若capacity是高的,就表示該模型較能記住training set裡面的特徵,但這只表示training error很小,不代表它應用到測試集的時候也會有很好的結果!
若模型有過多的capacity,我們稱做overfit;相反的,訓練無法達到預期的目標的時候,就稱做underfit。舉例來說,對於一組離散的數據,只要是非線性的,用一次方的函數去represent就一定會有誤差(maybe underfit)。或許用二次方的函數能夠很好fit這組數據,然而若用到九次方函數去fit這組數據,或許就會overfit(過擬合)。
必須要觀察training error & test error與遞迴次數的做圖,才能全盤了解模型中是否有overfit或underfit的問題。而在training error & test error與capacity的圖中,逐步增加capacity時,training error基本上會一直下降,但test error在一開始下降很快後,過了optimal capacity就會逐步上升,這是比較common的pattern。
## Unit Eight:Advances For Colleeting Training Data
本單元主要講解要如何獲得一個精確的AI演算法。我們可以透過兩方面來著手,第一部分是增加神經網路的深度或者它的參數個數,基本上就是增加它的capacity,而第二部分就是要去增加資料集的多樣性。
陳老師透過2019年的一篇ICLR的論文來說明上述觀念。若採用open的Dataset ImageNet所訓練出來的CNNs會對texture有過度的敏感,也就是會高於對外型、形狀的敏感度,導至AI演算法對圖片的識別偏離人類對圖片的識別。如果可以增加形狀方面不同的樣本,或者加入雜訊、修改過的圖片、動物圖片等等,將有助於提升AI演算法對於圖片中object的外型的識別,也就可以讓神經網路訓練出來更精確。