TrafficQA: A Question Answering Benchmark and an Efficient Network forVideo Reasoning over Traffic Events

动机
  1. 视频中的交通事件认知与推理是一项非常重要的任务,在智能交通、辅助驾驶、自动驾驶等领域有着广泛的应用。
  2. 设计良好的数据集对于开发、适应和评价不同的数据驱动的方法往往是至关重要的。
  3. 有了数据集后,需要通过任务探索交通事件推理过程中复杂的因果结构。不同任务分别对应于不同的交通场景,以评估不同类型复杂而实用的交通事件的推理能力。
  4. 在交通场景下的视频事件推理中,推理的准确性和运算的效率都是非常重要的。现有的视频QA方法主要侧重于提高推理的准确性,而不注重效率。
  5. 考虑到经常有很大的冗余在视频帧之间,通过动态推理,作者的网络自适应地确定每一步跳过和掠过的位置,以及需要为glimpsed帧分配什么计算粒度。
简介

本文基于收集到的10080个现场视频和62535个问答对,创建了一个新的数据集TrafficQA(Traffic Question Answering),该数据集采用视频问答的形式,用于测试复杂交通场景下的因果推理和事件理解模型的认知能力。具体地,作者提出了6个具有挑战性的推理任务,分别对应于不同的交通场景,以评估不同类型复杂而实用的交通事件的推理能力。此外,作者还提出了一种新的基于动态推理的Efficient glimpse network,即Eclipse,以实现计算效率高且可靠的视频推理。实验表明,该方法在显着降低计算量的同时,取得了较好的性能。

Task

提出6个具有挑战性的交通相关推理任务:

  1. Basic understanding。该任务由feature-query(如车辆类型、道路状况和环境描述)、event-query(如事故发生、行人行为分析和事件时间关系)、event classification(如事故类型)和counting(如road-agent 数)等多个子任务组成,在基本层次上评价模型感知和理解交通场景的能力。
  2. Event forecasting。这个任务需要一个模型来根据观察到的视频推断未来的事件,预测问题查询关于当前情况的结果。
  3. Reverse reasoning。此任务是询问视频片段开始前发生的事件。
  4. Counterfactual inference。本任务询问某些假设的结果(例如,what if the blue sedan had not accelerated?(如果蓝色轿车没有加速怎么办?))。假设的条件并没有发生在视频中,因此模型需要在指定的条件下对想象的事件进行推理。
  5. Introspection。这项任务是测试模型是否能够提供预防建议(例如,what could the pedestrian have done to avoid the collision with the car?(行人能做些什么来避免与汽车相撞?))。候选的答案列出了本可以采取的措施,以避免交通事故或拥堵。
  6. Attribution。本任务寻求关于交通事件的原因的解释(例如,what are the reasons of the rear-end crash?(追尾碰撞的原因是什么?)),以检验模型是否能够推断导致该事件的潜在因素。

Dataset

TrafficQA数据集包含62,535个QA对和10,080个交通场景视频。

与现有视频QA数据集不同的是,TrafficQA关注的是野外复杂交通场景的推理,其中基于不同的真实交通视频介绍了6个具有挑战性的交通事件推理任务。

Videos。作者采用线上采集和线下捕捉相结合的方式收集视频,以覆盖各种真实的交通场景。在网络视频采集方面,基于不同国家的各种视频分享平台,包括但不限于YouTube、LiveLeak、Twitter、BiliBili等来增加视频采集的多样性。因此,从这些在线来源收集了九千多个视频。至于离线视频捕捉,一组视频是由志愿者通过手持摄像机拍摄的,另一组是从车载视频录像机获取的。然后对这两组离线视频进行检查,并将其剪辑成大约一千个视频片段。

通过对线上视频和线下视频的梳理,作者共获得了10,080个视频,包含了不同方面的差异,包括:a)不同的天气(晴天/雨天/刮风/下雪);b)不同的时间(白天/夜晚);c)不同的道路情况(拥堵/稀疏,城市道路/乡村道路);d)不同的交通事件(事故、车辆转弯、行人行为、红绿灯等);e)不同的视频视角(监控摄像头视角/车载视频视角/手持摄像头视角);f)不同的片段长度(从1秒到70秒)。

