基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python 计算机竞赛
文章目录
- 1 前言
- 1 课题背景
- 2 GAN(生成对抗网络)
- 2.1 简介
- 2.2 基本原理
- 3 DeOldify 框架
- 4 First Order Motion Model
- 5 最后
1 前言
🔥 优质竞赛项目系列,今天要分享的是
🚩 基于生成对抗网络的照片上色动态算法设计与实现
该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:4分
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
1 课题背景
随着科技的发展,现在已经没有朋友会再去买胶卷拍照片了。不过对于很多70、80后来说,他们家中还保存着大量之前拍摄的胶卷和老照片。这些老照片是一个时代的记忆,记录着我们生活中的点点滴滴。不过时代发展了,这些老照片的保存和浏览也应该与时俱进。在本期文章中,我们就介绍如何将这些老照片转化为数字照片,更方便大家在电脑或者手机上浏览、保存和回忆。
本项目中我们利用生成对抗网络-GAN和图像动作驱动-First Order Motion Model来给老照片上色并使它动起来。
2 GAN(生成对抗网络)
2.1 简介
**GANs(Generative adversarial networks,对抗式生成网络)**可以把这三个单词拆分理解。
- Generative :生成式模型
- Adversarial :采取对抗的策略
- Networks :网络(不一定是深度学习)
模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative
Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D
都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。
2.2 基本原理
这里介绍的是原生的GAN算法,虽然有一些不足,但提供了一种生成对抗性的新思路。放心,我这篇博文不会堆一大堆公式,只会提供一种理解思路。
理解GAN的两大护法G和D,生成对抗网络(GAN)由2个重要的部分构成:
- 生成器(Generator ):通过机器生成数据(大部分情况下是图像),负责凭空捏造数据出来,目的是“骗过”判别器
- 判别器(Discriminator ):判断这张图像是真实的还是机器生成的,负责判断数据是不是真数据,目的是找出生成器做的“假数据”
这样可以简单的看作是两个网络的博弈过程。在最原始的GAN论文里面,G和D都是两个多层感知机网络。首先,注意一点,GAN操作的数据不一定非得是图像数据,不过为了更方便解释,用图像数据为例解释以下GAN:
tensorflow实现
import tensorflow as tfdef load_dataset(mnist_size, mnist_batch_size, cifar_size, cifar_batch_size,):""" load mnist and cifar10 dataset to shuffle.Args:mnist_size: mnist dataset size.mnist_batch_size: every train dataset of mnist.cifar_size: cifar10 dataset size.cifar_batch_size: every train dataset of cifar10.Returns:mnist dataset, cifar10 dataset"""# load mnist data(mnist_train_images, mnist_train_labels), (_, _) = tf.keras.datasets.mnist.load_data()# load cifar10 data(cifar_train_images, cifar_train_labels), (_, _) = tf.keras.datasets.cifar10.load_data()mnist_train_images = mnist_train_images.reshape(mnist_train_images.shape[0], 28, 28, 1).astype('float32')mnist_train_images = (mnist_train_images - 127.5) / 127.5 # Normalize the images to [-1, 1]cifar_train_images = cifar_train_images.reshape(cifar_train_images.shape[0], 32, 32, 3).astype('float32')cifar_train_images = (cifar_train_images - 127.5) / 127.5 # Normalize the images to [-1, 1]# Batch and shuffle the datamnist_train_dataset = tf.data.Dataset.from_tensor_slices(mnist_train_images)mnist_train_dataset = mnist_train_dataset.shuffle(mnist_size).batch(mnist_batch_size)cifar_train_dataset = tf.data.Dataset.from_tensor_slices(cifar_train_images)cifar_train_dataset = cifar_train_dataset.shuffle(cifar_size).batch(cifar_batch_size)return mnist_train_dataset, cifar_train_dataset
3 DeOldify 框架
本项目中用到的上色就用到了DeOldify 框架,DeOldify 创建的目的是为了给黑白照片上色,但让人惊艳的是它除了能处理图片外,也可以处理视频;
DeOldify 的核心网络框架是 GAN ,对比以前上色技术有以下几个特点:
- 1,老照片中的伪影在上色过程中会被消除;
- 2,老照片的人脸部位来说,处理后皮肤会变得更光滑;
- 3,呈现更详细、真实的渲染效果;
实现过程
准备好权重文件
相关代码
#部分代码
def deoldify(self,img,render_factor=35):"""风格化"""# 转换通道img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)pil_img = Image.fromarray(img)# 渲染彩图color_img = self.deoldify_model.filter(pil_img, pil_img, render_factor=render_factor,post_process=True)color_img = np.asarray(color_img)color_img = cv2.cvtColor(color_img, cv2.COLOR_RGB2BGR)# 转为numpy图print('deoldify 转换成功')return np.asarray(color_img)
实现效果:
4 First Order Motion Model
First Order Motion model的任务是image
animation,给定一张源图片,给定一个驱动视频,生成一段视频,其中主角是源图片,动作是驱动视频中的动作,源图像通常包含一个主体,驱动视频包含一系列动作。
通俗来说,First Order
Motion能够将给定的驱动视频中的人物A的动作迁移至给定的源图片中的人物B身上,生成全新的以人物B的脸演绎人物A的表情的视频。
以人脸表情迁移为例,给定一个源人物,给定一个驱动视频,可以生成一个视频,其中主体是源人物,视频中源人物的表情是由驱动视频中的表情所确定的。通常情况下,我们需要对源人物进行人脸关键点标注、进行表情迁移的模型训练。
基本框架
first-order 的算法框架如下图所示,主要包括三个部分的网络,keyporint detector
检测图像中的关键点,以及每个关键点对应的jaccobian矩阵;dense motion network 基于前面的结果生成最终的transform map
以及occulation map;使用transform map 和 occulation map 对编码后的source feature
做变换和mask处理,再decoder 生成出最终的结果。
本项目相关代码
def FOM_video(self,driving_video,source_image,result_video):# 读取图片source_image = imageio.imread(source_image)# 读取视频reader = imageio.get_reader(driving_video)fps = reader.get_meta_data()['fps']driving_video = []try:for im in reader:driving_video.append(im)except RuntimeError:passreader.close()# 预处理source_image = resize(source_image, (255, 255))[..., :3]driving_video = [resize(frame, (255, 255))[..., :3] for frame in driving_video]# 推理predictions = self.make_animation(source_image, driving_video, self.fom_generator, self.fom_kp_detector, relative=True, adapt_movement_scale=True, cpu=True)# 保存imageio.mimsave(result_video, [img_as_ubyte(frame) for frame in predictions], fps=fps)driving_video = './images/test2.mp4'
source_image = './images/out2.jpg'
result_video = './putput/result.mp4'
# 图像动起来
gan.FOM_video(driving_video, source_image,result_video)
运行如下命令,实现表情动作迁移。其中,各参数的具体使用说明如下:
- driving_video: 驱动视频,视频中人物的表情动作作为待迁移的对象。本项目中驱动视频路径为 “work/driving_video.MOV”,大家可以上传自己准备的视频,更换
driving_video
参数对应的路径; - source_image: 原始图片,视频中人物的表情动作将迁移到该原始图片中的人物上。这里原始图片路径使用 “work/image.jpeg”,大家可以使用自己准备的图片,更换
source_image
参数对应的路径; - relative: 指示程序中使用视频和图片中人物关键点的相对坐标还是绝对坐标,建议使用相对坐标,若使用绝对坐标,会导致迁移后人物扭曲变形;
- adapt_scale: 根据关键点凸包自适应运动尺度;
- ratio: 针对多人脸,将框出来的人脸贴回原图时的区域占宽高的比例,默认为0.4,范围为【0.4,0.5】
命令运行成功后会在ouput文件夹生成名为result.mp4的视频文件,该文件即为动作迁移后的视频。
实现效果:
,若使用绝对坐标,会导致迁移后人物扭曲变形;
- adapt_scale: 根据关键点凸包自适应运动尺度;
- ratio: 针对多人脸,将框出来的人脸贴回原图时的区域占宽高的比例,默认为0.4,范围为【0.4,0.5】
命令运行成功后会在ouput文件夹生成名为result.mp4的视频文件,该文件即为动作迁移后的视频。
实现效果:
5 最后
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
相关文章:

