導航:首頁 > 源碼編譯 > 演算法測試流程

演算法測試流程

發布時間:2023-05-19 15:04:09

㈠ Fast演算法原理:fastica演算法步驟詳解

1. Fast演算法原理

我們前面已經介紹過幾個特徵檢測器,它們的效果都很好,特別是SIFT和SURF演算法,但是從實時處理的角度來看,效率還是太低了。為了解決這個問題,Edward Rosten和Tom Drummond在2006年提出了FAST演算法,並在2010年對其進行了修正。

FAST (全稱Features from accelerated segment test)是一種用於角點檢測的演算法,該演算法的原理是取圖像中檢測點,以該點為圓心的周圍鄰域內像素點判斷檢測點是否為角點,通俗的講就是若一個像素周圍有一定數量的像素與該點像素值不同,則認為其為角點。

1. 1 FAST演算法的基本流程

在圖像中選取一個像素點 p,來判斷它是不是關鍵點。$$I_p$$等於像素點 p的灰度值。

以r為半徑畫圓,覆蓋p點周圍的M個像素,通常情狂下,設置 r=3,則 M=16,如下圖所示:

設置一個閾值t,如果在這 16 個像素點中存在 n 個連續像素點的灰度值都高於$$I_p + t$$,或者低於$$I_p - t$$,那麼像素點 p 就被認為是一個角點。如上圖中的虛線所示,n 一般取值為 12。

由於在檢測特徵點時是需要對圖像中所有的像素點進行檢測,然而圖像中的絕大多數點都不是特徵點,如果對每個像素點都進行上述的檢測過程,那顯然會浪費許多時間,因此採用一種進行非特徵點判別的方法:首先對候選點的周圍每個 90 度的點:1,9,5,13 進行測試(先測試 1 和 19, 如果它們符合閾值要求再測試 5 和 13)。如果 p 是角點,那麼這四個點中至少有 3 個要符合閾值要求,否則直接剔除。對保留下來的點再繼續進行測試(是否有 12 的點符合閾值要求)。

雖然這個檢測器的效率很高,但它有以下幾條缺點:

·獲得的候選點比較多

·特徵點的選取不是最優的,因為它的效果取決與要解決的問題和角點的分布情況。

·進行非特徵點判別時大量的點被丟棄

·檢測到的很多特徵點都是相鄰的

前 3 個問題可以通過機器學習的方法解決,最後一個問題可以使用非最大值抑制的方法解決。

1. 2 機器學習的角點檢測器

選擇一組訓練圖片(最好是跟最後應用相關的圖片)

使用 FAST 演算法找出每幅圖像的特徵點,對圖像中的每一個特徵點,將其周圍的 16 個像素存儲構成一個向量P。

每一個特徵點的 16 像素點都屬於下列三類中的一種

根據這些像素點的分類,特徵向量 P 也被分為 3 個子集:Pd ,Ps ,Pb,

定義一個新的布爾變數$$K_p$$,如果 p 是角點就設置為 Ture,如果不是就設置為 False。

利用特徵值向量p,目標值是$K_p$,訓練ID3 樹(決策樹分類器)。

將構建好的決策樹運用於其他圖像的快速的檢測。

1. 3 非極大值抑制

在篩選出來的候選角點中有很多是緊挨在一起的,需要通過非極大值抑制來消除這種影響。

為所有的候選角點都確定一個打分函數$$V $$ , $$V $$的值可這樣計算:先分別計算$$I_p$$與圓上16個點的像素值差值,取絕對值,再將這16個絕對值相加,就得到了$$V $$的值

最後比較毗鄰候選角點的 V 值,把V值較小的候選角點pass掉。

FAST演算法的思想與我們對角點的直觀認識非常接近,化繁為簡。FAST演算法比其它角點的檢測演算法快,但是在雜訊較高時不夠穩定,這需要設置合適的閾值。

2.Fast實現

OpenCV中的FAST檢測演算法是用傳統方法實現的,

1.實例化fast

參數:

·threshold:閾值t,有默認值10

·nonmaxSuppression:是否進行非極大值抑制,默認值True

返回:

Fast:創建的FastFeatureDetector對象

2.利用fast.detect檢測關鍵點,沒有對應的關鍵點描述

參數:

gray: 進行關鍵點檢測的圖像,注意是灰度圖像

返回:

kp: 關鍵點信息,包括位置,尺度,方向信息

3.將關鍵點檢測結果繪制在圖像上,與在sift中是一樣的

示例:

結果:

㈡ Canny邊緣檢測演算法的步驟和理解

姓名:高強     學號:17011210057

【嵌牛導讀】:本文主要介紹Canny圖像邊緣檢測演算法的步驟和對各個步驟的理解

【嵌牛鼻子】:邊緣檢測,Canny,步驟

【嵌牛提問】:canny邊緣檢測演算法的步驟是怎樣?

【嵌牛正文】:

1. Canny邊緣檢測演算法的提出和指標

Canny演算法是John Canny在1986年提出的,那年John Canny 28歲,該文章發表在PAMI頂級期刊上(1986.IEEE Transactions on Pattern Analysis and Machine Intelligence,vol. 8, 1986 , pp 679-698  )。

Canny運算元與Marr(LoG)邊緣檢測方法類似(Marr大爺號稱計算機視覺之父),也屬於是先平滑後求導數的方法。John Canny研究了最優邊緣檢測方法所需的特性,給出了評價邊緣檢測性能優劣的三個指標:

(1)好的信噪比 ,即將非邊緣點判定為邊緣點的概率要低,將邊緣點判為非邊緣點的概率要低;

