Auto-painter: Cartoon image generation from sketch by using conditional Wasserstein generative adversarial networks

  • 摘要
  • 引言
  • 相关工作
    • 生成对抗网络
    • 基于草图的图像合成
  • Auto-painter
    • 网络架构
    • 条件式WGANs
    • 传统的损失
  • 基于草图的卡通图像生成
    • 数据集
    • 评价指标
    • 结果和讨论
  • 交互式着色
  • 结论

摘要

近年,基于深度神经网络的真实感图像生成已成为机器学习和计算机视觉领域的研究热点。通过从大量的图像集合中学习,可以在像素级生成图像。学习由黑白草图生成彩色卡通图像不仅是有趣的研究问题,也是数字娱乐领域一种有效的应用。本文研究了利用条件生成对抗网络(CGAN)实现草图到图像合成的问题,提出了一种名为auto-painter的自动草图着色模型。为了克服模型崩溃并提升模型融合效果,Wasserstein距离被用于训练cGAN。新的模型不仅能够用适当的颜色填涂手绘草稿,而且还允许用户添加色彩提示指导着色过程。不同草图数据集的实验结果表明,与其他现有的图像翻译算法相比,auto-painter的性能更好。

引言

人类具有强大的理解黑白卡通草图的能力。我们的大脑可以由抽象的黑白动画片创建逼真的彩色图像。然而,选择合适的颜色并适当更改光线和阴影以创建与视觉兼容的卡通形象可能需要出色的艺术天分,这对未经训练的人们来说并不容易。如果我们可以自动给草稿上色,它将会成为一个很好的应用以辅助卡通或其他数字娱乐行业的艺术家。在此工作中,我们致力于利用深度神经网络将黑白线稿转换成特定的卡通风格来解决上述问题。事实上,新模型可以修饰原始的人类艺术天分,甚至激发艺术家创造不同风格的卡通。理想情况下,人们可以根据自己的口味自由地生成各种风格的卡通。
由草图生成卡通图像可以被视为一个图像合成问题。从前,许多将草图和已存在的图像碎片数据库匹配的非参数模型[1,2,3]被提出。最近,基于深度神经网络的大量图像合成方法[4,5,6,7]应运而生。这些方法可以生成有细节的图像,例如人脸、卧室、椅子和手写数字。由于逼真的图像充满清晰的细节,生成结果可能会受到模糊[8]、噪声[6]和对象抖动[9]的影响。此外,由于生成器从随机的低维向量中采样且模型具有很大的灵活性,网络的输出很难被控制。几种新方法探讨了不同应用中可控制的图像合成方法的适用性,例如超分辨率问题[10,11,12,13]、语义对象标记[14]、图像处理[15]、图像去雾[16]、灰度图像着色[17]和其他图像到图像转换[18,19],得到了令人信服的结果。对于控制信号相对稀疏、比基于灰度着色更不适定的草图到图像转换问题[20]而言,尤其需要一个模型来合成比输入所含内容更丰富的图像细节。网络应学习低级纹理信息和高级图像风格。色彩搭配可以反映出卡通风格(例如,一种风格可能是绿色头发、紫色眼睛,另一种风格可能是黑色头发、黑色眼睛),这可能需要更多的约束来建模。我们研究如何使用具有条件设定的生成对抗网络(GANs)进行图像生成。约束包括总方差损失、像素损失和特征损失,被用于训练生成器以便生成更多不同样式的颜色搭配。TV正则化首次被使用[21]以鼓励空间平滑。我们还引入了颜色控制,使用户可以用他们喜欢的颜色填涂。图1-1展示了一个从草图生成卡通图像的例子,并将auto-painter的结果(有无颜色控制)与中间的真实图像进行比较。
此项工作的主要贡献如下:

  • 我们提出了一个名为auto-painter的学习模型,可以利用条件生成网络(cGAN)由草图自动生成生动、高品质的彩色卡通图像。在模型中,我们将传统损失和对抗损失组合以生成更合适的颜色。
  • Wasserstein距离损失被用在基于cGAN的模型中。实验结果表明Wasserstein GANs[22]可以稳定地训练cGANs并获得与其他模型相比更好的结果。
  • 我们的成果是最早使用GANs进行卡通生成的任务之一,其初始结果被线上发表在arXiv。我们还设计了一个有用户界面的示例程序以供测试,所有代码都已开源。

相关工作

生成对抗网络

