ImageNet时代将终结?何恺明新作:Rethinking ImageNet Pre-training
译者 | 刘畅 林椿眄
整理 | Jane
出品 | AI科技大本营
Google 最新的研究成果 BERT 的热度还没褪去,大家都还在讨论是否 ImageNet 带来的预训练模型之风真的要进入 NLP 领域了。如今,Facebook AI Research 的何恺明、Ross Girshick 及 Piotr Dollar 三位大佬共同完成的最新研究论文 Rethinking ImageNet Pre-training,却引起了大家对 CV 领域预训练必要性的热议。
有人说大神的研究直接终结了“train from scratch”问题,激发了深度学习领域的活力;有人认为在某些情况下 ImageNet 预训练模型也不再能提升最终的效果;有人发出感慨“是时候需要重新思考了”,也有人表示“ImageNet 时代或将很快过去”。而在这篇 Paper 中,大神们也在最后写到“希望这篇文章给大家在重新思考计算机视觉领域中像 ImageNet 预训练模型类似的方法时,提供新的实验证据和讨论观点。预训练加微调的方法是否真的是万能的?”
下面AI科技大本营就先为大家分析一下这篇 paper 的方法、实验及主要贡献,也欢迎大家留言讨论~
摘要
在目标检测和实例分割两个领域,我们使用随机初始化方法训练的模型,在 COCO 数据集上取得了非常鲁棒的结果。其结果并不比使用了 ImageNet 预训练的方法差,即使那些方法使用了 MaskR-CNN 系列基准的超参数。在以下三种情况,得到的结果仍然没有降低:(1)仅使用 10% 的训练数据;(2)使用更深和更宽的模型以及(3)使用多个任务和指标。
实验表明,使用 ImageNet 的预训练模型可以在训练早期加快收敛速度,但不一定能带来正则化的效果或最终提高目标任务的准确率。文中阐述了在不使用任何额外数据的情况下,COCO 数据集上物体检测结果为 50.9 AP 的方法,而这一结果与使用 ImageNet 预训练的 COCO 2017 竞赛方法结果相同。根据这些观察还发现,使用 ImageNet 预训练这一方法并不能带来最终效果的提升。
引言
深度卷积神经网络方法为计算机视觉领域带来了新的活力,换言之,是因为发现使用预训练任务中学到的特征表示,能够将其中有用的信息传递给另一目标任务。近年来,一个通用的方法(模式)是使用大规模数据(例如 ImageNet )对模型进行预训练,然后在具有较少训练数据的目标任务上对模型进行微调。预训练模型已经在许多任务上实现了最先进(state of the art)的结果,包括物体检测,图像分割和动作识别等任务。但这种方法(预训练加微调)真的能解决计算机视觉领域的问题吗?我们提出了质疑。因此,通过实验展示了在 COCO 数据集上,我们使用随机初始化方法训练取得了和使用 ImageNet 预训练方法相媲美的结果,而且我们还发现仅使用 10% 的COCO 数据也能训练到差不多的结果。
另外,我们还发现可以从零开始训练一个大型模型,即使这个模型比 ResNet101 还大 4 倍,也不会过拟合。基于这些实验,得出以下三个结论:
使用 ImageNet 预训练能够加快收敛速度,特别是在训练初期。但是随机初始化的训练方法可以在训练了一段时间后赶上,该时间大致相当于 ImageNet 预训练加上微调的时间之和。 由于在研究目标任务时经常忽略 ImageNet 预训练的成本,因此会有使用预训练能缩短时间成本的假象,相反也忽略了随机初始化训练方法的真正作用。
使用 ImageNet 预训练的方法并不能自动提供更好的正则化效果。 当用较少的图像(低至 COCO 数据集的 10%)进行训练时,我们发现必须选择新的超参数来进行微调(微调初始参数来自预训练)以避免过拟合。 但是,当使用这些初始超参数进行随机初始化训练时,该模型可以达到使用预训练方法的精度并且不需要额外的正则化,即使仅使用 10% 的 COCO 数据。
当目标任务/指标是需要更多使用局部空间信息来进行预测的任务时,ImageNet 预训练方法并没有展现出更强大的地方。我们观察到,当从头开始训练时,高重叠区域的 AP 会明显改善; 我们还发现了需要精准空间定位的关键点 AP,从头开始收敛速度相对较快。直观地说,基于分类的,类似 ImageNet 图片集的预训练任务和对局部敏感的目标任务,三者之间的差异可能会限制预训练方法发挥其功能。
方法
我们的目标是通过控制实验(有无ImageNet 预训练)来探究 ImageNet 预训练对模型性能的影响。考虑到这个问题,模型结构的改进并不是我们这项研究的目的; 实际上,为了能够更好地理解 ImageNet 预训练的作用,我们将基于当前最典型的模型结构,以最少的微调操作来探究预训练操作对模型性能的影响。下面,我们具体阐述在此研究中两个必要修改。
▌正则化
在图像分类任务中,正则化的引入能够辅助模型的优化过程。在以往的研究中,有效的正则化策略包括标准的参数初始(normalized parameter initialization)和激活正则化层(activation normalization layers)。对于目标检测任务,在不采用预训练模型而从头开始训练一个检测器时,往往会面临与从头训练一个分类器相似的问题。
批标准化(BN)是当前最流行的正则化方法,但在从头开始训练一个模型时,它的作用也变得微乎其微。特别地,不同于图像分类任务中的输入,目标检测器通常使用高分辨率的图像输入进行训练,BN 策略的引入虽然可以减少批量大小内存,但是小批量的输入会严重降低模型的准确性。
在这项研究中,我们应用最近提出的两种正则化策略,它们能够有助于缓解小批量输入的问题:
Group Normalization (GN):这是我们最近提出的,作为 BN 的一种替代策略。GN 方法的计算与输入的批量维度无关,因此引用该正则化方法时,模型准确性对输入的批量大小并不敏感。
Synchronized Batch Normalization (SyncBN): 这是BN 的一种跨设备(GPU) 实现,能够统计多个设备的批量大小情况。当使用多个GPU 时,该正则化方法能够增加BN 的有效批量大小,从而避免小批量输入的问题。
我们的实验表明,当从头开始训练一个检测器时,GN 和 SyncBN 的正则化策略都是有效的。此外,我们还进一步探索了,使用合适的随机正则初始化策略,基于 VGG 架构的目标检测器能够在没有 BN 或 GN 方法的情况进行训练。
▌收敛性
显然,通过随机初始化过程的模型收敛速度与经 ImageNet 预训练初始化的收敛速度是相去甚远的。因为经预训练后,模型可能直接利用已学习的低级特征(边缘、纹理等) 而无需重新学习。此外,从头开始训练的模型需要学习目标的低级和高级语义,这可能需要更多的迭代过程才能更好地收敛。因此,在这项研究中我们考虑三种不同的 sample 定义:分别是图像和实例数量,以及在所有训练迭代过程中的像素数量。下图 2 显示了在 COCO 数据集上,一个从头开始训练的模型相比于预训练的模型,需要超过 3 倍的迭代数才能达到收敛状态。
图2:在所有训练迭代过程中模型所见到的图像、实例和像素的总数。其中绿条表示经预训练微调的模型,而紫色条表示随机初始化的模型。
我们的实验结果表明,从头开始训练的检测器,在总样本数量足够大(像素目标而言) 的情况下,以随机初始化开始训练也能很好地收敛,其性能也能够匹配上经预训练微调的模型。
实验设置
我们对基准模型进行了微小的改变,总的来说,我们的基准设置和超参数都遵循 Mask R-CNN 模型,你可以在开源的 Detectron 项目中找到。此外,我们额外添加了正则化策略,并改变了模型迭代的步数,具体如下:
模型结构:我们采用 Mask R-CNN,ResNet 或 ResNeXt,并采用特征金字塔网络(FPN)作为我们模型的主体结构,并采用端到端的方式(end-to-end)来训练 RPN 和 Mask R-CNN。此外,GN/SyncBN 代替所有 frozen BN 层(逐通道的仿射变换)。为了公平比较,在研究过程中我们对预训练模型同样采用 GN 或 SyncBN 正则化策略进行微调。
学习率方案:Detectron 中原始版本的 Mask R-CNN 模型进行了 90k 步的微调迭代过程(1×schedule)或 180k 步的迭代(2×schedule)。对于本文中的模型,我们采用相似的术语,探究更长的训练过程。例如,所谓的 6×schedule 是带 540k 步迭代的微调过程。不论最终的迭代步数是多少,我们都遵循 2×schedule 策略,在最后的 60k 和 20k 时将学习率降低 10倍(即总是在运行相同的迭代步数后降低学习率)。在实验中,我们发现对于第一个(大)学习率,训练更长的时间是有用的,但对于较小的学习率,训练太久往往会导致过拟合现象的发生。
超参数:其他所有的超参数都遵循 Detectron 中的设置。特别是,初始学习率设置为 0.02,并采用 linear warm-up 策略,权重衰减率为 0.0001,动量参数设定为 0.9。我们在 8 个 GPU 上,采用 synchronized SGD,每个 GPU 上 mini-batch 大小为 2,来训练所有模型。
默认情况下,Detectron 中的 Mask R-CNN 在测试过程不使用数据扩充操作,在训练过程也只引入水平翻转的增强操作。在此,我们使用相同的设置,在无特别说明的情况下,图像较短边的像素值是 800。
实验结果与分析
▌从头开始训练以匹配准确性
实验中,我们发现当只使用 COCO 数据集时,从头开始训练的模型性能是能够匹配预训练模型的性能。我们在 COCO train2017 上训练模型,并在 COCO val2017 上验证模型的性能。训练数据集共有 118k 张图片,而验证集包含 5k 张图片。对于检测任务,我们评估了 bbox 和 AP(Aversage Precision)指标;对于实例分割,我们以 mask AP 作为评价标准。
Baselines with GN and SyncBN
下图 3,图 4 和图 5分别展示了 ResNet50+GN,ResNet101+GN 以及 ResNet50+SynaBN 在验证集上的 bbox 和 AP 性能曲线。每张图上我们的偶可以对比随机初始化训练的模型和经预训练微调的模型之间的性能差异。可以看到,在标准的 COCO 数据集上,从头开始训练的模型在 bbox 和 AP 上的表现,完全可以匹配经预训练微调的模型性能。而 ImageNet 数据集的预训练主要能够加速模型的收敛速度,并不会或很少提高模型最终的检测性能。
图 3 在 COCO val2017 数据集上,以 ResNet50+GN 为主体结构的 Mask R-CNN 模型的 bbox 和 AP 性能曲线。
图 4 在 COCO val2017 数据集上,以 ResNet101+GN 为主体结构的 Mask R-CNN 模型的 bbox 和 AP 性能曲线。
图 5 在 COCO val2017 数据集上,以 ResNet50+SyncBN 为主体结构的 Mask R-CNN 模型的 bbox 和 AP 性能曲线。
Multiple detection metric
下图 6 我们进一步比较了两种情况下模型在多种检测指标上的性能,包括分别在 IoU 阈值为 0.5 和 0.75的情况下,Mask R-CNN 模型的 box-level AP,segmentation-level AP。
图 6 从头开始训练 Mask R-CNN+FPN+GN 为结构的模型与经预训练的模型之间在多种检测指标上的性能对比
Models without BN/GN--VGG nets
为了研究模型性能的泛化能力,我们以 VGG-16 作为主体结构,参考先前 Faster R-CNN 模型的实现过程,没有引入 FPN 架构,并采用标准的超参数方案,从头开始训练模型,并将其与在 ImageNet 上预训练的模型性能进行比较分析。我们发现,即使经 ImageNet 预训练的模型,其收敛的速度也很缓慢,而从头开始训练的模型最终也能达到与之相匹配的检测性能。
▌用更少的数据从头开始训练
实验过程中,我们还发现,随着数据量的减少,从头开始训练的模型性能并不会随之下降,仍然还能取得与预训练模型相匹配的性能。
35k COCO training samples vs 10k COCO training samples
我们分别从 COCO 数据集中随机选择 35k 和 10k 张训练数据,用于从头开始训练或基于预训练模型进行微调操作。下图 7 展示了二者在更少的训练数据上的 bbox 和 AP 性能对比。可以看到,尽管用更少的数据,从头开始训练的模型最终也能赶上预训练模型的性能。此外,经 ImageNet 预训练并不会有助于防止过拟合现象的发生。
图 7 以更少的 COCO 样本训练的 Mask R-CNN+ResNet50-FPN+GN 模型在 val2017 上的 bbox 和 AP 性能。左图:以 35k COCO 样本训练,采用默认的超参数设置,模型在改变学习率的过程中发生了过拟合现象。中图:以 35k COCO 样本训练,采用与随机初始化模型相同的超参数设置。右图:以 10k COCO 样本训练,采用与随机初始化模型相同的超参数设置。
此外,我们还在 COCO 和PASCAL VOC 数据集上进行了 breakdown regime 实验,详细的内容可以查阅我们的论文。
结论与讨论
在这项研究中,我们主要研究了 ImageNet 预训练对模型性能的作用,并通过消融控制实验来分析不同正则化方法对模型性能及收敛速度的影响,总结如下:
在不需要对模型结构进行大幅度修改的情况下,可以在一个新的任务中从头开始训练一个模型。
从头开始训练一个模型通常需要更多的迭代步数才能获得充分的收敛。
从头开始训练的模型性能能够匹配的上经预训练的模型性能,即使是在只有 10k COCO 训练数据的情况下。
经 ImageNet 预训练的模型,在一个新的任务中能够加快收敛速度。
经 ImageNet 预训练的模型并不一定有助于减少过拟合现象的发生,除非我们采用非常小的数据。
如果我们的目标是比定位和分类更敏感的任务,那么 ImageNet 预训练对于模型的帮助将变得更小。
基于这些观察,我们尝试回答如下几个关键性的问题,希望能够鼓励研究者重新审视并思考ImageNet 预训练的作用:
ImageNet 预训练是否有必要?事实并非如此,如果我们有足够的目标数据和计算资源的话,也许我们可以不依赖 ImageNet 的预训练。我们的实验结果表明,ImageNet 预训练可以帮助模型加速收敛过程,但是并不一定能提高最终的准确性,除非数据集特别小(例如,<10k COCO images)。这表明,在未来的研究中,收集目标数据的标注信息(而不是预训练数据)对于改善目标任务的表现是更有帮助的。
ImageNet有用吗?确实是有用的。ImageNet 预训练一直以来是计算机视觉领域许多任务性能辅助工具。它能够减少了训练的周期,更容易获得有前途的结果,经预训练的模型能够多次使用,训练成本很低。此外,经预训练的模型能够有更快的收敛速度。我们相信 ImageNet 预训练仍然有助于计算机视觉研究。
我们需要大数据吗?的确需要。但如果我们考虑数据收集和清理的成本的话,一个通用的大规模分类的数据集并不是理想的选择。因为收集诸如 ImageNet 这样大数据集的成本被忽略掉了,而在数据集上进行预训练步骤的成本也是庞大的。如果在大规模的分类数据集上预训练的收益呈指数型下降减少,那么在目标域上收集数据将会是更有效的做法。
我们应该追求通用的模型性能吗?毫无疑问,我们的目标是模型能够学习到通用的特征表征。我们所取得的结果也没有偏离这一目标。其实,我们的研究表明在计算机视觉领域,我们应该更加注意评估预训练的特征(例如对于自监督过程的特征学习),就像现在我们学到的那样,即使是随机初始化过程也能得到出色的结果表现。
-【完】-
精彩推荐
◆
BDTC 2018
◆
2018 中国大数据技术大会将于 12 月 6 - 8 日在新云南皇冠假日酒店举行。汇聚超百位国内外实力讲师从学界翘楚到行业一线大拿:
管晓宏:中国科学院院士;
张宏江:源码资本投资合伙人;
张晓东:美国俄亥俄州立大学 Robert M. Critchfield 讲席教授;
陈性元:北京信息科学技术研究院副院长;
周靖人:阿里巴巴集团副总裁;
李浩源:Alluxio 公司创始人&CEO
......
全方位立体解读大数据时代的技术进程,为众技术爱好者奉上一场优质干货盛宴。
推荐阅读
胜过iPhone XS?Google Pixel的“夜视功能”是怎样炼成的
近期最受大家关注的机器学习项目Top10!
干货(附源代码) | 爬取一万条b站评论,分析9.7分的新番凭啥这么火?
程序员如何 Get 分布式锁的正确姿势?
让你崩溃无语的程序命名有哪些?
2年2亿美金,澳本聪耗得起BCH内战又怎样?
刚写完排序算法,就被开除了…
相关文章:

java 序列化 缓存_java_缓冲流、转换流、序列化流
一、缓冲流缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。字节缓冲流构造方法创建字节缓冲输入流:BufferedInputStream bi…

QQ2007去广告教程(本地vip)
只要是vip就可以去掉广告了 关键函数QQHelperDll.dll的IsQQServiceEnable 在入口点修改: mov eax,1 retn 好了这样就成了本地的vip了 因为那个dll的版本太多了不能通用,所以就不提供下载了(我的版本7.1.644.1777) 同时qq每次升级都有可能替换…

java instanceof 报错_java instanceof方法
基本用法null instanceof Object 为false; null instanceof 任意类 为false;任意实例 instanceof 对应的类或者父类 都为true;基本数据类型 instanceof Object 编译时会报错(如 int a;a instanceof Object 编译不通过)ÿ…

grep的常用命令语法
grep的常用命令语法 1. 双引号引用和单引号引用 在g r e p命令中输入字符串参数时,最好将其用双引号括起来。例如:“m y s t r i n g”。这样做有两个原因,一是以防被误解为 s h e l l命令,二是可以用来查找多个单词组成的字符串&…

千呼万唤始出来!OpenCV 4.0正式发布!
作者 | 周强(本文为作者独立观点,转载请联系作者)来源 | 我爱计算机视觉OpenCV 4.0 正式版来啦!重回英特尔的 OpenCV 终于迎来一次大版本更新,增加了诸多新特性,快来一起看看吧~因为 OpenCV 最开…