(2)高的定位性能 ,即檢測出的邊緣點要盡可能在實際塵友邊緣的中心;

(3)對單一邊緣僅有唯一響應 ,即單個邊緣產生多個響應的概率要低,並且虛假響應邊緣應該得到最大抑制。

用一句話說,就是希望在提高對景物邊緣的敏感性的同時,可以抑制雜訊的方法才是好的邊緣提取方法。

2.  Canny邊緣檢測演算法的步驟 :

(1)圖像高斯濾波進行降噪處理。

(2)用一階偏導的有限差分計算梯度告森的幅值和方向。

(3)對梯度幅值進行非極大值抑制。

(4)用雙閾值演算法檢測和連接邊緣。

3.  Canny邊緣檢測演算法的通俗理解

Canny演算法的目的就是邊緣檢測,何為邊緣?圖象局部區域亮度變化顯著的部分,對於灰度圖像來說,也就是灰度值有一個明顯變化,既從一個灰度值在很小的緩沖區域內急劇變化到另一個灰度相差較大的灰度值。那麼襪兄畝怎麼表徵這種灰度值的變化呢?這里想到的就是導數微分,導數就是表徵變化率的,但是數字圖像都是離散的,也就是導數肯定會用差分來代替。也就是具體演算法中的步驟2,用相鄰像素的差分來計算梯度的大小和方向。但是在真實的圖像中,一般會有雜訊,雜訊會影響梯度的計算,所以步驟1要先濾波。理論上將圖像梯度幅值的元素值越大,說明圖像中該點的梯度值越大,但這不能說明該點就是邊緣。在Canny演算法中,步驟3的非極大值抑制是進行邊緣檢測的重要步驟,通俗意義上是指尋找像素點的局部最大值,沿著梯度方向,比較它前面和後面的梯度值,若梯度值局部最大則有可能為邊緣像素,進行保留,否則就進行抑制。步驟4是一個典型演算法,有時候我們並不能一刀切,也就是超過閾值的都是邊緣點,而是設兩個閾值,希望在高閾值和低閾值之間的點也可能是邊緣點,而且這些點最好在高閾值的附近,也就是說這些中間閾值的點是高閾值邊緣點的一種延伸。所以步驟4用了雙閾值來進行檢測和連接邊緣。雙閾值有時也叫做滯後閾值。

㈢ 經典目標檢測演算法介紹

姓名:牛曉銀;學號:20181213993;學院:計算機科學與技術

轉自:https://zhuanlan.hu.com/p/34142321

【嵌牛導讀】:目標檢測,也叫目標提取,是一種基於目標幾何和統計特徵的圖像分割。隨著計算機技術的發展和計算機視覺原理的廣泛應用,利用計算機圖像處理技術對目標進行實時跟蹤研究越來越熱門,對目標進行動態實時跟蹤定位在智能化交通系統、軍事目標檢測及醫學導航手術中手術器械定位等方面具有廣泛的應用價值。

【嵌牛鼻子】:目標檢測、檢測模型、計算機視覺

【嵌牛提問】:你知道或者用過哪些目標檢測演算法?

【嵌牛正文】:

(一)目標檢測經典工作回顧

本文結構

兩階段模型因其對圖片的兩階段處理得名,也稱為基於區域(Region-based)的方法,我們選取R-CNN系列工作作為這一類型的代表。

R-CNN: R-CNN系列的開山之作

論文鏈接:  Rich feature hierarchies for accurate object detection and semantic segmentation

本文的兩大貢獻:1)CNN可用於基於區域的定位和分割物體;2)監督訓練樣本數緊缺時,在額外的數據上預訓練的模型經過fine-tuning可以取得很好的效果。第一個貢獻影響了之後幾乎所有2-stage方法,而第二個貢獻中用分類任務(Imagenet)中訓練好的模型作為基網路,在檢測問題上fine-tuning的做法也在之後的工作中一直沿用。

傳統的計算機視覺方法常用精心設計的手工特徵(如SIFT, HOG)描述圖像,而深度學習的方法則倡導習得特徵,從圖像分類任務的經驗來看,CNN網路自動習得的特徵取得的效果已經超出了手工設計的特徵。本篇在局部區域應用卷積網路,以發揮卷積網路學習高質量特徵的能力。

R-CNN將檢測抽象為兩個過程,一是基於圖片提出若干可能包含物體的區域(即圖片的局部裁剪,被稱為Region Proposal),文中使用的是Selective Search演算法;二是在提出的這些區域上運行當時表現最好的分類網路(AlexNet),得到每個區域內物體的類別。

另外,文章中的兩個做法值得注意。

一是數據的准備。輸入CNN前,我們需要根據Ground Truth對提出的Region Proposal進行標記,這里使用的指標是IoU(Intersection over Union,交並比)。IoU計算了兩個區域之交的面積跟它們之並的比,描述了兩個區域的重合程度。

文章中特別提到,IoU閾值的選擇對結果影響顯著,這里要談兩個threshold,一個用來識別正樣本(如跟ground truth的IoU大於0.5),另一個用來標記負樣本(即背景類,如IoU小於0.1),而介於兩者之間的則為難例(Hard Negatives),若標為正類,則包含了過多的背景信息,反之又包含了要檢測物體的特徵,因而這些Proposal便被忽略掉。

另一點是位置坐標的回歸(Bounding-Box Regression),這一過程是Region Proposal向Ground Truth調整,實現時加入了log/exp變換來使損失保持在合理的量級上,可以看做一種標准化(Normalization)操作。

小結