QA对。首先,向标注员解释了这6项任务。为了确保他们充分理解任务的设计原则,为他们准备了多个示例问题,以确定问题属于哪一个任务。之后,每一个标注员都提供了一批视频文件夹,每个文件夹包含100个剪辑,这些剪辑是从完整的视频集中随机选择的。标注员被要求为每部视频设计至少3个关于推理任务的问题。作者没有对问题格式施加限制,以鼓励标注员保持他们的QA对多样化。具体地说,作者鼓励他们重新表述相似的问题或候选答案,以推动模型学习QA对的底层语义,而不是表面的语言相关性。为了确保QA对的质量,作者每周对QA标注进行交叉检查。此外,作者不断监控QA集合中不同任务的分布,以保持作者数据集的平衡和多样性。

在图2中作者展示了作者的TrafficQA数据集的统计数据。图2(a)显示了由单词数测量的问题长度分布。问题平均长度为8.6字。图2(b)显示了根据起始词分类的各种问题类型,这暗示了作者数据集中问题的多样性。图2©是根据推理任务划分的问题。作者的数据集涵盖了广泛的交通相关推理任务,需要视频中各种层次的时空理解和因果推理。

Eclipse

在处理视频推理时,一种常用的解决方案是观看完整的视频并仔细分析整个事件信息。以这种方式,通常可以在整个视频上应用固定的计算架构以解决每个问题。然而,使用固定的网络架构来处理视频QA任务通常是计算量大且消耗能量的,因为用于推理的视频序列可能很长并且包含大量的帧供处理。

回顾一下,作为人类,为了分析一个视频中的事件,作者可能没有足够的耐心去仔细检查整个视频中的帧,相反,可能采用一种自适应的信息“foraging”策略。具体来说,作者可以使用一种“动态”推理方式,在序列上来回跳过,根据任务逐步推断和选择一些有用的帧。此外,对于挑选出来的帧,作者可以仔细地检查其中的几个帧,同时检查其他帧。这样一种动态的、自适应的感知习惯使作者从全神贯注地观看整个视频中解脱出来,并且常常能够在很小的帧数下快速而又非常准确地进行视频推理。这样的动态推理方案避免了对视频中不相关片段的特征提取,从而显著降低了实现可靠和高效推理的总体计算成本。值得注意的是,选择一个glimpse帧的确定和每个glimpse的计算粒度的决定本质上都是离散的操作,对优化来说不是琐碎的。为了解决这个问题,本文还引入了一个有效的联合Gumbel-Softmax机制,使Eclipse框架具有完全的差异性和端到端的可训练性。

本文首次提出了一种新的动态推理过程,第一个对视频QA进行动态推理和自适应计算调整的模型,它利用一个有效的glimpse策略,以文本和视觉上下文信息为指导,用于glimpse帧的选择和计算粒度的确定。以实现可靠、高效的因果推理和视频QA。本文还引入了联合Gumbel-Softmax操作来联合优化这两个决策。

与现有的视频问答方法不同的是,作者的Eclipse模型研究了学习一个有效的glimpse策略的方向,用于自适应推理,以实现具有计算效率的重复推理。

如图3所示。作者的网络不是在每个视频和问题上使用固定的计算架构,而是学会在每个推理步骤中动态跳到并选择一个有用的视频帧。此外,作者的网络自适应地决定所选帧的特征计算粒度(即粗或细)。为了实现这一过程,在每一个推理步骤中,作者的网络利用包括QA对、当前选择的帧和历史线索在内的指导信息进行动态推理。

如图3所示,在作者的网络中,为了为交互模块提供QA信息,QA库存储QA对的表示。在每个推理步骤中,为了辅助选择帧和相应特征粒度的动态推理,交互模块利用QA信息、当前选择的帧和来自以往观察到的帧的信息导出一个表达表示,然后作为下游模块执行的动态推理过程的输入,包括用于输出推理结果的预测模块和用于动态确定下一步要观察到的帧的 Glimpse-Determination Module。另一方面,退出策略模块也利用该表示自适应地决定在当前推理步骤是否可以退出推理过程。通过这种动态的、循环的推理过程,作者的网络能够以显著的计算效率得到可靠的关于在帧的使用和特征的计算量两个方面的答案预测。

