当前位置: 首页 > news >正文

竞赛 深度学习图像修复算法 - opencv python 机器视觉

文章目录

  • 0 前言
  • 2 什么是图像内容填充修复
  • 3 原理分析
    • 3.1 第一步:将图像理解为一个概率分布的样本
    • 3.2 补全图像
  • 3.3 快速生成假图像
    • 3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构
    • 3.5 使用G(z)生成伪图像
  • 4 在Tensorflow上构建DCGANs
  • 最后

0 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 深度学图像修复算法

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

2 什么是图像内容填充修复

内容识别填充(译注: Content-aware fill ,是 photoshop
的一个功能)是一个强大的工具,设计师和摄影师可以用它来填充图片中不想要的部分或者缺失的部分。在填充图片的缺失或损坏的部分时,图像补全和修复是两种密切相关的技术。有很多方法可以实现内容识别填充,图像补全和修复。

  • 首先我们将图像理解为一个概率分布的样本。
  • 基于这种理解,学*如何生成伪图片。
  • 然后我们找到最适合填充回去的伪图片。

在这里插入图片描述

自动删除不需要的部分(海滩上的人)
在这里插入图片描述

最经典的人脸补充

补充前:

在这里插入图片描述

补充后:
在这里插入图片描述

3 原理分析

3.1 第一步:将图像理解为一个概率分布的样本

你是怎样补全缺失信息的呢?

在上面的例子中,想象你正在构造一个可以填充缺失部分的系统。你会怎么做呢?你觉得人类大脑是怎么做的呢?你使用了什么样的信息呢?

在博文中,我们会关注两种信息:

语境信息:你可以通过周围的像素来推测缺失像素的信息。

感知信息:你会用“正常”的部分来填充,比如你在现实生活中或其它图片上看到的样子。
两者都很重要。没有语境信息,你怎么知道填充哪一个进去?没有感知信息,通过同样的上下文可以生成无数种可能。有些机器学*系统看起来“正常”的图片,人类看起来可能不太正常。
如果有一种确切的、直观的算法,可以捕获前文图像补全步骤介绍中提到的两种属性,那就再好不过了。对于特定的情况,构造这样的算法是可行的。但是没有一般的方法。目前最好的解决方案是通过统计和机器学习来得到一个类似的技术。

在这里插入图片描述

从这个分布中采样,就可以得到一些数据。需要搞清楚的是PDF和样本之间的联系。

在这里插入图片描述

从正态分布中的采样

在这里插入图片描述
2维图像的PDF和采样。 PDF 用等高线图表示,样本点画在上面。

3.2 补全图像

首先考虑多变量正态分布, 以求得到一些启发。给定 x=1 , 那么 y 最可能的值是什么?我们可以固定x的值,然后找到使PDF最大的 y。
在这里插入图片描述
在多维正态分布中,给定x,得到最大可能的y

这个概念可以很自然地推广到图像概率分布。我们已知一些值,希望补全缺失值。这可以简单理解成一个最大化问题。我们搜索所有可能的缺失值,用于补全的图像就是可能性最大的值。
从正态分布的样本来看,只通过样本,我们就可以得出PDF。只需挑选你喜欢的 统计模型, 然后拟合数据即可。
然而,我们实际上并没有使用这种方法。对于简单分布来说,PDF很容易得出来。但是对于更复杂的图像分布来说,就十分困难,难以处理。之所以复杂,一部分原因是复杂的条件依赖:一个像素的值依赖于图像中其它像素的值。另外,最大化一个一般的PDF是一个非常困难和棘手的非凸优化问题。

3.3 快速生成假图像

在未知概率分布情况下,学习生成新样本

除了学 如何计算PDF之外,统计学中另一个成熟的想法是学 怎样用 生成模型
生成新的(随机)样本。生成模型一般很难训练和处理,但是后来深度学*社区在这个领域有了一个惊人的突破。Yann LeCun 在这篇 Quora
回答中对如何进行生成模型的训练进行了一番精彩的论述,并将它称为机器学习领域10年来最有意思的想法。