R-CNN的想法直接明了,即將檢測任務轉化為區域上的分類任務,是深度學習方法在檢測任務上的試水。模型本身存在的問題也很多,如需要訓練三個不同的模型(proposal, classification, regression)、重復計算過多導致的性能問題等。盡管如此,這篇論文的很多做法仍然廣泛地影響著檢測任務上的深度模型革命,後續的很多工作也都是針對改進這一工作而展開,此篇可以稱得上"The First Paper"。

Fast R-CNN: 共享卷積運算

論文鏈接: Fast R-CNN

文章指出R-CNN耗時的原因是CNN是在每一個Proposal上單獨進行的,沒有共享計算,便提出將基礎網路在圖片整體上運行完畢後,再傳入R-CNN子網路,共享了大部分計算,故有Fast之名。

上圖是Fast R-CNN的架構。圖片經過feature extractor得到feature map, 同時在原圖上運行Selective Search演算法並將RoI(Region of Interset,實為坐標組,可與Region Proposal混用)映射到到feature map上,再對每個RoI進行RoI Pooling操作便得到等長的feature vector,將這些得到的feature vector進行正負樣本的整理(保持一定的正負樣本比例),分batch傳入並行的R-CNN子網路,同時進行分類和回歸,並將兩者的損失統一起來。

RoI Pooling 是對輸入R-CNN子網路的數據進行准備的關鍵操作。我們得到的區域常常有不同的大小,在映射到feature map上之後,會得到不同大小的特徵張量。RoI Pooling先將RoI等分成目標個數的網格,再在每個網格上進行max pooling,就得到等長的RoI feature vector。

文章最後的討論也有一定的借鑒意義:

multi-loss traing相比單獨訓練classification確有提升

multi-scale相比single-scale精度略有提升,但帶來的時間開銷更大。一定程度上說明CNN結構可以內在地學習尺度不變性

在更多的數據(VOC)上訓練後,精度是有進一步提升的

Softmax分類器比"one vs rest"型的SVM表現略好,引入了類間的競爭

更多的Proposal並不一定帶來精度的提升

小結

Fast R-CNN的這一結構正是檢測任務主流2-stage方法所採用的元結構的雛形。文章將Proposal, Feature Extractor, Object Classification&Localization統一在一個整體的結構中,並通過共享卷積計算提高特徵利用效率,是最有貢獻的地方。

Faster R-CNN: 兩階段模型的深度化

論文鏈接: Faster R-CNN: Towards Real Time Object Detection with Region Proposal Networks

Faster R-CNN是2-stage方法的奠基性工作,提出的RPN網路取代Selective Search演算法使得檢測任務可以由神經網路端到端地完成。粗略的講,Faster R-CNN = RPN + Fast R-CNN,跟RCNN共享卷積計算的特性使得RPN引入的計算量很小,使得Faster R-CNN可以在單個GPU上以5fps的速度運行,而在精度方面達到SOTA(State of the Art,當前最佳)。

本文的主要貢獻是提出Regional Proposal Networks,替代之前的SS演算法。RPN網路將Proposal這一任務建模為二分類(是否為物體)的問題。

第一步是在一個滑動窗口上生成不同大小和長寬比例的anchor box(如上圖右邊部分),取定IoU的閾值,按Ground Truth標定這些anchor box的正負。於是,傳入RPN網路的樣本數據被整理為anchor box(坐標)和每個anchor box是否有物體(二分類標簽)。RPN網路將每個樣本映射為一個概率值和四個坐標值,概率值反應這個anchor box有物體的概率,四個坐標值用於回歸定義物體的位置。最後將二分類和坐標回歸的損失統一起來,作為RPN網路的目標訓練。

由RPN得到Region Proposal在根據概率值篩選後經過類似的標記過程,被傳入R-CNN子網路,進行多分類和坐標回歸,同樣用多任務損失將二者的損失聯合。

小結

Faster R-CNN的成功之處在於用RPN網路完成了檢測任務的"深度化"。使用滑動窗口生成anchor box的思想也在後來的工作中越來越多地被採用(YOLO v2等)。這項工作奠定了"RPN+RCNN"的兩階段方法元結構,影響了大部分後續工作。

單階段(1-stage)檢測模型

單階段模型沒有中間的區域檢出過程,直接從圖片獲得預測結果,也被成為Region-free方法。

YOLO

論文鏈接: You Only Look Once: Unified, Real-Time Object Detection

YOLO是單階段方法的開山之作。它將檢測任務表述成一個統一的、端到端的回歸問題,並且以只處理一次圖片同時得到位置和分類而得名。

YOLO的主要優點:

快。

全局處理使得背景錯誤相對少,相比基於局部(區域)的方法, 如Fast RCNN。

泛化性能好,在藝術作品上做檢測時,YOLO表現比Fast R-CNN好。

YOLO的工作流程如下:

1.准備數據:將圖片縮放,劃分為等分的網格,每個網格按跟Ground Truth的IoU分配到所要預測的樣本。

2.卷積網路:由GoogLeNet更改而來,每個網格對每個類別預測一個條件概率值,並在網格基礎上生成B個box,每個box預測五個回歸值,四個表徵位置,第五個表徵這個box含有物體(注意不是某一類物體)的概率和位置的准確程度(由IoU表示)。測試時,分數如下計算:

等式左邊第一項由網格預測,後兩項由每個box預測,以條件概率的方式得到每個box含有不同類別物體的分數。 因而,卷積網路共輸出的預測值個數為S×S×(B×5+C),其中S為網格數,B為每個網格生成box個數,C為類別數。

3.後處理:使用NMS(Non-Maximum Suppression,非極大抑制)過濾得到最後的預測框

損失函數的設計

