用Python生成会跳舞的美女

目录
  • 导语
  • 开发工具
  • 相关模块:
  • 环境搭建
  • 原理简介
  • 效果展示
  • 总结

导语

表妹心疼我,为了逗我开心,教我用Python制作会跳舞的美女。作为新时代的活雷锋,在这里分享给大家。

开发工具

Python版本:3.6.4

相关模块:

torch0.4.1模块;
torchvision0.2.2模块;
opencv-python模块;
argparse模块;
numpy模块;
以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

(PS:CUDA环境配置请自行Google教程。)

原理简介

这里我们利用VAE的原理来生成会跳舞的小姐姐呗。先简单介绍一下理论知识,要说VAE,就得先谈谈自动编码器,自动编码器最开始用于数据压缩,其原理图十分简单直观:

在模型训练时,输入图片首先通过一个编码器(现在当然是神经网络啦)将输入数据降维到一个code,接着将code输入到解码器(当然还是神经网络啦)生成一个与输入相同大小的图片,网络的优化目标就是使得输入编码器的图片与解码器输出的图片尽可能相似。 当模型训练完之后,我们就可以拿出这个解码器,随机传入一些code作为它的输入,来生成一些差不多的图片。但是这种做法存在一个问题,就是编码器生成的code包含了原图信息,因此,我们就无法自己构造一些随机的code来作为解码器输入从而生成任意图片(必须是现有图片过了编码器之后生成的code作为输入)。为了解决这个问题,VAE就诞生啦~VAE的全称是:

Variational Autoencoder 即变分自编码器
说起来,它的原理图也十分简单:

与自编码器唯一不同就是在训练过程中对code也进行了约束,使得code满足某种分布(譬如正态分布)。这样的话,模型训练完之后,我们只需要随机生成一个满足该分布的code,就可以拿来作为解码器的输入,从而生成任意图片啦~ 一般地,我们用均方损失函数保证原图和生成图相似,用KL损失函数来保证code满足我们所要求的分布。均方损失大家肯定知道,KL散度的定义这里我也不想过多地去介绍,贴下维基百科上定义的公式吧:

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模式作为输入:

数据集中挑选图片过编码器获得code作为输入:

好了,我的分享到此结束了。

总结

到此这篇关于用Python生成会跳舞的美女的文章就介绍到这了,更多相关Python美女内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python制作爬虫抓取美女图

    作为一个新世纪有思想有文化有道德时刻准备着的屌丝男青年,在现在这样一个社会中,心疼我大慢播抵制大百度的前提下,没事儿上上网逛逛YY看看斗鱼翻翻美女图片那是必不可少的,可是美图虽多翻页费劲!今天我们就搞个爬虫把美图都给扒下来!本次实例有2个:煎蛋上的妹子图,某网站的rosi图.我只是一个学习python的菜鸟,技术不可耻,技术是无罪的!!! 煎蛋: 先说说程序的流程:获取煎蛋妹子图URL,得到网页代码,提取妹子图片地址,访问图片地址并将图片保存到本地.Ready? 先让我们看看煎蛋妹子网页: 我们

  • 只用50行Python代码爬取网络美女高清图片

    一.技术路线 requests:网页请求 BeautifulSoup:解析html网页 re:正则表达式,提取html网页信息 os:保存文件 import re import requests import os from bs4 import BeautifulSoup 二.获取网页信息 常规操作,获取网页信息的固定格式,返回的字符串格式的网页内容,其中headers参数可模拟人为的操作,'欺骗'网站不被发现 def getHtml(url): #固定格式,获取html内容 headers

  • 用Python生成会跳舞的美女

    目录 导语 开发工具 相关模块: 环境搭建 原理简介 效果展示 总结 导语 表妹心疼我,为了逗我开心,教我用Python制作会跳舞的美女.作为新时代的活雷锋,在这里分享给大家. 开发工具 Python版本:3.6.4 相关模块: torch0.4.1模块:torchvision0.2.2模块:opencv-python模块:argparse模块:numpy模块:以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. (PS:CUDA环境配置请

  • 利用python生成一个导出数据库的bat脚本文件的方法

    实例如下: # 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库实例的sql语句 sql = 'mysqldump -u%s -p%s -h%s -P%d --default-character-set=utf8 --databases mu_ins_s%s > %s.s%d.mu_ins_%d.sql' %(db['user'], db['pwd'], db['host'], db['port'], index, db['serv

  • Python生成数字图片代码分享

    本文向大家分享了几段Python生成数字图片的代码,喜欢的朋友可以参考.具体如下: 最终版本 # -*- coding:utf-8 -*- from PIL import Image,ImageFont,ImageDraw,ImageFilter import random import os import time class Code(object): def __init__(self, imgSize=(35,35),\ fontSize=25, bgColor=(255,)*4, fo

  • 使用Python生成XML的方法实例

    本文实例讲述了使用Python生成XML的方法.分享给大家供大家参考,具体如下: 1. bookstore.py #encoding:utf-8 ''' 根据一个给定的XML Schema,使用DOM树的形式从空白文件生成一个XML. ''' from xml.dom.minidom import Document doc = Document() #创建DOM文档对象 bookstore = doc.createElement('bookstore') #创建根元素 bookstore.set

  • python生成IP段的方法

    本文实例讲述了python生成IP段的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/local/bin/python #-*- coding: UTF-8 -*- ############################################################# # python 生成IP段 ############################################################# if __name__ == '__mai

  • Python生成不重复随机值的方法

    本文实例讲述了Python生成不重复随机值的方法.分享给大家供大家参考.具体分析如下: 这里从一列表中,生成不重复的随机值 算法实现如下: import random total = 100 li = [i for i in range(total)] res = [] num = 20 for i in range(num): t = random.randint(i,total-1) res.append(li[t]) li[t], li[i] = li[i], li[t] print re

  • Python生成随机数的方法

    如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文章的介绍. random.random()用于生成 用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成随机数 n: a <= n <= b.如果 a <b, 则 b <= n <= a. print random.uniform(

  • Python生成随机验证码的两种方法

    使用python生成随机验证码的方法有很多种,今天小编给大家分享两种方法,大家可以灵活运用这两种方法,设计出适合自己的验证码方法. 方法一: 利用range方法,对于range方法不清楚的同学,请参考文章<python开发的range()函数> # -*- coding: utf-8 -*- import random def generate_verification_code(len=6): ''' 随机生成6位的验证码 ''' # 注意: 这里我们生成的是0-9A-Za-z的列表,当然你

  • Python生成随机数组的方法小结

    本文实例讲述了Python生成随机数组的方法.分享给大家供大家参考,具体如下: 研究排序问题的时候常常需要生成随机数组来验证自己排序算法的正确性和性能,今天把Python生成随机数组的方法稍作总结,以备以后查看使用. 一.使用random模块生成随机数组 python的random模块中有一些生成随机数字的方法,例如random.randint, random.random, random.uniform, random.randrange,这些函数大同小异,均是在返回指定范围内的一个整数或浮点

  • python生成随机密码或随机字符串的方法

    本文实例讲述了python生成随机密码或随机字符串的方法.分享给大家供大家参考.具体实现方法如下: import string,random def makePassword(minlength=5,maxlength=25): length=random.randint(minlength,maxlength) letters=string.ascii_letters+string.digits # alphanumeric, upper and lowercase return ''.joi

随机推荐