常用的表格检测识别方法 - 表格区域检测方法(下)

——书接上文

 

Training

半监督网络的训练分两步进行:a)对标记数据独立训练学生模块,由教师模块生成伪标签;b)结合两个模块的训练,得到最终的预测结果。

 

伪标签框架

 

 

实验

 

数据集:

TableBank是文档分析领域中用于表识别问题的第二大数据集。该数据集有417,000个通过arXiv数据库爬虫过程注释。该数据集具有来自三类文档图像的表格:LaTeX图像(253,817)、Word图像(163,417),以及两者的组合(417,234)。它还包括一个用于识别表格的结构的数据集。在论文的实验中,只使用进行表检测的数据。

PubLayNet是一个大型公共数据集,训练集中有335,703张图像,验证集中有11,240张图像,测试集中有11,405张图像。它包括注释,如多边形分割和图形的边界框,列出标题、表格和来自研究论文和文章的图像文本。使用coco分析技术对该数据集进行了评估。在实验中,作者只使用了86,460个表注释中的102,514个。

DocBank是一个包含5000多个带注释的文档图像的大型数据集,旨在训练和评估诸如文本分类、实体识别和关系提取等任务。它包括标题、作者姓名、隶属关系、摘要、正文等方面的注释。

ICDAR-19:表检测和识别(cTDaR)竞赛于2019年由ICDAR组织。对于表格检测任务(TRACKA),在比赛中引入了两个新的数据集(现代和历史数据集)。为了与之前的最先进的方法进行直接比较,实验提供了在IoU阈值范围为0.5-0.9的现代数据集上的结果。

 

实验设置细节:

 

实验使用在ImageNet数据集上预先训练的ResNet-50为主干的可变形DETR作为检测框架,以评估半监督方法的有效性。在PubLayNet、ICDAR-19、DocBank和TableBank的三类数据集上进行训练。实验使用10%、30%和50%的标记数据,其余的作为未标记数据。伪标记的阈值设置为0.7。将所有实验的训练周期设置为150,在第120期的学习率降低了0.1倍。应用强增强作为水平翻转,调整大小,去除斑块,裁剪,灰度和高斯模糊。实验使用水平翻转来应用弱增强。可变形DETR解码器输入的query数的值N被设置为30,因为它能给出最好的结果。除非另有说明,实验都使用mAP(AP50:95)度量来评估结果。

实验结果讨论:

 

TableBank:

实验提供了对不同比例的标签数据的表库数据集的所有分割的实验结果。还比较了基于transformer的半监督方法与以前的基于深度学习的监督和半监督方法。此外,实验给出了10%标记数据的TableBank-both数据集在所有IoU阈值下的结果。表1提供了半监督方法在TableBank-latex, TableBank-word, 和TableBank-both数据集,分别10%、30%和50%标记数据时的实验结果。它表明,在10%标记数据时,TableBank-both数据集的AP50值最高,为95.8%,TableBank-latex为93.5%,TableBank-word有92.5%。

 

 

表格的半监督学习的定性分析如图5所示。图5的(b)部分有一个与行和列结构相似的矩阵,网络将该矩阵检测为一个表格,给出false positive检测结果。在这里,不正确的检测结果表明网络不能提供正确的表格区域检测。表2给出了这种半监督方法对10%标签数据上的所有数据集的不同IoU阈值的结果。在TableBank10%标记数据集上使用不同的ResNet-50骨干的半监督网络的准确率、召回率和f1-score的可视化比较如图6所示。

 

 

 

 

 

与以前的监督方法和半监督方法的比较

 

表3比较了ResNet-50主干上基于深度学习的监督网络和半监督网络。还将在10%、30%和50%TableBank-both数据集标签数据上训练的监督可变形DETR与使用可变形transformer的半监督方法进行了比较。结果表明,基于attention机制的半监督方法使用候选生成过程和后处理步骤,如非最大抑制(NMS),取得了可观的结果。

 

 

 

PubLayNet:

实验讨论了在PubLayNet表类数据集上对不同标记数据百分比的实验结果。还比较了基于transformer的半监督方法与以前的基于深度学习的监督和半监督方法。此外,实验给出了10%标记数据的PubLayNet数据集上的所有IoU阈值的结果。表4提供了半监督方法的结果,该方法对PubLayNet表类数据使用可变形transformer来处理标记数据的不同百分比。在这里,10%、30%和50%的标记数据的AP50值分别为98.5%、98.8%和98.8%

 

 

 

