用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动态网页批量爬取
Feb 14 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
你真的了解Python的random模块吗?
Dec 12 Python
python机器学习理论与实战(二)决策树
Jan 19 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
python ---lambda匿名函数介绍
Mar 13 Python
python的内存管理和垃圾回收机制详解
May 18 Python
浅谈python 中类属性共享的问题
Jul 02 Python
Python 字符串池化的前提
Jul 03 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
python利用opencv实现颜色检测
Feb 23 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 #Python
Python可变集合和不可变集合的构造方法大全
Dec 06 #Python
Python实现视频中添加音频工具详解
Dec 06 #Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
You might like
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
react build 后打包发布总结
2018/08/24 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
三步实现ionic3点击退出app程序
2019/09/17 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
机电一体化自荐信
2013/12/10 职场文书
社区禁毒工作方案
2014/06/02 职场文书
物业保安岗位职责
2014/07/02 职场文书
债务授权委托书范本
2014/10/17 职场文书
培训计划通知
2015/07/15 职场文书
sql注入报错之注入原理实例解析
2022/06/10 MySQL