参考  论文解析之《Fully Convolutional Adaptation Networks for Semantic Segmentation》 - 云+社区 - 腾讯云

论文网址:Fully Convolutional Adaptation Networks for Semantic Segmentation

摘要

深度神经网络的最新进展令人信服地证明了在大数据集上学习视觉模型的高能力。然而,收集专家标记的数据集,特别是带有像素级注释的数据集是一个非常昂贵的过程。一个吸引人的替代方案是渲染合成数据(例如,电脑游戏)并自动生成基本事实。但是,简单地将学到的模型应用于合成图像可能会由于域漂移而导致在真实图像上产生较大的泛化误差。在本文中,我们从视觉外观层和表示层的领域适应两个角度来促进这一问题。前者调整源域图像,使其看起来像是从目标域的“样式”中提取的,而后者试图学习域不变表示。具体来说,我们提出了完全卷积适应网络(FCAN),这是一种结合了外观适应网络(AAN)和表示适应网络(RAN)的新型语义分割深度架构。AAN在像素空间中学习从一个域到另一个域的转换,而RAN则以对抗学习的方式优化,以最大限度地利用所学的源和目标表示愚弄域鉴别器。我们进行了大量的实验,将GTA5(游戏视频)转换为城市场景(城市街道场景)进行语义分割,与目前最先进的无监督适应技术相比,我们的建议取得了更好的结果。更值得注意的是,我们获得了一个新的记录:在无监督设置下,BDDS (drivecam视频)的mIoU为47.5%。

1、介绍

深度神经网络已经成功地证明了在大规模数据集上学习视觉模型的有效性。到目前为止,在文献中有各种数据集(例如,ImageNet和COCO),其中包括注释良好的图像,可用于开发各种视觉任务的深度模型,例如,识别,检测,字幕和语义分割。尽管如此,给定一个新的数据集,典型的解决方案仍然是执行密集的手动标记,尽管付出了昂贵的努力和耗时的过程。另一种选择是利用合成数据,这主要是可从电脑游戏和ground truth可以自由自动生成。然而,许多以前的经验也表明,由于一种被称为“域移位”的现象,在合成数据上重新应用学到的模型可能会损害实际数据中的性能。以图1 (a)中真实街景视频一帧的分割结果为例,利用视频游戏的合成数据训练的模型不能正确地将场景分割为道路、人、汽车等语义类别。因此,无监督域适应将是解决这一挑战的理想方法,其目的是利用来自源域的带标签的例子和目标域的大量未带标签的例子,以减少对目标数据的预测误差。

无监督域自适应的一般做法是通过最小化域移位度量(如相关距离[28]或最大平均偏差[32])来建立跨域不变性。我们新奇地从表象层和表象层不变性的角度来考虑这个问题。外观级不变性的目的是将一个域中的图像内容与来自另一个域的“样式”重新组合。因此,两个域中的图像看起来就好像它们来自同一个域。换句话说,视觉外观往往是领域不变的。表征层不变性的灵感来自对抗学习在领域适应中的进展,即通过对抗目标对领域鉴别器建模领域分布。其背后的精神来自生成对抗学习,它通过让生成模型和区别模型相互竞争来训练两个模型,即生成模型和区别模型。在领域适应的背景下,这个对抗性原则相当于指导两个领域中的表示学习,使源和目标表示分布之间的差异无法通过领域鉴别器区分。我们遵循这个优雅的方法,并利用对抗机制来学习跨领域不变的图像表示。在这项工作中,我们特别研究了语义分割任务的领域适应问题,该问题可能依赖于最精确的像素级注释。

通过将外观级和表示级不变性的思想整合到无监督域自适应中以增强语义分割,我们提出了一种全新的全卷积自适应网络(FCAN)架构,如图2所示。整个框架由外观适应网络(Appearance Adaptation network, AAN)和表示适应网络(Representation Adaptation network, RAN)组成。理想情况下,AAN是构建一个图像,该图像捕获源图像中的高级内容和目标域的低级像素信息。AAN从白噪声图像开始,通过梯度下降调整输出图像,使输出图像的特征映射与源图像或目标域图像的均值特征映射之间的欧氏距离最小。在RAN中,首先使用共享的全卷积网络(FCN)生成每个域的图像表示,然后通过双线性插值对输出进行上采样,用于像素级分类,同时使用域鉴别器区分源和目标域。为了扩大特征图中滤波器的视场,赋予域鉴别器更大的能力,设计了一种空间金字塔池(ASPP)策略。RAN通过优化两个损失来训练,即分类损失来度量像素级语义,对抗损失来最大限度地愚弄域鉴别器,利用学到的源和目标表示。通过外观层和表示层的适应性,我们的FCAN可以更好地构建跨域不变性,从而获得图1 (b)中令人鼓舞的分割结果。