3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构

使用微步长卷积,对图像进行上采样

在这里插入图片描述
现在我们有了微步长卷积结构,可以得到G(z)的表达,以一个向量z∼pz 作为输入,输出一张 64x64x3 的RGB图像。

在这里插入图片描述

3.5 使用G(z)生成伪图像

基于DCGAN的人脸代数运算 DCGAN论文 。

在这里插入图片描述

4 在Tensorflow上构建DCGANs

部分代码:

def generator(self, z):self.z_, self.h0_w, self.h0_b = linear(z, self.gf_dim*8*4*4, 'g_h0_lin', with_w=True)self.h0 = tf.reshape(self.z_, [-1, 4, 4, self.gf_dim * 8])h0 = tf.nn.relu(self.g_bn0(self.h0))self.h1, self.h1_w, self.h1_b = conv2d_transpose(h0,[self.batch_size, 8, 8, self.gf_dim*4], name='g_h1', with_w=True)h1 = tf.nn.relu(self.g_bn1(self.h1))h2, self.h2_w, self.h2_b = conv2d_transpose(h1,[self.batch_size, 16, 16, self.gf_dim*2], name='g_h2', with_w=True)h2 = tf.nn.relu(self.g_bn2(h2))h3, self.h3_w, self.h3_b = conv2d_transpose(h2,[self.batch_size, 32, 32, self.gf_dim*1], name='g_h3', with_w=True)h3 = tf.nn.relu(self.g_bn3(h3))h4, self.h4_w, self.h4_b = conv2d_transpose(h3,[self.batch_size, 64, 64, 3], name='g_h4', with_w=True)return tf.nn.tanh(h4)def discriminator(self, image, reuse=False):if reuse:tf.get_variable_scope().reuse_variables()h0 = lrelu(conv2d(image, self.df_dim, name='d_h0_conv'))h1 = lrelu(self.d_bn1(conv2d(h0, self.df_dim*2, name='d_h1_conv')))h2 = lrelu(self.d_bn2(conv2d(h1, self.df_dim*4, name='d_h2_conv')))h3 = lrelu(self.d_bn3(conv2d(h2, self.df_dim*8, name='d_h3_conv')))h4 = linear(tf.reshape(h3, [-1, 8192]), 1, 'd_h3_lin')return tf.nn.sigmoid(h4), h4

当我们初始化这个类的时候,将要用到这两个函数来构建模型。我们需要两个判别器,它们共享(复用)参数。一个用于来自数据分布的小批图像,另一个用于生成器生成的小批图像。

self.G = self.generator(self.z)
self.D, self.D_logits = self.discriminator(self.images)
self.D_, self.D_logits_ = self.discriminator(self.G, reuse=True)

接下来,我们定义损失函数。这里我们不用求和,而是用D的预测值和真实值之间的交叉熵(cross
entropy),因为它更好用。判别器希望对所有“真”数据的预测都是1,对所有生成器生成的“伪”数据的预测都是0。生成器希望判别器对两者的预测都是1 。

self.d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(self.D_logits,tf.ones_like(self.D)))
self.d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(self.D_logits_,tf.zeros_like(self.D_)))
self.g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(self.D_logits_,tf.ones_like(self.D_)))
self.d_loss = self.d_loss_real + self.d_loss_fake

下面我们遍历数据。每一次迭代,我们采样一个小批数据,然后使用优化器来更新网络。有趣的是,如果G只更新一次,鉴别器的损失不会变成0。另外,我认为最后调用
d_loss_fake 和 d_loss_real 进行了一些不必要的计算, 因为这些值在 d_optim 和 g_optim 中已经计算过了。
作为Tensorflow 的一个联系,你可以试着优化这一部分,并发送PR到原始的repo。

