用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实现字典依据value排序
Feb 24 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
python读取和保存视频文件
Apr 16 Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 Python
mac在matplotlib中显示中文的操作方法
Mar 06 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
Python软件包安装的三种常见方法
Jul 07 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 #Python
Python可变集合和不可变集合的构造方法大全
Dec 06 #Python
Python实现视频中添加音频工具详解
Dec 06 #Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
You might like
PHPMailer安装方法及简单实例
2008/11/25 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
安装dbus-python的简要教程
2015/05/05 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
django 模版关闭转义方式
2020/05/14 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
教学改革问题查摆整改措施
2014/09/27 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL
Linux磁盘管理方法介绍
2022/06/01 Servers