这项工作的主要贡献是提出了全卷积适应网络,用于解决领域适应背景下的语义分割问题。该解决方案还引出了一个优美的观点,即应该在跨领域构建什么样的不变性来适应,以及如何在深度学习框架中建模领域不变性,特别是在语义分割任务中,这些问题在文献中尚未得到充分理解。

2、相关工作

我们将相关研究分为两类:语义分割和深度域适应。

语义分割:

语义分割是计算机视觉中最具挑战性的任务之一,它试图预测给定图像或视频帧的像素级语义标签。受全卷积网络(FCN)最新进展的启发,已经提出了几种技术,从多尺度特征集成(例如,扩张卷积,RefineNet, DeepLab和HAZNet)到上下文信息保存(例如,ParseNet, PSPNet和DST-FCN)。原始的FCN公式也可以通过利用一些后处理技术(如条件随机场)加以改进。此外,由于大多数语义分割方法依赖于像素级标注,这需要非常昂贵的标注工作,研究人员也在努力利用弱监督代替(例如实例级边界框,图像级标签)来完成语义分割任务。为了实现这一目标,文献中利用了多实例学习、EM算法和约束CNN等技术。[10]中的替代方案利用来自辅助类别的像素级注释,将语义分割推广到只有图像级别标签可用的类别。本工作的目标是探索自由获取的带注释的合成数据和大量未标记的真实数据,用于像素级真实图像注释,这是一个新兴的研究领域。

深度域适配:

深度域自适应的目的是在深度学习框架中,将从标记源域学到的模型转移到目标域。本课题的研究从三个不同的维度展开:无监督适应、监督适应和半监督适应。无监督域自适应是指标记的目标数据不可用时的设置。深度相关比对(CORAL)利用最大平均差异(MMD)来匹配源和目标分布的均值和协方差。对抗性判别域适应(ADDA)[31]通过对抗性训练优化了适应模型。相反,当标记的目标数据可用时,我们将此问题称为监督域适应。Tzeng等人利用二值域分类器并设计域混淆损失来鼓励预测的域标签均匀分布。深度域混淆(DDC)应用MMD以及在源上的常规分类损失来学习既具有鉴别性又具有域不变的表示。此外,还提出了利用标记和未标记目标数据的半监督域自适应方法。深度适应网络(DAN)将所有任务特定的层嵌入到一个复制内核希尔伯特空间中。同时考虑半监督和非监督设置。

总之,本文的工作主要集中在语义分割任务的无监督自适应方面,这方面的研究很少。最密切相关的工作是FCNWild,它通过仅利用完全卷积对抗训练来解决跨域分割问题。我们的方法与[9]的不同之处是,我们从视觉外观级和表示级域适应的角度来解决域转移,以更有原则的方式弥合了域的差距。

3、全卷积域适配网路来进行语义分割

在本节中,我们提出了用于语义分割的完全卷积自适应网络(FCAN)。 图2说明了我们的框架的概述。 它由两个主要部分组成:外观适应网络(AAN)和表示适应网络(RAN)。 给定两个域的输入图像,首先利用AAN从视觉外观的角度将图像从一个域转移到另一个域。 通过将一个域中的图像内容与来自另一个域的“样式”重新组合,视觉外观趋向于域不变。 在本节中,我们以从源到目标的转换为例,其他选项将在我们的实验中详细说明。 另一方面,RAN以对抗的方式学习域不变表示,并设计一个域判别器来分类特征图中每个空间单元的接受域对应的图像区域来自哪个域。 RAN的目标是指导两个域的表示学习,通过域鉴别器使源和目标表示不可区分。 因此,我们的FCAN从视觉外观级和表示级域不变性的角度解决了域适应问题,并且在消除域移位的影响方面可能更有效。

3.1、表观级适配网络