for epoch in xrange(config.epoch):...for idx in xrange(0, batch_idxs):batch_images = ...batch_z = np.random.uniform(-1, 1, [config.batch_size, self.z_dim]) \.astype(np.float32)# Update D network_, summary_str = self.sess.run([d_optim, self.d_sum],feed_dict={ self.images: batch_images, self.z: batch_z })# Update G network_, summary_str = self.sess.run([g_optim, self.g_sum],feed_dict={ self.z: batch_z })# Run g_optim twice to make sure that d_loss does not go to zero (different from paper)_, summary_str = self.sess.run([g_optim, self.g_sum],feed_dict={ self.z: batch_z })errD_fake = self.d_loss_fake.eval({self.z: batch_z})errD_real = self.d_loss_real.eval({self.images: batch_images})errG = self.g_loss.eval({self.z: batch_z})

最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

相关文章:

竞赛 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…...

flutter升级+生成drift文件

1. flutter升级 可以安装fvm进行flutter version manager FVM 安装笔记 - 掘金 (juejin.cn) 使用flutter upgrade, 但是没有效果, 可能需要到我的电脑中,更改高级系统设置;改变/增加环境变量;用来加上flutter官网获取信息的内…...

[AUTOSAR][诊断管理][ECU][$34] 下载请求

文章目录 一、简介二、服务请求报文定义肯定响应支持的NRC三、示例代码34_req_dowload.c一、简介 RequestDownload(0x34)—— 下载请求 这个服务主要是用来给ECU下载数据的,最常见的应用就是在bootloader中,程序下载工具会发起下载请求,以完成ECU程序的升级。 二、服务…...

C 标准库 - <errno.h>和<float.h>详解

目录 简介 常见库宏 简介 常见库宏 <errno.h> 简介 <errno.h>头文件定义了一个名为errno的全局变量&#xff0c;用于表示最近发生的错误代码。errno是一个整数变量&#xff0c;它的值通常是一个非零的错误代码&#xff0c;用于指示发生了什么类型的错误。也可以…...

对于如何学习的一点思考

目录 1、学习遇到的问题 2、问题分析 3、解决思路 1、学习遇到的问题 我们经常在学习一个知识时&#xff0c;经常会遇到知识点凌乱、读书效率低、缺乏长期记忆等问题&#xff0c;主要体现在&#xff1a; 知识点凌乱&#xff1a;花时间学习了很多技术点&#xff0c;但是由于…...

Ensemble Methods集成学习大比拼:性能、应用场景和可视化对比总结

集成学习(Ensemble Learning)是一种机器学习范式,其中多个模型(通常称为“弱学习器”)被训练以解决相同的问题,并且通过某种方式结合它们的预测以提高整体性能。这种方法的核心思想是,多个模型比单一模型更能准确地预测未知数据。在本文中,我们将探讨多种集成学习算法,…...

【2024秋招】2023-9-16 贝壳后端开发二面

1 自我介绍 2 秒杀系统 2.1 超卖怎么解决 3 redis 3.1 过期策略 3.2 过期算法 4 kafka 4.1 说一说你对kafka的了解 4.2 如何保证事务性消息 4.3 如何保证消息不丢失 4.4 消息队列的两种通信方式 点对点模式 如上图所示&#xff0c;点对点模式通常是基于拉取或者轮询…...

SpringCloud 微服务全栈体系(七)

第九章 Docker 一、什么是 Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环境不一定一致…...

SAP ABAP 报表输出成 excel 统计图形 (RFC : GFW_PRES_SHOW_MULT)

SAP 预设了一个类型组 GFW &#xff0c;做简单的excel图形输出 话不多说&#xff0c;直接上代码&#xff1a; *&---------------------------------------------------------------------* *& Report ZCYCLE057 *&----------------------------------------------…...

微信小程序如何获取地理位置