基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python 计算机竞赛
文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…...

广州华锐互动:数字孪生可视化制作软件有哪些亮点?
由广州华锐互动开发的数字孪生可视化制作软件在当今的数字孪生领域中扮演着重要角色,它突破了许多传统数字孪生可视化制作软件的限制。以下是几个方面的突破: 无限自由度:传统的3D建模工具通常有限制编辑器的自由度,使用户难以进行…...

设计模式之工厂模式讲解与案例
工厂模式是一种创建对象的设计模式,它通过提供一个统一的接口来创建对象,隐藏了具体对象的实例化过程。Java中的工厂模式有多种实现方式,下面我将举两个常见的例子。 简单工厂模式(Simple Factory Pattern):…...

(免费领源码)php#MySQL软件测试文档管理系统28035-计算机毕业设计项目选题推荐
目 录 摘 要 Abstract 第1章 前 言 1.1 研究背景 1.2 开发意义 1.3 系统开发目标 第2章 系统开发环境 6 2.1 HTTP协议 6 2.2 HTML网页技术 6 2.3 B/S结构 6 2.4 PHP脚本语言 7 2.5 MySQL数据库 7 2.6 Apache简介 8 第3章 需求分析 3.1 需求分析 3.2 系统可…...

05.Oracle数据库对象
Oracle数据库对象 Oracle数据库对象是指在Oracle数据库中存储和管理数据的各种实体。以下是一些常见的Oracle数据库对象: 表(Table):用于存储数据的基本结构。表由一组列(Column)组成,每列定义了…...