ORA-01031: insufficient privileges的解决方法
原文出自:http://www.chinaunix.net/jh/19/132866.html############################################# # # NAME: troubleshoot connect internal.txt # # DESCRIPTION: # connect internal # connect / as sysdba 要口令问题:# refer (METALINK,ORACLEDOC), # me…

java 线程通讯_java多线程(五)线程通讯
1.1. 为什么要线程通信多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信。1.2. 线程通讯方式线程间通信常用方式如下:l 休眠唤醒方式:Object的w…

合并排序(C语言实现)
递归算法是把一个问题分解成和自身相似的子问题,然后再调用自身把相应的子问题解决掉。这些算法用到了分治思想。其基本模式如下: 分解:把一个问题分解成与原问题相似的子问题 解决:递归的解各个子问题 合并:合并子问题…

工程实践也能拿KDD最佳论文?解读Embeddings at Airbnb
作者 | Mihajlo Grbovic,Airbnb 资深机器学习科学家译者 | Lang Yang,Airbnb 工程经理【导读】本文最早于 2018 年 5 月 13 日发表,主要介绍了机器学习的嵌入技术在 Airbnb 爱彼迎房源搜索排序和实时个性化推荐中的实践。Airbnb 爱彼迎的两位…
计算点、线、面等元素之间的交点、交线、封闭区域面积和闭合集(续1)
继续上一节的内容,本节主要讲解三维空间中射线、线段与平面及三维物体的交点及距离的计算,它们在碰撞检测和可见性剔除等应用中是必不可少的。首先给出3D空间下点乘和叉乘的定义与定理的推导,再谈如何应用到程序编码的工作中。 设三维空间中任…

