0. 前言
從這學期期末考完開始,我們的大創項目算是正式開場了,距離中期答辯過去近一個月。
這篇文章大概是用來記錄一下在這幾天初期學到的各種東西,畢竟一個全新的領域,太多概念與術語。
章節之間並非並列關系,從所需的基礎數學知識,到各種優化方法,到機器學習領域,到卷積神經網絡,到目標檢測算法以及評價指標,其實是更像遞進關系。
因為還在學習過程中,盡管許多知識還是比較輕描淡寫地帶過了,但中間還是可能有各種疏漏,還待慢慢補充與修改。
1. 卷積
1.1. 點積
對於兩個向量 u = [u1, u2, ..., un], v = [v1, v2, ... vn],其點積為:
u · v = u1 * v1 + u2 * v2 + ... + un * vn
1.2. 卷積
對於兩個離散信號 f, g,其卷積結果為一個信號倒序后在不同位置和另一個信號中一段相同長度的部分求點積的集合。
假設前者信號為 f,后者為 g,則 f 又被稱為卷積核(Kernel)。f 和 g 可以交換,結果不會變化。
下面為一個一維信號求卷積的例子。
其中卷積核信號 f 為 [1, 2, 1],倒置后仍為 [1, 2, 1],信號 g 為 [1, 2, 3, 0, 1, 0]。
比如第一次卷積運算過程為:
1 * 0 + 2 * 0 + 1 * 1 = 1,即結果為 1。
注意到在待卷積信號 g 前后分別加上了 2 個 0,它們被稱為零填充(Zero Padding),作用在下面會提到。
卷積核每次移動的距離叫做步長(Stride),本例步長為 1。
卷積有三種類型,設卷積核信號 f 長度為 n,待卷積信號 g 長度為 m,有:
① Valid
不對信號 g 進行零填充而求卷積,即卷積核起初與待卷積信號由左對齊至右對齊,卷積長度為 m - n + 1;
② Same
對信號 g 的邊緣共添加 n - 1 個 0,使得卷積結果與信號 g 長度一致,即 m;
③ Full
對信號 g 的邊緣再添加 n - 1 個 0,使得卷積核能夠划過的位置最大,即由卷積核右邊緣與待卷積信號左邊緣對齊至卷積核左邊緣與待卷積信號右邊緣對齊,卷積長度為 m + n - 1。
二維卷積同理。
計算方法
2. 數學優化基礎
2.1. 梯度下降算法
重復 ① 與 ②:
直到
用於尋找最小值
𝜂 為一個系數,稱為學習率(Learning Rate),控制更新時的步長大小。
2.2. 牛頓法
略
2.3. 超參數
超參數指在開始學習過程之前設置值的參數,而不是通過訓練得到的參數數據。通常情況下,需要對超參數進行優化,給學習機選擇一組最優超參數,以提高學習的性能和效果。
2.3.1. 優化器(Optimizer)
略
2.3.2. 學習率(Learning Rate)
略
2.3.3. 激勵函數(Activation Function)
激勵函數的作用是讓神經網絡模型能夠逼近非線性函數。
① Sigmoid 函數
② tanh 函數
③ Softmax
將輸出轉換為概率
令 z = (wx + b) / 2,則可以化為:
f(x) = g(z) = 1 / (1 + e-2z) = ez / (ez + e-z)
④ ReLU 線性整流函數
上述 Sigmoid 和 tanh 激勵函數容易導致多層神經網絡模型在訓練過程中出現梯度消失的現象,而 ReLU 則不會出現這種問題。
線性整流函數(ReLU, Rectified Linear Units),經常被用於多層神經網絡的中間層,且其計算速度更快,它只需要判斷神經元的輸出值是否小於 0,能夠很好地幫助訓練快速收斂,同時保證稀疏性。
Leaky ReLU:將 x < 0 部分改成一個斜率很小的一次函數;
Parametric ReLU(PReLU):斜率值成為一個可優化的參數;
Softplus:平滑版 ReLU,公式為 f(x) = ln(1 + ex)
2.3.4. 損失函數
優化問題只是一個單純的函數值最小化問題,和機器學習關聯起來,靠的是如何定義要優化的函數,從優化角度來講這個函數叫做目標函數,或損失函數(Loss Function)。
回歸任務 二分類任務 多分類任務
【待補充】
2.3.5. 其他超參數
Epoch:一代訓練,即使用訓練集的全部數據對模型進行的一次訓練。主要看損失是否收斂在一個穩定值,如果是,則當前設置的 Epoch 值最佳。Epoch 太小可能導致欠擬合;Epoch 太大可能導致過擬合。
Batch:一批數據,即訓練集的一小部分樣本,使用它們對模型權重進行一次反向傳播的參數更新。BatchSize 為 Batch 的大小,一般來說不能太大也不能太小。
Iteration:一次訓練,即使用一個 Batch 數據對模型進行一次參數更新的過程。
3. 機器學習基礎
【待補充】
3.1. 數據增強(Data Augmentation)
解決樣本數量不均衡的問題,同時提升算法的魯棒性。
3.2. 過擬合與欠擬合
衡量一個機器學習算法的優劣,最直接的方法是衡量算法預測與測量數據的誤差。對於訓練數據,損失函數是衡量標准;而對於預測數據,算法對其做出准確預測的能力稱為泛化(Generalization)能力。
過擬合(Overfitting),指為了得到一致假設而使假設變得過度嚴格,其反義詞為欠擬合(Underfitting)。如下圖所示。
一個更貼近生活的理解是,高中生 kk 刷了一大堆理綜的題目,他對那些做過的題滾瓜爛熟,但一到考試碰到類似卻不同的題一臉懵逼,也可以認為是一種過擬合。
模型的擬合能力通常被稱為 Capacity。對於卷積神經網絡,過擬合一般指經過訓練得到的超參數與訓練數據集匹配度過高,而測試數據集的結果精確度遠低於訓練數據集,即泛化能力弱。
3.3. 正則化
在損失函數上加入一個約束項,以提高泛化能力。
① L2 正則化
L2 正則化 / 規范化(L2 Regularization),又被稱為權重衰減(Weight Decay)。
C 為當前神經網絡的損失,C0 為之前的損失,a 為懲罰(penalty)因子。
② L1 正則化
3.4. 隨機失活
隨機失活(Dropout),底層思想是把多個模型的結果放在一起,每次梯度迭代中使隱藏層中的每個神經元以一定概率 p 不被激活,比如:
3.5. 監督學習
① 監督學習
監督學習(Supervised Learning),指用來訓練網絡的數據所對應的輸出是已知的,其可能是一個類別標簽,可能是一個或多個值。
② 無監督學習
無監督學習(Unsupervised Learning),指數據沒有被標記,即類別未知,而完全由計算機自行判斷。一般適用於缺乏先驗知識或進行人工標注的成本過高的情況。
在無監督學習下對樣本的划分通常被稱為聚類(Clustering),常見方法有 K-means,混合高斯模型(GMM)等。
③ 半監督學習
半監督學習(Semi-Supervised Learning, SSL),是監督學習與無監督學習相結合的一種學習方法,在使用盡量少的工作從事人員的前提下,又能夠帶來比較高的准確性。
也有弱監督學習(Weakly Supervised Learning)的叫法。
4. 卷積神經網絡
4.1. FCNN 全連接神經網絡
全連接神經網絡(FCNN, Fully Connected Neural Network)是最朴素的神經網絡,其參數最多,計算量最大。一般可用下圖表示:
網絡由若干層組成,第一層為輸入層(Input Layers),最后一層為輸出層(Output Layers),中間為隱藏層(Hidden Layers)。每一層都以前一層的輸出作為輸入,再經過計算輸出到下一級。每一個圓圈為一個神經元(Neuron),內部為如下的計算組合:
① z = wx + b,最小化損失函數(前向傳播)【待修改】,其中 w 為權值(Weight),b 為偏置(Bias);
② z -> f(z),激勵函數(Activation Function),將輸出值域壓縮至 (0, 1),即數據歸一化(Normalization),在全連接網絡中一般使用的是 Sigmoid 激勵函數。
神經網絡的訓練是有監督的學習,對於輸入值 X,有着與之對應的實際值 Y,而輸出值 Y' 與實際值 Y 之間的損失 Loss 即反向傳播的內容。整個網絡的訓練過程就是不斷縮小 Loss 的過程。
4.2. CNN 卷積神經網絡
FCNN 用於所有層級之間都是全部相連的,結構復雜,收斂緩慢,效率很低,會處理大量的冗余數據。而 CNN 是解決效率問題的一種辦法。
卷積神經網絡(CNN, Convolutional Neural Network),相比 FCNN 結構增加了卷積層(Convolutional Layers),池化層(Pooling Layers),輸出層由全連接層和 Softmax 層構成。
① 卷積層
卷積層至少有 1 層,之間為局部連接,且權值共享,大幅減少了 (w, b) 的數量,加快訓練速度。卷積層的作用,簡單來說就是通過壓縮提純,來提取特征。
對於 CNN 而言,權值 w 即卷積核。和卷積核做卷積得到的結果叫做特征圖(Feature Map)。
在卷積核后再加上激勵函數。
② 池化層
一般來說,卷積層后面都會加上一個池化層,它是對卷積層的進一步特征抽樣,用於壓縮數據與參數量,減小過擬合(Overfitting)。其具體操作與卷積層基本相同,但只取對應位置的最大值與平均值(最大池化、平均池化)。
池化過程強調特征不變性。比如在圖像處理時,一張狗狗的圖像被縮小一倍后我們還能看出這是一只狗狗,那么說明這種圖像在壓縮時保留了狗狗的特征,而移除了無關緊要的信息。
下圖為一個池化的例子,卷積核大小為 2 * 2,步長為 2,采用最大池化法,得到如下結果。
卷積層用來模擬對特定圖案的響應,池化層模擬感受野(Receptive Field)。感受野的定義是卷積神經網絡每一層輸出的特征圖上的像素點在輸入圖片上映射的區域大小。
(感受野這個翻譯,初聽感覺很奇怪,后來了解到是直接照搬的生物學術語)
③ 通道
無論是輸入還是中間產生的特征圖,通常並不是單一的二維圖,而是多個圖組成的,我們稱每一張圖為一個通道(Channel)。計算機的圖像表示中,通道是一個非常基礎的概念,比如一幅彩色圖像通常由紅色(R),綠色(G),藍色(B)三個通道構成,即 RGB 圖像。
4.3. 其他神經網絡
4.4. 卷積神經網絡發展
4.4.1. LeNet
LeNet 是第一個卷積神經網絡。輸入圖片為 28 * 28 單通道灰度圖。
4.4.2. AlexNet
輸入圖片為 256 * 256 的三通道彩色圖片,數據增強手段包含隨機位置裁剪,包含三張 224 * 224 的子區域,則輸入維度為 3 * 224 * 224。
由於當時 GPU 不夠強大,AlexNet 在卷積時采用分組的方法,以減少計算量且方便並行。
4.4.3. GoogLeNet
GoogLeNet 由 Google 發表在 CVPR2015 的《Going Deeper with Convolutions》中,其層數推進到了 22 層,跳出了 AlexNet 的基本結構,創新性地提出了構建網絡的單元 Inception 模塊。
Inception 結構
批處理規范(BatchNorm)
1 * 1卷積
ResNet
殘差網絡
4.4.4. 常用框架
① TensorFlow,Google 開發的深度學習框架
② Torch,Facebook 卷積神經網絡工具包,還有專用於 Python 的 PyTorch
③ Caffe,不太了解
5. 目標檢測算法
滑窗法(Sliding Window)
PASCAL VOC
mAP
交並比
R-CNN
SPP ROI Pooling Fast R-CNN
RPN Fater R-CNN
YOLO SSD
6. 分類與檢測的評價指標
6.1. P, R, F-Measure
假設圖中有一只狗狗和一只貓貓,且當前關注目標為狗狗,則:
狗狗是正類(Positive);貓貓是負類(Negative)。
將狗狗標記為狗狗,或將貓貓標記為貓貓,則預測結果正確(True);
將狗狗標記為貓貓,或將貓貓標記為狗狗,預測結果錯誤(False)。
所以這四類情況可以總結為:
TP - 正類預測為正類,即將狗狗標記為狗狗
FN - 負類預測為負類,即將狗狗標記為貓貓
FP - 正類預測為負類,即將貓貓標記為狗狗
TN - 負類預測為正類,即將貓貓標記為貓貓
① Precision 精確率(查准率)
精確率 P = TP / (TP + FP),正確預測為正類的個數占所有預測為正類的個數的比例,即所有標記為狗狗的圖片中確實為狗狗的比例。
② Recall 召回率(查全率)
召回率 R = TP / (TP + FN),正確預測為正類的個數占所有實際為正類的個數的比例,即所有狗狗中被標記為狗狗的比例。
③ F1
Precision 體現是否找得對,Recall 體現是否找得全,兩者通常相互影響,盡管理想情況下是兩者均達到較高的理想值,但實際上一個越高另一個也就越低,所以一般只能根據實際的需求進行取舍。而如果在兩者都有較高需求時,可以使用兩者的權衡值來衡量。
F1 值是 Precision 和 Recall 的調和平均值,計算方式如下:
這種方法被稱為 F-Measure,是檢索領域很常用的評價標准。
④ Fβ
F1 指標認為 P 和 R 是同等重要的,而當我們需要一個傾向時,可以使用 Fβ。β 表示 R 的權重為 P 的 β 倍,則計算方式為:
⑤ Accuracy 准確率
應該是沒有一個比較統一的定義。(TP + TN) / (TP + FN + FP + TN) 算是一個定義方式,正確預測的個數占所有目標的個數的比例,即所有狗狗和貓貓分別被標記為狗狗和貓貓占所有狗狗和貓貓的比例。
上述概念推薦使用英文來表述,中文往往容易導致混淆。
6.2. mAP
上述 P, R, F-Measure 存在單點值局限性。為了更能反映全局性能,我們引入一個新的指標平均精確度均值(mAP, mean Average Precision),其規范定義如下:
即 P - R 曲線與 x = 0, y = 1 包含的面積。
但在數據比較離散的情況下,也可以簡單粗暴地把各個不同召回率上的精確率相加再求平均值,也是一種計算方式。
6.3. ROC & AUC
ROC 和 AUC 也是評價分類器的指標。還是以上述貓貓狗狗二分類,且關注狗狗為例。
觀測者操作特性(ROC, Receiver Operating Characteristic),關注兩個指標:
① TPR(True Positive Rate)
TPR = TP / (TP + FN),即上述召回率,不再解釋
② FPR(False Positive Rate)
FPR = FP / (FP + TN),將負類錯誤預測為正類的個數占負類的個數的比例,即所有貓貓中被標記為狗狗的比例。
ROC 的分析工具 —— ROC 曲線(ROC Curve),即將 FPR 作為橫坐標,TPR 作為縱坐標,它是一條經過 (0, 0), (1, 1),且其余部分均在 y = x 上方的曲線,它與 x = 1, y = 0 包圍的面積越大,說明表現越佳,這個值被稱為 AUC(Area Under ROC Curve)。
6.4. MR-FPPI
漏檢率曲線(MR-FPPI, Miss Rate Sgainst False Positives per Image)是目標檢測中一個評估性能的指標,在 CVPR2009《Pedestrian Detection: A Benchmark, P. Dollar》中首次提出,如下圖:
漏檢率(Miss Rate, MR)與召回率是相對應的,即 Miss Rate + Recall Rate = 1,即所有狗狗中沒有被標記為狗狗的比例。
MR-FPPI 適用於檢測問題,而前面提到的 P-R 曲線,ROC 曲線更適用於分類問題。
6.5 IoU 系列
通常情況下,將一個目標完全正確地標記出來是不現實的。所以,我們引入一個新的參數交並比來判定。
① IoU
交並比(IoU, Intersection over Union),表示預測邊框與實際邊框的交集面積與並集面積的比值。如下圖:
IoU 可以反映出預測框(Predict Box)與真實框(Gound-Truth)的檢測效果。一個預測框被認為是正確結果(TP),一般需要滿足與目標物體的真實框重合度(IoU)超過一個閾值(一般為 50%),否則為錯誤結果(FP)。
但它並不完美。如果將其作為損失函數,下列情況並不能很好反映出實際存在的問題:
> 如果兩個框沒有相交,根據定義,IoU = 0,則完全無法體現出框之間的距離。此時 Loss 值為 0,無梯度回傳,無法進行學習訓練;
> 無法區分對齊方式,精准反映實際重合效果。比如下列三個圖像,IoU 值相等,但從左至右明顯重合效果越來越差。
② GIoU
廣義交並比(GIoU, Generalized-IoU),在 CVPR2019《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》中首次提出。論文提出直接把 IoU 設為回歸的 Loss 值,計算公式如下:
其中,C 表示兩個框的最小閉包區域面積,如下圖所示:
即等價於原 IoU 值減去圖中深紫色區域。其取值范圍為 [-1, 1],是 IoU 的下界,當且僅當兩個框完全重合時,IoU = GIoU = 1。
作為損失函數,LGIoU = 1 - GIoU,滿足損失函數的基本要求。
回到上面的三張圖,其 IoU 和 GIoU 的值分別為:
③ DIoU
距離交並比(DIoU, Distance-IoU),相比 GIoU,它還考慮了框之間的距離、尺度,使得預測框回歸變得更加穩定,不會出現發散問題。
其中,b, bgt 表示預測框與真實框的中心點,ρ 表示計算兩個中心點之間的歐幾里得距離;c 表示兩個框的最小閉包區域的對角線距離。如下圖所示:
DIoU 可以直接最小化兩個框的距離,因此比 GIoU 收斂快得多。對於兩個框在水平或垂直方向的情況,DIoU 可以使回歸非常快,而 GIoU 幾乎退化為 IoU。
DIoU 還可以替換普通的 IoU 評價策略,應用於非極大值抑制(NMS, Non-Maximum Suppression)中,使得結果更加合理有效。
④ CIoU
完整交並比(CIoU, Complete-IoU),考慮到 Boundingbox 回歸三要素中的長寬比還沒被考慮,CIoU 在 DIoU 的基礎上增加了懲罰因子。
暫略。
產品量化(product quantization)
修剪(pruning)
向量量化(vector quantization)
填充(padding)
乘加操作(Mult-Adds)
矩陣乘法(GEMM)
異步梯度下降(asynchronous gradient descent)
RMSprop
side heads
標簽平滑(label smoothing)
叉積(cross product)
斯坦福狗狗數據集(Stanford Dogs dataset)
早停法(early-stopping)
建議框(proposal boxes)
三重損失(triplet loss)
方法:
扁平化網絡(Flattened networks)
分解網絡(Factorized Networks)
結構化轉換網絡(structured transform networks)
深度卷積網(deep fried convents)
低位網絡(low bit networks)
蒸餾法(distillation)
雙流
編碼解碼
注意力機制
Focus Loss
BoundingBox
Anchor
ONE / TWO STAGE
參考:
https://zhuanlan.zhihu.com/p/107822685
https://www.jianshu.com/p/22c50ded4cf7?from=groupmessage
https://www.cnblogs.com/skyfsm/p/6790245.html
https://blog.csdn.net/weixin_38145317/article/details/89310404
https://zhuanlan.zhihu.com/p/94799295