生成对抗网络(GANs)最近被视为机器学习[6,7]领域的一大突破,它包含两个“对抗性”模型:获取数据分布的生成模型G和判定示例来源于训练集还是G的判别模型D。G和D都是深度神经网络。在使用GANs进行图像合成的过程中,生成器试图从输入的随机向量中产生真实的图像以欺骗训练有素的判别器,判别器则尝试区分输入图像来自训练集还是生成器。这相当于一个二元极小极大博弈。生成器从卷积解码器网络中获益,类似的研究可回到使用深度卷积解码器网络生成真实感图像的工作[7]
条件生成对抗网络(cGANs):GANs是学习随机噪声 z 到输出 y: G: z → y 映射的非条件生成模型。相反,cGANs学习观察到的输入 x 和随机噪声向量 z 到 y: G: {x,z} → y[23]的映射。几项工作研究了不同的cGANs,其中生成器以文本[24]、标签[25]和其他形式的图像[18,26]为输入生成“假”图像。判别器需要区分真实和假像对图像[24]。本文中生成器和判别器都以草图作为输入以获得更好的监督性能。
Wasserstein GANs(WGANS):由于不连续的Jensen-Shannon(JS)散度以及其他距离和散度,GAN在训练生成器时经常会受到不稳定梯度的不良影响。Wasserstein距离[22](也称为地球移动距离)可用于两个分布间差异的度量。Wasserstein距离 W(f, g) 定义为汇合收敛模型分布 f 和真实分布 g 的最小成本。Wasserstein损失可以帮助解决神经网络梯度消失或爆炸的问题。

基于草图的图像合成

最近,学术界出现一些基于草图的图像合成的研究。以前的方法主要使用图像增强技术和固定规则。例如,Qu等[27]通过将图片根据纹理进行分割,然后使用用户指定的颜色填充对应区域来实现草图着色,与Auto-painter允许用户交互这点类似。然而,作为一个生成模型,Auto-painter可以自动地从训练图像中学习配色方案。Sketch2photo[28]可以由草图生成逼真的图片,但是也使用文本标签来标注草图。文本标签(通常是一个对象)用于从网络检索相似对象,然后将与给定轮廓一致的搜索结果和草图无缝拼接得到生成图像。它只能合成现有对象的组合,而我们的模型可以根据用户任意的创作生成卡通人物。近来,通过深度神经网络实现图像到图像的转换引起了人们的关注。为了增强模型的泛化能力,基于GANs的算法越来越受欢迎。Pix2pix[18]使用U-net结构[29]解决一般的图像翻译问题,使解码器被编码器约束以获取更多信息。他们研究了不同类型的图像到图像转换任务,包括将白天的图像转换为夜晚的图像,由地图生成城市图像,甚至由设计师草稿生成鞋子和手提包照片。不同于上述研究,我们仅通过考虑总方差损失和特征损失约束可变细节来生成卡通形象,且使用Wasserstein损失来稳定训练过程。我们证明了这种方法可以有效地生成卡通图像,并对上述方法和新提出的模型的生成结果进行比较。
相似工作:Frans[30]等也使用cGANs进行草图到卡通绘画的转换。他提议使用两个GAN处理涂色任务,并使用模糊的颜色信息作为第二个GAN的输入。我们的研究关注如何通过考虑更多约束以及组合cGANs和WGANs来提高生成器的质量,与Frans等的工作相独立。同时,我们在实验研究中展示了比较结果。

Auto-painter

Auto-painter是一个基于条件生成对抗网络的有监督学习模型,输入一个黑白草图,模型可以根据训练数据给定的草图-图像对生成着色图像。我们以前馈深度神经网络作为生成器在测试中得到快速响应。生成器以草图作为输入,并在像素级输出相同分辨率的彩色卡通图像。

网络架构

之前的许多解决方案[11,20,31]使用纯净的encoder-decoder网络。输入通过一系列下采样步骤变为较低维度,然后通过全连接层进行一些非线性转换,最后通过上采样得到当前输出尺寸。这种前馈结构可能在通过层时导致信息丢失。特别是在草图到图像转换问题上,我们需要保证输入的轮廓是最重要的信息以确保输出图像的质量。我们使用U-net[29]而不是encoder-decoder结构,并将编码器中的层连接到相应的解码器层。如图3-1所示,为了对草图的低级信息进行解码,我们将解码器 A 连接到解码层 A’ 以生成最终的彩色卡通图像,其中 A 包含草图的低级信息而 A’ 主要包含经过训练的颜色绘画信息。