損失函數被分為三部分:坐標誤差、物體誤差、類別誤差。為了平衡類別不均衡和大小物體等帶來的影響,損失函數中添加了權重並將長寬取根號。

小結

YOLO提出了單階段的新思路,相比兩階段方法,其速度優勢明顯,實時的特性令人印象深刻。但YOLO本身也存在一些問題,如劃分網格較為粗糙,每個網格生成的box個數等限制了對小尺度物體和相近物體的檢測。

SSD: Single Shot Multibox Detector

論文鏈接: SSD: Single Shot Multibox Detector

SSD相比YOLO有以下突出的特點:

多尺度的feature map:基於VGG的不同卷積段,輸出feature map到回歸器中。這一點試圖提升小物體的檢測精度。

更多的anchor box,每個網格點生成不同大小和長寬比例的box,並將類別預測概率基於box預測(YOLO是在網格上),得到的輸出值個數為(C+4)×k×m×n,其中C為類別數,k為box個數,m×n為feature map的大小。

小結

SSD是單階段模型早期的集大成者,達到跟接近兩階段模型精度的同時,擁有比兩階段模型快一個數量級的速度。後續的單階段模型工作大多基於SSD改進展開。

檢測模型基本特點

最後,我們對檢測模型的基本特徵做一個簡單的歸納。

檢測模型整體上由基礎網路(Backbone Network)和檢測頭部(Detection Head)構成。前者作為特徵提取器,給出圖像不同大小、不同抽象層次的表示;後者則依據這些表示和監督信息學習類別和位置關聯。檢測頭部負責的類別預測和位置回歸兩個任務常常是並行進行的,構成多任務的損失進行聯合訓練。

相比單階段,兩階段檢測模型通常含有一個串列的頭部結構,即完成前背景分類和回歸後,把中間結果作為RCNN頭部的輸入再進行一次多分類和位置回歸。這種設計帶來了一些優點:

對檢測任務的解構,先進行前背景的分類,再進行物體的分類,這種解構使得監督信息在不同階段對網路參數的學習進行指導

RPN網路為RCNN網路提供良好的先驗,並有機會整理樣本的比例,減輕RCNN網路的學習負擔

這種設計的缺點也很明顯:中間結果常常帶來空間開銷,而串列的方式也使得推斷速度無法跟單階段相比;級聯的位置回歸則會導致RCNN部分的重復計算(如兩個RoI有重疊)。

另一方面,單階段模型只有一次類別預測和位置回歸,卷積運算的共享程度更高,擁有更快的速度和更小的內存佔用。讀者將會在接下來的文章中看到,兩種類型的模型也在互相吸收彼此的優點,這也使得兩者的界限更為模糊。

㈣ 軟體測試的目標和准則是什麼有哪些測試方法測試步驟有哪些

軟體測試的目的;在規定的條件下對程序進行操作,以發現程序錯誤,衡量軟體質量,並對其是否能滿足設計要求進行評估。

准則:對計算機軟體進行測試前,首先需遵循軟體測試原則,即不完全原則的遵守。不完全原則即為若測試不完全、測試過程中涉及免疫性原則的部分較多,可對軟體測試起到一定幫助。

因軟體測試因此類因素具有一定程度的免疫性,測試人員能夠完成的測試內容與其免疫性成正比,若想使軟體測試更為流暢、測試效果更為有效,首先需遵循此類原則,將此類原則貫穿整個開發流程,不斷進行測試,而並非一次性全程測試。

測試方法:

1、靜態測試方法

軟體代碼的靜態分析測驗,此類過程中應用數據較少,主要過程為通過軟體的靜態性測試(即人工推斷或計算機輔助測試)測試程序中運算方式、演算法的正確性,進而完成測試過程,此類測試的優點在於能夠消耗較短時間、較少資源完成對軟體、軟體代碼的測試,能夠較為明顯地發現此類代碼中出現的錯誤。

2、動態測試

計算機動態測試的主要目的為檢測軟體運行中出現的問題,較靜態測試方式相比,其被稱為動態的原因即為其測試方式主要依賴程序的運用,主要為檢測軟體中動態行為是否缺失、軟體運行效果是否良好。

3、黑盒測試

通過數據輸入觀察數據輸出,檢查軟體內部功能是否正常。測試展開時,數據輸入軟體中,等待數據輸出。數據輸出時若與預計數據一致,則證明該軟體通過測試,若數據與預計數據有出入,即便出入較小亦證明軟體程序內部出現問題,需盡快解決。

4、白盒測試

白盒測試相對於黑盒測試而言具有一定透明性,原理為根據軟體內部應用、源代碼等對產品內部工作過程進行調試。測試過程中常將其與軟體內部結構協同展開分析,最大優點即為其能夠有效解決軟體內部應用程序出現的問題,測試過程中常將其與黑盒測試方式結合,當測試軟體功能較多時,白盒測試法亦可對此類情況展開有效調試。



(4)演算法測試流程擴展閱讀

軟體測試工具

開源測試管理工具:Bugfree、Bugzilla、TestLink、mantis zentaopms。

開源功能自動化測試工具:Watir、Selenium[1]、MaxQ、WebInject。

開源性能自動化測試工具:Jmeter、OpenSTA、DBMonster、TPTEST、Web Application Load Simulator。

其他測試工具與框架:Rational Functional Tester、Borland Silk系列工具、WinRunner、Robot等。

禪道測試管理工具:功能比較全面的測試管理工具,功能涵蓋軟體研發的全部生命周期,為軟體測試和產品研發提供一體化的解決方案。是一款優秀的國產開源測試管理工具。

