Rich feature hierarchies for accurate object detection and semantic segmentation

  • 论文
    • 摘要
    • 介绍
    • 用R-CNN进行目标检测
      • 说明
      • 模型设计
        • Region proposals
        • Feature extraction
      • 测试时间检测
        • 说明
        • Run-time analysis
      • Training
        • Supervised pre-training
        • Domain-specific fine-tuning
        • Object category classifiers
        • Results on PASCAL VOC 2010-12
        • Results on ILSVRC 2013 detection
    • 可视化、消融和误差模式
      • Visualizing learned features(可视化学习的特征)
      • Ablation studies(消融研究)
        • Performance layer-by-layer, without fine-tuning(性能逐层提升,无需微调)
        • Performance layer-by-layer, with fine-tuning(性能逐层提升,并进行微调)
      • Comparison to recent feature learning methods(与最近的特征学习方法的比较)
      • Network architectures(网络架构)
      • Detection error analysis(检测误差分析)
      • Bounding-box regression(包围盒回归)
      • Qualitative results(定性结果)
    • The ILSVRC2013 detection dataset
      • Dataset overview(数据集概述)
      • Region proposals(区域提案)
      • 训练数据
      • Validation and evaluation(验证和评估)
      • Ablation study(消融研究)
      • Relationship to OverFeat
    • Semantic segmentation(语义分割)
      • CNN features for segmentation(用于分割的CNN特征)
      • Results on VOC 2011
    • Conclusion(结论)
    • 附录
      • A.Object proposal transformations
      • B. Positive vs. negative examples and softmax
      • C. Bounding-box regression(包围盒回归)
      • D. Additional feature visualizations(D.附加功能可视化)
      • E. Per-category segmentation results(每个类别的细分结果)
      • F. Analysis of cross-dataset redundancy(跨数据集冗余分析)
  • 补充说明
    • 1.PASCAL VOC dataset
      • 2.SVM(Support Vector Machine)【支持向量机】

论文

英文:Rich feature hierarchies for accurate object detection and semantic segmentation
中文:丰富的特征层次,用于精确的对象检测和语义分割


摘要

  1. 在规范的PASCAL VOC dataset【注释1】上测得的Object detection的性能在最近几年一直处于稳定状态。
  2. 其中表现最佳的方法是复杂的集成系统【即通常将多个低级图像特征与高级上下文结合在一起】
  3. 本文提出了一种简单且可扩展的检测算法,该算法可将平均精度(mAP)相对于VOC 2012上的先前最佳结果提高30%以上,即 mAP达到 53.3%
  4. 本文所提出的方法结合了两个关键见解:
    1. 一个人可以将高容量卷积神经网络(CNN)应用于自下而上的区域提案,以便对对象进行定位和分割;
    2. 标签训练数据稀少,有监督地进行训练时 -培训辅助任务,然后进行特定于域的微调,可显着提高性能。
  5. 当由于我们将区域提案与CNN相结合,因此我们将我们的方法称为R-CNN:具有CNN功能的区域。
  6. 我们还将R-CNN与OverFeat(一种基于相似CNN架构的最近提出的滑动窗口检测器)进行了比较: 结果显示,在200类ILSVRC 2013检测数据集上,R-CNN优于OverFeat

介绍

  • 特征是很重要的:在过去的十年里,各种视觉识别任务的进展在很大程度上是基于SIFT(局部特征)和HOG (全局特征)的使用。但是从PASCAL VOC的目标检测的表现来看,人们普遍认为,在2010~2012年期间,通过构建集成系统和采用成功方法的小的变体获得了小的收益的过程进展缓慢。
  • SIFT和HOG是块状方向直方图,可以大致与V1(即灵长类动物视觉通路中的第一个皮质区域)中的复杂细胞相关联。我们知道:识别发生在下游的几个阶段,这表明了可能有多层次、多阶段的计算机特征过程,并且对视觉识别更有用
  • Fukushima的“neocognitron” (一种用于模式识别的生物启发的分层和移位不变模型),是这种过程的早期的尝试。然而,神经感知器(neocognitron)缺乏监督训练算法;研究表明:通过反向传播的随机梯度下降(一类扩展神经感知器(neocognitron)的模型)对于训练卷积神经网络(CNNs)是有效的。
  • CNNs在20世纪90年代得到了大量使用,但随后随着支持向量机的兴起而不再流行。但在2012年,Krizhevsky等人通过在ImageNet大规模视觉识别挑战(ILSVRC)上显示显著更高的图像分类精度,重新点燃了对CNNs的兴趣。他们的成功在120万个标记的图像上训练一个大型CNN以及在LeCun的CNN上的一些扭曲(例如:max(x,0)校正非线性和“dropout”正则化)。
  • 在ILSVRC 2012研讨会期间,对 ImageNet 结果的重要性进行了辩论;主要问题可以归纳为:ImageNet上的CNN分类结果在多大程度上概括了PASCAL VOC挑战赛上的目标检测的结果?
  • 通过弥合图像分类和目标检测之间的差距来回答上述的问题:本文首次表明,与基于更简单的HOG类特征的系统相比,CNN可以在PASCAL VOC上带来显著更高的目标检测性能。为了达到这个结果,我们集中在两个问题上:
    * 用深层网络定位目标
    * 用少量带注释的检测数据训练一个高容量模型。
  • 与图像分类不同,检测需要在图像中定位对象。一种方法是作为一个回归问题的框架定位,然而实践表明这种方法在实践中的效果不太好;另一种方法是建立一个滑动窗口检测器,CNNs已经使用这种方法至少20年了,通常用于受限对象类别,如人脸和行人;为了保持高空间分辨率,这些CNNs通常只有两个卷积层和池化层;除此以外,还有一种滑动窗口的办法,然而,在我们的网络中,具有五个卷积层的高层单元在输入图像中具有非常大的感受野(195 × 195)和步幅(32×32),这使得滑动窗口范例中的精确定位成为一个公开的技术挑战
  • 相反,我们通过在“使用区域的识别”范例中操作来解决CNN定位问题,该范例对于对象检测语义分割都是成功的。在测试时,我们的方法为输入图像生成大约2000个类别无关的区域建议,使用CNN从每个建议中提取固定长度的特征向量,然后用类别特定的线性支持向量机对每个区域进行分类。我们使用一种简单的技术(仿射图像扭曲)来计算每个区域建议的固定大小的CNN输入,而不管区域的形状如何,示意图如图一所示。由于我们的系统将region proposals(区域建议)与CNNs结合起来,所以我们称之为R-CNN: “具有CNN特征的区域”。
    图1:
  • 在本篇论文中,对OverFeat detection system和R-CNN进行面对面比较(通过200类的ILSVRC2013检测数据集上运行R-CNN):OverFeat使用滑动窗口CNN进行检测,迄今为止是ILSVRC2013检测的最佳执行方法。我们显示,R-CNN的表现明显优于OverFeat,mAP为31.4%对24.3%。
  • 检测面临的第二个挑战是标记数据稀缺,目前可用的数量不足以训练一个大型CNN。这个问题的传统解决方案是先进行无监督的预训练,然后进行有监督的微调,本文的第二个主要贡献是:证明了在数据稀缺时,在大型辅助数据集(ILSVRC)上进行监督预训练,然后在小型数据集(PASCAL)上进行领域特定的微调是学习大容量CNNs的有效范例,通过实验:检测的微调将mAP性能提高了8个百分点,并且使系统在VOC 2010上实现了54%的mAP,相比之下,基于HOG的高度调整的可变形零件模型(DPM)实现了33%
  • 我们还向读者指出了Donahue等人的同期工作,他们表明Krizhevsky的CNN可以用作(无需微调)黑盒特征提取器,在包括场景分类、细粒度子分类和领域适应在内的几个识别任务中产生出色的性能。
  • 我们的系统也相当高效。唯一特定于类的计算相当小的矩阵向量乘积和贪婪的非最大抑制(greedy non-maximum suppression)。这种计算特性来自于所有类别共享的特征,这些特征也比以前使用的区域特征的维数低两个数量级
  • 理解我们方法的失效模式对于改进它也是至关重要的,因此我们报告了Hoiem等人的检测分析工具的结果。作为这一分析的直接结果,我们证明了一个简单的边界框回归方法可以显著减少定位错误,这是主要的误差模式。
  • 在开发技术细节之前,我们注意到,因为R-CNN对区域进行操作,所以很自然地将其扩展到语义分割(semantic segmentation)的任务。稍加修改,我们还在PASCAL VOC分割任务上取得了有竞争力的结果,在VOC 2011测试集上的平均分割精度(mAP)为47.9%。

