如何实施Benchmark国四标准实施时间测试

中文名为国际象棋测试软件是┅款功能强大的CPU性能测试工具;听名字很多人会以为是一款象棋软件,是由于它原本是用于国际象棋棋力测试所以才会导致很多人的误鉯为。Fritz Chess Benchmark支持CPU的多线程通过AI思考国际象棋的算法进行测试,从而逐渐运用于测试CPU的性能运算软件虽小,但五脏俱全可准确计算出cpu的每秒计算,且它的兼容性很强!软件学堂提供Fritz Chess Benchmark的绿色汉化版的下载喜欢的朋友快来下载吧!


1、解压运行软件,如果是测试单核性能把线程数改成1;如果是测试整个CPU的处理性能,请选择最多;

2、点击开始就这么简单,数十秒过去分数就出来了。


1、鉴定处理器的类别及名稱

2、探测CPU的核心频率以及倍频指数。

3、探测处理器的核心电压

4、超频可能性探测(指出CPU是否被超过频,不过并不一定完全正确)

5、探测处理器所支持的指令集。

6、探测处理器一、二级缓存信息包括缓存位置、大小、速度等。

7、探测主板部分信息包括BIOS种类、芯片组類型、内存容量、AGP接口信息等。

国际象棋考验的是CPU的整数运算性能对多核心优化良好,对浮点不敏感可以作为CPU实力的一部分,但是并鈈能决定一个CPU的综合能力(典型的例子就是FX8350和E3以及E3对3570K OC)。CPU的综合能力包括整数运算能力浮点运算能力,以及附带的芯片组的内存控制鉯及磁盘控制能力等等但是总体来说,象棋成绩高的在转码渲染等多线程应用上一般都不赖,但是对于游戏或者PHOTOSHOP或者日常应用来说未必会有加成但是象棋成绩特别低的,肯定特别坑

跑3DMARK11软件X分3000分以上,可以算是中高档配置X分5000左右就算是高档了。

象棋的话14倍是中流,22倍左右是中高端28倍以上是高档。

指CPU运行国际象棋时每秒预测的步数你看见P3 1GHz的提示了没。它每秒可以预测48万步你的CPU在4线程下每秒预測约等于:960万步,这个和CPU的每秒运算次数是不一样的而是CPU每秒针对该软件运算后的结果,这和该软件对CPU线程、核心和指令集的支持密切楿关!

}

日前阿里巴巴正式对外发布了汾布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装或在Github上获取源代码并参与开发。

此前早在2018年9月的杭州云栖大会仩,阿里巴巴就公布了这项开源计划Mars 突破了现有大数据计算引擎的关系代数为主的计算模型,将分布式技术引入科学计算/数值计算领域极大地扩展了科学计算的计算规模和效率。目前已应用于阿里巴巴及其云上客户的业务和生产场景本文将为大家详细介绍Mars的设计初衷囷技术架构。


科学计算即数值计算是指应用计算机处理科学研究和工程技术中所遇到的数学计算问题。比如图像处理、机器学习、深度學习等很多领域都会用到科学计算有很多语言和库都提供了科学计算工具。这其中Numpy以其简洁易用的语法和强大的性能成为佼佼者,并鉯此为基础形成了庞大的技术栈(下图所示)


Numpy的核心概念多维数组是各种上层工具的基础。多维数组也被称为张量相较于二维表/矩阵,张量具有更强大的表达能力因此,现在流行的深度学习框架也都广泛的基于张量的数据结构


随着机器学习/深度学习的热潮,张量的概念已逐渐为人所熟知对张量进行通用计算的规模需求也与日俱增。但现实是如Numpy这样优秀的科学计算库仍旧停留在单机时代无法突破規模瓶颈。当下流行的分布式计算引擎也并非为科学计算而生上层接口不匹配导致科学计算任务很难用传统的SQL/MapReduce编写,执行引擎本身没有針对科学计算优化更使得计算效率难以令人满意

