用Python生成会跳舞的美女


Posted in Python onJanuary 18, 2022

导语

表妹心疼我,为了逗我开心,教我用Python制作会跳舞的美女。作为新时代的活雷锋,在这里分享给大家。

开发工具

Python版本:3.6.4

相关模块:

torch0.4.1模块;
torchvision0.2.2模块;
opencv-python模块;
argparse模块;
numpy模块;
以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

(PS:CUDA环境配置请自行Google教程。)

原理简介

这里我们利用VAE的原理来生成会跳舞的小姐姐呗。先简单介绍一下理论知识,要说VAE,就得先谈谈自动编码器,自动编码器最开始用于数据压缩,其原理图十分简单直观:

用Python生成会跳舞的美女

在模型训练时,输入图片首先通过一个编码器(现在当然是神经网络啦)将输入数据降维到一个code,接着将code输入到解码器(当然还是神经网络啦)生成一个与输入相同大小的图片,网络的优化目标就是使得输入编码器的图片与解码器输出的图片尽可能相似。 当模型训练完之后,我们就可以拿出这个解码器,随机传入一些code作为它的输入,来生成一些差不多的图片。但是这种做法存在一个问题,就是编码器生成的code包含了原图信息,因此,我们就无法自己构造一些随机的code来作为解码器输入从而生成任意图片(必须是现有图片过了编码器之后生成的code作为输入)。为了解决这个问题,VAE就诞生啦~VAE的全称是:

Variational Autoencoder 即变分自编码器
说起来,它的原理图也十分简单:

用Python生成会跳舞的美女

与自编码器唯一不同就是在训练过程中对code也进行了约束,使得code满足某种分布(譬如正态分布)。这样的话,模型训练完之后,我们只需要随机生成一个满足该分布的code,就可以拿来作为解码器的输入,从而生成任意图片啦~ 一般地,我们用均方损失函数保证原图和生成图相似,用KL损失函数来保证code满足我们所要求的分布。均方损失大家肯定知道,KL散度的定义这里我也不想过多地去介绍,贴下维基百科上定义的公式吧:

用Python生成会跳舞的美女

P和Q是在同一个概率空间上定义的离散概率分布。 同时,为了方便计算KL散度,VAE引入了一个trick,叫:

reparameterization

以正态分布为例子,就是现在不直接预测code了,而是预测code的均值和方差,有了均值向量和方差向量,恢复code是很方便的(用标准正态分布乘以方差再加个均值就行了)。

再回过头来,我们现在要用VAE来生成会跳舞的小姐姐,无非就是先找到一个训练数据集,这里我找了个Youtube上的视频作为数据集:

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

然后根据VAE的原理构造一个编码和解码网络,用两个损失函数作为约束训练网络就行啦。代码就不一个个贴了,写起来很简单的,贴上来倒感觉有点麻烦,有需要的直接在公众号后台回复“dancenet”即可获取。简单说下代码使用方式吧,模型训练运行train.py文件即可,命令格式为:

python train.py --videopath xxx.mp4
模型测试运行demo.py文件即可,命令格式为:
python demo.py --mode random/fromtrain --checkpointspath xxx.pth --outputpath xxx.avi
这里模式的含义是code随机生成/从训练集中提取一些图片的code作为输入。

效果展示

随机生成code模式作为输入:

用Python生成会跳舞的美女

数据集中挑选图片过编码器获得code作为输入:

用Python生成会跳舞的美女


好了,我的分享到此结束了。

总结

到此这篇关于用Python生成会跳舞的美女的文章就介绍到这了,更多相关Python美女内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
Python环境搭建之OpenCV的步骤方法
Oct 20 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
详解python字节码
Feb 07 Python
flask中的wtforms使用方法
Jul 21 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Python web如何在IIS发布应用过程解析
May 27 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 Python
Python实现我的世界小游戏源代码
Mar 02 Python
python创建字典及相关管理操作
Apr 13 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 #Python
Python可变集合和不可变集合的构造方法大全
Dec 06 #Python
Python实现视频中添加音频工具详解
Dec 06 #Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
You might like
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
Nodejs实现用户注册功能
2019/04/14 NodeJs
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
Python的Django框架中if标签的相关使用
2015/07/15 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
python3实现随机数
2018/06/25 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
python验证码图片处理(二值化)
2019/11/01 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
python ssh 执行shell命令的示例
2020/09/29 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
深圳茁壮笔试题
2015/05/28 面试题
工商管理应届生求职信
2013/10/07 职场文书
门诊手术室工作制度
2014/01/30 职场文书
大学军训感言1000字
2014/02/25 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
高中生学习计划书
2014/09/15 职场文书