本文简要介绍了论文“ Marior: Margin Removal and Iterative Content Rectification for Document Dewarping in the Wild ”的相关工作。照相机捕捉到的文档图像通常会出现透视和几何变形。考虑到视觉美感较差和OCR系统性能下降,对其进行纠正具有重要的价值。最近的基于学习的方法集中关注于精确裁剪的文档图像。然而,这可能不足以克服实际挑战,包括具有大边缘区域或没有边缘区域的文档图像。由于这种不切实际,用户在遇到大型边缘区域时难以精确地裁剪文档。同时,无边缘的变形图像仍然是一个难以解决的问题。据作者所知,目前还没有完整有效的pipeline来纠正文档图像。为了解决这个问题,作者提出了一种新的方法,称为Marior(边缘去除和迭代内容修正)。Marior采用渐进策略,以从粗到细的方式迭代地提高去变形质量和可读性。具体来说,作者将pipeline划分为两个模块:边缘去除模块(MRM)和迭代内容校正模块(ICRM)。首先,作者预测输入图像的分割掩膜去除边缘,从而得到初步结果。然后,作者通过产生密集的位移流来进一步细化图像,以实现内容感知的校正。作者自适应地确定细化迭代的次数。实验证明了作者的方法在公共基准上的最新性能。
借助移动设备中先进的内置摄像头,将日常生活中无处不在的文档数字化已经为人们变得方便。但是,由于相机的角度和位置不合适,所捕获的文档图像通常包含透视变形。此外,文档本身也可能因弯曲、折叠或折痕而发生几何变形。这些类型的变形导致了光学字符识别(OCR)系统的性能下降,并导致读者的可读性较差。
最近的基于深度学习的去变形方法在对各种文档布局的鲁棒性方面取得了很大的进展。但是,它们几乎都只关注精确裁剪的文档图像,而忽略了边缘区域较大或没有边缘区域的情况,分别如图1 (a)和(b)所示。在本研究中,边缘区域是指由不属于感兴趣的文档的像素组成的区域。为了解决这个问题,作者可以在培训过程中考虑到所有这些情况,但作者发现结果不令人满意(参考补充材料)。作者认为,这归因于额外的内隐学习来识别前景文档和去除边缘区域。另一种方法是在去变形之前实现现有的目标检测算法,以避免需要手工裁剪。然而,没有带边缘的文档图像仍然是一个未解决的问题。因此,仍然没有完整和有效的pipeline来处理自然的所有情况。
因此,作者提出了Marior(边际去除和迭代内容修正)来解决这个问题,该模块由两个级联模块组成:边缘去除模块(MRM)和迭代内容修正模块(ICRM)。Marior使边缘去除和文件整改过程解耦。具体来说,在MRM中,作者首先将源失真图像输入作者的掩膜预测网络,该网络预测相应的文档分割掩膜。在此基础上,作者提出了一种基于掩膜的去变形器(MBD)来去除基于该掩膜的边缘,并得到了初步的变形结果。对于没有边缘区域和没有完整文档边缘的图像,如图1 (b)所示,作者建议使用基于IoU的方法将它们过滤掉并跳过边缘去除过程,这一灵感来自于观察到这些图像通常会导致噪声掩膜。
之后,作者将MRM中去掉边缘的输出输入ICRM以进行进一步细化。它预测了一个密集的位移流,该流为输入图像中的每个像素分配了一个二维(2D)偏移向量。根据该流进行校正后,作者得到了一个去变形的输出图像。因为删除了边缘的图像更多关注内容(例如,文本行和图形),所以ICRM能够感知内容。因此,作者进一步设计了一种新的内容感知损失,以隐式地指导ICRM更多地关注信息区域,如文本线和图形,而不是统一的文档背景。这种设计基于一种直觉,后者包含更少的变形线索,对变形结果的轻微偏差在视觉上可以忽略不计。此外,作者还发现,ICRM的迭代实现可以提高整改性能。为此,作者提出了一种自适应的方法来确定迭代次数,以使所提出的迭代ICRM过程更加智能和高效。
综上所述,作者的贡献如下:
作者提出了一种新的方法Marior来处理具有各种边缘情况的文档图像,这些情况被现有的基于学习的方法忽略了。在作者的边缘去除模块(MRM)中提出了一种新的基于掩膜的存储器,该模块基于预测的分割掩膜对文档图像进行粗破坏。然后提出了一个迭代内容整正模块(ICRM),通过预测密集位移流来进一步细化图像。
作者设计了一种新的内容感知损失,以隐式地引导流预测网络更多地关注信息区域。作者还提出了一种自适应迭代策略来提高性能。
广泛的实验表明,所提出的Marior在两个广泛使用的公共基准上取得了最先进的性能。此外,这种方法在处理具有不同边缘的困难情况也取得了重大成功。
如图2所示,Marior包含两个级联的MBD和ICRM模块,这些模块逐步修正变形的源图像$I_s$,并输出最终的去变形图像$I_{fd}$。在MRM中,作者首先根据预测的掩膜去除边缘,得到一个初步的去变形结果$I_{pd}$。这种基于掩膜的去变形过程是通过一种新的MBD来实现的。然后ICRM以作为输入$I_{pd}$,预测与$I_{pd}$具有相同分辨率的密集位移流。这个二维流分配了$I_pd$中每个像素应该移动的距离,以获得$I_{fd}$。基于这个位移流,作者从$I_{pd}$中取样$I_{fd}$。为了获得更好的修正性能,作者迭代实现了ICRM,提出了一种自适应的方法来确定迭代次数
3.1边缘去除模块(MRM)
掩膜预测。为了从给定的图像中删除边缘,作者首先要定位文档区域。作者认为定位是一个语义分割任务,其目的是产生一个精确表示文档区域的掩膜。作者的掩膜预测网络的体系结构如图3(a)所示,直接采用了DeepLabv3+ 中的编码器和解码器。除了文档掩膜外,作者还设计了一个头部来产生一个用于辅助训练的边缘掩膜。此外,作者观察到文档掩膜具有一个独特的和相对固定的模式,如相对直的边、一个较大的连接区域和一个接近四边形的形状。如图3 (a)所示,作者使用GAN框架将这些先验知识应用到MRM中。作者发现这可以有效地降低所产生的掩膜上的噪声,如图3 (b)。所示该目标被定义为:
$L_{mask}$和$L_{edge}$是标准的二进制交叉熵损失:
其中,${\hat{m}{d_i}}$和${\hat{m}{e_i}}$表示文档掩膜${\hat{m}_d}$和${\hat{m}_e}$边缘掩膜中的第i个元素的预测分类,和分别为它们对应的ground truth。N是${\hat{m}d}$中元素的数量。$L$是GAN框架中的一个标准目标,它使${\hat{m}d}$的分布更接近ground truth掩膜${{m}d}$的分布,$\lambda$是$L$的权重:
这是为了在优化鉴别器时,减少独热编码正样本与生成的负样本之间的分布差距。值得注意的是,该掩膜预测模型也可以作为其他替代的分割模型,它只需要能够提供文档区域的分割掩膜。
基于掩膜的去变形器(MBD)。在获得文档掩膜后,作者提出了一种新的MBD来去除边缘并进行初步的去变形,如图4所示。具体来说,基于预测的掩膜,作者首先使用道格拉斯佩克算法检测四个角,然后根据它们的相对位置确定顺序(左上、右上、右下、左下)。然后作者可以在每条边上确定等距的点(在作者的实验中,除了四个角外,作者在每条边上使用三个等距的点)。作者将这些控制点与一个矩形的相应位置进行匹配。然后利用这些关键点对对$I_s$进行薄板样条(TPS)插值,从而去除边缘,得到$I$。值得注意的是,对于没有边缘区域的文档图像,它们没有完整的边缘,如图1 (b)所示,作者跳过TPS插值,将$I_s$原始作为MBD的输出。作者通过计算${\hat{m}_d}$和来自所有检测控制点的掩膜之间的IoU来过滤这些图像,并设置一个阈值。这是因为可以观察到,没有完全边缘的文档图像通常会导致噪声${\hat{m}_d}$,从而导致相对较低的IoU。
3.2迭代内容校正模块(ICRM)
使用MRM进行初步去变形的结果并不完美。原因有两方面。第一个原因是在每条边上选择等距点不考虑深度信息;因此,这种等距划分与在物理纸上进行的划分不一致。第二个原因是,有时,当预测的掩膜遇到不清楚的边缘或非常复杂的边缘时,它并不够准确。此外,没有边缘区域的文档图像跳过了初步的去变形,因此仍然没有被触及。
为了进一步校正$I_{pd}$,作者提出了ICRM,它以$I_{pd}$作为输入,产生一个${\hat{D}}$密集的位移流。作者采用常用的具有跳过连接的编解码器作为作者的位移流预测网络。作者在瓶颈和扩展卷积中采用注意力策略来扩大接受场以捕获全局信息。如前所述,对信息区域的修正,如文本线和数字,在直观上比统一的文档背景更重要。作者使用文档内容掩膜${{M}_c}$来设计内容感知损失$L_c$,它隐式地引导网络更多地关注信息区域。作者也采用了移位不变损失$L_c$。ICRM的最终训练损失表示为:
式中${\hat{d}_i}$、${{d}i}$和${m{c_i}}$分别表示预测位移流${\hat{D}}$、ground truth位移流和文档内容掩膜${{M}_c}$中的第i个元素。${\alpha}$和${\beta}$是恒定的权重。
因为作者在MRM中完成了边缘的去除,所以ICRM应该专注于内容修正,而不需要额外的隐式学习来识别前景文档并去除边缘区域。边际去除的分离也使ICRM能够采用迭代方案对文档逐步进行修正,作者发现这可以提高整改性能。如果边际去除没有解耦,网络可能会学习基于文档边缘来纠正文档,并倾向于在每次迭代中找到它们,即使它们不存在,这将导致有问题的输出。作者的迭代方案如图5 (a).所示首先,作者将${I_{pd}}$输入位移流预测网络,得到第一个位移流${\hat{D1}}$,然后作者可以用它从${I_{pd}}$中采样${{I1}_{fd}}$:
其中,S为采样过程。如图5 (a)所示,在${{I^1}_{fd}}$中仍存在变形。作者采用迭代方案进一步细化整正结果,公式如下:
经过多次迭代,${{I1}_{fd}}$取得了令人满意的整改性能。由于输入${{I{n-1}}_{fd}}$相对平坦,${\hat{D^n}}$的响应显著降低。更多的迭代会消耗更多的时间,甚至会引入新的变形。因此,迭代过程应该在适当的时间终止。作者提出了一种自适应的方法来确定这个时间,如算法1所示。
这里的var(${\hat{Dn}}$)是${\hat{Dn}}$的方差,${\hat{D}}$是一个预定义的常数值,作为阈值。迭代过程结束后,作者通过将之前所有的${\hat{D^i}}$(i=1,2,…,n)相加得到最终的位移流${\hat{D}}$,得到基于${\hat{D}}$的最终变形结果${I_{fd}}$:
4.1数据集
作者在Doc3D 数据集上训练MRM和ICRM中的两个网络,该数据集包含100k个丰富注释的样本。作者将数据集分为90k训练数据和10k验证数据。在掩膜预测训练过程中,作者随机将边缘替换为《Describing textures in the wild.》纹理图像的边缘作为数据增强。除了常用的随机裁剪和缩放外,作者还采用了随机擦除的方法。ICRM的训练数据(包括源失真输入图像和ground truth位移流)首先由作者提出的MBD进行预处理。作者认为从反照率图(在Doc3D中提供)得到的二值化结果是等式8中的$M_c$。
4.2消融实验
作者将没有数据增强的vanilla DeepLabv3+作为baseline,并给出了在表1中获得的改进。作者使用在《Real-time document localization in natural images by recursive application of a CNN》中提出的数据集验证了模型,它由120个真实单词的文档图像组成。该数据集是为文档定位而构建的,并且只使用文档的四个角进行注释,作者使用它来生成四边形ground truth掩膜(这些文档图像只包含透视变形)。如表1所示,数据增强大大提高了性能。在作者的MRM中的掩膜预测网络也得到了改进。引入先验知识的有效性见图3 (b)。
作者进一步评估了提出的内容感知损失在Doc3D验证集上的有效性。作者使用结构相似度指数(SSIM)来评估由${\hat{D}}$产生的修正图像的质量。如表2所示,作者使用${\beta}$=3的设置获得了最好的图像质量,这表明了作者提出的内容感知损失的贡献。
4.3在公共基准上的比较
评价指标。作者使用多尺度结构相似度(MS-SSIM)和局部失真(LD)来评估所产生的校正图像与其扫描的ground truth值之间的图像相似度。MS-SSIM是一种广泛应用的图像结构相似度评价度量。LD通过预测密集的SIFT流来评估局部失真。此外,作者使用带有LSTM引擎的Tesseract 4.1.01作为文本识别器,对校正图像上的文本进行识别,也显示了校正性能。作者使用字符错误率(CER)来评估识别结果,该错误率来自于识别文本和参考文本之间的列文斯坦距离。CER可以计算为${CER=(s+i+d)/N,其中s,i和d分别是来自列文斯坦距离的替换、插入和删除的数量。N是参考文本中的字符数。
DocUNet benchmark。该数据集的定量结果如表3所示,其中“Crop”代表了以往研究中通常用于比较的准确裁剪图像。“Origin”表示最初捕获的图像,因此包含较大的边缘区域。为了进行更公平的比较,在“Origin”子集上进行实验时,使用Faster R-CNN 作为附加到其他方法上的文档检测器。这个探测器的细节包括在补充材料中。按照DewarpNet[7]中的建议,对50张富含文本的图像执行文本识别。作者将从相应扫描的ground truth图像中识别出的文本作为参考文本。
作者首先评估了内容整改和迭代策略的有效性。结果显示在表3的最后三行中。Baseline是没有ICRM的Marior(即,只采用MRM)。在没有迭代的情况下实现一次内容修正后(即表3中的Marior w/o iteraion),所有三个指标都得到了显著的改善。特别是,在“Crop”和“Origin”子集上的CER分别降低了19%和14%。这证明了ICRM对文档内容整改的有效性。此外,在作者迭代实现文档内容整改(即表3中的Marior)后,结果进一步改善。
与“Crop”子集上的现有方法相比,Marior取得了相当的性能。然而,在“Origin”子集上,Marior方法比现有的方法更好,即使Marior也没有检测器的帮助。定性比较如图6和图7所示。在图6中,作者将作者的方法与DocProj [20]、DewarpNet [7]和Xie等人的[40]的方法进行了比较。前三列中的输入图像来自于“Crop”子集。虽然DocProj [20]在一定程度上纠正了文档内容,但边缘仍然存在,这导致了糟糕的视觉美学。删除网[7]和Xie等[40]的方法很好地纠正了文档内容,同时删除了边缘。与[7]和[40]方法相比,作者的方法还取得了良好的感知性能和细节方面的性能。第4列和第5列的输入图像来自“Origin”子集,如果借助一个强大的文档检测器,以前的方法可以获得可信的结果。相比之下,Marior可以用嘴探测器来处理这个子集。对于在第6列、第7列中没有边缘区域的输入图像,Marior仍然取得了令人满意的性能,而现有的方法却没有。作者与图7中最先进的无变形方法和DocTr进行了进一步的比较,这也证明了作者的前后方法的优越性。
OCR_REAL dataset。这个数据集包含文本ground truth,作者认为它是CER度量的参考文本。此外,由于缺乏扫描的ground truth图像,作者不评估MS-SSIM和LD。识别性能与识别引擎高度相关。因此,为了更严格,作者在Tesseract 4.1.01中同时使用基于深度学习(LSTM)和非基于深度学习的引擎来执行识别。作者还评估了在该数据集上的不同方法的平均运行时间。为了进行公平的比较,当作者评估运行时间时,保持每种方法的输出图像的分辨率相同(1024×960),当采样图像的分辨率不同时,运行时间会有所不同。结果如表4所示,与其他方法相比,DocProj [20]、DocTr [10]和Marior在两种识别引擎下都实现了稳定和优越的性能。然而,DocProj [20]和DocTr [10]比Marior更耗时。另外,如前所分析,如图8所示,DocProj [20]由于无法去除边缘,无法实现Marior呈现的视觉美感。
作者提出了一种简单而有效的方法,Marior,以从粗到细的方式为变形文档图像矫正。作者采用两个级联模块,首先去除文档图像的边缘,然后对内容进行进一步的修正。所提出的Marior自适应地决定了迭代的次数,从而实现了效率和性能之间的权衡。作者提出的方法不仅在DocUNet [25]和OCR_REAL [23]基准数据集上取得了最先进的性能,而且成功地解决了具有大边缘区域的情况和没有边缘区域的情况,这在以往的研究中研究较少。这是在自然文档矫正方面的一个重大成功。在今后的工作中,有必要探索对这两个模块进行端到端优化,以获得更好的性能。
耳闻之不如目见之,目见之不如足践之。一一刘向《说苑》 我们首先准备一个接口,格式如下#请求方法为POST,参数格式为:application/json {"pageNum":1,"pageSize":10} #响应格式如下 { "msg":"查询成功!", "code":200, "data":{ "records":[], "total":0, "size":10, "current":1, "searchCount":true, "pages":1 }, "success":true }复制编写Java代码DTOpackagecom.ruben.pojo.dto; importlombok.Data; /** *@ClassName:PageDTO *@Description:我还没有写描述 *@Date:2021/1/2
在Emacs中,find-file(C-xC-f)是用来打开文件的最基本方式,但有时当前buffer内有需要打开文件的信息,比如有如下文本:/tmp/test.log复制这时可以用find-file-at-point直接打开该文件。此外在编辑elisp配置时,有时候需要打开一个变量所代表的文件,我之前一直采用在minibuffer中执行命令的方式来打开,比如:(find-filecustom-file)复制有些低效,能不能把find-file-at-point增强下,支持这种变量形式呢?当然是可以的:(defunmy/find-file-at-point() "Enhancedversionof`find-file-at-point'. Firstattempttoopenfilespecifiedby`symbol-at-point',andfallbacktonormalone." (interactive) (condition-casenil (thread-last(variable-at-point) (symbol-value) (
Canvas渐变属性绘制五颜六色,七彩缤纷。有时候我们的UI设计稿也极尽色彩之能,比如下图这样:这种渐变效果我们能画吗?不得不说,Android系统的基础构架还是很强大的,我们可以使用LinearGradient进行绘制,与其相关的还有SweepGradient,RadialGradient.LinearGradient,SweepGradient及RadialGradient均为Shader子类,所以与前文类似,我们只需要调用paint.setShader方法将对象设置进去,然后进行绘制即可。LinearGradient使用代码如下:int[]mColors={Color.RED,Color.YELLOW,Color.GREEN,Color.BLUE}; //从(0,0)到(400,400)绘制线性渐变,也就是对角线区域为渐变水平线 LinearGradientlinearGradient= newLinearGradient(0,0,400,400,mColors,null,Shader.TileMode.MIRROR); paint.setShader(linearGradien
【导语】一场席卷全球的新冠疫情牵动着全球人们的心。与过去不同,此次抗疫中,科技发挥了不可低估的力量。尤其是AI技术,无论是影像分析,还是疫情防控,都有着AI技术的影子。从数据采集到训练、应用,AI技术应用的速度在抗疫中至关重要,今年抗疫中诸多AI应用的快速实现,背后的“加速键”倒是什么?请看下文。1918年,一场名为“西班牙女郎”的大流感席卷全球,在长达18个月的时间里感染了5亿人,也带走了约5000万人的生命。 要知道,那时全世界的总人口不过18亿,也就是说病毒感染超过了总人口的四分之一,超过了人类历史上任何一场战争及流行病造成的伤亡,甚至也间接影响到了第一次世界大战的进程(因为各国都已经没有额外的兵力作战,一战草草收场)。面对那场危机,人们慌乱无措,任由死亡与恐惧蔓延。在病毒肆虐最严重的的时候,仅西班牙的巴塞罗那地区,每天就有超过1200个居民死于流感。而即便是当时世界上最顶尖的科学家,也对病毒束手无策,只能任其蔓延。弹指一挥间,百年已逝。2020年开年,一场空前的疫情同样席卷了全球,几乎所有国家都受到了它的影响。迄今为止,这个名为COVID-19的病毒在全球范围内感染人数已经超过
《喜欢你》影片中,顾胜男与路晋相杀相爱,顾胜男用一道道美食征服了路晋,最终走到了一起。她曾说过,每个人身上都有密码,看我这把钥匙能否解开你的密码。Hey,Howareyoudoing?我是职场编码,很高兴认识你。曾几何时,我觉得我和C#的关系,像极了顾胜男和路晋的坎坷情路。结构严谨的C#,像极了毒舌的路晋,一有错误,就各种跳框叨叨我。路晋为了品尝美食,一头扎进顾胜男家。而我为了调试代码,一头埋进编码世界。今天,我就给你演示一下C#自动生成工资条的实现过程。001准备工作Excel初始化声明实例化Excel应用:Excel._ApplicationEap=newExcel.Application();设置Excel应用可见: Eap.Visible=true;设置Excel路径: stringePth=AppDomain.CurrentDomain.BaseDirectory+"工资条.xls";打开Excel文件:Excel._WorkbookEbk=Eap.Workbooks.Open(ePth);Word初始化声明实例化Word应用:Word._Applicat
OkHttp是可以说是Android开发中,每个项目都必需依赖的网络库,我们可以很便捷高效的处理网络请求,极大的提升了编码效率。但是有时候,我们使用OkHttp也会遇到这样的问题崩溃的stacktrace1 2 3 4 5 6 7 8 9 10 11EAndroidRuntime:FATALEXCEPTION:OkHttpDispatcher EAndroidRuntime:Process:com.example.okhttpexceptionsample,PID:13564 EAndroidRuntime:java.lang.NullPointerException:blablabla EAndroidRuntime:atcom.example.okhttpexceptionsample.MainActivity$createNPEInterceptor$1.intercept(MainActivity.kt:61) EAndroidRuntime:atokhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptor
本文作者:IMWeb黄qiong原文出处:IMWeb社区未经同意,禁止转载 在分析源码applyMiddleware之前,让我们先看看middleware是个啥Redux里我们都知道dispatch一个action,就会到达reducer,而middleware就是允许我们在dispatchaction之后,到达reducer之前,搞点事情。比如:打印,报错,跟异步API通信等等下面,让我们一步步来理解下middle是如何实现的:step1假设我们有个需求,想打印出dispatch的action之后,nextState的值。如图:先用一种很简单的方式去实现letaction=toggleTodo('2'); console.log('dispatch',action); store.dispatch(action); console.log('nextstate',store.getState())复制Step2包裹进函数里 functiondispatchAndLoge(store,action){ letaction=t
5月10日,曾经的全球最大独角兽Uber在纽交所上市,发行价每股45美元,处于上市询价区间的底端。上市当日收于41.57美元,下跌7.6%,市值低于700亿美元;5月13日,第二个交易日,Uber股价再暴跌10.75%,收于37.10美元,市值为622.15亿美元,这距离其上市前的估值已近乎腰斩。 2009年诞生的Uber是共享出行的鼻祖,十年来估值一路蹿升,2018年1月F轮融资时估值达到720亿美元,2018年10月摩根士丹利与高盛给出的IPO提案书对其估值1200亿美元。本文将通过5个问题,深入探讨Uber股价暴跌的原因,Uber背后的共享出行,以及资本市场的倒挂现象。你也可以戳音频获取核心内容:1、资本市场为何对Uber不感冒?Uber认为导致其股价不振的原因有两个,一个是市场环境不好,一个是竞争对手表现,UberCEODaraKhosrowshahi在上市前接受媒体采访时表示,Lyft上市以来的表现令Uber对上市的态度更为谨慎。今年3月,Lyft上市,到现在为止,Lyft股价已累计下跌38.5%。不过在罗超频道(微信ID:luochaotmt)看来,这两个理由都是Uber给
安装linux系统:先下载iso镜像文件,在windows系统下,插入u盘,下载Ultraiso软件,安装好后,根据 http://jingyan.baidu.com/article/a378c960630e61b329283045.html 把U盘变成系统盘后。插入U盘到要装linux系统到电脑中,重启电脑,根据提示安装即可(尽量在安装中保持联网状态,否则在以后安装包到时候会出现不必要到麻烦)。安装python-jose包遇到错误:src/MD2.c:31:20:fatalerror:Python.h:没有那个文件或目录解决方法是安装python-dev,这是Python的头文件和静态库包:sudoapt-getinstallpython-dev参考网址:http://www.cnblogs.com/yuxc/archive/2012/05/13/2498019.html安装python-support包在安装其他包时,出现需要依赖安装python-support包,但是在linux的16.04版本中,无法通过sudoapt-getinstallpython-support安装htt
索菲亚--世界上第一个也是目前唯一一个被授予公民身份的AI,在16年到17年的两年间,在各种场合频频亮相,火遍了全球,引起了很多人的关注。近日更是开通微博,来到中国参加央视节目,存在感十足。可是,一个这么红的明星AI却饱受AI学术界的批评。近日,甚至深度学习大佬YannLeCun在Twitter上公开指责Sophia是彻头彻尾的骗子,吸引了众多人的关注。“这之于AI,就像变戏法的之于真正的魔法。我们把它称作「实体崇拜AI」或者「假冒AI」或者「远程操控AI」(Wizard-of-ozAI)可能比较好。换句话说,这根本就是在扯淡。”在这之后索菲亚在Twitter上反呛道:YannLeCun的这些负面评价这让她很是受伤,她认为YannLeCun应该对这种智能的研究持更开放的态度。而YannLeCun却不以为然,认为这种夸大的虚假宣传会让普通人对人工智能产生不切实际的期望,这样反而会伤害人工智能的研究。他还表示索菲亚在Twitter推文毫无疑问是人代劳的。通常学术界并不认同Sophia是真正的人工智能。NLP领域的研究者们都有一个共识,就是哪怕目前最先进的人机对话系统也无法达到Sophia那
OpenResty默认没有提供Http客户端,需要使用第三方提供;当然我们可以通过ngx.location.capture去方式实现,但它只能发送一个子请求。 第三方基本是以lua-resty-http为代表,这个类库如果去访问http和正规的https是没有问题,也挺好用的,但如果访问使用山寨证书的请求会出一些错误,比如:handshakefailed,socketerror等等之类的错误。对于种我的解决办法是使用curl,可以很好解决这个问题,现在来看算是比较完美的。具体代码如下: localcurl=require("luacurl") localfunctionpostJson(url,postData,c) localresult={} ifc==nilthen c=curl.new() end c:setopt(curl.OPT_URL,url) c:setopt(curl.OPT_SSL_VERIFYHOST,0) c:setopt(curl.OPT_SSL_VERIFYPEER,false) c:setopt(curl.OPT_POST,t
在看到这个可爱的小家伙前,我一直以为那个咖啡杯子是Java的吉祥物。直到拿到《Java性能优化权威指南》这本书,才知道有这个小东西Duke。这位可爱的Duke是由JoePalrang在1992年创作出来的,Duke当时在Star7上所扮演的角色是类似Office中小助手的功能,而那时的Java(1995年5月23日,Java语言诞生。)还叫Oak呢。橡树?难道JamesGosling屋边长了这么一颗树?Duke是开源的,吉祥物也开源?那我是不是也能给它加上些奇思妙想呢? 2009年Sun被Oracle收购后,Java的创造者JamesGosling在自己的博客贴出了一幅画,并写了一句话“Solong,oldfriend.”(再见了,老朋友。)这之后Oracle就是Java的新东家了。 下面这张是网络上比较流行的“开源一家亲”,桌边坐着BSD的小红恶魔、Linux的企鹅Tux、Duke、谋智的红暴龙。墙上挂有Java之父JamesGosling、GNU项目创始人RichardStallman的照片以及自由软件运动(GNU)的吉祥物牛羚。我们还能看到Perl骆驼、openSSH河豚、G
http://www.cnblogs.com/vamei/archive/2012/07/19/2600135.html Python小题目针对快速教程作业答案 写一个程序,判断2008年是否是闰年。 写一个程序,用于计算2008年10月1日是这一年的第几天?(2008年1月1日是这一年的第一天) 1#判断闰年 2defis_leap_year(year): 3return(year%4==0andyear%100!=0)oryear%400==0 4#判断是这一年的第几天 5defgetDayInYear(year,month,day): 6month_day=[31,28,31,30,31,30,31,31,30,31,30,31] 7ifis_leap_year(year): 8month_day[1]=29 9returnsum(month_day[:month-1])+day 10 11print(getDayInYear(2008,1,1)) 12print(getDayInYear(2008,10,1)) 13print(getDayInYear(2009,10,1))
在写完上一篇“基于Selenium的Web自动化框架”(http://www.cnblogs.com/AlwinXu/p/5836709.html)之后一直没有时间重新审视该框架,正好趁着给同事分享的机会,重新分析了一下框架,发现了很多不足之处,所以才有了这篇增强版。 到底在框架的哪一部分做了增强呢?这次主要从设计模式的角度来简单介绍一下。 首先我们来看一下之前是如何书写页面模式中的类的: BasePage: classBasePage(object): """descriptionofclass""" #webdriverinstance def__init__(self,driver): self.driver=driver复制 GoogleMainPage: fromBasePageimportBasePage fromselenium.webdriver.common.byimportBy fromselenium.webdriver.common.keysimportKeys classGoogleMainPage(BasePage): """des
一个ASP.NET项目在部署到生产环境时,当用户并发量达到200左右时,IIS出现了明显的请求排队现象,发送的请求都进入等待,无法及时响应,系统基本处于不可用状态。因经验不足,花了很多时间精力解决这个问题,本文记录了我查找问题的过程和最后解决方案,供大家参考。 软硬件环境: IBM刀片服务器,Intel至强处理器,4物理核,16个逻辑核心,内存32G WindowsServer2008EnterpriseR2,ASP.NET4.0Webform IIS7.5 集成模式 当发现请求明显延迟,没有被即时处理的现象,首先就要查看Windows自带的性能日志PerformanceMonitor。 由于我注意到只有对于.aspx或.ashx的请求才会延迟,而.htm或.jpg文件都是即时响应的,所以很明显问题出在ASP.NET上,于是我选择了性能监视器中的ASP.NET4.0中的2个主要计数器:RequestsCurrent(当前请求数),RequestsQueued(被排队的请求数)进行观察。通过观察发现,当前请求数达到200左右时,被排队的请求
1795.每个产品在不同商店的价格 列转行 SELECTproduct_id,'store1'store,store1priceFROMproductsWHEREstore1ISNOTNULL UNION SELECTproduct_id,'store2'store,store2priceFROMproductsWHEREstore2ISNOTNULL UNION SELECTproduct_id,'store3'store,store3priceFROMproductsWHEREstore3ISNOTNULL; 复制 行转列 SELECT product_id, SUM(IF(store='store1',price,NULL))'store1', SUM(IF(store='store2',price,NULL))'store2', SUM(IF(store='store3',price,NULL))'store3' FROM Products1 GROUPBYproduct_id; 复制
1、如果直接在elementUi 弹出框中注册一个ref,打开页面的时候echarts并没有显示,并且控制台会报错 这是因为dom没有渲染,解决方法使用$nextTick()方法,最好写在弹出框出现之后的 2、第二种方法,把this.$nextTick写在 open 事件里面 参考地址:https://blog.csdn.net/qq_37896578/article/details/94743448