用R-CNN进行目标检测

说明

我们的目标检测系统由三个模块组成。第一个模块使生成与类别无关的区域建议(Region proposals)。这些建议定义了我们的检测器可用的候选检测集。第二个模块是一个大型卷积神经网络,它从每个区域提取固定长度的特征向量。第三个模块是一组特定类别的线性支持向量机

模型设计

Region proposals

  • 生成与类别无关的区域建议(Region proposals)的方法[他们通过将CNN应用于规则间隔的方形作物来检测有丝分裂细胞,这是区域提议的一个特例]:
    objectness(对象性), selective search(选择性搜索), category-independent object proposals(与类别无关的目标建议), constrained parametric min-cuts(CPMC 参数最小割), multi-scale combinatorial grouping(多尺度组合分组), Ciresan 等
  • 尽管R-CNN不知道特定区域建议方法( the particular region proposal method),我们使用选择性搜索,能够与先前的检测工作一个有控制的比较。

Feature extraction

  • 我们使用Krizhevsky 等人描述的CNN的Caffe实现从每个区域建议中提取4096维特征向量。通过五个卷积层和两个全连接的层向前传播减去平均值的227×227 RGB图像来计算特征。
  • 为了计算区域建议的特征,我们必须首先将该区域的图像数据转换成与CNN兼容的形式(其架构要求输入固定的227 × 227像素大小):在我们任意形状区域的许多可能的变换中,我们选择最简单的。不管候选区域的大小或纵横比如何,我们都将它周围的一个紧密包围框中的所有像素扭曲 到所需的大小; 在扭曲之前,我们扩张紧密的边界框,这样在扭曲的大小上,原始框周围正好有p个像素的扭曲图像上下文(我们使用p = 16)。
  • 如图2:显示了扭曲训练区域的随机抽样

测试时间检测

说明

  1. 在测试时,我们对测试图像进行选择性搜索,以提取大约2000个区域建议(我们在所有实验中使用选择性搜索的“快速模式”)。
  2. 我们扭曲每个建议(proposal),并通过CNN向前传播,以计算特征。
  3. 然后,对于每个类别,我们使用为该类别训练的SVM【注释2】对每个提取的特征向量进行评分。
  4. 给定图像中的所有已评分区域,我们应用贪婪的非最大值抑制(greedy non-maximum suppression)(独立于每个类别),如果一个区域与大于学习阈值的较高评分选定区域交叉-重叠(IoU)重叠,则拒绝该区域。

Run-time analysis

两个属性使检测高效:

  1. CNN的所有参数都在所有类别中共享
  2. 与其他常用方法相比,由CNN计算的特征向量,如:带有视觉单词包编码的空间金字塔,是低维的。
  • 例如:紫外探测系统中使用的特征比我们的大两个数量级
  • 这种共享的结果是,计算区域建议和功能(GPU上的13s/im或CPU上的53s/img)所花费的时间在所有类别中平摊。唯一特定于类别的计算是要素和SVM权重之间的点积以及非最大抑制。实际上,一幅图像的所有点积都被成批处理成一个矩阵积。特征矩阵一般为 2000×4096,SVM权重矩阵为 4096×N,其中N为类的个数。
  • 这一分析表明,R-CNN可以扩展到数千个对象类,而无需求助于近似技术,如hashing。即使有 100 k 个类,产生的矩阵乘法在现代多核CPU上也只需要 10 秒。这种效率不仅仅是使用区域建议和共享功能的结果。UVA系统(目标跟踪)由于其高维特征,将慢两个数量级,同时需要134GB的内存来存储100k个线性预测器,而我们的低维特征只有1.5GB
  • 将R-CNN与Dean等人最近关于使用DPMs和hashing可扩展检测的工作进行比较也很有趣。他们报告说,在引入10k干扰物类时,VOC 2007挥发性有机化合物的mAP约为16%,每幅图像的运行时间为5分钟。通过我们的方法,10k检测器可以在一个中央处理器上运行大约一分钟,并且因为没有进行近似,mAP将保持在59%

Training

Supervised pre-training