Quality Center:基於Web的測試管理工具,可以組織和管理應用程序測試流程的所有階段,包括指定測試需求、計劃測試、執行測試和跟蹤缺陷。

QuickTest Professional:用於創建功能和回歸測試。

LoadRunner:預測系統行為和性能的負載測試工具。

國內免費軟體測試工具有:AutoRunner和TestCenter。

㈤ 目標檢測演算法---faster rcnn 知識簡要回顧(測試篇)

Faster RCNN檢測部分主要可以分為四個模塊:
1.特徵抽取:用於抽取圖像特徵,一般可以使用vgg、resnet和mobilenet等backbone;
2.RPN(Region Proposal Network):用於產生候選框,主要做一些粗糙的分類和回歸操作;
3.RoI Pooling:主要是為了解決全連接層需要固定尺寸輸入,而實際輸入大小不一的問題;
4.Classification and Regression:精細化分類和回歸。

faster rcnn演算法大致流程如下:
彩色圖像通過backbone進行特徵提取,輸出最後一層的feature map。接著將這些feature map進一步做基於3x3卷積核的特徵提取,該目的是增強模型的魯棒性。將輸出送入兩個分支,第一個分支跟類別有關,這里主要是用於簡單分類,區分是背景還是物體,這是針對anchor而言的;第二個分支則是用於初步預測候選框的偏移量,這個也是基於anchor而言的;再將前兩個分支的結果送入圖中的proposal中,首先會根據positive類的score篩選前6000個候選框,再將anchor的坐標和得到的偏移進行整合,得到初步候選框坐標,接著在做NMS,除去重疊嚴重的框,再經過了NMS後的框中,根據類別score取前300個框。然後將結果送入roi pooing層,用於生成固定尺寸的特徵區域,以方便後邊的全連接層接受信息;全連接層用於最後提取特徵,得到精細的類別和框的偏移量。

㈥ 軟體測試流程五個階段

軟體測試按照研發階段一般分為5個部分:單元測試、集成測試、確認測試、系統測試、驗收測試,下面將不同階段需要的一些工作內容做一下梳理希望可以幫助鉛扮到大家。

//No.1//

單元測試又稱為模塊測試,是針對軟體設計的最小單位程序模塊進行正確性檢查的測試工作,單元測試需要從程序內部結構出發設計測試用例,多個模塊可以平行地獨立進行單元測試。

一、單元測試的內容

1、模塊介面測試

2、 局部數據結構測試

3、 路徑測試

運算的優先次序、常見的比較和控制流

4、錯誤處理測試

遇見出錯的條件,並設置適當的出錯處理

5、邊界測試

例如循環的次數,最大或最小值

二、單元測試步驟:

//No.2//

又稱為組裝測試或聯合測試,在單元測試的基礎上,需要將所有模塊按照概要設計說明書和詳細設計說明書的要求進行組裝。

模塊組裝成系統的方式:一次性組裝方式和增殖式組裝方式

一、一次性組裝方式

先對模塊分別進行測試,再把所有模塊組裝進行測試

缺點:發現錯我不容易定位

二、增值式組裝測試

先對一個個模塊進行模塊測試,然後將這些模塊逐步組裝成系統,分為兩種方式:自頂向下的增殖方式和自底向上的增殖方式

1、自頂向下的增殖方式(不需要驅動模塊)

將模塊銨系統程序結構,嚴控制層次自頂向下進行組裝。

首先以主模塊作為被測模塊仿激唯兼驅動模塊,所有直屬主模塊的下屬模塊全部用樁模塊代替,對主模塊進行測試。再採用深度優先或廣度優先的策略,用實際模塊代替樁模塊,再用樁模塊代替它們的直接下屬模塊,與已經測試的模塊構成新的子系統。然後進行回歸測試。

2、自底向上的增殖方式(不需要驅動模塊)

由驅動模塊控制最底層模塊的並行測試。

3、混合增殖式

優點:能夠較早的發現主要控制方面的問題

缺點:需要建立樁模塊,增加了一些附加的測試,涉及演算法和輸入輸出的模塊一般在底層,這些底層模塊要到組裝和測試的後期才能發現。一旦發現問題就會出現過多的回歸測試。

優點:不需要建立樁模塊,建立驅動模塊要比建立樁模塊要簡單得多,同時涉及到演算法已近輸入輸出的模塊要先測試,把最容易出現問題的部分在早期解決。

缺點:程序一直未能作為一個實體存在,直到最後一個模塊加上才能形成一個實體,控制方面最後才能接觸。

三、集成測試完成的標志:

1、成功執行了測試計劃中規定的所有集成測試

2、修改了所發現的錯誤

3、測試結果通過專門小組的評審

4、集成測試需要提交的測試報告:

5、集成測試計劃、集成測試規格說明書以及集成測試分析報告

//No.3//

確認測試的目標是驗證軟體的功能和性能以及其他特性是否與用戶的要求一致。確認測試一般包括有效性測試和軟體配置復查。一般有第三方測試機構進行。

一、進行有效性測試

現軟體確認要通過一系列黑盒測試。確認測試同樣需要制訂測試計劃和過程,測試計劃應規定測試的種類和測試進度,測試過程則定義一些特殊的測試用例,旨在說明軟體與需求是否一致。

無是計劃還是過程,都應該著重考慮軟體是否滿足合同規定的所有功能和性能,文檔資料是否完整、准確人機界面和其他方面(例如,可移植性、兼容性、錯誤恢復能力和可維護性等)是否令用戶滿意。

確認測試的結果有兩種可能,一種是功能和性能指標滿足軟體需求說明的要求,用戶可以接受;