AAN的目标是使来自不同领域的图像在视觉上相似。 换句话说,AAN试图使源图像看起来像是从目标域绘制的。 为了实现这一目标,需要将目标域中所有图像的底层特征进行分离,并将其视为目标域的“风格”,因为这些特征编码了图像的底层形式,如纹理、灯光和阴影。 而源图像中对象及其关系方面的高级内容则需要提取出来,并结合目标域的“风格”进行重组,从而生成自适应图像。

图3说明了AAN的架构。 给定一组图像在目标域和来自源域的一张图像,我们从一张白噪声图像开始,并用中的语义内容加上Xt的“风格”反复渲染这张图像,以产生自适应图像。 具体来说,利用预先训练好的CNN提取每一幅图像的特征图。 假设CNN中每个卷积层都有响应映射,其中为通道数,每个响应映射的大小为,其中分别为映射的高度和宽度。 因此,层中的特征映射可以表示为。 基本上,不同卷积层的响应在不同的语义层次上表征了图像内容,其中更深的层响应更高的语义。 为了更好地管理源图像中的语义内容,对不同的层赋予不同的权重,以反映每一层的贡献。 然后将目标函数表述为

其中是要考虑测量的层的集合。 是第层的权值,分别是第层在上的特征映射。 通过最小化式(1)中的欧氏距离,期望在自适应图像中保留中的图像内容。

其次,一个图像的“风格”通常被视为一种统计测量或模式,这与空间信息[4]是不可知的。 在CNN,这样的统计测量之一是不同反应图之间的相关性。 因此,可以通过计算图层上的图像的“样式”

的第i个和第j个向量化响应映射之间的内积。在我们的例子中,我们通过平均在目标域的所有图像上,将一个图像的“风格”扩展到一个域(目标域的)的“风格”。 为了将目标域的“风格”综合到中,我们将每一层的目标表述为

其中为第的权值。最后,需要最小化的总损失函数LAAN为:

其中是平衡源图像语义内容和目标域风格的权重。 在训练中,与[5]类似,AAN通过将Eq.(4)导出的梯度反向传播到来调整输出图像,从而产生域不变外观。

使用外观适应网络,来自不同域的图像似乎来自同一域。 为了进一步减少域移位的影响,我们尝试学习域不变表示。 因此,表示自适应网络(RAN)被设计来适应跨领域的表示,这是源自对抗性学习[7]的想法。 在我们的RAN中,对抗性原则相当于通过愚弄域识别器D来指导两个域的特征表示的学习,即使用所学的源和目标表示。 具体来说,RAN首先利用共享的全卷积网络(FCN),通过AAN从两个域提取图像或自适应图像的表示。 这里的FCN模型F旨在学习跨两个域的不可区分图像表示。 此外,鉴别器D尝试区分源和目标表示,其输出是最终特征图中空间单元对应的每个图像区域的域预测。 正式地,给定训练集在源域和在目标域,对抗性损失是所有空间单元的平均分类损失,表示为:

其中Z是D输出的空间单元数。与标准GAN类似,我们的RAN的对抗性训练是优化以下的极小极大函数:

考虑到真实数据中存在许多不同大小的对象,我们进一步考虑利用多尺度表示来增强对抗学习。一种传统的多尺度策略是用多种分辨率调整图像的大小,这确实提高了性能,但代价是大量的计算。在这项工作中,我们扩展了Atrous空间金字塔池(ASPP)来实现这一点,如图2所示。具体来说,我们并行利用个不同采样率的扩张卷积层,在FCN输出上独立产生个特征表示,每个特征表示具有个特征通道。然后,所有的特征通道被堆叠起来,形成一个新的特征地图与通道,接着是一个1 × 1卷积层加上一个sigmoid层,以产生最终的得分地图。分数图中的每个空间单元表示对应图像区域属于目标域的概率。此外,我们同时对标准像素级分类损失进行优化,用于对来自源域的图像进行监督分割,其中标签是可用的。因此,RAN的总体目标是将整合为:

λ是折衷参数。通过用源和目标表示愚弄域鉴别器,我们的RAN能够产生域不变表示。在测试阶段,将目标域的图像送入学习的FCN生成像素级分类的表示。

4、实现

4.1、表观级适配