网络模块如下:

  1. QA Bank。为了提供QA信息作为动态推理的指导,作者的QA库通过一个双向LSTM对问题的表征进行编码。通过拼接BiLSTM的隐藏状态,问题表示可以表示为HqRnq×2d,其中nq是问题中的单词数,d是LSTM隐藏状态的尺寸。同样,作者将所有候选答案编码为{Hai}i=1N,其中HaiRnai×2d,N是候选答案的个数,nai是答案ai中的单词数。
  2. Interaction Module。为了以丰富的引导信息辅助后续的动态推理,作者设计了一个Interaction Module融合不同类型的可用输入。该模块由一个上下文查询子模块和一个交互LSTM组成,与从包含T帧的完整视频序列中选择的少量帧进行循环交互。如图3所示,在每个推理步骤t,该模块融合QA信息(Hq和{Hai})、当前选择的帧(It)和历史线索(ht-1)以生成一个表达式(ht)用于动态推理。更正式地说,在第tth推断步骤,首先将文本QA信息(Hq和{Hai})和当前选定的视觉帧特征(I)做融合,作者使用上下文查询(context-query)子模块来执行这样的融合过程。该子模块是在上下文匹配模块的基础上实现的,它能有效地将视觉特征序列和文本序列融合在一起,生成一个组合表示。由于原始方法是将一系列视觉特征作为一个输入,而作者这里只有被选择的帧特征It,因此作者将It作为一个包含单个元素的视觉特征序列来处理。为了简单起见,作者用vt来表示拼接起来的所有融合结果,输出vt,包含当前选定的帧和QA嵌入的信息,可以被馈送到后续的交互LSTM中(除了融合QA信息和当前选择的帧(It)外,作者还结合了过去推理步骤中的历史线索来指导当前推理步骤的动态推理。因此,作者设计了一个交互LSTM,它以vt作为新的输入,与历史线索ht-1交互),以进行更多的信息交互。
  3. Prediction Module。该模块用于在当前推理步骤t中生成推理结果(即可以得到的答案的概率分布)。该模块计算推理结果为:pt=fp(htp),其中ptRN代表所有候选答案的概率分数。Fp可以用一个全连接(FC)层和一个Softmax分类器来实现。
  4. Glimpse-Determination Module。在每个推理步骤t处,该模块以ht为条件,通过同时做出两个决策来进行动态推理。第一个决策是选择下一步要观察的帧,第二个决策是决定对所选帧计算细粒度特征还是粗粒度特征。针对这两个决策,作者设计了该模块中的两个分支。skip-policy分支通过以下过程选择作者需要在下一个推断步骤跳转到的帧:st=fs(hts),其中输出st表示下一帧位置的决定。注意,作者的网络可以来回跳过整个视频序列,这实际上类似于人类的推理过程,作者不仅需要向前跳去寻找未来的信息帧,还需要返回去检查过去的信息。该模块除了确定下一帧外,还有一个粒度策略分支,自适应地确定下一帧的特性计算粒度,其公式为:gt=fg(htg)。输出gt表示特征粒度的决定。在作者的实现中,作者提供了两种特征粒度可供选择,即由轻量级CNN计算的粗粒特征和由更有代表性但计算量更大的CNN计算的细粒特征。在Glimpse-Determination 模块中,fs和fg都通过FC层来实现。
  5. Exit-Policy Module。为了估计何时可以退出推理过程以实现自适应推理,设计了Exit-Policy Module。在每个推断步骤中,该模块根据引导信息(ht)决定是否可以退出当前步骤的推理过程,引导信息为:et=fe(hte),其中输出et表示当前步骤终止推理的置信度分数。通过对Exit-Policy的训练,作者的网络可以实现自适应的推理,使得每个视频只选择少量灵活的帧数,并基于一个per-video进行计算,从而得到可靠的推理结果。
  6. Optimization。为了优化作者网络中的上述模块,作者引入了几个损失函数。具体地说,在每个推断步骤t处,一个交叉熵损失Lpredt是被用来训练预测模块的分类器。对于Glimpse-Determination模块,为了推动skip-policy分支在每个推断步骤中选择一个有用的帧,使用了一个简单但有效的损失:Lincret=−(mt−mt−1)(公式4),其中mt=ptgt−max{ptc’|c’≠gt}为正确答案的预测概率(通过gt索引)和其他候选答案的最大概率之间的的间距。可以简单地推断,较大的mt表示更有信心和更准确的推理。因此,作者在推理步骤使用mt−mt−1来激励间距以保持增长。在推理步骤,在每一步,作者的目标是选择一个有用的帧,以利于作者的动态推理,考虑到当看到所选择的帧时,作者的网络对正确答案的置信度增加。同时,为了进一步节省计算成本,避免粒度策略分支的不断使用计算量大的细粒特征,在每个推理步骤t计算细粒特征时,作者惩罚特征粒度策略如下:Lfeatt=gt。其中gt=1表示策略选择为下一步提取计算量大的细粒特征,而gt=0表示策略切换到为下一步提取计算量小的粗粒特征。为了优化作者的整个Glimpse-Determination模块,作者结合了以上两个损失函数,变成合并损失。最后,如果在当前的推理步骤中能够退出推理过程,则需要训练Exit-Policy,使其能够做出可靠的决策。然而,对于作者的网络何时可以退出推理,并没有提供反馈的真实标签。因此,作者利用mt生成动态标签来训练Exit-Policy。mt是每一步正确答案与其他候选答案中最大答案之间的概率间距,以及mt在公式4的约束下保持增长。因此,介于在不同推论的mt之间的间距可以被用来评估在动态推理过程中看到更多帧的信息增长。给定预定义的最大推理步骤T,通过持续更新直到结束,mt(当前步骤)和mT(最后之间的间隙步骤的)可以评估剩余信息增长的价值。因此,可以使用该间距来确定作者的网络是否能在第tth步停止推断。当mt(当前步骤)和mT(最后之间的间隙步骤的)非常接近,这意味着观察通过更多帧,信息增长很小,因此在不降低预测精度的前提下,提前减少计算量,作者可以退出推理。特别地,在每个步骤t处,如果mT- mt<µ(mT -m1),这意味着mt接近mT,即估计的剩余信息增长足够小,作者设置标签yexitt为1,表明作者的模型可以在第tth个推理步骤退出推理。否则,标签被设置为0,表示作者需要寻找更多的帧。此处µ>0控制当网络退出推理时mt应该接近mT的程度。在评估的标签yexitt的条件下,训练Exit-Policy可以看作是一个二分类问题。因此,作者通过最小化一个二进制交叉熵损失来训练这个模块。由于动态推理中涉及到的帧选择和特征粒度的确定是离散的,并且从离散分布中采样使得网络不可微,因此不能直接用梯度下降进行优化。为了解决这个问题,作者引入了一个有效的联合Gumbel-Softmax运算。
  7. Joint Gumbel Softmax。原始的Gumbel-Softmax采样是一种有效的方法,可以转换出自一个离散分布的原始的非可微样本到出自一个对应Gumbel-Softmax分布的一个可微的决策。在任务中,为了同时对上述两个离散分布(即选择帧和确定粒度)进行采样,作者在这里设计了一个有效的联合Gumbel-Softmax操作。特别地,在Glimpse-Determination模块中,在每个步骤t,作者首先通过将隐藏状态ht反馈到一个全连接层来导出logits z ∈RT*2。然后作者用Softmax得到一个z的分类分布。输出lt包含两个决策的输出:lt的第一维表示选择帧的决策(即skip-policy分支的输出st)和lt的第二维表示选择帧的特征粒度的决策(即粒度策略分支的输出gt)。通过使用联合Gumbel-Softmax运算的输出(st和gt),作者的网络能够动态地为下一个推理步骤选择帧,并在每个步骤为所选帧指定特征粒度。因此,通过引入联合Gumbel-Softmax,作者的网络可以以完全可微的方式联合学习两个离散的决策。
  8. Training and testing。在训练过程中,作者在一个固定的步骤数内优化作者的网络,这意味着Exit-Policy和其他模块一起训练,而退出决策不被使用。然而,在测试阶段,如果Exit-Policy决定在第tth推理步骤停止推理,则退出模型并使用当前预测结果pt作为最终推理结果。通过这种方式,作者的模型实现了动态的因果推理。