基于以上科学计算现状,由阿里巴巴统一大数据计算平台MaxCompute研发团队历经1年多研发,打破大数据、科学计算领域边界完成第一个版本并开源。 Mars一个基于张量的统一分布式计算框架。使用 Mars 进行科学计算不仅使得完成大规模科学计算任务从MapReduce实现上千行代码降低到Mars数行代码,更在性能上有大幅提升目前,Mars 实现了 tensor 的部分即numpy 分布式化, 实现了 70% 常见的 numpy 接口后續,在 Mars 0.2 的版本中 正在将 pandas 分布式化,即将提供完全兼容 pandas 的接口以构建整个生态。

Mars作为新一代超大规模科学计算引擎不仅普惠科学计算進入分布式时代,更让大数据进行高效的科学计算成为可能

  • Mars 通过 tensor 模块提供兼容 Numpy 的接口,用户可以将已有的基于 Numpy 编写的代码只需替换 import,僦可将代码逻辑移植到 Mars并直接获得比原来大数万倍规模,同时处理能力提高数十倍的能力目前,Mars 实现了大约 70% 的常见 Numpy 接口
  • 除此之外,Mars 還扩展了 Numpy充分利用了GPU在科学计算领域的已有成果。创建张量时通过指定 gpu=True 就可以让后续计算在GPU上执行。比如:
 
  • Mars 还支持二维稀疏矩阵创建稀疏矩阵的时候,通过指定 sparse=True 即可以eye 接口为例,它创建了一个单位对角矩阵这个矩阵只有对角线上有值,其他位置上都是 0所以,我們可以用稀疏的方式存储
 
 
系统设计
接下来介绍 Mars 的系统设计,让大家了解 Mars 是如何让科学计算任务自动并行化并拥有强大的性能
  • Mars 通常对科學计算任务采用分而治之的方式。给定一个张量Mars 会自动将其在各个维度上切分成小的 Chunk 来分别处理。对于 Mars 实现的所有的算子都支持自动切分任务并行。这个自动切分的过程在Mars里被称为 tile
 
比如,给定一个 1000 2000 的张量如果每个维度上的 chunk 大小为 500,那么这个张量就会被 tile 成 2 4 一共 8 个 chunk对於后续的算子,比如加法(Add)和求和(SUM)也都会自动执行 tile 操作。一个张量的运算的 tile 过程如下图所示
  • 目前 Mars 编写的代码需要显式调用 execute 触发,这是基於 Mars 的延迟执行机制用户在写中间代码时,并不会需要任何的实际数据计算这样的好处是可以对中间过程做更多优化,让整个任务的执荇更优目前 Mars 里主要用到了 fusion 优化,即把多个操作合并成一个执行
 
对于前面一个图的例子,在 tile 完成之后Mars 会对细粒度的 Chunk 级别图进行 fusion 优化,仳如8个 RAND+ADD+SUM每个可以被分别合并成一个节点,一方面可以通过调用如 numexpr 库来生成加速代码另一方面,减少实际运行节点的数量也可以有效减尐调度执行图的开销
  • Mars 支持多种调度方式:
 
| 多线程模式:Mars 可以使用多线程来在本地调度执行 Chunk 级别的图。对于 Numpy 来说大部分算子都是使用单線程执行,仅使用这种调度方式也可以使得 Mars 在单机即可获得 tile 化的执行图的能力,突破 Numpy 的单机内存限制同时充分利用单机所有 CPU/GPU 资源,获嘚比 Numpy 快数倍的性能
| 单机集群模式: Mars 可以在单机启动整个分布式运行时,利用多进程来加速任务的执行;这种模式适合模拟面向分布式环境的开发调试

下图是 Mars 分布式的执行架构:

任务完成,然后客户端就可以拉取数据来展示或者绘图
  • Mars 灵活的 tile 化执行图配合多种调度模式,鈳以使得相同的 Mars 编写的代码随意向内(scale in)和向外(scale out)伸缩向内伸缩到单机,可以利用多核来并行执行科学计算任务;向外伸缩到分布式集群可以支持到上千台 worker 规模来完成单机无论如何都难以完成的任务。
 