我们采用预训练的ResNet-50[8]架构作为基本的CNN。特别地,我们在集合中只包含了5个卷积层,即,因为这些层的表示在每个尺度上通常具有最高的能力。图像在源域和目标域的层权值通常取决于自适应图像的视觉外观。此外,在优化Eq.(4)时,一个常见的问题是需要设置权衡参数来平衡内容和“风格”。由于最终的目标是从语义上分割图像中的每个像素,因此需要精确地保留语义内容。因此,我们将“风格”的影响仅仅看作是调整外观的“delta”函数,并基于经验设定较小的权重。的最大迭代次数固定为1k。在每次迭代中,图像更新,其中

4.2、表征级适配

在我们的实现中,我们使用来自ResNet-101的扩展的全卷积网络作为我们的FCN,它已经被证明在生成强大的语义分割表示方面是有效的。最后一个卷积层(即res5c)的特征地图被输入分割和对抗分支。在监督分割分支中,我们还使用金字塔池[37]来增加FCN的输出,将上下文先验整合到表示中。在对抗性分支中,我们使用k = 4个扩展卷积层并行生成多个特征映射,每个特征映射具有c = 128个通道。不同扩张卷积核的采样率分别为1、2、3和4。最后利用ASPP旁边的sigmoid层输出预测,其范围为[0,1]。

4.3、训练策略

我们的建议在Caffe框架上实现,并利用小批量随机梯度下降算法对模型进行优化。我们在源域上对RAN进行预训练,只会造成分割损失。初始学习率为0.0025。与[1]类似,我们使用“poly”学习率策略,其功率固定为0.9。动量衰减和重量衰减分别设置为0.9和0.0005。批号是6最大迭代数为30k。然后,结合分割损失和对抗损失对RAN进行微调。折衷参数λ设置为5。初始学习率为0.0001。批大小为8,最大迭代次数为10k。其余超参数与预训练相同

5、实验

5.1、数据集

我们对从GTA5(游戏视频)数据集到城市景观(城市街道场景)数据集[2]的域适配进行了彻底的FCAN评估。

GTA5数据集包含24966张来自《侠盗猎车手5》(GTA5)的图像(视频帧),并且每个图像的像素级地面真相也会被创建。在游戏中,图像是在虚拟城市洛斯桑托斯拍摄的,这个城市起源于洛杉矶。每张图像的分辨率为1914 × 1052。有19个类与其他户外场景(如城市景观)分割数据集兼容并用于评价。城市景观数据集是城市街景语义理解的一个流行基准,它包含了从50个不同城市的街景收集的5000张图像(帧)的高质量像素级注释。图像分辨率为2048 × 1024。按照分割任务中的标准协议,使用19个语义标签(汽车、道路、人、建筑物等)进行评价。其中,训练集、验证集和测试集分别包含2,975帧、500帧和1525帧。按照[9,21]中的设置,在我们的实验中,只有验证集(500帧)用于验证无监督语义分割。

图4显示了源域和目标域图像的四个外观级传输示例。如图所示,原始图像中的语义内容在自适应图像中都得到了很好的保存。当呈现《GTA5》中带有城市景观“风格”的图像时,图像的整体颜色变得暗淡,色彩饱和度趋于低。相反,当转换方向相反时,城市景观中图像的颜色变得更亮,饱和度也更高。结果表明,两者之间具有良好的外观级迁移。

5.3、FCAN的消融实验

接下来,我们研究FCAN中每个设计如何影响整体性能。自适应批处理归一化(ABN)简单地将源域学习的FCN中BN层的均值和方差替换为目标域图像的均值和方差。对抗域适应(ADA)利用对抗训练的思想学习域不变表示,域判别器在图像层面上判断域。当将域鉴别器扩展到对每个图像区域进行分类时,该设计被命名为Conv, ASPP进一步扩大了滤波器的视野以增强对抗学习。AAN是我们外表层面的适应。

表2详细说明了在FCAN的每个阶段多考虑一个域适配因素对mIoU的改进。ABN是一种缓解域转移的通用方法,与任何域适配框架无关。在我们的例子中,ABN成功地将mIoU性能从29.15%提升到35.51%。这说明ABN是一种非常有效和实用的选择。在我们的RAN中,ADA、Conv和ASPP是三个具体的设计,它们的性能增益分别为5.78%、1.88%和1.64%。换句话说,我们的RAN总共带来了9.3%的性能提升。结果验证了表征层1自适应的思想。AAN进一步提高了mIoU的1.79%,FCAN的mIoU性能最终达到46.6%。图5展示了我们的FCAN在不同阶段的四个语义分割结果示例。如图所示,分割结果正变得越来越准确,因为更多的适应性设计包括在内。例如,在早期阶段,道路和天空等大多数类别都不能很好的分割。相反,即使是像自行车和卡车这样的少数类也会在后面的步骤中被很好地分割。