实验

考虑到每个问题的候选答案的数量在作者的数据集中不是固定的,作者使用二进制和多选设置来评估作者的网络的性能。在二进制情况下(表示为Setting-1/2),对模型的输入是一个带有答案的问题,模型需要预测这个答案的正确性。在多选设置中(表示为Setting-1/4),模型期望从4个候选答案(即其中3个不正确)中选出正确答案。这两个实验设置可以被处理为二元和四类分类问题。

实现细节

作者从一个预训练的ResNet-101模型的倒数第二层计算特征作为细粒度帧特征,而一个预训练的Mo-BilenetV2作为轻量级CNN来提取粗粒度特征。在QA库中,作者使用Glove对QA文本进行嵌入处理,然后使用一个150维的BiLSTM隐藏状态来编码文本序列。对于交互LSTM,隐藏状态的维数为300。作者使用Pytorch实现了该框架,并采用了Adam学习率为3e-4,重量衰减为1e-5。Exit-Policy中的µ,在损失函数中设为0.1,在损失函数中设为0.01。设置初始 temperature为5,并以一个-0.045的指数衰减因子逐渐anneal。根据评估统计,对于每个测试视频,作者的网络在Nvidia RTX 2080TI GPU上显示了一个非常快的16ms的推断速度。

将作者的网络与以下基线进行比较。