android 抓取native层奔溃
使用android的breakpad工具 使用这个工具需要下载Breakpad的源码,然后进行编译,编译之后会生成两个工具 我们使用这两个工具来解析奔溃的位置。这里我们可以下载已经编译好的工具 下载地址是:链接:http://pan.baidu.com/s/1jIiU5c…

渗透各行各业,这家RPA外企宣布全面进军中国市场
11月15日,全球机器人流程自动化(RPA)领域平台UiPath首次在中国举办UiPath Together年度大会,来自自动化、人工智能和机器学习领域的行业专家,以及来自中国和世界的领先公司的客户与合作伙伴共同参与了此次活动。在此次…

java gettext_JAVA中getText()怎么从一个JTextArea中读出内容?
想先创建一个JTextArea,然后在里面输入内容(几个字母),然后用getText读出里面的内容,可是好像只能是先在JTextArea里面写,然后getText才能读出,而不能先运行,在图形界面的JTex...想先创建一个JTextArea&…

想在SqlDbHelper.cs类中加的垃圾方法
虽然没改写SqlDbHelper.cs类的能力,但好不容易想出来的,放着留个纪念~~~~~/**//// <summary> /// 执行SQL语句,返回第一行,第一列(sea) /// </summary> /// <param na…

java全站_javaWeb_全站编码
目的 : 实现javaweb项目的全站编码问题需要解决的问题 : 在何时进行编码问题的解决, 在何处进行编码问题的解决, 才用什么方法进行解决设计思路 : 在Filter进行全站的编码转换, 对于GET请求 : 使用装饰者模式(是你有你一切拜托你), 修改Request.getParameter()方法, 在getparam…