5.4、和最先进方法的比较

我们比较了几种最先进的技术。域混淆(DC)通过域混淆损失来对齐域,它被优化以学习跨不同域的均匀分布。ADDA(对抗性判别域适应)将联合权值共享和对抗性学习结合起来进行判别特征学习。FCNWild采用全卷积对抗训练进行语义分割领域自适应。为了便于比较,所有方法中使用的基本FCN都来源于ResNet-101。表3总结了性能比较。FCNWild和FCAN在区域水平上进行域对抗学习,相比于在图像水平上设计域鉴别器的DC和ADDA, FCNWild和FCAN在区域水平上表现得更好。此外,FCAN通过添加ASPP策略和AAN加强,使其比FCNWild有了明显的改善。多尺度(MS)方案使mIoU性能提高到47.75%。图6详细描述了跨不同类别的性能。我们的FCAN在19个类别中的17个类别中取得了最好的表现,这从经验上验证了我们模型在类别层面的有效性。

为了检验在FCAN中学习到的域鉴别器,图7展示了四个图像示例,包括原始图像、它们的ground truth、FCAN分割结果和域鉴别器预测地图。亮度表明该区域具有很高的概率属于目标域。让我们回想一下,对抗性学习就是最大限度地愚弄领域识别器。这意味着理想情况下,目标域中图像的预测映射应该是暗的。例如,区域鉴别器对前两幅图像中红色边框区域的预测是错误的,这表明这些区域的表示往往是不可区分的。因此,这些区域(天空)被FCAN精确分割。相比之下,区域鉴别器对最后两幅图像中的区域进行了正确的预测,表明区域表示仍然是依赖于区域的。因此,在这些区域(自行车)的分割结果不是很好。

5.5、半监督适配

在实践中另一种常见的情况是,在目标域中有少量带标记的训练示例。因此,我们将FCAN扩展为半监督版本,它将城市景观的训练集作为标记数据。技术上,进一步考虑目标域图像像素级分类损失,将式(7)中的总体目标变为。表4显示了随着目标域带标签训练数据的增加,mIoU性能的变化。同样值得注意的是,这里的FCN是直接在目标域的标记数据上学习的,FCAN指的是我们的半监督版本。不出所料,如果在训练中只包含目标域的几百张图像,FCAN的性能增益往往会很大。当增加来自城市景观的图像数量时,增益会逐渐降低。即使当数量达到1k时,我们的半监督FCAN仍然比监督FCN略好。

5.6、BDDS上的结果

除了Cityscapes数据集外,我们还将BDDS作为目标域来评估我们的FCAN的无监督设置。表5总结了性能比较。其中,FCAN的mIoU性能达到43.35%,比FCNWild提高了3.98%。多尺度设置,即FCAN(MS),将性能提高到45.47%。最后,融合ResNet-101、ResNet-152和SENet[11]模型的集成版本FCAN(MS+EN)可以将mIoU提高到47.53%。图8显示了BDDS中的三个语义分割示例,分别由FCN和FCAN输出。显然,FCAN可以得到更有前景的分割结果。即使在反射(第二行)或天空中的云块(第三行)的情况下,我们的FCAN也可以很好地分割天空。

6、结论

我们提出了完全卷积适应网络(FCAN)架构,该架构探索了用于语义分割的领域适应。特别地,我们从视觉表象层面和表征层面的适应两个角度来研究这一问题。为了验证我们的声明,我们在我们的FCAN中针对每种目的分别设计了外观适应网络(AAN)和表示适应网络(RAN)。AAN是用来自另一个域的域“样式”在一个域中渲染图像,从而在两个域之间产生不变的外观。RAN旨在以领域对抗的方式指导表示学习,理想地输出领域不变表示。从游戏视频(GTA5)到城市街景场景(Cityscape)的转换实验验证了我们的提议和分析。更值得注意的是,当将游戏视频传输到车载摄像机视频(BDDS)时,我们实现了新的最先进的性能。我们未来可能的工作包括两个方向。首先,在AAN中将研究使用另一种统计模式渲染图像语义内容的更先进的技术。其次,我们将进一步将我们的FCAN扩展到其他特定的分割场景,如室内场景分割或肖像分割,这些场景很容易生成合成数据。

