随着機器視覺技術的快速發展,傳統很多需要人工來手動操作的工作,漸漸地被機器所替代。
傳統方法做目标識别大多都是靠人工實現,從形狀、顔色、長度、寬度、長寬比來确定被識别的目标是否符合标準,最終定義出一系列的規則來進行目标識别。這樣的方法當然在一些簡單的案例中已經應用的很好,唯一的缺點是随着被識别物體的變動,所有的規則和算法都要重新設計和開發,即使是同樣的産品,不同批次的變化都會造成不能重用的現實。
而随着機器學習,深度學習的發展,很多肉眼很難去直接量化的特征,深度學習可以自動學習這些特征,這就是深度學習帶給我們的優點和前所未有的吸引力。
很多特征我們通過傳統算法無法量化,或者說很難去做到的,深度學習可以。特别是在圖像分類、目标識别這些問題上有顯著的提升。
視覺常用的目标識别方法有三種:Blob分析法(BlobAnalysis)、模闆匹配法、深度學習法。下面就三種常用的目标識别方法進行對比。
Blob分析法在計算機視覺中的Blob是指圖像中的具有相似顔色、紋理等特征所組成的一塊連通區域。Blob分析(BlobAnalysis)是對圖像中相同像素的連通域進行分析(該連通域稱為Blob)。其過程就是将圖像進行二值化,分割得到前景和背景,然後進行連通區域檢測,從而得到Blob塊的過程。簡單來說,blob分析就是在一塊“光滑”區域内,将出現“灰度突變”的小區域尋找出來。
舉例來說,假如現在有一塊剛生産出來的玻璃,表面非常光滑,平整。如果這塊玻璃上面沒有瑕疵,那麼,我們是檢測不到“灰度突變”的;相反,如果在玻璃生産線上,由于種種原因,造成了玻璃上面有一個凸起的小泡、有一塊黑斑、有一點裂縫,那麼,我們就能在這塊玻璃上面檢測到紋理,經二值化(BinaryThresholding)處理後的圖像中色斑可認為是blob。而這些部分,就是生産過程中造成的瑕疵,這個過程,就是Blob分析。
Blob分析工具可以從背景中分離出目标,并可以計算出目标的數量、位置、形狀、方向和大小,還可以提供相關斑點間的拓撲結構。在處理過程中不是對單個像素逐一分析,而是對圖像的行進行操作。圖像的每一行都用遊程長度編碼(RLE)來表示相鄰的目标範圍。這種算法與基于像素的算法相比,大大提高了處理的速度。
但另一方面,Blob分析并不适用于以下圖像:
1.低對比度圖像;
2.必要的圖像特征不能用2個灰度級描述;
3.按照模版檢測(圖形檢測需求)。
總的來說,Blob分析就是檢測圖像的斑點,适用于背景單一,前景缺陷不區分類别,識别精度要求不高的場景。
模闆匹配法模闆匹配是一種最原始、最基本的模式識别方法,研究某一特定對象物的圖案位于圖像的什麼地方,進而識别對象物,這就是一個匹配問題。它是圖像處理中最基本、最常用的匹配方法。換句話說就是一副已知的需要匹配的小圖像,在一副大圖像中搜尋目标,已知該圖中有要找的目标,且該目标同模闆有相同的尺寸、方向和圖像元素,通過統計計算圖像的均值、梯度、距離、方差等特征可以在圖中找到目标,确定其坐标位置。
這就說明,我們要找的模闆是圖像裡标标準準存在的,這裡說的标标準準,就是說,一旦圖像或者模闆發生變化,比如旋轉,修改某幾個像素,圖像翻轉等操作之後,我們就無法進行匹配了,這也是這個算法的弊端。
所以這種匹配算法,就是在待檢測圖像上,從左到右,從上向下對模闆圖像與小東西的圖像進行比對。
這種方法相比Blob分析有較好的檢測精度,同時也能區分不同的缺陷類别,這相當于是一種搜索算法,在待檢測圖像上根據不同roi用指定的匹配方法與模闆庫中的所有圖像進行搜索匹配,要求缺陷的形狀、大小、方法都有較高的一緻性,因此想要獲得可用的檢測精度需要構建較完善的模闆庫。
深度學習法2014年R-CNN的提出,使得基于CNN的目标檢測算法逐漸成為主流。深度學習的應用,使檢測精度和檢測速度都獲得了改善。
卷積神經網絡不僅能夠提取更高層、表達能力更好的特征,還能在同一個模型中完成對于特征的提取、選擇和分類。
在這方面,主要有兩類主流的算法:
一類是結合RPN網絡的,基于分類的R-CNN系列兩階目标檢測算法(twostage);
另一類則是将目标檢測轉換為回歸問題的一階目标檢測算法(singlestage)。
物體檢測的任務是找出圖像或視頻中的感興趣物體,同時檢測出它們的位置和大小,是機器視覺領域的核心問題之一。
物體檢測過程中有很多不确定因素,如圖像中物體數量不确定,物體有不同的外觀、形狀、姿态,加之物體成像時會有光照、遮擋等因素的幹擾,導緻檢測算法有一定的難度。
進入深度學習時代以來,物體檢測發展主要集中在兩個方向:twostage算法如R-CNN系列和onestage算法如YOLO、SSD等。兩者的主要區别在于twostage算法需要先生成proposal(一個有可能包含待檢物體的預選框),然後進行細粒度的物體檢測。而onestage算法會直接在網絡中提取特征來預測物體分類和位置。
兩階算法中區域提取算法核心是卷積神經網絡CNN,先利用CNN骨幹提取特征,然後找出候選區域,最後滑動窗口确定目标類别與位置。
R-CNN首先通過SS算法提取2k個左右的感興趣區域,再對感興趣區域進行特征提取。存在缺陷:感興趣區域彼此之間權值無法共享,存在重複計算,中間數據需單獨保存占用資源,對輸入圖片強制縮放影響檢測準确度。
SPP-NET在最後一個卷積層和第一個全連接層之間做些處理,保證輸入全連接層的尺寸一緻即可解決輸入圖像尺寸受限的問題。SPP-NET候選區域包含整張圖像,隻需通過一次卷積網絡即可得到整張圖像和所有候選區域的特征。
FastR-CNN借鑒SPP-NET的特征金字塔,提出ROIPooling把各種尺寸的候選區域特征圖映射成統一尺度的特征向量,首先,将不同大小的候選區域都切分成M×N塊,再對每塊都進行maxpooling得到1個值。這樣,所有候選區域特征圖就都統一成M×N維的特征向量了。但是,利用SS算法産生候選框對時間消耗非常大。
FasterR-CNN是先用CNN骨幹網提取圖像特征,由RPN網絡和後續的檢測器共享,特征圖進入RPN網絡後,對每個特征點預設9個不同尺度和形狀的錨盒,計算錨盒和真實目标框的交并比和偏移量,判斷該位置是否存在目标,将預定義的錨盒分為前景或背景,再根據偏差損失訓練RPN網絡,進行位置回歸,修正ROI的位置,最後将修正的ROI傳入後續網絡。但是,在檢測過程中,RPN網絡需要對目标進行一次回歸篩選以區分前景和背景目标,後續檢測網絡對RPN輸出的ROI再一次進行細分類和位置回歸,兩次計算導緻模型參數量大。
MaskR-CNN在FasterR-CNN中加了并行的mask分支,對每個ROI生成一個像素級别的二進制掩碼。在FasterR-CNN中,采用ROIPooling産生統一尺度的特征圖,這樣再映射回原圖時就會産生錯位,使像素之間不能精準對齊。這對目标檢測産生的影響相對較小,但對于像素級的分割任務,誤差就不容忽視了。MaskR-CNN中用雙線性插值解決像素點不能精準對齊的問題。但是,由于繼承兩階段算法,實時性仍不理想。
一階算法在整個卷積網絡中進行特征提取、目标分類和位置回歸,通過一次反向計算得到目标位置和類别,在識别精度稍弱于兩階段目标檢測算法的前提下,速度有了極大的提升。
YOLOv1把輸入圖像統一縮放到448×448×3,再劃分為7×7個網格,每格負責預測兩個邊界框bbox的位置和置信度。這兩個b-box對應同一個類别,一個預測大目标,一個預測小目标。bbox的位置不需要初始化,而是由YOLO模型在權重初始化後計算出來的,模型在訓練時随着網絡權重的更新,調整b-box的預測位置。但是,該算法對小目标檢測不佳,每個網格隻能預測一個類别。
YOLOv2把原始圖像劃分為13×13個網格,通過聚類分析,确定每個網格設置5個錨盒,每個錨盒預測1個類别,通過預測錨盒和網格之間的偏移量進行目标位置回歸。
SSD保留了網格劃分方法,但從基礎網絡的不同卷積層提取特征。随着卷積層數的遞增,錨盒尺寸設置由小到大,以此提升SSD對多尺度目标的檢測精度。
YOLOv3通過聚類分析,每個網格預設3個錨盒,隻用darknet前52層,并大量使用殘差層。使用降采樣降低池化對梯度下降的負面效果。YOLOv3通過上采樣提取深層特征,使其與将要融合的淺層特征維度相同,但通道數不同,在通道維度上進行拼接實現特征融合,融合了13×13×255、26×26×255和52×52×255共3個尺度的特征圖,對應的檢測頭也都采用全卷積結構。
YOLOv4在原有YOLO目标檢測架構的基礎上,采用了近些年CNN領域中最優秀的優化策略,從數據處理、主幹網絡、網絡訓練、激活函數、損失函數等各個方面都進行了不同程度的優化。時至今日,已經有很多精度比較高的目标檢測算法提出,包括最近視覺領域的transformer研究也一直在提高目标檢測算法的精度。
總結來看,表示的選擇會對機器學習算法的性能産生巨大的影響,監督學習訓練的前饋網絡可視為表示學習的一種形式。依此來看傳統的算法如Blob分析和模闆匹配都是手工設計其特征表示,而神經網絡則是通過算法自動學習目标的合适特征表示,相比手工特征設計來說其更高效快捷,也無需太多的專業的特征設計知識,因此其能夠識别不同場景中形狀、大小、紋理等不一的目标,随着數據集的增大,檢測的精度也會進一步提高。
綜上,基于深度學習算法的優勢,矩視智能低代碼平台以人工智能技術為核心,在機器視覺應用開發環節,為開發者提供圖像采集、圖像标注、算法開發、算法封裝和應用集成的一站式完整工具鍊。覆蓋字符識别、缺陷檢測、目标定位、尺寸測量、3D測量、視頻開發等上百項通用功能,緻力于成為全球用戶量最多,落地場景最廣泛的機器視覺低代碼平台。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!