Text-only models。这些模型只依赖于文本信息而没有视觉输入,在作者的交通中是用来评估语言偏见的相对薄弱的基线。Qtype (random)从答案空间中随机选择一个答案。QE-LSTM使用Glove嵌入输入的问题,然后用LSTM进行编码。最后的LSTM隐藏状态被传递给MLP,用于预测正确答案。与只使用问题的QE-LSTM不同,QA-LSTM使用LSTM对问题嵌入和答案嵌入进行编码,最后的隐藏状态用于预测答案。

Text+video models。作者评估以下同时需要视频和文本输入的模型。VIS+LSTM使用LSTM对图像表示和文本特征进行编码。由于原始方法以单个图像作为输入,作者通过对视频中所有采样帧的特征进行平均作为视觉输入来改进该方法。Avgpooling使用具有编码QA特征的每个帧来计算每个帧的预测。然后作者对所有帧预测执行均值池,以获得最终结果。CNN+LSTM使用两个LSTM分别对视频序列和QA文本进行编码。最后的两个隐藏状态被连接以预测正确的答案。I3D+LSTM利用I3D网络提取视频运动特征,再与LSTM编码的QA文本特征融合,计算模型预测。TVQA是一个多流网络,融合来自不同模式的输入特征来回答问题。HCRN采用一种高效的条件关系网络对视频推理结构进行建模。BERT-VQA利用BERT对视觉信息和语言信息进行联合编码来预测答案。

实验结果与分析

表2中的结果显示了TrafficQA中最小的语言偏差,因为纯文本基线与随机选择基本相同。相比之下,使用视频输入的模型比仅使用文本的基线获得明显更高的精度。这表明,为了解决作者的数据集中的推理任务,模型需要将视觉内容与语言线索关联起来,从而推断出正确的答案。为了公平地比较计算效率,作者选择需要视频输入的模型来计算每个视频的GFLOPs,因为视觉特征提取消耗大量的计算预算,并且GFLOPs的度量与硬件配置无关。结果表明,Eclipse实现了现有的推理精度,并显著提高了计算效率。与传统的视频问答方法相比,该模型通过动态因果推理,有效地利用了视频事件的时空和逻辑结构,以较小的帧用量和有效的特征计算量得到了正确的答案。另外,作者还邀请了三位没有看过视频和问题的志愿者来选择正确的答案,作者用平均预测准确率作为Human表现。神经网络与人类性能之间的差异表明了作者的数据集的挑战性和在视频推理领域进一步研究的必要性。

消融研究

如表3所示,与仅使用细粒度特征的模型变体相比,通过采用粒度策略在每一步自适应地决定所选帧的特征粒度,作者的网络达到了几乎相同的精度,但使用了较低的计算成本。该网络的推理精度也明显高于只使用粗粒度特征的方法。这些结果表明了作者的粒度策略的有效性,它为最有用的帧选择了细粒度特征,为不太重要的帧选择了粗粒度特征。此外,作者去掉了skip-policy,并在每一步简单地统一采样帧。如表4所示,作者的Eclipse以较小的计算成本取得了最好的性能。这表明作者的skip-policy通过动态地选择有用的帧来有效地降低了计算成本。此外,作者给出了作者网络前三个推理步骤的帧位置分布,如图5所示,作者的网络按照作者的预期为不同的视频动态地选择帧。作者还研究了Exit-Policy模块,并将其与推理方法进行了比较,直到最后的推理步骤。表5的结果表明,通过自适应推理,作者的模型达到了最佳的精度与计算比。在图4中,作者进一步展示了数据集中的一个定性示例,以展示Eclipse如何执行动态和高效的推理。