我们仅使用图像级注释在大型辅助数据集(ILSVRC2012分类)上有区别地预训练CNN(边界框标签不适用于该数据)。使用开源的Caffe CNN图书馆进行预培训。简而言之,我们的CNN的性能几乎与Krizhevsky等人的相当,在ILSVRC2012分类验证集上获得了高出2.2个百分点的第1名错误率。这种差异是由于训练过程的简化。

Domain-specific fine-tuning

  • 为了使我们的CNN适应新的任务(检测)和新的领域(扭曲的建议窗口),我们只使用扭曲的区域建议继续随机梯度下降(SGD)训练神经网络参数。除了将CNN的ImageNetspecific 1000类分类层替换为随机初始化的(N + 1)类分类层(其中N是对象类的数量,加1表示背景),CNN的架构没有改变
  • 对于VOC,N = 20;对于ILSVRC2013,N = 200。
  • 我们将所有具有 ≥ 0.5 IoU重叠的区域建议与一个基本事实框视为该框类别的正面,其余的视为负面。
  • 我们以0.001的学习率(初始预训练率的1/10)开始SGD,这允许微调在不破坏初始化的情况下 取得进展。
  • 在每个SGD迭代中,我们统一采样32个正窗口(在所有类上)和96个背景窗口来构建一个大小为128的小批量。我们将采样偏向于正窗口,因为与背景相比,它们极其罕见。

Object category classifiers

  • 考虑训练一个二进制分类器来检测汽车(car)。很明显,紧紧围绕汽车的图像区域应该是一个积极的例子。同样,很明显,一个与汽车无关的背景区域,应该是一个反面例子。不太清楚的是如何标记与汽车部分重叠的区域。我们通过IoU重叠阈值来解决这个问题,低于该阈值的区域被定义为负区域。重叠阈值0.3是通过在验证集上对{0,0.1,…,0.5 }的网格搜索选择的。我们发现仔细选择这个门槛很重要。**将其设置为0.5会使mAP降低5个点。同样,将其设置为0会使mAP降低4个点。**正面的例子被简单地定义为每个类的基本事实边界框。
  • 一旦特征被提取并且训练标签被应用,我们为每个类优化一个线性SVM。由于训练数据太大,无法存储,我们采用标准的hard negative mining方法;hard negative mining收敛很快,实际上,mAP在所有图像上只经过一次就停止增加。

Results on PASCAL VOC 2010-12

  • 遵循PASCAL VOC最佳实践,我们验证了 VOC 2007数据集上的所有设计决策和超参数。为了获得VOC 2010-12数据集的最终结果,我们对VOC 2012训练上的CNN进行了微调,并优化了VOC 2012训练上的检测支持向量机。对于两种主要的算法变体(有和没有边界框回归),我们只向评估服务器提交了一次测试结果。
  • 表1显示了 VOC 2010的完整结果。我们将我们的方法与四个强基线进行比较,包括SegDPM(将DPM检测器与语义分割系统的输出相结合,并使用额外的检测器间上下文和图像分类器重新排序)。最密切的比较是Uijlings等人的UVA系统,因为我们的系统使用相同的区域建议算法
  • 为了对区域进行分类,他们的方法建立了一个四层空间金字塔,并用密集采样的SIFT、扩展OpponentSIFT和RGB-SIFT描述符填充它,每个向量都用4000字的代码簿量化。
  • 利用直方图相交核SVM进行分类。与他们的多特征、非线性核SVM方法相比,我们在mAP上取得了很大的改进,从35.1%提高到53.7%,同时速度也快得多。我们的方法在 VOC 2011/12测试中获得了相似的性能(53.3% mAP)。

Results on ILSVRC 2013 detection

  • 我们在200级ILSVRC 2013检测数据集上运行了R-CNN,使用了与PASCAL VOC相同的系统超参数。
  • 我们遵循相同的协议:只向ILSVRC 2013评估服务器提交测试结果两次,一次有边界框回归,一次没有边界框回归。
  • 图3(见下)将CNN与ILSVRC 2013竞赛的参赛作品以及赛后的过量进食结果进行了比较。R-CNN的mAP达到31.4%,明显领先于OverFeat的第二好结果24.3%。为了给出类间AP分配的感觉,还提供了方框图,并在表8(见下)的文章末尾提供了一个类间AP分配表。大多数参赛作品(OverFeat、NEC-MU、UvAEuvision、Toronto A和UIUC-IFP)都使用了卷积神经网络,这表明在如何将CNNs应用于目标检测方面存在显著的细微差别,将导致结果差异很大
  • 图三:
  • 表8:

可视化、消融和误差模式

Visualizing learned features(可视化学习的特征)

  • 第一层过滤器可以直接可视化,易于理解; 它们捕捉定向的边缘和对手的颜色。理解后续的层更具挑战性。Zeiler and Fergus 提出了一种视觉上吸引人的反进化方法。我们提出了一个简单互补的非参数方法,直接显示网络学到了什么
  • 这个想法是**挑出网络中的一个特定单元(特征),并使用它,就像它本身是一个物体检测器一样。也就是说,我们根据一大组搁置的区域建议(约1000万个)**计算单元的激活,将建议从最高到最低激活排序,执行非最大抑制,然后显示得分最高的区域。我们的方法通过精确地显示它触发的输入,让所选的单元“为自己说话”。我们避免平均,以便看到不同的视觉模式,并深入了解单位计算的不变性。
  • 我们将第5层池中的单元可视化,这是网络第五层也是最后一层卷积层的最大池化输出;第五层池化特征图为为6×6×256 = 9216维;忽略边界效应,在原始的227×227像素输入中,每个pool单元具有195×195像素的感受野中央池单元具有近乎全局的视图,而靠近边缘的池单元具有更小、更紧凑的支撑。
  • 图4中的每一行显示了CNN的一个pool 5单元的前16个激活,我们在VOC 2007训练中对其进行了微调。256个功能独特的单元中有6个是可视化的(附录D包括更多,见下)。选择这些单元是为了展示网络所学内容的代表性样本。在第二行,我们看到一个单位在狗脸和点阵列上开火。与第三个对应的是一个红色斑点探测器。还有人脸检测器和更抽象的模式,如文本和带窗口的三角形结构。该网络似乎学习了一种表示法,该表示法将少量类别调整的特征与形状、纹理、颜色和材料属性的分布式表示法结合在一起随后的全连接层fc6具有对这些丰富特征的大量组合进行建模的能力。

Ablation studies(消融研究)