图3-1 生成器的U-net结构:黄色块代表编码层,蓝色块代表解码层。在每个解码层中,对应的编码层连接到当前层以解码下一层。例如,B 和 B’ 级联在一起通过反卷积得到A’ 。

判别器相比生成器而言仅含编码器单元,目的是区分输入的草图-图像对是“真”还是“假”。网络被训练成可以最大化分类准确性的程度。如图3-2所示,判别器的输出是一个概率矩阵,其中每个元素给出了使用马尔可夫随机场或PatchGAN[18]采样得到的一对色块是真实的可能性。输入和输出之间的卷积层提取了输入对的高级特征。

图3-2 PatchGAN判别器:判别器的输入是草图对(黄色块)和实际目标图像(红色块),或者草图与生成的图像对(蓝色块)。

条件式WGANs

与无监督的GAN模型不同,cGANs[23]学习观察到的约束 和随机噪声向量 到真实图像 的映射。通用的cGANs的目标(损失)函数可以表示为式 3-1:

其中生成器 G 最大程度地降低目标函数而判别器 D 最大程度地提升它。我们通过减小两个分布间的Jensen-Shannon(JS)散度来优化 G 的参数,使得生成数据 Pg 的分布和实际数据 Pr 的分布相近,并在cGANs应用Wasserstein损失[22]。当两个分布具有不相交或位于低维流形的支撑集时,cGANs原始的JS散度不连续,使得模型很难训练,甚至导致模型崩溃[22]。Arjovsky等[22]在进行损耗度量时采用了地球移动距离(EM),因为它可以反映两个分布间的距离,甚至是在它们不相交的情况下。EM距离的定义如式3-2。

其中 f 是 1-Lipschitz, pr 是真实数据的分布而 pg 是生成数据的分布。它表示“质量”必须移动以将分布 pg 转变为分布 pr 。将等式3-2应用于GAN,我们可以得到cGAN中的EM距离如式3-3。

传统的损失

基于草图的卡通图像生成

数据集

为了训练auto-painter模型,我们用爬虫从网上搜集了大量的卡通图片。大部分之前的研究[17,20]学习低分辨率图像。由于现实世界中大多数动画具有较高的分辨率,训练图像的分辨率都为512x512。为了不改变卡通图片的原始比例,我们先随机缩放使得最短的边长于512像素,然后沿较长边从底部、中间和顶部裁剪图片。通过此设置,我们可以得到原始图片的不同部分并保持比例。尽管这增加了训练模型的难度,但我们可以加深神经网络并使用更多的约束来稳定训练。由于在有监督训练中很难找到匹配的草图-卡通图像对,我们需要从卡通图片中提取轮廓作为训练集。以前,研究人员着重于生成图片轮廓[36,37,38]以实现基于草图的图像检索。我们采用扩展的different-of-Gaussians算子(XDoG[38])从彩色卡通图像中提取轮廓。XDoG算子有一些连续的参数空间。通过调整XDoG的参数 γ,我们可以获得草图中不同等级的细节(如图4-1)。在我们的研究中,为了获得更好的生成结果,我们将四种草图都包含在训练中。

图4-1 XDoG滤波生成的黑白草图。为了获得不同级别的高频信息,从左到右的参数 γ 分别是0.96,0.97,0.98,0.99。

经过预处理(调整大小、裁剪成方形图片和提取轮廓)后,我们得到了Minions和RandCartoon两个卡通数据集。Minions包含1100张不同的彩色子集,只有一些固定的颜色类型。我们用它来讨论传统损失(Ltv 和 Lf)中每个元素的有效性以研究模型捕获细节的能力。RandCartoon包含13518张随机类型的卡通图片,包括具有简单背景的人物和一些具有复杂背景的图像,有着丰富的色彩信息。我们使用这个数据集来评估模型的生成效果并创建色彩控制下的交互式模型。在每次试验中,我们使用90%的数据作为训练集,并将10%的数据作为测试集。

评价指标

众所周知,评估生成图像的质量是一个开放且困难的问题[17]。类似于像素均方误差这样传统的指标无法获得输出图像的高级特征。为了评估auto-painter的视觉质量并比较现有模型(例如pix2pix[18]模型),我们受为了评估真实感图像生成模型的“真实vs伪劣”测试[17,18]启发,设计了一个名为“喜欢vs不喜欢”的测试。因为auto-painter的最终目标是创造视觉生动的卡通图像,测试人员被提供不同算法生成的着色图像并要求他们选出最好的和最差的图片。此研究中,我们设计这个评估指标主要是为了分析损失函数中不同元素造成的影响。不同于该文章[17],我们在两秒钟内同时发布四张图片并完成对四个算法的评估,而不是逐一进行评估。这使得参与者可以在更全面的比较下得出结论。