另一種是軟體不滿足軟體需求說明的要求,用戶無法接受。項目進行到這個階段才發現嚴重錯誤和偏差一般很難在預定的工期內改正,因此必須與用戶協商,尋求一個妥善解決問題的方法

二、軟體配置復查

保證軟體配置的所有成分齊全,質量都符合要求。應該遵守用戶手冊和操作手冊中的規定步驟。

No.4

系統測試

軟體作為計算機系統的一部分,與硬體、網路、外設、支撐軟體、數據以及人員結合在一起,在實際或模擬環境備培下,對計算機系統進行測試,

目的在於與系統需求比較,發現問題

No.5

以用戶為主的測試,軟體開發人員和質量保證人員參加,由用戶設計測試用例。

不是對系統進行全覆蓋測試,而是對核心業務流程進行測試。

㈦ (轉)物流優化演算法處理流程及演算法服務平台建設

轉自:吉勍Personal

http://www.jiqingip.com/page9001?article_id=94

演算法處理流程

物流方向的大多數業務演算法處理流程基本是按照模型建立、演算法開發、演算法測試流程進行,具體步驟如下:

模型建立

大多數優化問題都能構建成線性規劃、非線性規劃或混合整數規劃等數學模型。這些模型需要根據實際業務確定,模型主要包含以下因素:

1)  優化目標

2)  決策變數

3)  約束條件

演算法開發

模型的求解可根據實際的業務情況(問題復雜程度、數據規模、計算時效要求)等採用合適的精確演算法和近似的最優化演算法進行求解。

模型精確計算

模型精確求解有一些商業和開源的求解器,如下:Gurobi、Cplex、SCIP、OR-Tools、Glpk等,可以根據實際情況選擇合適的求解器。

最優化演算法計算

最優化演算法也有很多,比如變鄰域搜索演算法、自適應大鄰域搜索演算法、禁忌搜索演算法、模擬退火演算法、遺傳演算法、蟻群優化演算法、粒子群優化演算法、人工魚群演算法、人工蜂群演算法等,可以根據適用情況選擇。

業務相關開放項目計算

解物流領域的某些項目可以利用一些開放性的項目來求解,如求解車輛路徑問題的jsprit、求解排程類問題的optaplanner等,這類問題在模型建立好之後可以調用這些開放性項目來求解。

演算法測試

生產數據測試

物流方向的項目基本都是優化類型的項目,每個項目對應的業務環節一直在運行,涉及到的優化問題或者是業務系統簡單處理,或者人為計算,對於演算法有效性的檢測可以把這部分生產數據獨立抽離出來,經過優化演算法計算之後跟原有系統數據進行相關的對比,來評價演算法的優化效果。

模擬測試

物流的優化不像互聯網應用可以採用流量灰度的方式進行直接的驗證,並且物流系統的鏈路非常長,單點的改變可能引起上下游的變化。在決策優化的過程中需要同時使用優化求解及模擬技術來驗證或提供決策依據。模擬測試驗證大致需要以下過程:

1)  定義模擬模型確定績效指標體系

2)  輸入演算法結果數據到模擬模型進行模擬計算

3)  根據模擬模型的模擬結果計算績效指標,以反饋演算法的優化效果。

演算法服務平台建設

實際業務中的很多應用場景都可以抽象成同一類演算法問題。演算法在解決不同應用場景業務問題時,相關模型、處理流程及計算方法也都大致相同,因此可以對這類問題的演算法,按照其處理流程從業務中剝離出來,封裝好演算法的輸入、輸出及計算邏輯,構建統一的演算法服務平台。

VRP演算法服務

比較經典的VRP問題就會應用到很多業務場景,即時配、大件配送、冷鏈配送、門店補貨等。這些業務場景對於大型零售商來說是比較常見的,因此構建可靈活配置的VRP演算法服務平台,可達成一次構建,多場景應用的效果。

排班演算法服務

排班問題也是一樣,無論是生產線工人排班、司機排班、客服排班還是門店工作人員排班,這些都是排班問題應用的業務場景。通過構建可靈活配置的排班演算法服務平台,可解決多個業務場景的排班問題。

裝箱演算法服務

裝箱問題也有著豐富的應用場景,無論是商品配送的車輛裝箱、運輸網路的車型推薦及包裝作業的包材推薦都是裝箱問題的業務場景。構建靈活的裝箱演算法服務平台,可通過配置有效的解決各業務場景的裝箱問題。

運籌規劃演算法服務

無論是上面提到的一些演算法服務還是其他組合優化問題,都可以構建成運籌優化問題來解決。大家熟知的google or-tools就是組合優化問題的工具包。我們也可以根據自身的業務特點構建適合業務場景的運籌規劃演算法服務,底層可以調用不同的求解器,可以是商業求解器,如gurobi、cplex等,也可以是開源求解器,如scip、glpk等;也可以是一些最優化演算法,如鄰域搜索等。

㈧ 計算機視覺——典型的目標檢測演算法(OverFeat演算法)(二)

【嵌牛導讀】目標檢測在現實中的應用很廣泛,我們需要檢測數字圖像中的物體位置以及類別,它需要我們構建一個模型,模型的輸入一張圖片,模型的輸出需要圈出圖片中所有物體的位置以及物體所屬的類別。在深度學習浪潮到來之前,目標檢測精度的進步十分緩慢,靠傳統依靠手工特徵的方法來提高精度已是相當困難的事。而ImageNet分類大賽出現的卷積神經網路(CNN)——AlexNet所展現的強大性能,吸引著學者們將CNN遷移到了其他的任務,這也包括著目標檢測任務,近年來,出現了很多目標檢測演算法。

【嵌牛鼻子】計算機視覺

