文字檢測與其餘目標檢測的區別:html
1、長寬比差別很大,並且廣泛較小;web
2、文字是以字符爲基本單元按照必定空間排列而成的序列,而不是一個單獨的目標;算法
3、文字存在多種粒度和多語言。網絡
傳統方法系列:app
1、流程框架
1.基於滑動窗口:用不一樣大小的窗口在原圖上滑動,並用分類模型判斷每個窗口是否包含文字,最後對檢測結果使用非極大值抑制等進行後處理。ide
2.基於連通份量:首先根據低級特徵(好比,光強,顏色,梯度等)把圖像的像素彙集成不一樣的連通份量,再用分類模型對這些連通份量進行判斷,過濾其中的噪聲區域。包括基於筆畫寬度變換(SWT)、最大穩定極值區域(MSER)、極值區域(ER)等方法。函數
2、SWT學習
1.思想:首先求圖像的筆畫寬度變換即每一個像素都分配了一個筆畫寬度,而後利用靈活的幾何推理,把有着類似比劃寬度的位置都被聚合成詞。測試
2.流程:筆畫寬度轉換、像素聚成連通域、連通域濾除、字符連成文本行、文本行分割成詞。
3.連接:http://www.javashuo.com/article/p-uwesrmou-dd.html
3、MSER
1.思想:對圖像進行二值化,二值化閾值取[0, 255],這樣二值化圖像就經歷一個從全黑到全白的過程(就像水位不斷上升的俯瞰圖)。在這個過程當中,有些連通區域面積隨閾值上升的變化很小,這種區域就叫MSER。
2.連接:https://blog.csdn.net/pirlck/article/details/52846550
4、ER
5、Selective Search
1.思想:
採用分層聚類的思想,總體思想是爲了不沒法獲得不一樣層次的目標的問題,採用小區域不斷一步步往上聚類獲得不一樣層次目標區域的結果。首先把圖像按分割的方法分紅一個個小區域,而後按照特性(顏色、紋理、尺寸、交疊)計算類似性並把類似度高且大小合適的聚起來,最後就獲得了不一樣層次的目標。
2.步驟:
3.連接:
https://blog.csdn.net/qq_28132591/article/details/73549560%20和 https://blog.csdn.net/guoyunfei20/article/details/78723646
6、EdgeBox
1.思想:
利用邊緣信息(Edge),肯定box內的輪廓個數和與box邊緣重疊的edge個數(知道一個box內徹底包含的輪廓個數,那麼目標有很大可能性,就在這個box中),基於此對box進行評分,進一步根據得分的高低順序肯定proposal信息。
2.連接:
https://blog.csdn.net/wsj998689aa/article/details/39476551
7、傳統特徵
1.字符:
輪廓形狀直方圖、邊緣方向直方圖、長寬比、密度。
2.鏈:
候選區域的個數、平均角度、平均分數、大小變化、距離變化、密度變化、寬度變化、結構類似性。
深度學習方法系列:
1、R-CNN
1.思想:
首先提取一系列的候選區域,而後對這些候選區域用CNN提取固定長度的特徵,而後用SVM對特徵進行分類,最後對候選區域進行微調。
2.步驟:
(1)使用Selective Search對輸入圖像提取大約2000個候選區域(proposal);
(2)對每一個候選區域的圖像進行拉伸形變,使之成爲固定大小的圖像(如227*227),並將該圖像輸入到CNN(Alexnet)中提取(4096維的)特徵;(先在ImageNet上進行預訓練再微調,IOU閾值爲0.5,分類爲21個channel(是否是目標,是哪類目標))
(3)使用線性的SVM對提取的特徵進行分類(對每一類訓練一個分類器);
(4)對proposal進行微調(在附錄裏面)。
(5)測試時,用NMS作後處理。(對IOU大於必定閾值(如0.5)的proposal對,去掉面積小的proposal)
3.缺點:
(1)輸入須要固定尺寸;
(2)proposal的特徵須要存儲,佔用大量存儲空間;
(3)每一個proposal單獨提取特徵,大量重疊,浪費計算資源。
4.參考:
https://blog.csdn.net/lhanchao/article/details/72287377;
https://www.cnblogs.com/gongxijun/p/7071509.html?utm_source=debugrun&utm_medium=referral
2、SPPNet
1.思想:
改進R-CNN,使得原圖只需輸入一次,而且不須要固定大小。思路是,首先提取Proposal,而後將整張圖輸入到神經網絡中獲得feature map,將proposal位置對應到feature map上,剪切下來再進行圖像金字塔池化獲得固定長度的特徵,最後再用分類器進行分類。
2.步驟:
(1)使用Selective Search對輸入圖像提取大約2000個候選區域(proposal);
(2)將整張圖像輸入到神經網絡(如ZF-5)中獲得feature map,並對候選區域對應的feature map採用空間金字塔(4級,1*1,2*2,3*3,6*6共50塊)池化獲得固定大小(256個channel*50=12800維)的特徵;(只有1*1時是全局平均池化)
(3)用多個二分類SVM進行分類;
(4)bounding box迴歸。
(5)測試時,NMS作後處理。
3.缺點:
(1)仍然基於RCNN框架,非端到端;
(2)提取proposal依然耗時;
(3)金字塔池化兩端沒法同時訓練。
4.參考:
https://blog.csdn.net/v1_vivian/article/details/73275259
3、Fast R-CNN
1.思想:
將SPP的空間金字塔池化思想引入到R-CNN,用softmax代替SVM分類器,同時將bounding box 回概括入到總體框架中。
2.步驟:
(1)對輸入的圖片利用Selective Search獲得約2000個感興趣區域,即ROI;
(2)將整張圖輸入到網絡中獲得feature map,並在feature map上求得每一個ROI對應的區域;
(3)用ROI Pooling層獲得固定長度的向量,而後通過一個全鏈接層獲得ROI的特徵向量;
(4)分別通過一個全鏈接層獲得預測結果,一個用來分類是哪一個目標,一個用來bbox迴歸。
(5)測試時,非極大值抑制獲得最終結果。
3.細節:
ROI pooling:
是SppNet的圖像金字塔池化的一種特例,只有一層。
4.Loss:
分類softmax loss+迴歸smooth L1 loss
5.缺點:
(1)仍然是雙階段的;
6.參考:
https://blog.csdn.net/wonder233/article/details/53671018
4、Faster R-CNN
1.思想:
用RPN(區域生成網絡)取代以往算法的區域生成階段,而後交替訓練,使得RPN和Fast RCNN共享參數。
2.步驟:
(1)用基礎網絡(VGG16)得到feature map;
(2)將feature map輸入到RPN網絡中,提取proposal,並將proposal映射到原feature上;
(3)將proposal的feature map用ROI pooling池化到固定長度;
(4)進行類別的分類和位置的迴歸。
3.細節:
RPN網絡:
思想:在feature map的每一個cell上賦予9=3(3種size)*3(3種比例,1:1,1:2,2:1)個anchor,每一個anchor須要檢測該cell是否是目標(9*2=18維),以及目標的更精確的位置(9*4=36維),整個feature map獲得W/4*H/4*(18+36=54)大小的feature map,接着就能夠按分數取正負樣本,再從原feature map上裁出來而後ROI pooling,就獲得待分類和迴歸的proposal。
bbox迴歸
將anchor映射回原圖進行迴歸,迴歸以後去掉超出邊界的Bbox,再用非極大值抑制,最後選擇前TopN的anchor進行輸出。
4.Loss:
RPN損失:分類損失(softmax)+λ迴歸損失(L1 smooth)
Fast RCNN損失:見上
5.參考:
http://www.360doc.com/content/17/0809/10/10408243_677742029.shtml
5、YOLO
1.思想:
將原圖通過基礎網絡(相似於GoogleNet)獲得特徵,而後接兩個全鏈接層,直接進行迴歸,不是對特徵圖上的每一個cell進行迴歸,而是對原圖打7*7的格子,對每個格子進行迴歸,斷定是否是目標以及目標的具體位置。
2.步驟
3.細節
訓練是分步的,先用ImageNet2012訓練基礎網絡部分,而後在特定庫上訓練合起來的總體。
座標和分類非目標的權重分別爲λcoord=5,λnoobj=0.5
4.Loss
正樣本:置信度,分類分數,位置,負樣本:置信度
對寬高都進行開根是爲了使用大小差異比較大的邊界框差異減少。
值都是絕對值,而非相對值。
5.缺點
一個格子中只能檢測兩個物體,且兩個物體只能屬於同一類別;Loss設計爲絕對值;位置信息迴歸相對不夠準確;單層預測。
6.參考
https://www.cnblogs.com/EstherLjy/p/6774864.html%20和 http://www.javashuo.com/article/p-fekiwwej-cv.html
6、SSD
1.思想:
採用直接在特徵圖上回歸和分類的方式來直接獲得一張圖上的目標。
2.步驟:
3.細節:
Default Box:比例——{1, 2, 3,1/2,1/3},尺度——20%~90%
難負樣本挖掘:控制正負樣本比例爲1:3,即選擇Loss較高的正樣本和負樣本。
數據增廣:原圖/隨機採樣/翻轉
4.Loss:
5.參考:
http://www.javashuo.com/article/p-ffcnuusr-ck.html 和 https://blog.csdn.net/u013989576/article/details/73439202%20和 http://m.sohu.com/a/168738025_717210
7、R-FCN
8、EAST
1.結構:
2.Loss:(λg=1)
3.缺點:
檢測長文本效果不夠好,由於感覺野不夠大,並且分數採用sigmod函數【0-1】,以512爲基準,這樣樣本都落在很小的地方,就很不均衡。
4.參考:
http://www.javashuo.com/article/p-heemtwxq-bx.html
9、RefineNet
1.結構圖:
主要組成部分爲RCU(殘差卷積單元)、多分辨率融合、鏈式殘差池化、RCU輸出。
2.特色:
使用殘差級聯的方式組織網絡,這樣偏差能夠短路傳播;用鏈式殘差池化來從圖中捕獲背景信息;
可以有效的將下采樣中缺失的信息融合進來,從而產生高分辨率的預測圖像。
使用殘差鏈接和identity mapping 的思想,可以實現端到端的訓練。
3.問題:
爲何能夠捕獲背景信息?
鏈式殘差池化,而後再卷積相加,不一樣的池化至關於大小不一樣的窗口,整合不一樣尺度的特徵,結合上下文,從而捕獲背景。
4.參考:
https://blog.csdn.net/qq_36165459/article/details/78345269
10、Mask RCNN
1.思想:
對Faster RCNN進行改進,對每一個類別加入一層二值掩碼預測,用於圖像分割。Faster RCNN採用ROI pooling層,將ROI池化到固定長度以用於分類,Mask採用ROI Align層對獲得的ROI進行雙線性插值,在ROI的feature map上進行掩碼的預測。
2.步驟:
3.細節:
分類和定位繼續固定長度,而掩碼部分不固定長度;爲每一個類別都加入一層二值掩碼,防止類間競爭,計算Loss時只算某類別的掩碼損失。
4.Loss:
(平均二進制交叉熵損失)
5.連接:
https://blog.csdn.net/u011974639/article/details/78483779?locationNum=9&fps=1 和 https://blog.csdn.net/Yan_Joy/article/details/66528502
6.ROIAlign:
參考:https://www.cnblogs.com/wangyong/p/8523814.html%20和 http://www.javashuo.com/article/p-hajqeqiu-eg.html
11、DSSD
1.思想:
改進SSD,卷積後進行去卷積,而後加起來再作預測。
2.結構圖:
12、DCN(可變形卷積網絡)
1.思想:
以往方塊卷積核窗口,可能不是最好的,考慮不用方塊卷積,而是一個不固定的窗口,讓他本身去學習應該用什麼樣的窗口才更好。採用的方法是,學習卷積核權重的同時,對每個要輸出結果的像素點,採用的偏移點再也不是周圍一圈的位置,而是學習出其偏移的量(x,y兩個座標)。如3*3的卷積核,對於輸出點p,須要學習9個偏移量。
2.詳細:
標準卷積和變形卷積直觀比較:
變形卷積能夠達到對原始卷積移動、尺度縮放、旋轉的效果:
可變形卷積過程:
傳統卷積輸出:
可變形卷積輸出:
Δpn只是影響x輸入層像素的抽樣,並不影響窗口像素權重w。
原始池化:
可變形池化:
3.可視化效果:
4.參考:
https://blog.csdn.net/xbinworld/article/details/69367281%20和 https://blog.csdn.net/AMDS123/article/details/72082318?ref=myrecommend
5.DCN+FPN:
FPN:上採樣後的特徵圖和低層的作融合,且多層預測;