结果和讨论

Auto-painter模型的损失函数有四个子项,分别是3.2节介绍的低级像素损失 Lp和 Ltv ,高级语义损失 Lf 和风格损失 LG 。像素损失是图像翻译任务中最常见的约束,pix2pix[18]、scribbler[20]和OutlineGAN[30]都运用了像素级损失。我们将在所有训练参数相同(包括随机种子、学习率、期和批大小)情况下设计一个比较研究,唯一不同的是目标函数。没有特征损失及总变分(tv)损失并由cGAN训练得到的pix2pix[18]模型被用来与auto-painter进行比较。我们还设计了一个没有 LG 的基础模型来研究cWGAN的影响。
由图4-4可知,与没有 LG 的基础模型相比较,我们可以看出使用cWGAN的 auto-painter 获得了更生动的生成结果。没有cWGAN时,网络趋向于将结果图像的每一个像素预测为数据集的平均像素值以减小传统损失。通过进行对抗训练,pix2pix和auto-painter模型都能产生有意义的结果,但是pix2pix模型有时会产生不合理结果(第一个女孩的鼻子,第二个女孩的眼睛和第三个女孩的眼镜)。我们可以看到,添加 Ltv 和 Lf 可以产生更合理的有丰富细节的结果,例如女孩的眼睛和头发。

图4-4 RandCartoon数据集样本下基础模型、pix2pix和auto-painter的比较结果

不仅如此,cWGAN损失可以帮助cGAN更快更好地建模。我们可以直观地看到图4-5中训练过程的差异。为了校验3.2节介绍的约束( Lf 和 Ltv )的重要性,我们进行消融实验以独立每个损失项的影响。图4-6提供了这些变化在Minions上的定性结果。没有tv损失(wtv = 0)时,结果图像趋向溶于背景并看起来杂乱。如果令 wf = 0(意味着我们不考虑特征损失),图像细节会变得模糊。同时考虑两者可能会产生质量结果。根据式4-1和4-2,我们设置 i ∈ [1,40], j ∈ [1,4], c = 1 来评估每个损失项,这意味着我们使用40张图片来评估不同的目标函数。

图4-5 cGAN和cWGAN训练过程中loss的变化趋势图

图4-6 不同参数设置下auto-painter和pix2pix的结果

图4-2展示了pix2pix[18]模型、pix2pix+tv损失、pix2pix+特征损失和auto-painter的比较结果。由该图可知,auto-painter是受试者最喜欢的算法而pix2pix是最差的。添加tv损失会提高人气,但随着方差增大,稳定性会降低。然而,将tv损失和特征损失结合在一起会得到最大的流行度和最小的方差。总之,auto-painter考虑了所有这些约束以适合所有种类的草图(有无背景、手绘或经过装饰)并且可以实现最好的性能。
不仅如此,我们利用RandCartoon数据集设置了大型用户数据库,其中 i ∈ [1,1000], j ∈ [1,2], c = 1 。图4-3的结果显示auto-painter具有更好的性能。
某些参数依照数据集有不同的最佳设置。在我们的实验中,我们发现一些参数具有不同的最佳设置。在我们的实验中,我们发现,如果不同的损失项的梯度值彼此相同,则该模型可以平衡每个损失项的影响并产生令人满意的结果。在此基础上,图4-7展示了试验中的最优参数设置。Pix2pix和auto-painter在Minions(m)和RandCartoon©上分别有两组参数。
用户还可以确定一些其他参数,例如式3-7中的 。通过实验可以看出VGG16第2至4层有强健的提取特征的能力。 j ∈ [2,4] 的结果如图4-8所示。图4-7中特征损失的权重由 j = 4 获得。

图4-7 图4-4和4-6所示比较实验的参数设置

图4-8 使用VGG16中不同层的结果来评估特征损失

交互式着色

给定一个512x512像素的输入图像,auto-painter可以在1秒内生成着色结果图像,使得设计即时反馈的交互式图像编辑工具成为可能。我们提供了两种方法以供用户与auto-painter进行交互。
(1)草图修改:在Minions数据集上经过训练的auto-painter为用户提供了设计“minions风格”视觉图像的工具。如图5-1左侧所示,用户可以在给定的初始草图基础上修改草稿,例如更改眼镜、手势等。有趣的是尽管输入为简单的手绘草图,auto-painter也可以生成“minions风格”的卡通图像(如图5-1右侧所示)