Performance layer-by-layer, without fine-tuning(性能逐层提升,无需微调)

  • 为了了解哪些层对检测性能至关重要,我们分析了CNN最近三个层的VOC 2007数据集的结果; 最后两层总结如下:

    1. fc6层完全连接到pool5层。为了计算特征,它将一个4096×9216的权重矩阵乘以pool5特征图(重新整形为9216维向量),然后添加一个偏差向量。该中间矢量经过分量半波整流(x ← max(0,x))。
    2. fc7层是网络的最后一层。它是通过将fc6计算的特征乘以4096 × 4096的权重矩阵来实现的,类似地添加一个偏差向量并应用半波整流
    • 我们从CNN的结果开始,而没有在PASCAL上进行微调,即CNN的所有参数都只在ILSVRC 2012上进行了预训练; 逐层分析性能(表2第1-3行, 见下)显示,fc7的功能比fc6的功能更差。这意味着,在不降低mAP的情况下,CNN的29%,即大约1680万个参数可以被删除。
    • 更令人惊讶的是,移除fc7和fc6会产生相当好的结果,尽管pool 5特征仅使用CNN 6%的参数进行计算。CNN的大部分代表力量来自其卷积层,而不是来自更大的密集连接层。
    • 这一发现表明,**通过仅使用CNN的卷积层,在任意大小图像的HOG意义上,计算密集特征图具有潜在的效用。**这种表示法将能在pool 5特征的基础上进行包括DPM在内的滑动窗口探测器的实验。

Performance layer-by-layer, with fine-tuning(性能逐层提升,并进行微调)

  • 我们现在看看CNN在VOC 2007训练中微调其参数后的结果。
    改进是惊人的(表2第4-6行, 见下): 微调将mAP提高了8.0个百分点,达到54.2%。与pool5相比,fc6和fc7的微调提升更大,这表明从ImageNet中学习的pool 5功能是通用的,并且大多数改进是通过在它们之上学习特定领域的非线性分类器获得的。

  • 表二:

Comparison to recent feature learning methods(与最近的特征学习方法的比较)

  • 在PASCAL VOC检测上,已经尝试了相对较少的特征学习方法。我们来看看最近两种基于可变形零件模型的方法。作为参考,我们还包括基于标准HOG的DPM的结果
  1. 第一种DPM特征学习方法(DPM ST) : 用“草图标记”概率的直方图来增强HOG特征。直观地说,草图记号是穿过图像块中心的轮廓的紧密分布。草图标记概率通过随机森林在每个像素处计算,该随机森林(random forest)被训练为将35×35个像素块分类为150个草图标记或背景中的一个
  2. 第二种方法,DPM HSC ,用HSC的直方图代替HOG。为了计算HSC,使用100个7 × 7像素(灰度)原子的学习字典来求解每个像素的稀疏代码激活。由此产生的激活以三种方式进行校正(全波和半波)、空间合并、单位归一化,然后进行功率变换(x ←符号(x)|x|α)。
  • 所有的R-CNN变体都大大优于三个DPM基线(表2第8-10行, 见上),包括使用特征学习的两个。与仅使用HOG功能的最新版本的DPM相比,我们的mAP高出20个百分点:54.2%对33.7%,相对提高了61%。HOG和草图标记的组合比单独的HOG产生了2.5 mAP点,而HSC比HOG提高了4 mAP点(*当与它们的私有DPM基线进行内部比较时——两者都使用了性能低于开源版本的DPM的非公共实现 *),这些方法分别获得了29.1%和34.3%的mAPs。

Network architectures(网络架构)

  • 本文中的大多数结果都使用了Krizhevsky等人的网络体系结构; 但是我们发现架构的选择对R-CNN检测性能有很大的影响
  • 在表3(见下)中,我们展示了VOC 2007测试的结果,该测试使用了Simonyan and Zisserman最近提出的16层深层网络:该网络在最近的ILSVRC 2014分类挑战中表现出色;该网络具有均匀的结构,由13层3 × 3卷积核组成,最大5个池化层散布其中,顶部有3个全连接的层。 我们称这个网络为OxfordNet 的“O-Net”,基线为TorontoNet的“T-Net”。
  • 为了在CM上使用开放网络,我们从Caffe Model Zoo下载了VGG ILSVRC 16 layers模型的公开可用的预训练网络权重;然后,我们使用与T-Net相同的协议对网络进行微调。唯一的区别是根据需要使用更小的微型电池(24个例子),以便安装在GPU内存中。
  • 表3(见下)中的结果显示,带有O-Net的RCNN显著优于带有T-Net的R-CNN,mAP从58.5%增加到66.0%。然而,在计算时间方面有一个相当大的缺点,O-Net的前向通过时间大约是T-Net的7倍
  • 图3:

Detection error analysis(检测误差分析)

  • 我们应用了Hoiem等人的优秀检测分析工具,以揭示我们方法的误差模式,了解微调如何改变它们,并查看我们的误差类型与DPM相比如何。
  • 分析见图5图6,如下:

    对物体特征的敏感度。每个图显示了六个不同对象特征(遮挡、截断、边界框区域、纵横比、视点、零件可见性)内最高和最低性能子集的平均(超类)归一化平均面积。**我们显示了我们的方法(R-CNN)在有和没有微调(FT)和包围盒回归(BB)以及DPM voc-release5的情况下的图。**总体而言,**微调不会降低灵敏度(最大值和最小值之间的差异),但会显著提高几乎所有特性的最高和最低性能子集。**这表明微调不仅仅是简单地提高纵横比和边界框区域的最低性能子集,因为人们可能会根据我们如何扭曲网络输入来推测。相反,微调提高了包括遮挡、截断、视点和零件可见性在内的所有特征的稳健性。


排名靠前的假阳性类型的分布:每个图都显示了FP类型的演变分布,因为更多的FP是按得分递减的顺序考虑的。每个FP分为4种类型中的1种: Loc—定位不良(poor localization)(IoU在0.1至0.5之间的正确类别重叠的检测,或重复检测);sim—与类似类别的混淆oth—与不同的对象类别混淆BG——背景开火的FP。与DPM相比,我们的错误更多地是由定位不良引起的,而不是与背景或其他对象类混淆,这表明CNN的特征比HOG更具歧视性。**松散的定位可能是由于我们使用了自下而上的区域建议和位置不变性,这些不变性是通过预先训练CNN进行全图像分类而获得的。**第三列显示了我们简单的边界框回归方法如何修复许多定位错误。

Bounding-box regression(包围盒回归)