【嵌牛提問】如何理解目標檢測演算法——OverFeat

【嵌牛正文】

一、深度學習的典型目標檢測演算法

深度學習目標檢測演算法主要分為 雙階段檢測演算法 和 單階段檢測演算法 ,如圖1所示。

雙階段目標檢測演算法先對圖像提取候選框,然後基於候選區域做二次修正得到檢測結果,檢測精度較高,但檢測速度較慢;單階段目標驗測演算法直接對圖像進行計算生成檢測結果,檢測速度快,但檢測精度低。

1、雙階段目標檢測演算法

雙階段目標檢測方法主要通過選擇性搜索(Selective Search)或者Edge Boxes等演算法對輸入圖像選取可能包含檢測目標的候選區域(Region Proposal),再對候選區域進行分類和位置回歸以得到檢測結果。

1.1 OverFeat 演算法

《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》

Sermanet 等改進AlexNet 提出 OverFeat 演算法。該演算法結合AlexNet通過多尺度滑動窗口實現特徵提取功能,並且共享特徵提取層,應用於圖像分類、定位和目標檢測等任務。

關鍵技術:

1、FCN( 全卷積神經網路 )

對於一個各層參數結構都設計好的網路模型,要求輸入圖片的尺寸是固定的(例如,Alexnet要求輸入圖片的尺寸為227px*227px)。如果輸入一張500*500的圖片,希望模型仍然可以一直前向傳導,即一個已經設計完畢的網路,可以輸入任意大小的圖片,這就是FCN。

FCN的思想在於:

1、從卷積層到全連接層,看成是對一整張圖片的卷積層運算。

2、從全連接層到全連接層,看成是採用1*1大小的卷積核,進行卷積層運算。

如上圖所示,綠色部分代表卷積核大小。假設一個CNN模型,其輸入圖片大小是14*14,通過第一層卷積後得到10*10大小的圖片,然後接著通過池化得到了5*5大小的圖片。像但是對於像素值為5*5的圖片到像素值為1*1的圖片的過程中:

(1)傳統的CNN:如果從以前的角度進行理解的話,那麼這個過程就是全連接層,我們會把這個5*5大小的圖片,展平成為一維向量進行計算。

(2)FCN:FCN並不是把5*5的圖片展平成一維向量再進行計算,而是直接採用5*5的卷積核,對一整張圖片進行卷積運算。

二者本質上是相同的,只是角度不同,FCN把這個過程當成了對一整張特徵圖進行卷積,同樣,後面的全連接層也是把它當做是以1*1大小的卷積核進行卷積運算。

當輸入一張任意大小的圖片,就需要利用以上所述的網路,例如輸入一張像素為16*16的圖片:

根據上圖,該網路最後的輸出是一張2*2的圖片。可見採用FCN網路可以輸入任意大小的圖片。同時需要注意的是網路最後輸出的圖片大小不在是一個1*1大小的圖片,而是一個與輸入圖片大小息息相關的一張圖片。

Overfeat就是把採用FCN的思想把全連接層看成了卷積層,在網路測試階段可以輸入任意大小的圖片。

2、offset max-pooling

簡單起見,不用二維的圖像作為例子,而是採用一維作為示例:

如上圖所示,在X軸上有20個神經元,並且選擇池化size=3的非重疊池化,那麼根據之前所學的方法應該是:對上面的20個神經元,從1位置開始進行分組,每3個連續的神經元為一組,然後計算每組的最大值(最大池化),19、20號神經元將被丟棄,如下圖所示:

或者可以在20號神經元後面,添加一個數值為0的神經元編號21,與19、20成為一組,這樣可以分成7組:[1,2,3],[4,5,6]……,

[16,17,18],[19,20,21],最後計算每組的最大值。

如果只分6組,除了以1作為初始位置進行連續組合之外,也可以從位置2或者3開始進行組合。也就是說其實有3種池化組合方法:

A、△=0分組:[1,2,3],[4,5,6]……,[16,17,18];

B、△=1分組:[2,3,4],[5,6,7]……,[17,18,19];

C、△=2分組:[3,4,5],[6,7,8]……,[18,19,20];

對應圖片如下:

以往的CNN中,一般只用△=0的情況,得到池化結果後,就送入了下一層。但是該文獻的方法是,把上面的△=0、△=1、△=2的三種組合方式的池化結果,分別送入網路的下一層。這樣的話,網路在最後輸出的時候,就會出現3種預測結果了。

前面所述是一維的情況,如果是2維圖片的話,那麼(△x,△y)就會有9種取值情況(3*3);如果我們在做圖片分類的時候,在網路的某一個池化層加入了這種offset 池化方法,然後把這9種池化結果,分別送入後面的網路層,最後的圖片分類輸出結果就可以得到9個預測結果(每個類別都可以得到9種概率值,然後我們對每個類別的9種概率,取其最大值,做為此類別的預測概率值)。

演算法原理:

文獻中的演算法,就是把這兩種思想結合起來,形成了文獻最後測試階段的演算法。

1、論文的網路架構與訓練階段

(1)網路架構

對於網路的結構,文獻給出了兩個版本——快速版、精確版,一個精度比較高但速度慢;另外一個精度雖然低但是速度快。下面是高精度版本的網路結構表相關參數:

表格參數說明:

網路輸入:圖片大小為221px*221px;

網路結構方面基本上和AlexNet相同,使用了ReLU激活,最大池化。不同之處在於:(a)作者沒有使用局部響應歸一化層;(b)然後也沒有採用重疊池化的方法;(c)在第一層卷積層,stride作者是選擇了2,這個與AlexNet不同(AlexNet選擇的跨步是4,在網路中,如果stride選擇比較大得話,雖然可以減少網路層數,提高速度,但是卻會降低精度)。