图5-1 由修改过的和业余手绘草图生成的卡通图像

(2)色彩控制下的草图合成:当一张灰度草图被转换为真实照片时,由于显示了真实世界的色彩,其配色方案相对固定。例如,草是绿色的,天是蓝色的,沙子是金色的。复杂的训练集中可能会出现大量可供选择的配色方案。特别是在卡通图像数据集中,女孩的眼睛可能是绿色或紫色,这在现实世界中是罕见的。以minions为例,模型可以学习minion形状和黄色之间的相关性,但很难通过类似于RandCartoon的数据集学到同样的关联。当观察复杂的卡通草图时,不同的用户可能会喜欢不同的配色主题,但是经黑白草图训练过的生成器只能选择特定的配色方案。所以我们训练了一个色彩控制模型以满足不同用户的审美需求。为了训练auto-painter识别颜色控制信号,我们在给定的草图上添加色块。我们使用经过高斯滤波的真实图像,然后在起始位置随机采样随机数目的点并沿对角线生成色块。显然每个特定的色块都不应与不同的颜色区域相交,所以我们在增长块时设置了一个约束:当前色块的平均颜色和下个采样块的差值超过阈值时应停止增长。阈值可以控制色块的大小。可以肯定的是,如果训练集和测试集保持一致,则模型将得到最佳结果。由于无法控制用户的输入,我们对不同的色块大小进行交叉测试。我们通过给RandCartoon数据集添加颜色控制色块生成小、中、大(表示色块大小)三种训练集。由图5-2可知,中等尺寸的性能一般表现最佳。

图5-2 RandCartoon的结果。训练时阈值分别设为10,30,50(从第二行到第四行)。第一行是分别从不同训练集中随机采样得到的输入草图。红色方框指出了对应的训练和测试草图。毫无疑问,带有红色框的结果具有最佳性能。如果训练图片的色块较大而测试草图的色块较小,则将出现一些空白区域。另一方面,如果测试草图的色块大于训练草图,该色块会被凝固。总之,我们建议使用该范围内的阈值[25,35]

图5-3展示了基于合成色彩控制块重构RandCartoon的结果。我们可以看到,对于复杂任务,auto-painter可以成功地识别图像边缘并产生可行的配色方案。色彩控制块会在特定的区域内被自然地呈现出来。同时,我们还使用用户输入和完全背离于真实数据的色彩进行测试(如图5-4)。尽管如此,auto-painter仍能够在对象边缘内上色并区分草图的不同部分。

我们也用OutlineGAN[30]进行对照,结果如图5-5。我们可以看到本模型能够在干净的背景下生成更生动的颜色。OutlineGAN需要更多的颜色笔触而我们只需要少量的色块,并且auto-painter的结果色彩更鲜明。尽管OutlineGAN也可以给出与控制信号一致的结果,但是它存在浅色的模糊。为了避免不公平的比较,我们从其主页选择了测试图片(第三行),并从互联网上搜集了其他测试图片。

图5-5 Auto-painter和OutlineGAN的比较结果图

结论

本文提出了auto-painter模型以解决草图到图像转换的问题。我们的方法基于带有Wasserstein距离的条件生成对抗网络。U-net结构被用于使输出图像同时具有低级草图信息和高级颜色信息。我们基于pix2pix模型设置了更多的约束以获得更好的绘画性能,并对auto-painter进行训练以适应色彩控制,从而使网络能够合成符合不同用户审美的结果。经验结果表明,auto-painter可以在两个给定的数据集上生成高质量的卡通图像,并且是志愿者主观测试下的最佳方法。尽管结果令人鼓舞,但我们当前的系统仍像其他学习模型一样在调整参数方面遇到了困难。复杂的网络结构可能会导致训练速度降低。例如,给定的数据集为RandCartoon时,它在单个Tesla K80 GPU上进行2到3天的训练才能得到相当好的结果。在今后的工作中,我们将致力于使用更高质量、更大型的数据集来改善系统性能,然后通过使用小型CNN过滤器[39]来压缩模型尺寸并提高速度以便于构建用户交互式工具。

论文链接:https://www.sciencedirect.com/science/article/abs/pii/S0925231218306209