在微信小程序中&#xff0c;可以通过以下步骤获取用户的地理位置&#xff1a; 在小程序的app.json文件中配置权限&#xff1a; json "permission": {"scope.userLocation": {"desc": "你的位置信息将用于获取附近的服务"} }这样配置后…...

计算机网络相关硬件介绍

计算机相关硬件 计算机由运算器、控制器、存储器、输入设备和输出设备等五个逻辑计算机硬件部件组成。 一、中央处理器&#xff08;CPU&#xff09;&#xff08;运算器、控制器&#xff09; &#xff08;1&#xff09;运算器 运算器是对数据进行加工处理的部件&#xff…...

Megatron-LM GPT 源码分析(三) Pipeline Parallel分析

引言 本文接着上一篇【Megatron-LM GPT 源码分析&#xff08;二&#xff09; Sequence Parallel分析】&#xff0c;基于开源代码 GitHub - NVIDIA/Megatron-LM: Ongoing research training transformer models at scale &#xff0c;通过GPT的模型运行示例&#xff0c;从三个维…...

Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块

首先了解涉及的新词汇&#xff0c;编程外国人发明的&#xff0c;所以大部分是和他们语言相关&#xff0c;了解对应意思&#xff0c;可以更好理解掌握。 import 英 /ˈɪmpɔːt/ n. 进口&#xff0c;进口商品&#xff1b;输入&#xff0c;引进&#xff1b;重要性&#xff1b;…...

Python的比较运算符查询表

据个人的编程开发经验&#xff0c;Python的比较运算符最常于条件判断&#xff0c;而条件判断是python编程中最常用的语法之一&#xff0c;与for或while的循环一样&#xff0c;功能十分强大&#xff01; 在机器学习当中&#xff0c;或深度学习当中&#xff0c;在运用算法对统计…...

C/C++面试常见问题——const关键字的作用和用法

首先我们需要一下const关键字的定义&#xff0c;const名叫常量限定符&#xff0c;当const修饰变量时&#xff0c;就是在告诉编译器该变量只可访问不可修改&#xff0c;而编译器对于被const修饰的变量有一个优化&#xff0c;编译器不会专门为其开辟空间&#xff0c;而是将变量名…...

Vue3.3指北(四)

Vue3.3指北 1、WebPack - VueCLI1.1、WebPack安装VueCli1.2、vue create 创建项目1.3、项目目录结构介绍 2、ViteVue32.1、认识create-vue2.2、使用create-vue创建项目2.3、项目目录剖析2.4、ESlint代码规范及手动修复2.5、通过eslint插件来实现自动修正 3、VueRouter43.1、单页…...

vue如何使用路由拦截器

在 Vue 中使用路由拦截器需要使用 Vue Router 提供的 beforeEach 方法。beforeEach 方法会在每个路由切换前&#xff0c;对路由进行拦截处理。可以在这个方法中进行一些验证或者权限认证&#xff0c;如果满足条件则继续跳转&#xff0c;否则取消跳转并进行相应处理。 下面是一…...

Docker 深度清除镜像缓存 (overlay2)

Docker 深度清除镜像缓存 &#xff08;overlay2&#xff09; 一般情况下&#xff0c;运维清理镜像是通过命令 docker rm i 删除镜像的。但是这条命令不会删除docker build命令产生的缓存文件。 这个时候需要使用 docker system 的系列命令来做相关处理。 docker system --hel…...

刷题笔记(第三天)

1.给定二进制字符串&#xff0c;将其换算成对应的十进制数字 输入&#xff1a;11000000 输出&#xff1a;192 function base10(str) {let sum 0;let a str.split().reverse(); // 个位是第一个元素for (var i 0; i < a.length; i) {suma[i]*Math.pow(2, i);}return sum;…...

Linux常用命令——chown命令

在线Linux命令查询工具 chown 用来变更文件或目录的拥有者或所属群组 补充说明 chown命令改变某个文件或目录的所有者和所属的组&#xff0c;该命令可以向某个用户授权&#xff0c;使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D&#xff0…...

