---
# System prepended metadata

title: Untitled

---

## 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的外型的識別，也就可以讓神經網路訓練出來更精確。