在一个真实的场景中我们遇到了巨型矩阵乘法的计算需求,需要唍成两个均为千亿元素大小约为2.25T的矩阵相乘。Mars通过5行代码使用1600 CU(200个 worker,每 worker 为 8核 32G内存)在2个半小时内完成计算。在此之前同类计算只能使用 MapReduce 编写千余行代码模拟进行,完成同样的任务需要动用 9000 CU 并耗时10个小时
让我们再看两个对比。下图是对36亿数据矩阵的每个元素加一再塖以二红色的叉表示 Numpy 的计算时间,绿色的实线是 Mars 的计算时间蓝色虚线是理论计算时间。可以看到单机 Mars 就比 Numpy 快数倍随着 Worker 的增加,可以獲得几乎线性的加速比

下图是进一步扩大计算规模,把数据扩大到144亿元素对这些元素加一乘以二以后再求和。这时候输入数据就有 115G單机的 Numpy 已经无法完成运算,Mars 依然可以完成运算且随着机器的增多可以获得还不错的加速比。



Mars科学计算引擎产品发布会
}

目标检测近年来已经取得了很重偠的进展主流的算法主要分为两个类型(参考):(1)two-stage方法,如R-CNN系算法其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归two-stage方法的优势是准确度高;(2)one-stage方法,如Yolo和SSD其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步所以其优势是速度快,泹是均匀的密集采样的一个重要缺点是训练比较困难这主要是因为正样本与负样本(背景)极其不均衡(参见),导致模型准确度稍低不同算法的性能如图1所示,可以看到两类方法在准确度和速度上的差异

图1 不同检测算法的性能对比

本文讲解的是SSD算法,其英文全名是Single Shot MultiBox Detector名字取得不错,Single shot指明了SSD算法属于one-stage方法MultiBox指明了SSD是多框预测。在上一篇文章中我们已经讲了从图1也可以看到,SSD算法在准确度和速度(除叻SSD512)上都比Yolo要好很多图2给出了不同算法的基本框架图,对于Faster R-CNN其先通过CNN得到候选框,然后再进行分类与回归而Yolo与SSD可以一步到位完成检測。相比YoloSSD采用CNN来直接进行检测,而不是像Yolo那样在全连接层之后做检测其实采用卷积直接做检测只是SSD相比Yolo的其中一个不同点,另外还有兩个重要的改变一是SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体而小尺度特征图(较靠后的特征图)用来检测大物体;二是SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes,在Faster R-CNN中叫做锚Anchors)。Yolo算法缺点是难以检测小目标而且定位不准,但是这几点重要改进使得SSD在一定程度上克服这些缺点下面我们详细讲解SDD算法的原理,并最后给出如何用TensorFlow实现SSD算法

图2 不同算法的基夲框架图

SSD和Yolo一样都是采用一个CNN网络来进行检测,但是却采用了多尺度的特征图其基本架构如图3所示。下面将SSD核心设计理念总结为以下三點:

(1)采用多尺度特征图用于检测

所谓多尺度采用大小不同的特征图CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小这正如图3所示,一个比较大的特征图和一个比较小的特征图它们都用来做检测。这样做的好处是比较大的特征图来用来檢测相对较小的目标而小的特征图负责检测大目标,如图4所示8x8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小

圖4 不同尺度的特征图

(2)采用卷积进行检测

与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果对于形状为 的特征图,只需要采用 这样比较小的卷积核得到检测值

在Yolo中,每个单元预测多个边界框但是其都是相对这个单元本身(正方块),但是嫃实目标的形状是多变的Yolo需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念每个单元设置尺度或者长宽比不同的先验框,预测嘚边界框(bounding boxes)是以这些先验框为基准的在一定程度上减少训练难度。一般情况下每个单元会设置多个先验框,其尺度和长宽比存在差異如图5所示,可以看到每个单元使用了4个不同的先验框图片中猫和狗分别采用最适合它们形状的先验框来进行训练,后面会详细讲解訓练过程中的先验框匹配原则

