用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验证码识别
Jan 25 Python
python 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
Python搭建Spark分布式集群环境
Jul 05 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
Python中Selenium库使用教程详解
Jul 23 Python
用python绘制樱花树
Oct 09 Python
Python eval函数原理及用法解析
Nov 14 Python
Python 如何安装Selenium
May 06 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查看当前变量类型的方法
2015/07/31 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
python多任务之协程的使用详解
2019/08/26 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
应聘护士自荐信
2013/10/21 职场文书
党章学习思想汇报
2014/01/14 职场文书
团代会主持词
2014/04/02 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
材料员岗位职责范本
2015/04/11 职场文书
Python基础详解之描述符
2021/04/28 Python
python迷宫问题深度优先遍历实例
2021/06/20 Python