用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 相关文章推荐
解读Python编程中的命名空间与作用域
Oct 16 Python
Python正则表达式使用经典实例
Jun 21 Python
Python处理CSV与List的转换方法
Apr 19 Python
tensorflow更改变量的值实例
Jul 30 Python
python实现旋转和水平翻转的方法
Oct 25 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 Python
谈谈python垃圾回收机制
Sep 27 Python
Python高并发和多线程有什么关系
Nov 14 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 Python
举例讲解Python装饰器
Dec 24 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的计数器程序
2006/10/09 PHP
php UBB 解析实现代码
2011/11/27 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
web 页面分页打印的实现
2009/06/22 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python解决网站的反爬虫策略总结
2016/10/26 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
python绘制多个子图的实例
2019/07/07 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
活动邀请函范文
2014/01/19 职场文书
趣味运动会广播稿
2014/09/13 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js