小结

创建了一个新的视频QA数据集TrafficQA,重点研究交通事件的视频推理。在作者的数据集中,作者介绍了6个需要各种层次因果推理的推理任务。此外,作者还提出了Eclipse视频问答网络。通过学习动态的glimpse策略和自适应的Exit-Policy,作者的网络获得了优异的性能和显著的计算效率。

CVPR 2021 TrafficQA相关推荐

  1. CVPR 2021 论文和开源项目合集(Papers with Code)

    摘自:https://github.com/amusi/CVPR2021-Papers-with-Code CVPR 2021 论文和开源项目合集 CVPR 2021 论文和开源项目合集(Papers ...

  2. CVPR 2021论文分享会日程公布!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale学术 活动:CVPR 2021论文分享会 随着人工智能的火热,AAAI.Neu ...

  3. CVPR 2021:记一次神奇的 Rebuttal 经历

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨信息门下遛狗@知乎(已授权) 来源丨https://zhuan ...

  4. 视频也能P!谷歌CVPR 2021最新视频P图模型omnimatte

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:Google AI .新智元 [导读]你是否还在受视频P图不能 ...

  5. 自监督学习新思路!基于蒸馏损失的自监督学习算法 | CVPR 2021

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 AI 科技评论报道 编辑 | 陈大鑫 AI 科技评论 今天给大家介绍 ...

  6. 66篇论文入选CVPR 2021,商汤的秘籍竟是“大力出奇迹”

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI CVer ...

  7. CVPR 2021 | MI-AOD: 少量样本实现高检测性能

    ‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨敛渔杭柠@知乎(已授权) 来源丨 ...

  8. 行人搜索也可以Anchor-Free?这篇CVPR 2021论文给出了答案

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨秦杰,晏轶超,李金鹏 来源丨AI科技评论 编辑丨极市平台 导读 ...

  9. CVPR 2021|一个绝妙的想法:在类别不平衡的数据上施展半监督学习

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨kid丶@知乎(已授权) 来源丨https://zhuanla ...

  10. 悉尼科技大学入选 CVPR 2021 的 9 篇论文,都研究什么?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Pablo@知乎(已授权) 来源丨https://zhuanl ...

最新文章

  1. linux下批量修改文件名精彩解答案例分享
  2. matlab练习程序(简单图像融合)
  3. kmeans中的k的含义_聚类的Python实现(二):确定分群数K
  4. 用JAVA语言创建链表的方法
  5. Django MPTT —— 安装
  6. ios-UIButton-常用方法
  7. java 递归 时间复杂度_递归到底是怎么实现的?它的时间复杂度怎么算?
  8. Java笔记-按行读取文件及一次性全部读取数据
  9. xshell安装mysql步骤_xshell怎么搭建mysql
  10. 世界上最成熟、功能最全的加密库HELib
  11. 后羿射日般的精准 - 阿里云ECS调度是如何炼成的
  12. 财富不入急门,投资且慢一点
  13. html5 导航栏置顶,html5导航栏横向
  14. Windows 8激活产品密匙公布
  15. 无聊科技正经事周刊(第3期):美团的推荐算法,是在玩火吗?
  16. 如何在Vue项目中引入ArcGIS JavaScript API​ 创建三维可视化地图(含vue项目创建教程)
  17. 用Android和node.js实现扫码登录
  18. 23位子网掩码是多少_23位子网掩码 网关计算
  19. 软件设计模式与体系结构(上)
  20. 分支-04. 出租车计价(15)

热门文章

  1. 图神经网络/GCN 入门
  2. 计算机考研英语资料推荐,2016考研计算机专业备考资料推荐
  3. 阿里巴巴代码规范插件
  4. 微信 华为盒子 搜索不到服务器,【沙发管家教你一招】用手机微信控制华为荣耀盒子!...
  5. 华为主题包hwt下载_hwtTool-hwtTool(华为主题开发工具)下载 v9.1.3.302官方版--pc6下载站...
  6. MAC dmg转ISO 及命令安装启动U盘
  7. 微软官方Power Query M语言规范参考手册(Power Query M function reference)
  8. Linux之iNodeclient客户端定制和安装
  9. USB加密狗复制USBTrace数据截取工具分享
  10. stata中安装meta分析模块