在Linux系统中修改目录的权限如何恢复
在我工作中的某一天执行了chmod -R 777 /home后我十分后悔,这下不知道该怎么办?心里面很是着急。此时灵机一动问了一下谷哥,终于找到了方法解决此问题,不过前提是要自己做了文件权限备份工作,现在我就给大家讲解一下我…

.Net Framework 3.5 结构图
从打印社用A0或A1的纸打出来,大概10RMB,看起来超爽。 转载于:https://www.cnblogs.com/habin/archive/2008/03/15/1107196.html

关于CVPR 2019投稿的一些感想
作者 | 胡国圣,英国 anyvision 高级研究员,从事深度学习,人脸识别的研究。一年一度的 CVPR 是人工智能的机器视觉方向最重要的学术会议,每年吸引都会全球最顶尖的大学和公司的研究人员投稿,文章如果被录用,…

ORACLE 数据泵导入导出数据
一、摘要 在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp的时候往往是需要好几个小时,耗费大量时间。oracle10g以后可以用expdp来导出数据库花费的时间要远小于exp花费的时间,而且文件也要小很多。 二、exp/imp与expdp/impdp区…

java备忘录模式应用场景_图解Java设计模式之备忘录模式
图解Java设计模式之备忘录模式游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。传统方案解决游戏角色恢复传统的方式的问题分析…