此外,半监督网络在10%的标记的PubLayNet数据集上,在不同的IoU阈值上进行训练。表5给出了半监督方法对10%标记数据上的PubLayNet表类的不同IoU阈值的结果。在PubLayNet表类的10%标记数据集上,在不同的IoU阈值上使用具有ResNet-50主干的可变形transformer网络的半监督网络的准确率、召回率和f1-score的可视化比较如图6(b)所示。这里,蓝色表示不同IoU阈值的准确率结果,红色表示不同IoU阈值的召回结果,绿色表示对不同IoU阈值的f1-score结果。

 

 

 

与以前的监督方法和半监督方法的比较

 

表6比较了使用ResNet-50骨干网的PubLayNet表类上基于深度学习的监督网络和半监督网络。还比较了在10%、30%和50%的PubLayNet表类标签数据上训练的有监督的可变形detr与使用可变形transformer的半监督方法。它表明,半监督方法不使用候选和后处理步骤,如非最大抑制(NMS),提供了有竞争力的结果。

 

 

 

 

DocBank:

 

实验讨论了在DocBank数据集上的不同标签百分比数据的实验结果。在表7中比较了基于transformer的半监督方法与以前的基于cnn的半监督方法。

 

 

 

此外,还比较了表8中对不同比例的标记数据的半监督方法与之前针对不同数据集的表格检测和文档分析方法。虽然不能直接比较作者的半监督方法与以前的监督文档分析方法。然而,可以观察到,即使有50%的标签数据,作者也获得了与以前的监督方法类似的结果。

 

 ICDAR-19:

实验还评估了在Modern Track A数据集上的表格检测方法。作者总结了该方法在不同百分比的标签数据下的定量结果,并将其与表9中以前的监督表格检测方法进行了比较。在更高的IoU阈值0.8和0.9下评估结果。为了与以前的表格检测方法进行直接比较,作者还在100%的标签数据上评估了论文的方法。论文方法在100%标签数据的IoU阈值上获得了92.6%的准确率和91.3%的召回率。

 

 

 

 

消融实验:

 

伪标记置信阈值

 

阈值(称为置信阈值)在决定生成的伪标签的准确性和数量之间的平衡方面起着重要的作用。随着这个阈值的增加,通过过滤器的样本将会更少,但它们的质量将会更高。相反,较小的阈值将导致更多的样本通过,但false positive的可能性更高。从0.5到0.9的各种阈值的影响如表10所示。根据计算结果,确定最优阈值为0.7。

 

 

可学习query数量的影响

 

在分析中,作者研究了改变作为可变形DETR解码器中输入的query数量的影响。图7通过改变作为可变形DETR解码器中输入的对象query的数量来比较预测结果。当query数N设置为30时,达到最佳性能;偏离此值会导致性能下降。表11显示并分析了不同对象query数量的结果。为N选择一个较小的值可能会导致模型无法识别特定的对象,从而对其性能产生负面影响。另一方面,选择一个较大的N值可能会导致模型由于过拟合而表现不佳,因为它会错误地将某些区域分类为对象。此外,在师生模块中,该半监督自注意机制的训练复杂度依赖于对象query的数量,并通过最小化对象query的数量来降低复杂度而得到提高。

 

 

 

结论

 

本文介绍了一种利用可变形transformer对文档图像进行表格检测的半监督方法。该方法通过将伪标签生成框架集成到一个简化的机制中,减轻了对大规模注释数据的需要,并简化了该过程。同时生成伪标签产生了一个被称为“飞轮效应”的动态过程,随着训练的进行,一个模型不断改进另一个模型产生的伪边框。在该框架中,使用两个不同的模块学生和教师,对伪类标签和伪边界框进行了改进。这些模块通过EMA功能相互更新,以提供精确的分类和边界框预测。结果表明,当应用于TableBank和PubLayNet训练数据的10%、30%和50%时,该方法的性能超过了监督模型的性能。此外,当对PubLayNet的10%标记数据进行训练时,该模型的性能与当前基于cnn的半监督基线相比较。在未来,作者的目标是研究标记数据的比例对最终性能的影响,并开发出以最小数量的标记数据有效运行的模型。此外,作者还打算采用基于transformer的半监督学习机制来进行表结构识别任务。

 

 

 

 

