用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常用随机数与随机字符串方法实例
Apr 09 Python
详解Python中with语句的用法
Apr 15 Python
Python检测网站链接是否已存在
Apr 07 Python
Python内建模块struct实例详解
Feb 02 Python
TensorFlow如何实现反向传播
Feb 06 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
python制作填词游戏步骤详解
May 05 Python
Python web如何在IIS发布应用过程解析
May 27 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 Python
基于Python实现流星雨效果的绘制
Mar 18 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 #Python
Python可变集合和不可变集合的构造方法大全
Dec 06 #Python
Python实现视频中添加音频工具详解
Dec 06 #Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
You might like
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
php中socket通信机制实例详解
2015/01/03 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
JS模态窗口返回值兼容问题的完美解决方法
2016/05/28 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
python中如何使用虚拟环境
2020/10/14 Python
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
逃课上网检讨书
2014/02/20 职场文书
语文课外活动总结
2014/08/27 职场文书
2014年科技工作总结
2014/11/26 职场文书
电力工程合作意向书
2015/05/11 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
Python MNIST手写体识别详解与试练
2021/11/07 Python
Go语言读取txt文档的操作方法
2022/01/22 Golang
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python