某国产中间件企业:提升研发安全能力,助力数字化建设安全发展
某国产中间件企业是我国中间件领导者,国内领先的大安全及行业信息化解决方案提供商,为各个行业领域近万家企业客户提供先进的中间件、信息安全及行业数字化产品、解决方案及服务支撑,致力于构建安全科学的数字世界,帮助客户实现…...

Servlet中主要的内置对象
Servlet中有一些内置对象,它们提供了与 Web 容器和客户端交互的功能。这些对象在开发Servlet时可以直接使用,无需显式创建。 一些主要的内置对象包括: HttpServletRequest:代表客户端的HTTP请求,提供访问请求的内容&am…...

STL-set和map
目录 一、pair和make_pair 1. pair 2. make_pair 二、set (一)set的模板参数列表 (二)set的构造 (三)set的插入 1. 测试1 2. 测试2 (四)low_bound和upper_boundÿ…...

【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件
文章目录 1.ProgressBar2. ImageList3.ListView控件 1.ProgressBar 用于显示某个操作的进度。 属性: Value: 表示当前进度条的值,其范围由Min和Max决定。Step: 设置每次调用PerformStep()方法时增加的步长。MarqueeAnimationSpeed: 在Style设置为Marq…...

写一个简单实用的Excel工具类
我们在开发中经常要将数据导入成Excel表格供展示,也需要解析Excel中的数据,官方提供的api操作太麻烦,这边封装了一个Excel工具类,可以很轻松的实现Excel的操作 首先加入依赖 <dependencies><!-- EasyPoi 基本库依赖 --…...

C#中LINQtoObjects、LINQtoDataSet和LINQtoXML
目录 一、使用LINQ操作数组和集合 二、使用LINQ操作DataSet数据集 1.AsEnumerable()方法 2.CopyToDataTable()方法 3.AsDataView()方法 4.Take()方法 5.Sum()方法 6.示例 (1)源码 (2)生成效果 三、使用LINQ操作XML 1.…...

k8s中 RBAC中,clusterrole,serviceaccount , rolebinding 是什么关系谁先谁后
在Kubernetes的RBAC(Role-Based Access Control)中,ClusterRole、ServiceAccount和RoleBinding是三个关键的组件,它们之间的关系如下: ClusterRole:ClusterRole 是一种全局的权限规则,它定义了一…...

什么是文件安全
文件安全就是通过实施严格的访问控制措施和完美的权限卫生来保护您的业务关键信息不被窥探,除了启用和监控安全访问控制外,整理数据存储在保护文件方面也起着重要作用。通过清除旧的、过时的和其他垃圾文件来定期优化文件存储,以专注于关键业…...

maven的settings.xml和pom.xml配置文件详解
一、配置文件 maven的配置文件主要有 settings.xml 和pom.xml 两个文件。 其中在maven安装目录下的settings.xml,如:D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件 用户目录的.m2子目录下的settings.xml,如&#…...

YB2503HV 100V 3A SOP8内置MOS 高效率降压IC(昱灿)
YB2503HV 100V 3A SOP8内置MOS 高效率降压IC 描述: YB2503HV是单片集成可设定输出电流的开关型降压恒压驱动器,可工作在宽输入电压范围具有优良的负载和线性调整度。安全保护机制包括每周期的峰值限流、软启动、过压保护和温度保护。YB2503HV需要非常少…...

Redis安装Linux
1、下载安装包 wget http://download.redis.io/releases/redis-3.0.0.tar.gz 2、安装 mkdir /usr/local/redis cp redis-3.0.0.tar.gz /usr/local/redis cd /usr/local/redis tar -zxvf redis-3.0.0.tar.gz cd /usr/local/redis/redis-3.0.0 make PREFIX/usr/local/red…...