【论文翻译】Auto-painter:基于条件Wasserstein生成性对抗网络的草图卡通形象生成相关推荐

  1. 【小白学习PyTorch教程】十一、基于MNIST数据集训练第一个生成性对抗网络

    「@Author:Runsen」 GAN 是使用两个神经网络模型训练的生成模型.一种模型称为生成网络模型,它学习生成新的似是而非的样本.另一个模型被称为判别网络,它学习区分生成的例子和真实的例子. 生 ...

  2. MM2018/风格迁移-Style Separation and Synthesis via Generative Adversarial Networks通过生成性对抗网络进行风格分离和合成

    Style Separation and Synthesis via Generative Adversarial Networks通过生成性对抗网络进行风格分离和合成 0.摘要 1.概述 2.相关工 ...

  3. 生成性对抗网络(GAN) 和styleGan

    生成性对抗网络(GAN)是机器学习中一个相对较新的概念,于2014年首次引入.他们的目标是合成与真实图像无法区分的人工样本,如图像.GAN应用程序的一个常见示例是通过从名人面孔数据集学习来生成人造人脸 ...

  4. 生成性对抗网络技术实现

    生成性对抗网络技术实现 Generative Adversarial Networks 以某种形式,使用深度神经网络学习从数据点到标签的映射.这种学习被称为区别性学习,因为希望能够区分猫和狗的照片.量 ...

  5. 【论文翻译】VIBE 基于视频的人体3D形状和姿态估计

    目录 摘要 1.介绍 2.相关工作 单个图像的3D姿势和形状 视频中的3D姿势和形状 用于序列建模的GANs 3.方法 3.1 时间编码器(Temporal Encoder) 3.2 运动判别器(Mo ...

  6. 生成神经对抗网络(GAN)的基本认识及应用

    视频讲解GANr简单的了解:5分钟秒懂生成对抗网络 - 知乎 生成对抗网络(GAN)是生成模型的一种神经网络架构. GAN是使用两个神经网络模型训练而成的一种生成模型.其中一个称为"生成器& ...

  7. GAN (生成对抗网络) 手写数字图片生成

    GAN (生成对抗网络) 手写数字图片生成 文章目录 GAN (生成对抗网络) 手写数字图片生成 Discriminator Network Generator Network 简单版本的生成对抗网络 ...

  8. 【论文笔记2】基于梯形面积估计的大规模网络异常检测几何面积分析新技术

    Novel Geometric Area Analysis Technique for Anomaly Detection Using Trapezoidal Area Estimation on L ...

  9. 论文阅读四:基于流分类的数据中心网络负载均衡机制

    名词解释: Utilization-aware Load-balancing based on Flow Classification, ULFC:基于流分类的数据中心网络负载均衡机制 Equal-C ...

最新文章

  1. C++拾取——使用stl标准库生成等差、等比数列的方法
  2. mysql 表空间收缩_mysql表碎片清理和表空间收缩
  3. 阿里飞猪个性化搜索排序探索实践
  4. Java中return结束循环,Java中break、continue、return在for循环中的使用
  5. 基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)
  6. -webkit-scrollbar
  7. 从 Android 到 Java:如何从不同视角解决问题?
  8. 编写高效率的C#代码
  9. rem 之js代码获取font-size值(适合移动手机端)
  10. JavaScript将负数转换为正数
  11. 第四章 单位根检验与章节综训
  12. vb实时曲线的绘制和保存
  13. Ubuntu on Windows,在Windows上的Ubuntu
  14. 谈谈可视化编程 (转)
  15. android qq纯净输入法,QQ输入法纯净版更新 同步手机词库
  16. 微信语音技术原理_微信语音多群直播原理-一起学堂
  17. PS绘制的路径不见了
  18. Android自定义控件入门到精通--Interpolation插值器
  19. 用EXCEL批量改变文件的名称
  20. orocos安装_动脑共享单车环境搭建

热门文章

  1. 忠告∶你见过有医生无偿献血的吗
  2. SpringBoot 整合 redis 实战
  3. 你是真的“C”——结构体中鲜有人知的“秘密”
  4. python国内最大的论坛_国内最好的python论坛是哪个?
  5. java程序练习-B-流放之路
  6. 数据库从入门到精通 01
  7. 【有利可图网】PS实战教程48:将照片制作成可爱的像素画效果
  8. iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码
  9. ArrayList使用禁忌——ArrayList之间的赋值(小记)
  10. 苹果id可以彻底注销吗_分公司可以简易注销吗?如何注销?