【2026年华为暑期实习-非AI方向(通软嵌软测试算法数据科学)- 5月22日-第三题- 数据传输网络调优】(题目+思路+JavaC++Python解析+在线测试)

题目内容 有一个由 NNN 个数据交换节点(编号为 000 到 N−1N-1...

AI Agent在体脂管理中的临床级精度突破:基于3276名受试者的双盲对照试验(FDA Class II类器械预审中)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;AI Agent在体脂管理中的临床级精度突破&#xff1a;基于3276名受试者的双盲对照试验&#xff08;FDA Class II类器械预审中&#xff09; 临床验证设计与核心指标达成 本研究采用多中心、随机、双盲、平行对照…...

从原理图到Ping通:我的STM32F407 RMII以太网调试笔记(含LAN8720硬件差异处理)

从原理图到Ping通&#xff1a;我的STM32F407 RMII以太网调试笔记&#xff08;含LAN8720硬件差异处理&#xff09; 第一次点亮STM32F407的以太网接口时&#xff0c;那种成就感至今难忘。但在此之前&#xff0c;我经历了整整两周的煎熬——原理图反复检查、PCB打样两次、软件调试…...

嵌入式Linux入门首选:STM32MP157开发板核心优势与学习路径全解析

1. 项目概述&#xff1a;从“学什么”到“用什么学”的抉择每当有朋友或刚入行的新人问我&#xff0c;想入门嵌入式Linux&#xff0c;该从哪块板子开始&#xff0c;我的回答几乎总是绕不开STM32MP157。这听起来像是一个厂商的“标准答案”&#xff0c;但背后是我踩过无数坑、对…...

第一次通过通讯节点连接实现无人机仿真模拟(ROS1 + C++ + PX4)

通过与chatGPT之间的交互&#xff0c;让其辅助我进行代码编写-------------------| C 控制节点 || (自主起飞/降落) |------------------|ROS Topic|------v------| MAVROS |------ -----|MAVLink|------v------| PX4 || 飞控 SITL |------------|仿真…...

技术解密:Godot RE Tools - 游戏逆向工程的智能解决方案

技术解密&#xff1a;Godot RE Tools - 游戏逆向工程的智能解决方案 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp Godot RE Tools 是一款专业的Godot游戏逆向工程工具&#xff0c;能够从AP…...

告别多设备切换烦恼:Lan Mouse让你的键鼠轻松跨屏工作

告别多设备切换烦恼&#xff1a;Lan Mouse让你的键鼠轻松跨屏工作 【免费下载链接】lan-mouse mouse & keyboard sharing via LAN 项目地址: https://gitcode.com/gh_mirrors/la/lan-mouse 你是否经常在办公桌上摆着多台电脑&#xff0c;却要不断切换鼠标键盘&#…...

2025睿抗机器人大赛智能侦查赛道省赛全流程——基础了解

2025睿抗机器人大赛智能侦查赛道省赛全流程——基础了解 智能侦查赛道概述 2025 睿抗机器人大赛智能侦察赛道是 CAIR 工程竞技赛道下的专业国防装备赛项&#xff0c;以无人侦察车为载体、模拟巷战环境开展军事侦察任务&#xff0c;核心培养学生国防意识与科技创新能力且核心硬件…...

Windows和Office智能激活工具KMS_VL_ALL_AIO:一站式解决方案指南

Windows和Office智能激活工具KMS_VL_ALL_AIO&#xff1a;一站式解决方案指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活和Office软件授权而烦恼吗&#xff1f;KMS_VL…...

如何用开源歌词滚动姬3步制作专业LRC歌词:完全免费跨平台指南

如何用开源歌词滚动姬3步制作专业LRC歌词&#xff1a;完全免费跨平台指南 【免费下载链接】lrc-maker 歌词滚动姬&#xff5c;可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker **歌词滚动姬&#xff08;LRC Maker&#…...