导语

我今年31,没有女朋友,身体健康,性取向正常,不抽烟不喝酒不嫖娼,因为孤身一人在外地,技术宅,圈子又小,所以不知不觉单到现在。相亲的都是老家介绍,网上聊着聊着就没有后续了,所以就像一条咸鱼一样pia着,家里只知道催我结婚。表妹心疼我,为了逗我开心,教我用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的童鞋,可以参考UC Berkeley的这个教程:

https://arxiv.org/pdf/1606.05908.pdf

再回过头来,我们现在要用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作为输入:


好了,我的分享到此结束了。如果有其他小伙伴有更好玩的小技巧。欢迎在评论中进行讨论!另外我还整理了2022最新全套python学习资料,如果需要的话可以直接领取哦~
这份完整版的Python全套学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

在鹅厂工作的广西表妹教我用Python生成会跳舞的美女~相关推荐

  1. 裸辞25k鹅厂工作,待在家里全职接单,一个月我挣了多少?

    鹅厂裸辞?这是一个多么疯狂的决定啊,相信人多人应该不会吧 裸辞只是为了自由,毕竟我也还不到30岁,要是就这样困在鹅笼里,那得多不甘心啊 大家好,我是爱丽,首先介绍一下自己 94年,27岁 大专学历,自 ...

  2. python requests返回值为200 但是text无内容_手把手教你使用Python生成图灵智能小伙伴,实现工作助手闲聊功能

    /1 前言/ 在家闲着,做个小项目,基于Python,实现一个语聊小机器人,分享给大家.项目整体比较简单,官方文档介绍的非常详细,可快速上手. /2 目标/ 将图灵机器人放到桌面,实现工作助手/陪聊功 ...

  3. 手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能

    /1 前言/ 在家闲着,做个小项目,基于Python,实现一个语聊小机器人,分享给大家.项目整体比较简单,官方文档介绍的非常详细,可快速上手. /2 目标/ 将图灵机器人放到桌面,实现工作助手/陪聊功 ...

  4. 手把手教你使用Python生成图灵智能小伙伴

    /1 前言/ 在家闲着,做个小项目,基于Python,实现一个语聊小机器人,分享给大家.项目整体比较简单,官方文档介绍的非常详细,可快速上手. /2 目标/ 将图灵机器人放到桌面,实现工作助手/陪聊功 ...

  5. python生成词云代码无错窗口空框_10分钟教你用Python生成属于自己的词云图

    1 #导入需要模块 import jieba from PIL import Image import numpy as np import matplotlib.pyplot as plt from ...

  6. python头像教程_教你用 Python 生成一张全体微信好友的头像墙

    |前言 还记得前阵子这篇文章么: 『又来瞎鼓捣』微信群友相隔远?那也一键生成全家福 ,用来给群好友生成一张头像全家福的. 搞完那个之后我就在想,要不写一个微信好友全家福的吧?我微信里有一千多号人,生成 ...

  7. 你还在@微信官方,我来教你用Python生成你想要的微信头像

    前言 今天早上@微信官方突然火了,一句"请给我一面国旗@微信官方"刷遍朋友圈. 到底是什么呢?我们先来看看朋友圈 当然,这只是零零散散的部分截图,看到这些,一股热血洒了出来,我兴致 ...

  8. 教你用Python生成个性二维码

    编程就像做爱,你得为一个错误提供一辈子的支持 之前见到的二维码都是这样的,很是枯燥,我们需要一些个性化的东西 今天就给大家介绍一个库专门做二维码的,它叫qrcode,你可以使用pip安装它 这个库使用 ...

  9. 教你用Python生成词云

    程序员有三种美德:懒惰,急躁和傲慢 平时在网上经常看到这样的图片 我就想,这些东西能不能用python实现呢,果然python库无所不在,有一个库wordcloud就是干这个的 如果你没有可以使用pi ...

最新文章

  1. 查看python安装的包
  2. Pyhton学习——Day3
  3. Java基础班学习笔记(15)GUI图形界面编程
  4. python居中对齐代码end_Python tkinter.END属性代码示例
  5. Mybatsi注解开发-基础操作
  6. 【Linux系统编程】IO多路复用之select
  7. SAP Spartacus 的 cx-page-layout selector 介绍 - PageLayoutComponent
  8. https 密钥 php,https加密方式是什么
  9. 体验Microsoft Expression Blend 3 Preview
  10. map按kye排序 按value排序
  11. ajax post 数组
  12. 实战 | 使用Slack、Docker来打造你的运维机器人
  13. Java开发实战经典学习记录(一)
  14. 【电子商务法】北邮国际学院大三上期末复习
  15. ibus mozc 日文输入法
  16. 基于SSM的手机商城-JAVA【数据库设计、源码、开题报告】
  17. 从零开始理解Android下View(一)----学习笔记(参考郭霖大神博客)
  18. 数据处理案例一之求同存异
  19. Day12:股海浮沉-锦囊妙计
  20. 视频点播系统,视频播放器,在线视频点播学习系统毕业设计

热门文章

  1. Linux 7通过防火墙安全策略修补安全漏洞
  2. 软件工程之软件开发和软件测试模型
  3. 2020年Web前端学习网站导航
  4. java 循环字母_java循环26个字母
  5. 【调剂】中国民航大学课题组招收硕士生,等离子体模拟领域,国家自然科学基金资助课题...
  6. 【UV打印机】理光喷头组合说明(24H)
  7. 不知道ai绘画如何使用?这几个ai绘画软件推荐给你
  8. “大学生就业难”与IT外包服务带给我的启发
  9. 力扣每日一题:891. 子序列宽度之和(java)
  10. iOS 通过数字拼音快速搜索股票