基于误差分析,我们实现了一种减少定位误差的简单方法。受DPM中使用的包围盒回归的启发,我们训练一个线性回归模型来预测一个新的检测窗口,该窗口给出了选择性搜索区域建议的pool 5特征。附录C给出了全部细节。表1、表2和图5中(见下)的结果表明,这种简单的方法修复了大量的误定位检测,将mAP提高了3到4个点。
表1:

表2:

图5:

Qualitative results(定性结果)

ILSVRC2013的定性检测结果如图8和图9(见下)。每个图像都是从val2 set中随机采样的,并且显示了所有检测器的精度大于0.5的所有检测结果。请注意,这些都不是精心策划的,给人一种探测器运行的真实印象。图10和图11(见下)给出了更多的定性结果,但这些结果是经过策划的。我们选择每张图片是因为它包含有趣、令人惊讶或有趣的结果。这里,还显示了精度大于0.5的所有检测。
图8:

图9:

图10:

图11:


The ILSVRC2013 detection dataset

在上一节中,我们介绍了ILSVRC 2013检测数据集的结果。此数据集不如PASCAL VOC,我们需要选择如何使用它。因为这些决定不是无关紧要的,所以我们在这一节讨论它们。

Dataset overview(数据集概述)

  • ILSVRC2013检测数据集分为三组:训练(395,918)、val (20,121)和测试(40,152),其中每组中的图像数在括号中;val和测试拆分是从同一图像分布中绘制的。这些图像与PASCAL VOC图像场景相似,并且复杂程度相似(物体数量、杂乱程度、姿态可变性等)。val和测试分割都有详尽的注释,这意味着在每个图像中,所有200个类的所有实例都用边界框进行了标记。相比之下,训练集是从ILSVRC 2013分类图像分布中提取的。这些图像具有更多可变的复杂性,并且倾向于单个居中对象的图像。与val和test不同,火车图像(由于它们的数量很大)没有详尽的注释。在任何给定的列车图像中,来自200个类别的实例可以被标记,也可以不被标记。除了这些图像集,每个类都有一组额外的负像。手动检查负像,以验证它们不包含任何与其关联的类的实例。在这项工作中没有使用负像集。
  • 这些划分的性质为训练CNN提供了许多选择。训练图像不能用于hard negative mining,,因为注释不是穷举的。负面例子应该从哪里来?此外,列车图像具有不同于val和test的统计数据。**列车图像是否应该被使用,如果应该,使用到什么程度?**虽然我们还没有彻底评估大量的选择,但我们根据以前的经验提出了似乎是最明显的途径。
  • 我们的总体策略是严重依赖val集,并使用一些列车图像作为正面示例的辅助来源。为了将val用于训练和验证,我们将其分成大小大致相等的“val1”和“val2”集合。由于一些类在val中的例子很少(最小的只有31个,一半少于110个),所以产生一个近似类平衡的分区是很重要的。
  • 为此,生成了大量候选分割,并选择了具有最小最大相对8类不平衡的分割。每个候选分割都是通过使用类别计数作为特征对val图像进行聚类来生成的,然后进行随机局部搜索,这可能会改善分割的平衡。这里使用的特定分割具有大约11%的最大相对不平衡和4%的中间相对不平衡。

Region proposals(区域提案)

  • 我们遵循了PASCAL上用于检测的相同区域建议方法。在val1、val2和test中的每个图像上以“快速模式”运行选择性搜索(但不是在训练中的图像上).需要进行一个小的修改来处理选择性搜索不是比例不变的事实,因此产生的区域数量取决于图像分辨率。
  • ILSVRC图像的大小从非常小到几个百万像素不等,因此我们在运行选择性搜索之前将每个图像的大小调整到固定的宽度(500像素)。在val上,选择性搜索导致每幅图像平均有2403个区域建议,所有地面真实边界框的召回率为91.6%(0.5 IOu阈值)。这一召回率明显低于PASCAL的召回率,PASCAL的召回率约为98%,表明该地区提案阶段仍有很大的改进空间。

训练数据

  • 对于训练数据,我们形成了一组图像和盒子,其中包括来自val 1的所有选择性搜索和地面真实盒子,以及来自train的每个类多达N个地面真实盒子(如果一个类在train中具有少于N个地面真实盒子,那么我们将它们全部带走)。我们将这个图像和盒子的数据集称为val1+trainN。在消融研究中,我们在val2上显示了N∑{ 0,500,1000}的mAP
  • R-CNN上需要3个程序进行训练数据:
    1. CNN fine-tuning:CNN微调——CNN微调在val 1+Train上运行50k SGD迭代,使用与PASCAL完全相同的设置。使用Caffe在单个NVIDIA Tesla K20上进行微调需要13个小时。
    2. detector SVM training:探测器SVM训练——在SVM培训中,val1+trainN的所有基本事实框都被用作各自类的正面范例。对从val1中随机选择的5000个图像子集执行Hard negative mining。一项初步实验表明,**从所有val1中Hard negatives,与5000个图像子集(大约一半)相比,只导致mAP下降0.5个百分点,同时将SVM训练时间减半。**训练中没有负面的例子,因为注释不是详尽的没有使用额外的已验证负片。
    3. bounding-box regressor training:包围盒回归器训练——包围盒回归器在val1上训练。

Validation and evaluation(验证和评估)

  • 在向评估服务器提交结果之前,我们使用上述训练数据验证了数据使用选择以及微调和边界框回归对val2 set的影响。
  • 所有系统超参数(例如,SVM超参数、区域扭曲中使用的填充、NMS阈值、边界框回归超参数)都固定为与PASCAL相同的值。
  • 毫无疑问,对于ILSVRC来说,这些超参数选择中的一些是稍微次优的,但是这项工作的目标是在没有大量数据集调整的情况下,在ILSVRC上产生初步的R-CNN结果。在val2上选择了最佳选项后,我们向ILSVRC 2013评估服务器提交了两个结果文件。
    1. 没有边界框回归
    2. 有边界框回归
      对于这些提交,我们扩展了SVM回归器和包围盒回归器训练集,分别使用val+train 1和val。我们使用了在val 1+train 1上微调的CNN,以避免重新运行微调和特征计算。

Ablation study(消融研究)

