嗨玩手游网

这套Keras开源代码,快速帮你生成一个会跳舞的AI小姐姐

安妮 编译整理

量子位 出品 | 公众号 QbitAI

身材苗条,动作有力,姿势优美,视频片段里的小姐姐跳得行云流水,颇有C位出道的气势。

只不过,正在跳舞的小姐姐并不是真人,而是一个刚刚诞生不久的AI。

这几天,网友Jaison Saji开源了个叫DanceNet的神经网络,这是一个用变分自编码器、LSTM和混合密度网络构建的舞蹈生成器,合成不同姿态的逼真舞蹈动作不在话下。

开头提到的那个片段,便是DanceNet在短时间内用Keras训练合成的。

短短几天,这个开源的小项目就在推特、Reddit等技术论坛火了起来。

开源详情

Jaison想做AI跳舞生成器是受了油管上的视频Does my AI have better dance moves than me的启发。

这个视频中,科技博主carykh提出了一种想法,即给模型喂食一段人类跳舞的视频,在经过一段时间的训练后,AI学会自动生成舞蹈。视频很火,但问题是作者并没有给出详细的代码。

Jaison觉得这事很有意思,几天之内也做了这个AI出来,并将代码挂在的Github上。

代码地址:

https://github/jsn5/dancenet

跳舞AI主要用到了变分自编码器和LSTM+混合密度网络完成,用油管上一段1小时19分的舞蹈视频作为训练集,画风如下:

训练集视频地址(请注意科学前往):

https://www.youtube/watch?v=NdSqAAT28v0

如果需要作者训练过的权重,也可以科学前往下面的地址下载,并将其提取到dancenet目录中。

https://drive.google/file/d/1LWtERyPAzYeZjL816gBoLyQdC2MDK961/view?usp=sharing

随后,运行dancegen.ipynb就可以实现本地运行了。

如果想在浏览器中运行,可在FloydHub workspace中打开代码,随后训练过的权重数据集就能自动连接至环境中。非常简单,也容易上手。

Jupyter笔记本地址:

https://nbviewer.jupyter/github/jsn5/dancenet/blob/master/dancegen.ipynb

训练过程

这是一份友好的小教程,即使你从零开始训练,这五步之后也可以自制出好看的热舞小姐姐:

在imgs/文件夹中,将训练视频中的序列图像依次标记为1.jpg,2.jpg运行model.py代码块运行gen_lv.py,将图像编码运行video_from_lv.py,测试解码的视频运行jupyter笔记本dancegen.ipynb,训练DanceNet网络,随后,视频就可以新鲜出炉了

你的训练结果如何?

— 完 —

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

初入编程!

如果想学习编程,但是不知道怎么学习,那么,接下来对你有写帮助。

开始学习编程,可以选择经典的语言--C语言。

为什么开始学习C语言呢?

先看看C语言有哪些特点吧。

1、高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。

2、结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

3、代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。

4、使用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。

还有他的特有特点:

C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。不同的变量类型可以用结构体(struct)组合在一起。只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。部份的变量类型可以转换,例如整型和字符型变量。通过指针(pointer),C语言可以容易的对存储器进行低级控制。预编译处理(preprocessor)让C语言的编译更具有弹性。

这就是C语言写出来的图形。

一种语言有优点就会有缺点,C语言的都是哪些呢?

优点

1、简洁紧凑、灵活方便

C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2、运算符丰富

C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

3、数据类型丰富

C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。

4、表达方式灵活实用

C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。

5、允许直接访问物理地址,对硬件进行操作

由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。

6、生成目标代码质量高,程序执行效率高

C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编程序生成的目标代码效率低10%~20%。

7、可移植性好

C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。

8、表达力强

C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。

C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。

它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。

另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

缺点

1、 C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。

2、 C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。

C语言的代码

C浯言是最常见的面向过程语言。C语言是一种通用语言,可以用于编写解决各种类型问题的程序,如有关电子商务的程序、有关过程控制的程序、游戏程序等。

面向过程是什么呢?

面向过程的语言也称为结构化程序设计语言,是高级语言的一种。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数则用于完成这些任务,解决问题的焦点集中于函数。其概念最早由E.W.Dijikstra在1965年提出,是软件发展的一个重要里程碑。它的主要观点是采用自顶向下、逐步求精的程序设计方法,使用三种基本控制结构构造程序,即任何程序都可由顺序、选择、循环三种基本控制结构构造。

在上述的文中,你也应该能了解到C++、JA、C#这些语言都是由C语言演化出来的,所以说,如果想学习编程,但是不知道选择哪个,那么就先从C语言开始学起吧。

啧啧啧

更多资讯
游戏推荐
更多+