Fully Convolutional Adaptation Networks for Semantic Segmentation相关推荐

  1. 人群分割--Fully Convolutional Neural Networks for Crowd Segmentation

    Fully Convolutional Neural Networks for Crowd Segmentation https://arxiv.org/abs/1411.4464 这里设计了一个全卷 ...

  2. 深度图像分割 -- Fully Convolutional Networks for Semantic Segmentation

    CVPR2015 PAMI 2016 Fully Convolutional Networks for Semantic Segmentation Code: https://github.com/s ...

  3. (FCN)-Fully Convolutional Networks for Semantic Segmentation

    文章目录 Fully Convolutional Networks for Semantic Segmentation 摘要 全局信息和局部信息 感受野 FCN算法架构 训练技巧 详细参考 Fully ...

  4. Fully Convolutional Networks for Semantic Segmentation (FCN)论文翻译和理解

    论文题目:Fully Convolutional Networks for Semantic Segmentation 论文来源:Fully Convolutional Networks for Se ...

  5. 论文精读及分析:Fully Convolutional Networks for Semantic Segmentation

      本文主要内容为论文<Fully Convolutional Networks for Semantic Segmentation> 的阅读笔记,在原始论文的基础上加入了自己的一些理解, ...

  6. 【FCN】Fully Convolutional Networks for Semantic Segmentation学习

    论文翻译 又是一个看不懂原文,又看不懂翻译的论文. semantic segmentation 图像语义分割 就是预测每个像素所属的对象类别 语义分割是指像素级地识别图像,即标注出图像中每个像素所属的 ...

  7. FCN的学习及理解(Fully Convolutional Networks for Semantic Segmentation)

    大多数人接触"语义"都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复.嗯,看到这里你应该已经猜到了,图像领域也是存在&qu ...

  8. 论文笔记《Fully Convolutional Networks for Semantic Segmentation》

    [论文信息] <Fully Convolutional Networks for Semantic Segmentation> CVPR 2015 best paper key word: ...

  9. 【论文翻译】Fully Convolutional Networks for Semantic Segmentation

    论文题目:Fully Convolutional Networks for Semantic Segmentation 论文来源:Fully Convolutional Networks for Se ...

最新文章

  1. 智能猫窝是如何诞生的?详解百度大脑的开放生态
  2. matlab图片插值数据_使用双线性插值法放大图像(matlab实现)
  3. SQL SERVER2005加密解密数据
  4. 【ruoyi若依】layer 重置大小/resize
  5. 基于docker-compose的Gitlab CI/CD实践排坑指南
  6. Java 9对可选的补充
  7. linux基础知识——IPC之管道
  8. vSphere 高级特性FT配置与管理
  9. ONAP如何将Open-O和ECOMP数百万行代码合并?
  10. 用计算机算加班,加班工资计算器
  11. 边缘检测之LoG算子(高斯-拉普拉斯算子)
  12. wps ppt 如何批量换背景
  13. 规范化理论:候选键的求解理论和算法
  14. 和陌陌一样,今天 Instagram 也在网页版上又迈了一步
  15. Linux用户宝典:值得一用的5款远程桌面应用程序
  16. a-upload文件夹上传
  17. php暴力引流代码,利用霸屏暴力引流,免费分享霸屏代码
  18. STM32/CPU总线的由来和地址映射概念
  19. 51单片机仿真例程-双机串行通信
  20. SWMM WARNING警告02、03、04的检查修改

热门文章

  1. 蓝桥杯2016年第七届真题-路径之谜
  2. 谁来保护这价值百万、千万、亿元的首饰、服饰、皮肤、装备、宠物
  3. CentOS7安装开源跳板机(堡垒机)
  4. 【汇编语言】by王爽 | 实验10:编写子程序
  5. 好一点的计算机课程,要上好一节信息技术课,先做好这四点
  6. 王阳明:心,是世间一切的根源
  7. Django配置Mysql数据库连接
  8. 除了阿里巴巴 雅虎还剩什么?
  9. 苹果cmsv10迅雷下载站模板高权重好看的影视源码
  10. 宝宝1周岁生日祝福语