表4(见下)显示了不同数量的训练数据、微调和边界框回归的消融效果研究。第一个观察结果:val2上的mAP与test上的mAP非常接近。这让我们相信val 2上的mAP是测试集性能的良好指标。**第一个结果是20.9%,这是R-CNN使用在ILSVRC 2012分类数据集上预先训练的CNN(没有微调)和在val1中获得的少量训练数据(回想一下val 1中一半的类有15到55个例子)实现的。**将训练集扩展到val 1+train N将性能提高到24.1%,N = 500和N = 1000之间基本没有差异。使用val 1中的例子对CNN进行微调,得到了26.5%的适度改善,但是由于少量的正面训练例子,可能存在显著的过度拟合。将微调集扩展到val1+train 1k,从训练集中每类增加到1000个正面例子,有很大帮助,将mAP提高到29.7%。包围盒回归将结果提高到31.0%,这是PASCAL中观察到的较小的相对增益
图4:

Relationship to OverFeat

在R-CNN与OverFeat间有一个有趣的联系:OverFeat可以(大致)看做是R-CNN的特例。

  • 如果要替换使用规则正方形区域的多尺度金字塔的选择性搜索区域建议并将每类包围盒回归器改为单个包围盒回归器,那么系统将非常相似(以训练方式的一些潜在显著差异的模:CNN检测微调、使用支持向量机等。).
  • 值得注意的是,OverFeat相对于R-CNN有一个显著的速度优势:根据引用自(OverFeat使用卷积网络的综合识别、定位和检测)的每幅图像2秒的数字,它大约快9倍。这种速度来自于这样一个事实,即OverFeat的滑动窗口(即区域建议)在图像级别没有扭曲,因此计算可以很容易地在重叠的窗口之间共享。共享是通过在任意大小的输入上以卷积方式运行整个网络来实现的。加速R-CNN应该可以通过多种方式,并作为未来的工作。

Semantic segmentation(语义分割)

  • 区域分类是语义分割的标准技术,允许我们轻松地将R-CNN应用于PASCAL VOC分割挑战。为了便于与当前领先的语义分割系统(称为“二阶池”的O2P)进行直接比较,我们在他们的开源框架内工作。O2P使用CPMC为每个图像生成150个区域建议,然后使用支持向量回归(SVR)为每个类别预测每个区域的质量。他们方法的高性能是由于CPMC区域的质量和多种特征类型的强大二阶汇集(丰富的SIFT和LBP变体)。我们还注意到Farabet等人最近使用CNN作为多尺度每像素分类器,在几个密集的场景标记数据集(不包括PASCAL)上展示了良好的结果。
  • 我们遵循并扩展PASCAL分段训练集,来包括Hariharan等人提供的额外注释。设计决策和超参数在VOC 2011验证集上进行了交叉验证。最终测试结果仅评估一次。

CNN features for segmentation(用于分割的CNN特征)

  • 我们评估了计算CPMC区域特征的三种策略,所有这些策略都是从将该区域周围的矩形窗口扭曲到227 × 227开始的。

    • 第一种策略(full)忽略区域的形状直接在扭曲的窗口上计算CNN特征,就像我们在检测时做的那样;然而,这些特征忽略了该区域的非矩形形状:两个区域可能有非常相似的边界框,但几乎没有重叠。
    • 第二个策略(fg)只在一个区域的前景蒙版上计算CNN特征。我们用均值输入替换背景,这样在均值相减后背景区域为零。
    • 第三个策略(full+fg)简单地连接了full和fg特性;我们的实验证实了它们的互补性。

Results on VOC 2011

  • 表5(见下)显示了我们与O2P相比的VOC 2011验证集的结果摘要。(完整的分类结果见附录E:见下)在每个特征计算策略中,层fc6总是优于fc7,下面的讨论涉及fc6特征。fg策略略优于full,表明掩蔽区域形状提供了更强的信号,符合我们的直觉。然而,full+fg实现了47.9%的平均准确率,我们的最佳结果相差4.2%(也适度优于O2P),这表明即使给定fg特征,完整特征提供的上下文也是高度信息性的。值得注意的是,在我们的full+fg特性上训练20个SVR需要一个小时,而在O2P特性上训练需要10个多小时。

  • 在表6(见下)中,我们展示了VOC 2011测试集的结果,将我们表现最好的方法fc6(full+fg)与两个强基线进行了比较。我们的方法实现了21个类别中的11个类别的最高分割精度,以及最高的47.9%的整体分割精度(在任何合理的误差范围内都可能与O2P结果相关联),更好的性能可能通过微调来实现。


Conclusion(结论)

  • 近年来,目标检测性能停滞不前。性能最好的系统是复杂集成,它将多个低层图像特征与来自对象检测器和场景分类器的高层上下文相结合。本文提出了一种简单且可扩展的目标检测算法,与PASCAL VOC 2012上的最佳结果相比,相对提高了30%。
  • 我们通过两种见解实现了这一业绩。
    • 首先是将大容量卷积神经网络应用于自下而上的区域建议,以便定位和分割对象。
    • 第二种是在标记训练数据稀缺的情况下训练大型CNNs的范式。我们表明,对于数据丰富的辅助任务(图像分类),在监督下对网络进行预训练,然后针对数据匮乏的目标任务(检测)对网络进行微调是非常有效的。我们推测**“有监督的预训练/特定领域的微调”范例对于各种缺乏数据的视觉问题非常有效**。
  • 我们最后指出,重要的是我们通过使用计算机视觉和深度学习(自底向上区域建议和卷积神经网络)的经典工具的组合来实现这些结果。两者不是对立的科学探究路线,而是自然的、不可避免的伙伴。

附录

A.Object proposal transformations

  • 这项工作中使用的卷积神经网络需要227 × 227像素的固定大小的输入。对于检测,我们考虑的目标建议是任意图像矩形。我们评估了两种将目标建议转换为有效CNN输入的方法。

    1. 第一种方法(“带上下文的最紧正方形”)将每个目标建议包含在最紧正方形内然后将包含在该方块中的图像缩放(各向同性)到CNN输入大小,图7列(B)显示了这个转换;这种方法的一个变体(“无上下文的最紧密正方形”)排除了原始对象建议周围的图像内容,图7的列©显示了这个转换。
    2. 第二种方法(“扭曲”)各向异性地将每个目标建议缩放到CNN输入大小。图7(D)列显示了扭曲变换。

图7:

  • 对于这些转换中的每一个,我们还考虑原始目标建议的周围包括附加的图像上下文上下文填充量§被定义为在变换的输入坐标帧中原始对象提议周围的边界大小。图7(见上)显示每个示例的顶行中p = 0像素,底行中p = 16像素。在所有方法中,如果源矩形延伸到图像之外,丢失的数据用图像平均值替换(然后在将图像输入CNN之前减去该平均值)。一组试验表明,带有背景填充的扭曲(p = 16像素)比替代方案的表现要好得多(3-5个mAP点)。显然,更多的选择是可能的,包括使用复制而不是平均填充。对这些备选方案的详尽评估留待未来工作进行。