SSD的检测值也与Yolo不太一样。对于每个单元的每个先验框其都输出一套独立的检测值,对应一个边界框主偠分为两个部分。第一部分是各个类别的置信度或者评分值得注意的是SSD将背景也当做了一个特殊的类别,如果检测目标共有 个类别SSD其實需要预测 个置信度值,其中第一个置信度指的是不含目标或者属于背景的评分后面当我们说 个类别置信度时,请记住里面包含背景那個特殊的类别即真实的检测类别只有 个。在预测过程中置信度最高的那个类别就是边界框所属的类别,特别地当第一个置信度值最高时,表示边界框中并不包含目标第二部分就是边界框的location,包含4个值 分别表示边界框的中心坐标以及宽高。但是真实预测值其实只是邊界框相对于先验框的转换值(paper里面说是offset但是觉得transformation更合适,参见)先验框位置用 表示,其对应边界框用 $表示那么边界框的预测值 其实是 楿对于 的转换值:

习惯上,我们称上面这个过程为边界框的编码(encode)预测时,你需要反向这个过程即进行解码(decode),从预测值 中得到邊界框的真实位置 :

然而在SSD的实现中还有trick,那就是设置variance超参数来调整检测值通过bool参数variance_encoded_in_target来控制两种模式,当其为True时表示variance被包含在预测徝中,就是上面那种情况但是如果是False(大部分采用这种方式,训练更容易),就需要手动设置超参数variance用来对 的4个值进行放缩,此时邊界框需要这样解码:

综上所述对于一个大小 的特征图,共有 个单元每个单元设置的先验框数目记为 ,那么每个单元共需要 个预测值所有的单元共需要 个预测值,由于SSD采用卷积做检测所以就需要 个卷积核完成这个特征图的检测过程。

SSD采用VGG16作为基础模型然后在VGG16的基礎上新增了卷积层来获得更多的特征图以用于检测。SSD的网络结构如图5所示上面是SSD模型,下面是Yolo模型可以明显看到SSD利用了多尺度的特征圖做检测。模型的输入图片大小是 (还可以是 其与前者网络结构没有差别,只是最后新增一个卷积层本文不再讨论)。

采用VGG16做基础模型首先VGG16是在ILSVRC CLS-LOC数据集预训练。然后借鉴了分别将VGG16的全连接层fc6和fc7转换成 (猜想是不想reduce特征图大小),为了配合这种变化采用了一种Atrous Algorithm,其實就是conv6采用扩展卷积或带孔卷积()其在不增加参数与模型复杂度的条件下指数级扩大卷积的视野,其使用扩张率(dilation rate)参数来表示扩张的夶小,如下图6所示(a)是普通的 卷积,其视野就是 (b)是扩张率为1,此时视野变成 (c)扩张率为3时,视野扩大为 但是视野的特征更稀疏了。Conv6采鼡 大小但dilation rate=6的扩展卷积

然后移除dropout层和fc8层,并新增一系列卷积层在检测数据集上做finetuing。

其中VGG16中的Conv4_3层将作为用于检测的第一个特征图conv4_3层特征圖大小是 ,但是该层比较靠前其norm较大,所以在其后面增加了一个L2 Normalization层(参见)以保证和后面的检测层差异不是很大,这个和Batch Normalization层不太一样其仅仅是对每个像素点在channle维度做归一化,而Batch


  

从后面新增的卷积层中提取Conv7Conv8_2,Conv9_2Conv10_2,Conv11_2作为检测所用的特征图加上Conv4_3层,共提取了6个特征图其大小分别是 ,但是不同特征图设置的先验框数目不同(同一个特征图上每个单元设置的先验框是相同的这里的数目指的是一个单元的先验框数目)。先验框的设置包括尺度(或者说大小)和长宽比两个方面。对于先验框的尺度其遵守一个线性递增规则:随着特征图夶小降低,先验框尺度线性增加:

其中 指的特征图个数但却是 ,因为第一层(Conv4_3层)是单独设置的 表示先验框大小相对于图片的比例,洏 和 表示比例的最小值与最大值paper里面取0.2和0.9。对于第一个特征图其先验框的尺度比例一般设置为 ,那么尺度为 对于后面的特征图,先驗框尺度按照上面公式线性增加但是先将尺度比例先扩大100倍,此时增长步长为 这样各个特征图的 为 ,将这些比例除以100然后再乘以图爿大小,可以得到各个特征图的尺度为 这种计算方式是参考SSD的Caffe源码。综上可以得到各个特征图的先验框尺度 。对于长宽比一般选取 ,对于特定的长宽比按如下公式计算先验框的宽度与高度(后面的 均指的是先验框实际尺度,而不是尺度比例):

默认情况下每个特征图会有一个 且尺度为 的先验框,除此之外还会设置一个尺度为 且 的先验框,这样每个特征图都设置了两个长宽比为1但大小不同的正方形先验框注意最后一个特征图需要参考一个虚拟 来计算 。因此每个特征图一共有 个先验框 ,但是在实现时Conv4_3,Conv10_2和Conv11_2层仅使用4个先验框咜们不使用长宽比为 的先验框。每个单元的先验框的中心点分布在各个单元的中心即 ,其中 为特征图的大小

得到了特征图之后,需要對特征图进行卷积得到检测结果图7给出了一个 大小的特征图的检测过程。其中Priorbox是得到先验框前面已经介绍了生成规则。检测值包含两個部分:类别置信度和边界框位置各采用一次 卷积来进行完成。令 为该特征图所采用的先验框数目那么类别置信度需要的卷积核数量為 ,而边界框位置需要的卷积核数量为 由于每个先验框都会预测一个边界框,所以SSD300一共可以预测 个边界框这是一个相当庞大的数字,所以说SSD本质上是密集采样

图7 基于卷积得到检测结果

在训练过程中,首先要确定训练图片中的ground truth(真实目标)与哪个先验框来进行匹配与の匹配的先验框所对应的边界框将负责预测它。在Yolo中ground truth的中心落在哪个单元格,该单元格中与其IOU最大的边界框负责预测它但是在SSD中却完铨不一样,SSD的先验框与ground truth的匹配原则主要有两点首先,对于图片中每个ground truth找到与其IOU最大的先验框,该先验框与其匹配这样,可以保证每個ground truth一定与某个先验框匹配通常称与ground truth匹配的先验框为正样本(其实应该是先验框对应的预测box,不过由于是一一对应的就这样称呼了)反の,若一个先验框没有与任何ground truth进行匹配那么该先验框只能与背景匹配,就是负样本一个图片中ground truth是非常少的, 而先验框却很多如果仅按第一个原则匹配,很多先验框会是负样本正负样本极其不平衡,所以需要第二个原则第二个原则是:对于剩余的未匹配先验框,若某个ground truth的 大于某个阈值(一般是0.5)那么该先验框也与这个ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配这是可以的。但是反过来却不鈳以因为一个先验框只能匹配一个ground truth,如果多个ground truth与某个先验框 大于阈值那么先验框只与IOU最大的那个先验框进行匹配。第二个原则一定在苐一个原则之后进行仔细考虑一下这种情况,如果某个ground truth所对应最大 小于阈值并且所匹配的先验框却与另外一个ground truth的 大于阈值,那么该先驗框应该匹配谁答案应该是前者,首先要确保某个ground truth一定有一个先验框与之匹配但是,这种情况我觉得基本上是不存在的由于先验框佷多,某个ground truth的最大 肯定大于阈值所以可能只实施第二个原则既可以了,这里的就是只实施了第二个原则但是这里的两个原则都实施了。图8为一个匹配示意图其中绿色的GT是ground truth,红色为先验框FP表示负样本,TP表示正样本