PCL点云处理(007)-Ransac
随机抽样一致性算法RANSAC(Random sample consensus)是一种迭代的方法来从一系列包含有离异值的数据中计算数学模型参数的方法。 RANSAC算法本质上由两步组成,不断进行循环: 从输入数据中随机选出能组成数学模型的最小数目的元素,使用这些元素…...

有方N58 HTTP POST 请求连接 TDengine
串口调试软件:格西调试精灵 第一步先注册网络获取IP地址 建立PPP连接 ATXIIC1\r PPP链路建立成功,查询IP地址 ATXIIC?\r 设置网络APN ATCREG?\r 运行结果,红线处是获…...

基于Python+Pygame实现一个滑雪小游戏
目录 项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取 一、项目介绍 使用介绍:运行main.py文件后,通过左右按键可以控制小人的移动,如果经过旗杆那么10分,如果碰到树木那么减50分。 二、Pygame介绍 Pygame是一个用于游…...

【限制输入框值类型】自定义指令el-input输入类型限制,vue和html两个版本
前言 经常遇到输入框需要限制只能输入数字的, 因为用户很离谱,明显输入数字的地方他非要输入英文或者中文 但是用到UI框架或者自己写方法验证表单比较麻烦 为了一个输入框专门去弄一个验证很麻烦 所以这里就整合了两种自定义指令的方式,更加…...

对一个金融风控测额公式的理解(1)
目录 公式:(近3个月回款总额/过去3个月的FBA平均库存价值)*最近FBA的库存价值*过去13周FBA发货比例 详细讨论一下这个:(近3个月回款总额/过去3个月的FBA平均库存价值) 既然(近3个月回款总额/…...

【GEE】2、探索数据集
1简介 在本单元中,我们将讨论以下概念: Google 地球引擎中可用的潜在数据来源。 通过生态示例显示的数据集采样用例。 如何使用 Google 地球引擎访问重要的元数据。 2背景 要将遥感集成到您的研究和分析中,学习如何解析 Google 地球引擎上…...

开发一款直播弹幕游戏需要多少钱?
开发一款直播弹幕游戏需要多少钱?有好多朋友在咨询过弹幕游戏的开发价格后,都会比较吃惊,一款体量这么小的游戏为什么动辄就要几万块甚至十几万? 我来给你们说分析一下原因,这种游戏如果脱离开直播间,可以…...

STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出
1. 课程概述(297.1) 课程要求:C语言熟练,提前学完 C51 2. 开发软件Keil5的安装(298.2) 开发环境的安装 编程语言:C语言需要安装的软件有两个:Keil5 和 STM32CubeMX Keil5 的安装…...

selenium元素定位 —— 提高篇 CSS定位元素
CSS (Cascading Style Sheets) 是一种用于渲染 HTML 或者 XML 文档的语言,CSS 利用其选择器可以将样式属性绑定到文档中的指定元素。理论上说无论一个元素定位有多复杂都能够定位到元素。 因为不同的浏览器 XPath 引擎不同甚至没有自己的 Xpath 引擎,这…...

隔离和非隔离电源的区别
一、电源隔离与非隔离 电源的隔离与非隔离,主要是针对开关电源而言,业内比较通用的看法是: 1、隔离电源:电源的输入回路和输出回路之间没有直接的电气连接,输入和输出之间是绝缘的高阻态,没有电流回路。 …...

C语言自定义数据类型
一、构造数据类型 构造数据类型:用户自己建立的数据类型(自定义数据类型) C语言中的自定义数据类型有:数组类型、结构体类型、共用体类型和枚举类型。 1.1. 结构体 C语言允许用户根据需要自己建立的由不同类型数据组成的组合型…...

SoftwareTest5 - 你就只知道功能测试吗 ?
你就只知道功能测试吗 ? 一 . 按照测试对象划分1.1 文档测试1.2 可靠性测试1.3 容错性测试1.4 安装卸载测试1.5 内存泄漏测试1.6 弱网测试 二 . 按是否查看代码划分2.1 黑盒测试2.2 白盒测试2.3 灰盒测试 三 . 按照开发阶段划分3.1 单元测试3.2 集成测试3.3 冒烟测试3.4 系统测…...

Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式
在 Uniapp 中,可以通过使用 uni-app 统一的 API 来同时兼容 H5、web、App 和微信小程序,而引入高德地图则有以下两种语法格式供选择: 使用 Vue.js 的语法格式: <template><view><map :longitude"longitude&…...

基于nodejs+vue网上鲜花销售系统
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...