B. Positive vs. negative examples and softmax

  • 两种设计选择值得进一步讨论。
  • 首先是:为什么微调CNN和训练目标检测支持向量机的正负例子定义不同?简要回顾一下定义,为了进行微调,我们将每个目标建议映射到它具有最大IoU重叠(如果有的话)的基本事实实例,如果IoU至少为0.5,则将其标记为匹配的基本事实类的正数。所有其他建议都标有“背景”(即所有课程的负面例子)。相比之下,对于训练支持向量机,我们只将基本真值框作为其各自类别的正面例子,并将与一个类别的所有实例重叠小于0.3 IoU的建议标记为该类别的负面例子。属于灰色地带(超过0.3 IoU重叠,但不是基本事实)的建议被忽略。
  • 从历史上来说,我们之所以得出这些定义,是因为我们是从训练支持向量机开始的,这些支持向量机是由预先训练好的CNN的ImageNet中计算出来的,所以在那个时候微调不是一个考虑因素。在那个设置中,我们发现我们训练SVMs的特定标签定义在我们评估的选项集合中是最优的(包括我们现在用于微调的设置)。当我们开始使用微调时,我们最初使用与SVM训练相同的正面和负面示例定义。然而,我们发现结果比用我们目前对积极和消极的定义得到的结果要差得多。
  • 我们的假设是,积极因素和消极因素在定义上的差异并不重要,这是因为微调数据是有限的。我们当前的方案引入了许多“抖动”的例子(那些重叠在0.5和1之间的建议,但不是基本事实),这将正面例子的数量扩大了大约30倍。我们推测,在微调整个网络以避免过度拟合时,需要这个大集合。然而,我们也注意到使用这些抖动的例子可能是次优的,因为网络没有被微调以精确定位
  • 这就引出了第二个问题:为什么微调之后,还要训练SVM呢?简单地应用微调网络的最后一层(21路softmax回归分类器)作为目标检测器会更干净。我们尝试了这一点,发现VOC 2007的性能从54.2%下降到50.9% mAP。这种性能下降可能是由几个因素的组合引起的,包括微调中使用的正面示例的定义不强调精确定位,以及softmax分类器是在随机采样的负面示例上而不是在用于SVM训练的“hard negatives”子集上训练的
  • 该结果表明,在微调后,无需训练支持向量机,就有可能获得接近相同水平的性能。我们推测,通过一些额外的微调剩余的性能差距可能会缩小。如果是真的,这将简化和加快CNN的训练,而不会损失检测性能。

C. Bounding-box regression(包围盒回归)

  • 我们使用简单的包围盒回归阶段来提高本地化性能。在用特定类别检测SVM对每个选择性搜索建议评分后,我们使用特定类别包围盒回归器预测新的检测边界框。这在精神上类似于可变形零件模型中使用的包围盒回归。这两种方法之间的主要区别是,这里我们从CNN计算的特征回归,而不是从推断的DPM零件位置计算的几何特征回归。
  • 我们训练算法的输入是一组N个训练对{(Pi,Gi)}i=1,…,N,其中Pi= (Pi x,Pi y,Pi w,Pi h)指定建议Pi边框中心的像素坐标以及Pi的宽度和高度(以像素为单位)。因此,除非需要,否则我们放弃上标i。每一个真实边界框都是以同样的方式指定的:G = (Gx,Gy,Gw,Gh)。我们的目标是学习一种转换,将一个建议的boxP映射到一个基本事实框G
  • 我们用四个函数dx§、dy§、dw§和dh§来参数化转换。**前两个指定了P的边界框的中心的比例不变平移,而后两个指定了P的边界框的宽度和高度的对数空间平移。**在学习了这些函数之后,我们可以通过应用变换将输入建议 P转换成预测的基本事实框 G:
  • 每个函数d*§(是x,y,h,w中的一个)被建模为建议 P的pool 5特征的线性函数,由φ5§表示。(隐含假设φ5§对图像数据的依赖性。)于是我们有了d§ = wTφ5§,其中w是可学习模型参数的向量。我们学w*通过优化正则化最小二乘目标(岭回归):

  • 回归目标是t*对于训练对(P,G),定义为

    作为一个标准的正则化最小二乘问题,这可以在封闭形式下有效地解决。
  • 实现包围盒回归时,我们发现了两个微妙的问题:
    1. 正则化很重要:我们基于一个验证集设置λ = 1000
    2. 在选择使用哪些训练对(P,G)时必须小心
      直觉上,如果P远离所有的基本事实框,那么把P转化为基本事实框G的任务就没有意义。使用像P这样的例子会导致一个无望的学习问题。因此,我们只能从一个建议P中了解到,如果它至少在一个基本事实框附近,当且仅当重叠大于阈值(我们使用验证集将其设置为0.6)时,我们通过将P分配给与它有最大IoU重叠(在它重叠超过一个的情况下)的基本真值框G来实现“接近”。所有未分配的建议都将被丢弃。我们为每个对象类做一次,以便学习一组特定于类的边界框回归器。
  • 在测试时,我们对每个建议进行评分,并且只预测一次它的新检测窗口。原则上,我们可以重复这个过程(即,对新预测的边界框重新评分,然后从中预测一个新的边界框,以此类推)。然而,我们发现迭代并不能提高结果。

D. Additional feature visualizations(D.附加功能可视化)

图12(见下)显示了20个pool5单元的附加可视化。对于每个单元,我们显示了24个区域建议,在VOC 2007测试的大约1000万个区域中,最大限度地激活了该单元我们根据每个单元在6 × 6 × 256维pool 5要素图中的(y,x,channel)位置来标记每个单元。在每个通道中,CNN计算输入区域的完全相同的函数,其中(y,x)位置仅改变感受野。

E. Per-category segmentation results(每个类别的细分结果)

在表7(见下)中,除了O2P方法之外,我们还显示了我们六种细分方法中每一种的VOC 2011 val的分类细分精度。这些结果显示了20个PASCAL类和背景类中哪个方法最强。