需要注意的是把f7這一層,看成是卷積核大小為5*5的卷積層,總之就是需要把網路看成前面所述的FCN模型,去除了全連接層的概念,因為在測試階段可不是僅僅輸入221*221這樣大小的圖片,在測試階段要輸入各種大小的圖片,具體請看後面測試階段的講解。

(2)網路訓練

訓練輸入:對於每張原圖片為256*256,然後進行隨機裁剪為221*221的大小作為CNN輸入,進行訓練。

優化求解參數設置:訓練的min-batchs選擇128,權重初始化選擇高斯分布的隨機初始化:

然後採用隨機梯度下降法,進行優化更新,動量項參數大小選擇0.6,L2權重衰減系數大小選擇10-5次方。學習率初始化值為0.05,根據迭代次數的增加,每隔幾十次的迭代後,就把學習率的大小減小一半。

然後就是DropOut,這個只有在最後的兩個全連接層,才採用dropout,dropout比率選擇0.5。

2、網路測試階段

在Alexnet的文獻中,預測方法是輸入一張圖片256*256,然後進行multi-view裁剪,也就是從圖片的四個角進行裁剪,還有就是一圖片的中心進行裁剪,這樣可以裁剪到5張224*224的圖片。然後把原圖片水平翻轉一下,再用同樣的方式進行裁剪,又可以裁剪到5張圖片。把這10張圖片作為輸入,分別進行預測分類,在後在softmax的最後一層,求取個各類的總概率,求取平均值。

然而Alexnet這種預測方法存在兩個問題:

一方面這樣的裁剪方式,把圖片的很多區域都給忽略了,這樣的裁剪方式,剛好把圖片物體的一部分給裁剪掉了;

另一方面,裁剪窗口重疊存在很多冗餘的計算,像上面要分別把10張圖片送入網路,可見測試階段的計算量還是較大的。

Overfeat演算法:

訓練完上面所說的網路之後,在測試階段不再是用一張221*221大小的圖片了作為網路的輸入,而是用了6張大小都不相同的圖片,也就是所謂的多尺度輸入預測,如下表格所示:

當網路前向傳導到layer 5的時候,就利用了前面所述的FCN、offset pooling這兩種思想的相結合。現以輸入一張圖片為例(6張圖片的計算方法都相同),講解layer 5後面的整體過程,具體流程示意圖如下:

步驟一:

對於某個尺度的圖片,經過前五層的卷積後得到特徵圖。上圖中特徵圖的解析度是20x23,256個通道。

步驟二:

對於該特徵圖,重復多次使用非重疊的池化,每次池化的偏置不同,有行偏置和列偏置。上圖中偏置池化3次,偏置分別為為(0,1,2)。這就是offset pooling,也被稱為fine stride。offset pooling得到的特徵圖的維度為6x7x3x3xD,其中6x7是特徵圖的解析度,3x3是偏置池化的次數,D是通道數。上圖中是以1維顯示的。

步驟三:

池化後得到的特徵圖將被送入分類器。

步驟四:

分類器的輸入是的5x5xD,輸出是C(類別數)維向量。但是offset pooling後得到的特徵圖並不是5x5xD,比如上圖中的特徵圖大小為6x7xD,因此分類器以滑動窗口的方式應用在特徵圖上,每個滑動窗口經過分類器輸出一個C維向量。比如上圖中輸入的6x7xD的特徵圖最終得到2x3xC的輸出,其中2x3是滑動窗口的個數。

步驟五:

而2x3xC只是一組偏置池化的輸出,總的輸出為2x3x3x3xC,將輸出的張量reshape,得到6x9xC輸出張量。最終輸出分類張量為3d張量,即兩個解析度維度 x C維。

然後需要在後面把它們拉成一維向量,這樣在一個尺度上,可以得到一個C*N個預測值矩陣,每一列就表示圖片屬於某一類別的概率值,並且求取每一列的最大值,作為本尺度的每個類別的概率值。

最後一共用了6種不同尺度(文獻使用了12張,另外6張是水平翻轉的圖片)進行做預測,然後把這六種尺度結果再做一個平均,作為最最後的結果。

從上面過程可以看到整個網路分成兩部分:layer 1~5這五層稱之為特徵提取層;layer 6~output稱之為分類層。

六、定位任務

用於定位任務的時候,就把分類層(上面的layer 6~output)給重新設計一下,把分類改成回歸問題,然後在各種不同尺度上訓練預測物體的bounding box。

閱讀全文

與演算法測試流程相關的資料

熱點內容
php基礎編程教程pdf 瀏覽:219
穿越之命令與征服將軍 瀏覽:351
android廣播重復 瀏覽:832
像阿里雲一樣的伺服器 瀏覽:318
水冷空調有壓縮機嗎 瀏覽:478
訪問日本伺服器可以做什麼 瀏覽:432
bytejava詳解 瀏覽:448
androidjava7 瀏覽:384
伺服器在山洞裡為什麼還有油 瀏覽:885
天天基金app在哪裡下載 瀏覽:974
伺服器軟路由怎麼做 瀏覽:291
冰箱壓縮機出口 瀏覽:227
OPT最佳頁面置換演算法 瀏覽:644
網盤忘記解壓碼怎麼辦 瀏覽:852
文件加密看不到裡面的內容 瀏覽:654
程序員腦子里都想什麼 瀏覽:434
oppp手機信任app在哪裡設置 瀏覽:189
java地址重定向 瀏覽:272
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:448
程序員出軌電視劇 瀏覽:90