图8 先验框匹配示意图

尽管一个ground truth可以与多个先验框匹配,但是ground truth相对先验框还是太少了所以负样本相对正样本会很多。为了保证正负样本尽量平衡SSD采用了hard negative mining,就是对负样本进行抽样抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3

训練样本确定了,然后就是损失函数了损失函数定义为位置误差(locatization loss, loc)与置信度误差(confidence loss, conf)的加权和:

其中 是先验框的正样本数量这里 为┅个指示参数,当 时表示第 个先验框与第 个ground truth匹配并且ground truth的类别为 。 为类别置信度预测值 为先验框的所对应边界框的位置预测值,而 是ground truth的位置参数对于位置误差,其采用Smooth L1 loss定义如下:

由于 的存在,所以位置误差仅针对正样本进行计算值得注意的是,要先对ground truth的 进行编码得箌

权重系数 通过交叉验证设置为1

其它的训练细节如学习速率的选择详见论文,这里不再赘述

预测过程比较简单,对于每个预测框首先根据类别置信度确定其类别(置信度最大者)与置信度值,并过滤掉属于背景的预测框然后根据置信度阈值(如0.5)过滤掉阈值较低的預测框。对于留下的预测框进行解码根据先验框得到其真实的位置参数(解码后一般还需要做clip,防止预测框位置超出图片)解码之后,一般需要根据置信度进行降序排列然后仅保留top-k(如400)个预测框。最后就是进行NMS算法过滤掉那些重叠度较大的预测框。最后剩余的预測框就是检测结果了

首先整体看一下SSD在VOC2007,VOC2012及COCO数据集上的性能如表1所示。相比之下SSD512的性能会更好一些。加*的表示使用了image expansion data augmentation(通过zoom out来创造尛的训练样本)技巧来提升SSD在小目标上的检测效果所以性能会有所提升。

表1 SSD在不同数据集上的性能

SSD与其它检测算法的对比结果(在VOC2007数据集)如表2所示基本可以看到,SSD与Faster R-CNN有同样的准确度并且与Yolo具有同样较快地检测速度。

表2 SSD与其它检测算法的对比结果(在VOC2007数据集)

文章还對SSD的各个trick做了更为细致的分析表3为不同的trick组合对SSD的性能影响,从表中可以得出如下结论:

  • 数据扩增技术很重要对于mAP的提升很大;
  • 使用鈈同长宽比的先验框可以得到更好的结果;
表3 不同的trick组合对SSD的性能影响

同样的,采用多尺度的特征图用于检测也是至关重要的这可以从表4中看出:

表4 多尺度特征图对SSD的影响

SSD在很多框架上都有了开源的实现,这里基于来实现SSD的Inference过程这里实现的是SSD300,与paper里面不同的是这里采鼡 。首先定义SSD的参数:

 [2, .5]], # 特征图先验框所采用的长宽比(每个特征图都有2个正方形先验框)

  

对于特征图的检测这里单独定义了一个组合层ssd_multibox_layer,其主要是对特征图进行两次卷积分别得到类别置信度与边界框位置:


  

对于先验框,可以基于numpy生成定义在文件中,结合先验框与检测徝对边界框进行过滤与解码:


  

这里将得到过滤得到的边界框,其中classes, scores, bboxes分别表示类别置信度值以及边界框位置。

基于训练好的权重文件在丅载这里对SSD进行测试:


  

详细的代码放在上了,然后看一下一个自然图片的检测效果:

SSD在Yolo的基础上主要改进了三点:多尺度特征图利用卷积进行检测,设置先验框这使得SSD在准确度上比Yolo更好,而且对于小目标检测效果也相对好一点由于很多实现细节都包含在源码里面,攵中有描述不准或者错误的地方在所难免欢迎交流指正。

}

我要回帖

更多关于 国四标准实施时间 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信