参考文献:

Gao L C, Li Y B, Du L, Zhang X P, Zhu Z Y, Lu N, Jin L W, Huang Y S, Tang Z . 2022.A survey on table recognition technology. Journal of Image and Graphics, 27(6): 1898-1917.

M Kasem , A Abdallah, A Berendeyev,E Elkady , M Abdalla, M Mahmouda, M Hamada, D Nurseitovd, I Taj-Eddin.Deep learning for table detection and structure recognition: A survey.arXiv:2211.08469v1 [cs.CV] 15 Nov 2022

S A Siddiqui , M I Malik,S Agne , A Dengel and S Ahmed. DeCNT: Deep Deformable CNN for Table Detection. in IEEE Access, vol.6, pp.74151-74161, [DOI: 10.1109/ACCESS.2018.2880211]

T Shehzadi, K A Hashmi, D Stricker, M Liwicki , and M Z Afzal.Towards End-to-End Semi-Supervised Table Detection with Deformable Transformer.arXiv:2305.02769v2 [cs.CV] 7 May 2023

本文转载于网络 如有侵权请联系删除

相关文章

  • mysql使用ORDER BY和GROUP BY

    今天写代码时遇到一个需求是这样的:取表内最新的一条数据,根据用户名分组本来以为又是那种需求,然后就开始写sql,写完一运行,报错。。。然后发现GROUPBY必须放在ORDERBY的前面但这样又会导致不能取最新的一条数据于是用了一个“子查询”的办法解决<selectid="cowBeer"resultType="map"parameterType="map"> SELECT [字段] FROM( SELECTDISTINCT [字段] FROM[表名]ASmsg, [表名]ASuser WHERE[条件] ORDERBY[创建时间字段]DESC )r GROUPBYr.[分组条件] ORDERBYr.[创建时间字段]DESC </select>复制

  • leetcode每日一题:766. 托普利茨矩阵

    题目 https://leetcode-cn.com/problems/toeplitz-matrix/给你一个mxn的矩阵matrix。如果这个矩阵是托普利茨矩阵,返回true;否则,返回false。如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是托普利茨矩阵。示例1:输入:matrix=[[1,2,3,4],[5,1,2,3],[9,5,1,2]]输出:true解释:在上述矩阵中,其对角线为:"[9]","[5,5]","[1,1,1]","[2,2,2]","[3,3]","[4]"。各条对角线上的所有元素均相同,因此答案是True。示例2:输入:matrix=[[1,2],[2,2]]输出:false解释:对角线"[1,2]"上的元素不同。提示:m==matrix.length n==matrix[i].length1<=m,n<=200<=matrix[i][j]<=99解题思路解题思路:每一个位

  • Spring框架里注解@Autowired的工作原理

    SupposeIhaveabeannamedHelloWorldwhichhasamemberattributepointstoanotherbeanUser.Withannotation@Autowired,aslongasgetBeaniscalledintheruntime,thereturnedHelloWorldinstancewillautomaticallyhaveuserattributeinjectedwithUserinstance.HowisthisbehaviorimplementedbySpringframework?(1)inSpringcontainerimplementation’srefreshmethod,allsingletonbeanswillbeinitializedbydefault.WhentheHelloWorldbeanisinitialized:Sinceithasthefollowingsourcecode:@Autowired privateUseruser;复制Intheruntime,thisannotationisavail

  • SpringBoot2.x系列教程(十九)Validation数据校验基础使用

    在正常的业务处理中,针对外部的情况,校验参数的合法性是必须的,而在SpringMVC中有两种验证方式:Spring自带的验证框架和基于JSR实现的框架。其中JSR(JSR303/SR-349)是一个规范文档,规定一些校验规范。HibernateValidator就是基于JSR303规范的具体实现,提供了JSR规范中内置约束注解的实现,同时附加了一些约束注解。当然,用户也可以可以自定义约束注解。依赖引入当我们引入spring-boot-starter-web时,该starter会默认引入hibernate-validator,也就是HibernateValidator框架。SpringBoot的参数校验正是依赖于HibernateValidator框架来进行。<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </depen

  • 经验拾忆(纯手工)=> docker-

    前言踩了5-6个小时的坑,各种测试。人要没了。不过结果我已经满意了。 这篇文章是对https://segmentfault.com/a/11...的完善与排初BUG!大坑1(scrapyd服务bind_address):我用的Docker(我记得之前不用docker的时候scrapyd的配置文件好像是默认的0.0.0.0) 但是我发现Docker容器里面默认是bind127.0.0.1(真是f--k了..弄了好几个小时没发现) 如果你用的docker,先在Docker同级目录下新建一个default_scrapyd.conf 然后写入如下配置(不用犹豫,全部复制进去即可):[scrapyd] eggs_dir=eggs logs_dir=logs items_dir= jobs_to_keep=5 dbs_dir=dbs max_proc=0 max_proc_per_cpu=4 finished_to_keep=100 poll_interval=5.0 bind_address=0.0.0.0 http_port=6800 debug=off runner=scrapyd.runn

  • 编程语言java与php之间不得不说的关系,网友:跟小编学习java吧

    程绝对是一件不轻松的活儿。随着电子商务在国内成功的推广,京东、苏宁等大型B2C综合网上商城的成功运营,一批批以产业分类的独立网店也如火如荼发展起来。伴随着这股热潮,网店系统等相关衍生开店平台行业也出现喷井式发展。目前,光有一定影响的网店系统就有十几家,如网友熟悉的JAVA网店系统:SHOP++、Probiz,PHP网店系统:SHOPEX、ECSHOP等已经成功为40多万商家服务。我们对比各网店系统在功能、性能、服务等方面都有自己的特点和优势,最终目的都是为网上开店的朋友服务。今天我们主要分析java和php。一、什么是编程语言在讲解java与PHP之前,大家首先要了解什么是编程语言。编程语言(programminglanguage),是用来定义计算机程序的形式语言。上述是官方的解释,冬镜在这里说一下,我们在这里提的编程语言是指WEB编程,主要也就是针对浏览器的,也就是说我们在开发网站时应该选的语言。编程语言java与PHP二、java语言java编程语言于1995年5月由Oracle正式推出,具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。jav

  • 【SQL】找出行数与自增标识值不相等的表(即有缺行)

    环境:mssqlent2k8r2原理:遍历所有含自增列的用户表,用sp_spaceused过程分别获取每张表的行数并写入临时表,然后使用IDENT_CURRENT函数获取表的最大标识值,比较二者并返回结果IFOBJECT_ID('tempdb..#TableRowCount','U')ISNOTNULLDROPTABLE#TableRowCount GO CREATETABLE#TableRowCount(NamesysnamePRIMARYKEY,RowCntDECIMAL(11,0),ReservedVARCHAR(18),DataVARCHAR(18),Index_SizeVARCHAR(18),UnusedVARCHAR(18)) GO DECLAREcurCntAllTableRowsCURSORLOCALFAST_FORWARDFOR SELECTnameFROMsys.tablesWHEREOBJECTPROPERTY(object_id,'TableHasIdentity')=1 OPENcurCntAllTa

  • 00SEC-D&D数据泄露报警日报【第8期】

    01概述2022.9.20共发现匿名网络资讯信息279,736条;最近7天共发现匿名网络资讯信息1,000,360条,增长21%;最近30天共发现匿名网络资讯信息3,090,597条。D&D评论:近期美国、印度、俄罗斯的数据泄露趋势上升。02国际热点本章仅随机选取五个境外事件或涉及到其他国家和著名海外机构的事件。以下为监测到的情报数据,D&D系统不做真实性判断与检测。2.1.42kAirtelPaybank去哈希涉及国家/组织:印度/AirtelPaybank售卖人:0x1ucif3r样例数据:完整数据量:42,000条详情:印度支付银行AirtelPayments Bank,泄露数据字段:账号、邮箱、密码。价格:免费2.2.5000万-拥有移动和设备ID的美国消费者信息涉及国家/组织:美国售卖人:BoredApe样例数据:少量样例数据量:50,000,000条详情:User_ID,User_Email,User_Name,User_Surname,User_City,User_State,User_Zip_Code,User_Mobile_Number,User_De

  • 多方安全计算(3)MPC万能钥匙:混淆电路

    一、前言我们在讲解不经意传输(ObliviousTransfer,OT)的文章(安全多方计算(1):不经意传输协议)中提到,利用n选1的不经意传输可以解决百万富翁问题(两位富翁Alice和Bob在不泄露自己真实财富的情况下比对出谁更有钱),过程如图1所示,具体过程不再展开描述。图1基于n选1的OT协议实现百万富翁问题图1中的例子虽然解决了两位富翁在不泄露财富时的比对问题,但是如果遇到其他计算问题(如财富求和)时怎么解决?是否有一种通用的方法,可以在不泄露Alice和Bob原始数据的前提下,实现各种计算问题?本篇文章将向您揭晓答案,即基于混淆电路的MPC通用场景计算。二、混淆电路简介我们在安全多方计算系列的首篇文章(安全多方计算之前世今生)中提到,基于混淆电路(GarbledCircuit,GC)可以实现MPC通用场景计算。2.1什么是混淆电路混淆电路是双方进行安全计算的布尔电路。混淆电路将计算电路中的每个门都加密并打乱,确保加密计算的过程中不会对外泄露计算的原始数据和中间数据。双方根据各自的输入依次进行计算,解密方可得到最终的正确结果,但无法得到除了结果以外的其他信息,从而实现双方的安

  • 腾讯云轻量应用服务器解绑密钥对api接口

    1.接口描述接口请求域名:lighthouse.tencentcloudapi.com。 本接口(DisassociateInstancesKeyPairs)用于解除实例与指定密钥对的绑定关系。 只支持[RUNNING,STOPPED]状态的LINUX_UNIX操作系统的实例。处于RUNNING状态的实例会强制关机,然后解绑。 解绑密钥后,实例可以通过原来设置的密码登录。 如果原来没有设置密码,解绑后将无法使用SSH登录。可以调用ResetInstancesPassword接口来设置登录密码。 支持批量操作。每次请求批量实例的上限为100。 本接口为异步接口,请求发送成功后会返回一个RequestId,此时操作并未立即完成。实例操作结果可以通过调用DescribeInstances接口查询,如果实例的最新操作状态(LatestOperationState)为“SUCCESS”,则代表操作成功。 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示

  • Angular学习笔记_环境篇

    Angular的特点 MVC模式 静态路由 双向绑定 环境安装 1.安装Node.js 简介:node.js是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。 Node官方地址 2.安装git 简介:git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理 git地址 3.安装AngularCLI 简介:win+R输入cmd,回车启动一个命令窗口,输入如下命令: npmi-g@angular/cli 复制 4.安装VsCode 简介:VsCode是编写现代Web和云应用的跨平台源代码编辑器,可在桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系

  • hdu6318( 2018 Multi-University Training Contest 2)

    bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6318 求逆序数的对数 #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<cmath> usingnamespacestd; constintmaxn=1e5+5; intis1[maxn],is2[maxn];//is1为原数组,is2为临时数组,n为个人定义的长度 longlongmerge(intlow,intmid,inthigh) { inti=low,j=mid+1,k=low; longlongcount=0; while(i<=mid&&j<=high) if(is1[i]<=is1[j])//此处为稳定排序的关键,不能用小于 is2[k++]=is1[i++]; else { is2[k++]=is1[j++]; count+=j-k;

  • ffmpeg解码流程

    一、概述   案例:编写一个ffmpeg编解码流程案例   ps:开发工具是QtCreator并且在Qt中做的测试 二、图     三、代码示例 #include"xplayer.h" #include"ui_xplayer.h" #include<QDebug> #include<iostream> extern"C"{ #include"libavformat/avformat.h" #include"libavutil/avutil.h" #include"libavcodec/avcodec.h" #include"libswscale/swscale.h" #include"libswresample/swresample.h" } staticdoubler2d(AVRationalr){ qDebug()<<"百分数:"<<r.num<<"/"<<r.den; returnr.den==0?0:(double)r.num/(double)r.den; } XPlaye

  • 最新版Jenkins(jdk11)-----JAVA项目使用低版本jdk编译的解决办法

    背景 开源Devops工具Jenkins宣布:从6月28日发布的Jenkins2.357和即将发布的9月LTS版本开始,Jenkins最低需要Java11。 所以,你懂得,很坑,项目只是jdk1.8 解决办法在新版本的Jenkins系统中,通过使用插件,指定JAVA项目编译环境: 下载jdk8  解压至Jenkins工作目录/var/jenkins_home/jdk1.8.0_221 配置GlobalToolConfiguration,JDK,AddJDK:          4.安装JDKParameter插件当前版本存在XSS漏洞,后续注意及时升级:       5.在Job工程配置中,启用参数化配置,General,勾选Thisprojectisparameterized,新增JDKParameter:             6.使用项目BuildwithParametes功能启动编译:     完成。  

  • 文件上传

    文件上传有三种方式: 1,from表单上传,简单方便。 2,Ajax请求上传,异步上传,局部刷新。 3,layui文件上传,步骤麻烦,不推荐。 1,from表单上传: <formaction="/uploadHead"method="POST"enctype="multipart/form-data"class="layui-form">     <!--accept="image/*"指规定文件只能选择图片类型的文件-->     <inputtype="file"name="headImg"accept="image/*">     <button>上传头像</button> </form> enctype设置表单提交的数据类型, multipart/form-data指文件类型 2,使用Ajax请求 layui.use(["form","jquery","layer"],fu

  • 下载文件异常HttpMessageNotWritableException IllegalStateException: COMPLETED

    点击下载文件时主要报错提示,还是能下载,但是既然抛出错误就去找。最后发现操作的一个错误。。。 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver:Failurewhiletryingtoresolveexception[org.springframework.http.converter.HttpMessageNotWritableException] java.lang.IllegalStateException:COMPLETED ...... org.eclipse.jetty.server.HttpChannel:/file-api/downloadFile org.springframework.web.util.NestedServletException:Requestprocessingfailed;nestedexceptionisorg.springframework.http.converter.HttpMessageNotWritableException:Noc

  • 在网站开发中很有用的8个 jQuery 效果【附源码】

    jQuery作为最优秀JavaScript库之一,改变了很多人编写 JavaScript 的方式。它简化了HTML文档遍历,事件处理,动画和Ajax交互,而且有成千上万的成熟 jQuery 插件可供使用。看看下面这些惊人的功能和效果,我相信你会发现一些很有用的东西。     转载  https://www.cnblogs.com/lhb25/p/amazing-jquery-effects.html

  • antd踩坑: Select 模糊搜索

    import{Select}from'antd'; const{Option}=Select; functiononChange(value){ console.log(`selected${value}`); } functiononBlur(){ console.log('blur'); } functiononFocus(){ console.log('focus'); } functiononSearch(val){ console.log('search:',val); } ReactDOM.render( <Select showSearch style={{width:200}} placeholder="Selectaperson" optionFilterProp="children" onChange={onChange} onFocus={onFocus} onBlur={onBlur} onSearch={onSearch} filterOption={(input,option)=> option.props.children.toLo

  • C# 使用Guid类生成不重复的随机数

    什么是Guid GUID(全局唯一标识符)        全局唯一标识符(GUID,GloballyUniqueIdentifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。GUID一词有时也专指微软对UUID标准的实现。 在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。 在Windows平台上,GUID广泛应用于微软的产品中,用于标识如注册表项、类及接口标识、数据库、系统目录等对象。 格式 GUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个x是0-9

  • 第八天 第六章 变量的作用域

    #python中根据变量的有效范围可分为“全局变量”和“局部变量” #局部变量只有在函数内部有效,在函数运行前或运行完毕,其名字便不存在了 #如果在函数外部使用函数内部定义的变量,会抛出NameError异常 #如果一个变量在函数外部定义,那么无论在函数外部还是函数内部都可以使用 #注:如果函数内部有一个局部变量和全局变量重名,那么在函数内部改变变量的值,全局变量不发生变化 #在函数体内定义,并且使用global关键字修饰后,该变量也就变为全局变量,在哪里都可以使用它 #注:不建议这么做,容易产生混淆复制  

  • SqlServer正在执行的sql语句

    SELECT[Spid]=session_Id ,ecid ,[Database]=DB_NAME(sp.dbid) ,[User]=nt_username ,[Status]=er.STATUS ,[Wait]=wait_type ,[IndividualQuery]=SUBSTRING(qt.TEXT,er.statement_start_offset/2,( CASE WHENer.statement_end_offset=-1 THENLEN(CONVERT(NVARCHAR(MAX),qt.TEXT))*2 ELSEer.statement_end_offset END-er.statement_start_offset )/2) ,[ParentQuery]=qt.TEXT ,Program=program_name ,Hostname ,nt_domain ,start_time FROMsys.dm_exec_requestser INNERJOINsys.sysprocessesspONer.session_id=sp.spid CROSSAPPLYsys.dm_ex

相关推荐

推荐阅读