一文掌握常用的机器学习模型(文末福利)
AI 科技大本营按:本文节选自微软亚洲研究院机器学习研究团队刘铁岩、陈薇、王太峰、高飞合著的《分布式机器学习:算法、理论与实践》一书。为了让大家更好地理解分布式机器学习,AI科技大本营联合华章科技特别邀请到了本书的作者之一——微软亚…

MYSQL替换语句
update dede_art set titlereplace(title, <IMG border0 srcImages/hot.gif>,);update 表名(比如我案例中的dede_art) set 要修改字段名 replace (要修改字段名,被替换的特定字符,替换成的字符) SELECT * FROM supe_spaceitems where subject like %狐狸天空% update …

phpstudy+phpstorm+debug
文:phpstudyphpstormdebug 一、配置前说明: 1、phpStudy集成了XDebug扩展,所以不用单独下载XDebug。 2、打开XDebug扩展:其它选项菜单 > PHP扩展 > Xdebug 二、配置步骤: 1、phpStudy当前版本: 2、修改php.ini…

java 卖票问题_Java之多线程窗口卖票问题(Thread)
/**** 例子:创建三个窗口卖票,总票数为100张.使用继承Thread类的方式** 存在线程的安全问题,待解决。**/class Window extends Thread{private static int ticket 100;Overridepublic void run() {while(true){if(ticket > 0){System.out…

雷军深情告白:在我心里,武汉大学是全球最好的大学
武汉大学将在 11 月 29 迎来 125 周年校庆,作为杰出校友,小米创始人雷军参加了昨天举行的第五届校友珞珈论坛。现场,雷军对武大深情表白:“马云在几个场合说过,杭州师范大学在他心里是全球最好的大学,没有之…

java中抽象接口_一篇文章让你彻底理解java中抽象类和接口
相信大家都有这种感觉:抽象类与接口这两者有太多相似的地方,又有太多不同的地方。往往这二者可以让初学者摸不着头脑,无论是在实际编程的时候,还是在面试的时候,抽象类与接口都显得格外重要!希望看完这篇博…

linux proc
/proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。可以使用的文件随系统配置的变化而变化。 /proc/cmdline 这个文件给出了内核启动的命令行。 /proc/cpuinfo 这个文件提供了有关系统CPU的多种信息。 /proc/d…

专访英特尔AIPG全球研究负责人Casimir Wierzynski:物理学、隐私和大脑将根本性塑造AI
出品| AI 科技大本营 在 11 月 14 日至 15 日在北京召开的英特尔人工智能大会(AIDC)上,英特尔人工智能产品事业部(AIPG)全球研究负责人 Casimir Wierzynski 发表了主题为《人工智能研究——物理学、隐私和大脑》的演讲…

微软OOXML申请国际文档标准已获通过 中国投反对票
51CTO.com北京时间3月28日中午通过消息灵通人士获悉,微软新一代文档标准OOXML已经获得国际标准化组织(ISO)的通过。中国依然投反对票。 ISO共有104个成员,其中包括41个技术能力强、参与标准化活动多的“P成员”。若微软文档标准想…

java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试
Java技巧:用匿名类来实现简化程序调试在Java中,匿名类(Anonymous inner classes)多用来处理事件(event handle)。但其实,它们对于debug也很有帮助。本文将介绍如何利用匿名类来简化你的debug。我们该如何调试那些非自己源码的方法调用呢&…