# Machine Learning Note ###### tags: `Machine Learning` >紀錄一些自己較陌生的名詞 ## :memo: 正樣本、負樣本 我們要對一張圖片進行分類,以確定其是否屬於**汽車**,那麼在訓練的時候: - 汽車的圖片為正樣本 - 任何不是汽車的東西為負樣本 ## :memo: 難樣本、易樣本 訓練集可以分為Hard Sample和Easy Sample - **難分正樣本**(hard positives):錯分成負樣本的正樣本,也可以是訓練過程中**損失最高**的正樣本 - **難分負樣本**(hard negatives):錯分成正樣本的負樣本,也可以是訓練過程中**損失最高**的負樣本 - **易分正樣本**(easy positive):容易正確分類的正樣本,該類的概率最高。也可以是訓練過程中**損失最低**的正樣本 - **易分負樣本**(easy negatives):容易正確分類的負樣本,該類的概率最高。也可以是訓練過程中**損失最低**的負樣本 ## :memo: 多標籤、多分類、回歸 - 多標籤分類 可將多標籤問題轉換為**二元分類**問題求解 判斷一張圖片上,**是否**有以下這些東西 | House | Sky | Cat | | ------|-----|-----| | Yes | Yes | No | - 多類別分類 手寫辨識中,有多個類別,但最後只有一個是正確的分類 - 回歸問題 有關數字的答案,如預測溫度、降雨機率 ## :memo: Activate function >激勵函數主要是要引入非線性計算 在類神經網路中,常以上層的線性組合(矩陣相乘)作為這層的輸入,因此若不用激勵函數,深度類的神經網路便失去意義。 常見的Activate function有ReLU、Sigmoid、tanh, etc,其中ReLU最為常用。 $ReLU(z)=max(0,z)$ ## :memo: Regression - 線性回歸(Linear regression),用來預測一個連續的值 - 羅吉斯回歸(Logistic regression),用來分類 ![](https://i.imgur.com/1rKtUfr.png) ## :memo: One-stage Two-stage 物件偵測(Object Dection)的方式主要有兩大類:One-stage與Two-stage。 作者提出focal loss的出發點也是希望one-stage detector可以達到two-stage detector的準確率,同時不影響原有的速度。 作者認爲one-stage detector的準確率不如two-stage detector的原因是:樣本的類別不均衡導致的(不包含目標的背景負樣本框太多)。 - Two-stage:先找出Rigion proposal(候選區域),再做辨識的作法,通常稱作two stage learning。這類算法可以達到很高的準確率,但是速度較慢。 Example:R-CNN、Faster R-CNN、Mask R-CNN - One-stage:一步完成物件位置偵測及辨識,即一個神經網路能夠同時偵測物件也可以辨識物件。此方法速度快、運算量較低,精準度較two stage差,但辨識率仍在可接受範圍。 Example:YOLO、Single Shot Detector (SSD) :::info :bulb: **Hint:** <a href="#ROI">Rigion proposal</a> ::: ## :memo: IOU (Intersection Over Union) IOU = 兩個物件的交集 / 兩個物件聯集 ![IOU](https://i.imgur.com/8sAIY7K.png =500x250) ## :memo: Non-Maximum Suppression (NMS) 在Object detection中,常會先選出物件選人(candidate),然後在物件候選人中判斷是不是物件,但同一個物件常會被多個候選框選到。而我們常用Non-Maximum Suppression找到最佳的框,如下圖。 \ ![](https://i.imgur.com/rSgajO0.png) 這個選出來的框叫做Bounding Box/Boundary Box (BBox),每個BBox除了框的中心(x, y)和長寬(h, w)外,幾乎都會有一個confidence score。score代表的就是這個框是background還是foreground的信心程度,score∈[0,1]。score=1 代表這個框可以肯定是一個物件,但不知道此物件是哪個類別 (two-stage)。 >Two-tage:再將選出BBox的feature map做rescale (一般用ROI pooling),然後再用分類器分類。 > >One stage:BBox有中心位置(x, y)、BBox長寬(h, w)和confidence score,以及相對應的分類機率 **Eample:如下圖中有兩隻狗** ![](https://i.imgur.com/Yyok8Qe.png) - Step 1:選出當前最大Score,此處為紅框(0.9),並放入Selected objects。 - Step 2:計算當前最大Score與其他框的IoU值,若超過一定的閾值(threshold),代表重疊度太高,就要刪掉 - Step3:重複1、2步驟,直到沒有東西。Selected objects即為所求。 :::info :bulb: **Hint** - 開區間 (open interval):(a, b) 為 a < x < b - 閉區間 (closed interval):[a, b] 為 a <= x <= b ::: Reference ➜ [NMS](https://medium.com/@chih.sheng.huang821/%E6%A9%9F%E5%99%A8-%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92-%E7%89%A9%E4%BB%B6%E5%81%B5%E6%B8%AC-non-maximum-suppression-nms-aa70c45adffa) ## :memo: OHEM (Online Hard Example Mining) 選擇一些Hard Example作為訓練樣本,從而改善網路參數效果 ## :memo: SVM在多元分類 (multi-class) 的技巧" SVM是一種**二元分類器**(binary classifier),以+-1作為輸出。當有 T 個類別時,常用以下兩種處理方式: ### :rocket: (1) One-against-Rest (One-vs-All, OvA, OvR):一對多 - 第一個SVM:屬於類別1的資料為(+1),其他類別為(-1),這個SVM用來區別這兩者 - 第二個SVM:屬於類別1的資料為(+1),其他類別為(-1),這個SVM用來區別這兩者 - 以此類推... 因此,T 個類別就會有 T 個SVM 當有一筆資料丟進這 T 個SVM,會得到(v1,v2,v3,...vT),$v_j$為+-1。出現+1那組,資料便屬於那一類。如(-1,-1,+1,...,-1),便屬於第三類。 優點是執行時間與記憶體不會消耗太多 缺點是訓練時,將**剩下資料的類別視為同一個類別**(-1)時,正負樣本數相差太大,訓練時會出現**類別不平衡**(class imbalance)。 ### :rocket: (2) One-against-One(OvO):一對一 每次取兩個類別資料訓練,將所有可能的類別組合都訓練一個SVM。 最後會有 T(T-1)/2 個SVM模型 每次有一筆資料要預測時,都丟進所有的SVM模型,而每一個SVM模型都會將此筆資料分類在其中一類,我們將該類別+1(像投票一樣),最後判斷哪一個類別最高票。 優缺點與One-against-Rest相反。 有時候會發生同票數的狀況,此時可以用淘汰賽的方式,,將同票數的晉級決賽,重新判斷。 ## :memo: Rigion proposal<span id="ROI"></span> ![Rigion proposal](https://i.imgur.com/NedhMvC.png =600x500) - 以Faster R-CNN為代表的two-stage檢測方法:從 CNN 的 feature map 上選出 region proposals 1. **RPN**: Input image經過CNN提取feature map,先來到Rigion Proposal Network(RPN)。RPN在feature map上取sliding window,每個sliding window的中心點稱為anchor point,然後將事先準備好的k個不同尺寸的box(稱為anchor box),這些k個anchor box在同一個anchor point去計算可能包含物體的機率(score),所以每個anchor point會有2k個score(包含positive跟negative)和4k個偏移量(x,y,w,h),如下圖。 \ 假設threshold=0.5,則RPN輸出的p>=0.5的Rigion,稱為ROI(Rigion of Interests),即為感興趣的區域。ROI經過bounding box regression後,第一次輸出大致的Bounding-box。而輸出的Classification是一個二進位的p值,p∈[0,1],代表可能是COCO數據集裡80個類別中某一類的機率(但還不知道是哪一類)。此時RPN的工作完成。 ![](https://i.imgur.com/pDhAiXs.png) \ **其實RPN最終就是在feature map上,設置許多候選Anchor,然後用CNN去判斷哪些Anchor是裡面有目標的positive anchor,哪些是沒目標的negative anchor。所以,僅僅是個二分類而已!** 2. **ROI pooling**: 該層收集輸入的feature maps和proposal,接下來輸入普通的分類網路,得到輸出的Classification。這裡的Class才對應到具體類別。而之前的Box/Rigion會再做一次校正位置,即為圖中右上方的Bounding-box regression。 :memo: 深入探討RPN架構: - 假設每個Feature map為 13 * 13 - 每個anchor point中有k=9 個proposal (3個scale和3個aspect ratios) - sliding window大小為 3 * 3,(stride=1,padding=1) 則此網路的**輸入為 3 * 3** (sliding window大小),並經過 (3 * 3 ) * 256 捲積,得到 1 * 1 * 256 的一維向量,並進行分類: 1. Classification: 1 * 1 * 18 的捲積,得到1 * 1 * 18 的feature vector。 (18 = 9個proposal * 2) 2. Regression: 1 * 1 * 36的捲積,得到1 * 1 * 36 的feature vector。 (36 = 9個proposal*4 (x, y, w, h)) 繼續移動sliding window,並重複以上步驟,**之後feature map上每個點都有256維的vector** --- :pushpin: **Rigion proposal的作用** >COCO數據集有80類物體,沒有先進行Region Proposal將背景刪除的話,會推垮分類性能,難以分類。因此two-stage可以**避免類別不平衡**發生(foreground與background數量相差太大)。 Reference ➜ [Rigion Proposal](https://www.zhihu.com/question/265345106) --- :pushpin: **Envelope (waves)** >包絡線(Envelope)是幾何學裡的概念,代表一條曲線與某個曲線族中的每條線都有至少一點相切。 > ![](https://i.imgur.com/6BaeL6F.png) Reference ➜ [Envelope](https://en.wikipedia.org/wiki/Envelope_(waves)) --- :pushpin:precision ![](https://i.imgur.com/Mgh1hSl.png) TP = True Positives (Predicted as positive as was correct) FP = False Positives (Predicted as positive but was incorrect) ![](https://i.imgur.com/JwPkatH.jpg =70%x) From the image, we get: True Positives (TP) = 1 Fasle Positives (FP) = 0 ![](https://i.imgur.com/8PCvSfQ.png =80%x) --- :pushpin:Recall ![](https://i.imgur.com/baJv8pS.png) TP = True Positives (Predicted as positive as was correct) FN = False Negatives (Failed to predict an object that was there) --- :pushpin: AP、mAP #### The general definition for the Average Precision (AP) is finding the area under the precision-recall curve above. #### mAP (mean average precision) is the average of AP.