F. Analysis of cross-dataset redundancy(跨数据集冗余分析)

  • 在辅助数据集上训练时,一个问题是它和测试集之间可能存在冗余。尽管目标检测和整幅图像分类的任务有很大不同,使得这种交叉集冗余不那么令人担忧,但我们仍然进行了一项彻底的研究,量化了PASCAL测试图像在ILSVRC 2012训练和验证集内的包含程度
  • 我们对重复(和接近重复)的图像进行了两次检查
    • 第一个测试基于flickr图像标识的精确匹配,这些标识包含在VOC 2007测试注释中(这些标识有意为后续PASCAL测试集保密)。所有的PASCAL图像,以及大约一半的ILSVRC,都是从flickr.com收集的。这次检查在4952个匹配中找到了31个(0.63%)。
    • 第二次检查使用GIST 描述符匹配,在大型(> 100万)图像集合中,它在接近重复的图像检测方面具有出色的性能。我们在所有ILSVRC 2012 trainval和PASCAL 2007测试图像的扭曲32 × 32像素版本上计算了GIST描述符。
  • GIST描述符的欧氏距离最近邻匹配显示了38幅近似重复的图像(包括通过flickr ID匹配发现的所有31幅图像)。这些匹配往往在JPEG压缩级别和分辨率上略有不同,在较小程度上是裁剪。这些发现表明重叠很小,不到1%。对于VOC 2012,因为flickr IDs不可用,所以我们只使用了GIST匹配法。根据GIST匹配,1.5%的VOC 2012测试图像位于ILSVRC 2012 训练区域。VOC 2012的比率略高,这可能是因为这两个数据集在时间上比 VOC 2007和ILSVRC 2012收集的数据更接近

补充说明

1.PASCAL VOC dataset

  • 简介:PASCAL VOC为图像识别和分类提供了一整套标准化的数据集,用来构建和评估用于图像分类(Classification),目标检测(Object Detection)和分割(Segmentation)的算法
  • 内容:ASCAL VOC 2012总共包括了4大类20小类物体,train和val中有11530张图片,共有27450个目标检测标签和6929个分割标签,具体分类见下图:
  • 性能的评估标准:mAP(mean average precision)

2.SVM(Support Vector Machine)【支持向量机】

SVM 是有监督的学习模型:可以进行模式识别、分类以及回归分析

R-CNN论文阅读笔记相关推荐

  1. keras cnn注意力机制_2019 SSA-CNN(自注意力机制)目标检测算法论文阅读笔记

    背景 <SSA-CNN Semantic Self-Attention CNN for Pedestrian Detection>是2019 的工作,其作者来自于南洋理工.这篇文章主要是做 ...

  2. DnCNN论文阅读笔记【MATLAB】

    DnCNN论文阅读笔记 论文信息: 论文代码:https://github.com/cszn/DnCNN Abstract 提出网络:DnCNNs 关键技术: Residual learning an ...

  3. DGP 论文阅读笔记

    DGP 论文阅读笔记 论文题目:Exploiting Deep Generative Prior for Versatile Image Restoration and Manipulation Ex ...

  4. 论文阅读笔记:Improving Attacks on Speck32 / 64 using Deep Learning

    论文阅读笔记:Improving Attacks on Speck32 / 64 using Deep Learning 本文通过神经网络利用了减少轮数的 Speck 的差分性质.为此,作者对神经网络 ...

  5. 【SOD论文阅读笔记】Visual Saliency Transformer

    [SOD论文阅读笔记]Visual Saliency Transformer 一.摘要 Motivation: Method: Experimental results 二.Introduction ...

  6. Small Object Detection using Context and Attention(论文阅读笔记)

    Small Object Detection using Context and Attention 论文阅读笔记 出处:2021 International Conference on Artifi ...

  7. [论文阅读笔记53]2021深度神经方法的关系三元组抽取综述

    1. 题目 Deep Neural Approaches to Relation Triplets Extraction: A Comprehensive Survey Tapas Nayak†, N ...

  8. 论文阅读笔记——A deep tree-based model for software defect prediction

    本论文相关内容 论文下载地址--Web Of Science 论文中文翻译--A deep tree-based model for software defect prediction 论文阅读笔记 ...

  9. 语音情感识别领域-论文阅读笔记1:融合语音和文字的句段级别情感识别技术

    语音情感识别领域-论文阅读笔记1 Fusion Techniques for Utterance-Level Emotion Recognition Combining Speech and Tran ...

  10. 论文阅读笔记:《Hyperspectral image classification via a random patches network》(ISPRSjprs2018)

    论文阅读笔记:<Hyperspectral image classification via a random patches network>(ISPRSjprs2018) 论文下载地址 ...

最新文章

  1. 计算机应届生必读的 AI 入门经典书单
  2. 中国科大潘建伟团队量子网络研究获重要进展
  3. 通俗讲解 RESTful
  4. Scala入门示例反编译分析代码执行流程
  5. python 清空文件夹_Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”...
  6. java 十进制转十六进制、十进制转二进制、二进制转十进制、二进制转十六进制...
  7. 微型CRM SaaS应用HubSpot的一些使用截图
  8. 如何开发一个学生成绩管理糸统(9)
  9. 将检索出来的列按逗号拼接起来
  10. 如何测试web服务器性能,如何执行Web服务器性能基准测试?
  11. python paramiko 模块简介(SSH2协议)
  12. 机器学习相关的一些术语
  13. 吊打面试官 | Java到底是值传递还是引用传递
  14. 树枝学术 | 论文翻译全攻略
  15. UL电子线标准规格说明书
  16. python学习笔记(6)
  17. 笔记本重装win7旗舰版原版操作系统
  18. Callnovo全球联络中心云通讯CRM平台系列(一)
  19. SSD网络接口介绍(包含完整代码)
  20. MyBatis批量的增删改查操作

热门文章

  1. C语言之函数调用06—彩球排列
  2. Android一个界面实现标准体重计算器
  3. 使用VScode写Python最后一行出现黄色下划线问题
  4. 带SN切换流程_SN异常释放率KPI优化指导书
  5. linux纳秒级时间同步,可实现纳秒级精度的时间同步设计参考
  6. 读书笔记:人居环境科学导论(吴良镛 著)
  7. 一款简易低成本智能割草机制作——嵌入式功能实现篇
  8. 从“互联网+教育”到“教育+互联网”——互联网文化基因视域下的审思
  9. 清华大学成功卫冕ASC18世界超算总决赛冠军,黑马上海科大斩获AI大奖
  10. 双快门锁教程_双快功能的锁体的制作方法