㈠ 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。