⌈ 传知代码 ⌋ 自监督高效图像去噪

news2024/9/20 8:09:32

💛前情提要💛

本文是传知代码平台中的相关前沿知识与技术的分享~

接下来我们即将进入一个全新的空间,对技术有一个全新的视角~

本文所涉及所有资源均在传知代码平台可获取

以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦!!!

以下内容干货满满,跟上步伐吧~


📌导航小助手📌

  • 💡本章重点
  • 🍞一. 概述
  • 🍞二. 算法原理
  • 🍞三. 核心逻辑
  • 🍞四.效果演示
  • 🍞五.使用方式
  • 🫓总结


💡本章重点

  • 自监督高效图像去噪

🍞一. 概述

本文复现论文 Zero-Shot Noise2Noise: Efficient Image Denoising without any Data[1] 提出的图像去噪方法。

随着深度学习的发展,各种图像去噪方法的性能不断提升。然而,目前的工作大多需要高昂的计算成本或对噪声模型的假设。为解决这个问题,该论文提出了一种自监督学习方法。该方法使用一个简单的两层卷积神经网络和噪声到噪声损失(Noise to Noise Loss),在只使用一张测试图像作为训练样本的情况下,实现了低成本高质量的图像去噪。


🍞二. 算法原理

💡方法

  • 成对下采样

  • 残差损失

  • 一致性损失

💡成对下采样:

该成对下采样器将原始图像下采样为长宽只有原先一半的子图。具体地,其通过将图像分割为大小为 2 × 2 的非重叠补丁,并将每个补丁的对角线像素取平均值并分配给第一个子图,然后将反对角线像素取平均值并分配给第二个子图像。该成对下采样器的示意图如下所示:

在这里插入图片描述

💡残差损失:

在非自监督的情况下,损失函数一般采用噪声图像与干净图像之间平方差的形式:

在这里插入图片描述

在自监督的情况下,没有干净图像作为训练目标,则可以将两张噪声图像子图互为训练目标,即噪声到噪声损失:

在这里插入图片描述

基于噪声独立性假设,可以证明这两种损失的期望值相同。

💡一致性损失:

考虑到残差损失只使用了噪声图像子图训练模型,而测试时需要整张噪声图像作为输入,为了使网络对子图的噪声估计与对原图的噪声估计保持一致,作者还引入了一个一致性损失函数:

在这里插入图片描述
总的损失如下所示:

在这里插入图片描述


🍞三. 核心逻辑

上述方法的核心逻辑如下所示:

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np

def diag_sample(image):
    '''下采样函数,输入图像,输出两张长宽只有原先一半的子图'''
    # 分割成2x2的补丁
    height = int(image.shape[2] / 2)
    width = int(image.shape[3] / 2)
    image_patch = image[:, :, 0: height * 2, 0: width * 2].view(image.shape[0], image.shape[1], height, 2, width, 2).permute(0, 1, 2, 4, 3, 5)
    # 对角线元素取平均作为第一个子图
    image_sub1 = (image_patch[:, :, :, :, 0, 0] +image_patch[:, :, :, :, 1, 1]) / 2
    # 反对角线元素取平均作为第二个子图
    image_sub2 = (image_patch[:, :, :, :, 0, 1] +image_patch[:, :, :, :, 1, 0]) / 2
    return image_sub1, image_sub2

class NoisePredictor(nn.Module):
    '''噪声估计网络,输入图像,输出估计的图像噪声'''
    def __init__(self, channels=3):
        super(NoisePredictor, self).__init__()
        self.net = nn.Sequential(
            nn.Conv2d(channels, 52, 3, padding=1),
            nn.LeakyReLU(negative_slope=0.2, inplace=True),
            nn.Conv2d(52, 52, 3, padding = 1),
            nn.LeakyReLU(negative_slope=0.2, inplace=True),
            nn.Conv2d(52, channels, 1)
        )
    
    def forward(self, x):
        return self.net(x)

def train_once(image_noise, model, optimizer):
    '''对模型进行一轮训练'''
    # 用于计算差方和
    mse_loss = nn.MSELoss(reduction='sum')
    
    model.train()
    optimizer.zero_grad()
    # 生成噪声的子图
    image_noise_s1, image_noise_s2 = diag_sample(image_noise)
    # 估计噪声图像子图的干净图像
    image_s1_clean = image_noise_s1 - model(image_noise_s1)
    image_s2_clean = image_noise_s2 - model(image_noise_s2)
    # 估计噪声图像的干净图像
    image_clean = image_noise - model(image_noise)
    # 生成噪声图像的干净图像的子图
    image_clean_s1, image_clean_s2 = diag_sample(image_clean)
    # 残差损失
    loss_res = (mse_loss(image_s1_clean, image_noise_s2) + mse_loss(image_s2_clean, image_noise_s1)) / 2
    # 一致性损失
    loss_con = (mse_loss(image_s1_clean, image_clean_s1) + mse_loss(image_s2_clean, image_clean_s2)) / 2
    # 总损失
    loss = loss_res + loss_con
    # 梯度反向传播
    loss.backward()
    # 更新模型参数
    optimizer.step()

def add_noise(image, degree):
    '''输入图像和噪声程度(0~1),输出加入噪声的图像'''
    noise = np.random.normal(0, degree, image.shape)
    noisy_image = np.clip(image + noise, 0, 1)
    return noisy_image

🍞四.效果演示

配置环境并运行main.py脚本,效果如下:

在这里插入图片描述


🍞五.使用方式

  • 解压附件压缩包并进入工作目录。如果是Linux系统,请使用如下命令:
unzip Image_Denoising.zip
cd Image_Denoising
  • 代码的运行环境可通过如下命令进行配置:
pip install -r requirements.txt
  • 如果希望在本地运行程序,请运行如下命令:
python main.py
  • 如果希望在线部署,请运行如下命令:
python main-flask.py

🫓总结

综上,我们基本了解了“一项全新的技术啦” 🍭 ~~

恭喜你的内功又双叒叕得到了提高!!!

感谢你们的阅读😆

后续还会继续更新💓,欢迎持续关注📌哟~

💫如果有错误❌,欢迎指正呀💫

✨如果觉得收获满满,可以点点赞👍支持一下哟~✨

【传知科技 – 了解更多新知识】

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1702905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【驱动】RS485收发控制、自动收发电路及波特率限制

1、芯片本身支持自动收发 RS485收发器芯片本身支持自动收发切换: 优点:简化硬件设计和软件编程,减少外部控制线;缺点:成本高,传输速率可能受限制。下面介绍几款支持自动收发切换的RS485/422芯片 1.1 MAX13487 MAX13487 是一款由 美信(Maxim) 生产的半双工 RS-485/RS…

【管理咨询宝藏113】某大型零售集团数字化转型规划方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏113】某大型零售集团数字化转…

Shell脚本学习笔记(更新中...)

一、什么是shell shell的作用是: 解释执行用户输入的命令程序等。 用户输入一条命令,shell就解释一条。 键盘输入命令,LInux给与响应的方式,称之为交互式。 shell是一块包裹着系统核心的壳,处于操作系统的最外层&a…

如何使用maven运行SpringBoot程序?

目录 一、什么是maven 二、什么是SpringBoot 三、如何使用maven运行SpringBoot程序? 一、什么是maven Maven:简化Java项目构建的自动化工具 在软件开发的世界里,Maven以其强大的项目管理和构建自动化功能,为Java开发者提供了…

不含一阶导数项的线性二阶微分方程的通解

假设这里有一个线性二阶微分等式,形式如下: (1) 其中是连续的,是在实闭区间是连续的,如果有人倾向于推广,在相对假弱的假设下,这个结果能够被发现。如果是下列其次线性方程的任意两个线性无关的…

Jmeter环境安装(超级简单)

Jmeter的安装是非常简单的,只需要将下载的安装包解压后,就可以运行了!! 一、首先要下载Jmeter 1.1、官网下载: 下载最新版:https://jmeter.apache.org/download_jmeter.cgi https://jmeter.apache.org/…

【Redis】 关于列表类型

文章目录 🍃前言🍀常见操作命令介绍🚩lpush🚩lpushx🚩rpush🚩rpushx🚩lrange🚩lpop🚩rpop🚩lindex🚩linsert🚩llen🚩lrem&…

暴雨公司受邀参加中国图象图形大会

5月24日至26日,备受瞩目的中国图象图形大会(CCIG 2024)在古都西安圆满落幕。本届大会主题为“图聚智生,象合慧成”,由中国图象图形学学会主办,空军军医大学、西安交通大学、西北工业大学承办,陕…

牛客NC166 连续子数组的最大和(二)【中等 前缀和数组+动态规划 Java/Go/PHP/C++】

题目 题目链接: https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21 思路 前缀和数组动态规划Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规…

动效设计师的角色与职责:创造视觉魔法!

当今社会,随着视频游戏和数字产品的不断发展,动态设计师这个职业也在逐步发展壮大,同时也吸引了很多热爱动画设计的朋友。动态设计的目的是在第一时间吸引用户的注意力。那你知道动态设计师是做什么的吗?动态设计师的发展前景如何…

【Postman接口测试】第一节.接口测试基础认识

文章目录 前言一、接口的基础 1.1 什么是接口 1.2 软件为什么需要接口 1.3 为什么要做接口测试二、接口测试的基础 2.1 接口测试介绍 2.2 接口测试的实现方式三、接口返回数据和JSON详解四、接口测试协议详解总结 前言 一、接口的基础知识 1.1 什么是…

重生之while在鸣潮学习HTML标签

个人主页&#xff1a;终端 HTML标签 目录 2.1标题标签 2.2段落标签 2.3换行标签 2.4列表标签 2.5超链接标签 2.6图片标签 2.7表格标签 2.8-2.9表单标签&表单项 2.10布局相关标签 2.11特殊字符 2.1标题标签 标题标签 代码 <h1>鸣</h1> <h2>潮<…

Unity功能——设置Camera,实现玩家被攻击后晃动效果

一、方法说明&#xff1a; 来源&#xff1a;siki学院&#xff1a;Unity项目捕鱼达人&#xff0c;功能学习记录&#xff1b; 效果摘要&#xff1a;通过调整相机移动&#xff0c;视觉感觉玩家面板剧烈晃动&#xff0c;实现被boss攻击时的震动效果。 使用场景说明&#xff1a; …

期权开户要多久的时间?能当天开好交易吗?

今天期权懂带你了解期权开户要多久的时间&#xff1f;能当天开好交易吗&#xff1f;期权&#xff0c;作为一种金融衍生品&#xff0c;它赋予了持有人在未来某个时间内购买或出售特定资产的权利&#xff0c;近年来在全球范围内得到了广泛的关注和应用。 期权开户要多久的时间&am…

基于形态学滤波的心电信号ECG处理(MATLAB 2021B)

数学形态学简称形态学&#xff0c;在数学意义上&#xff0c;其基于集合理论、积分几何和网格代数&#xff0c;是一门严格建立在数学基础之上的学科&#xff0c;着重用来研究图像的几何结构和形状&#xff0c;因而称之为形态学。其基本思想是用结构元素对待分析图像进行“探测”…

强悍!轻量级 Viedo Download 项目!!【送源码】

今天给大家分享一个非常轻量实用的命令行视频下载项目&#xff1a;Lux。 项目简介 Lux是一款基于Golang编写的快速、简单的视频下载库和命令行工具&#xff0c;支持众多个流行的视频网站&#xff0c;包括 YouTube、Bilibili、优酷、爱奇艺、腾讯视频、抖音快手等。 界面简洁易…

磐启PAN2013 2.4GHz无线收发SOC

PAN2013是一款集成了8位MCU和2568bits EEPROM的无线收发SoC芯片。该芯片工作2.400~2.483GHz世界通用ISM频段&#xff0c;且集成射频收发机、频率发生器、晶体振荡器、调制解调器和低功耗MCU等功能模块&#xff0c;并且支持一对多组网和带ACK的通信模式。 用户通过MCU的I/O口向…

(ICRA 2024) Diffusion-Based Point Cloud Super-Resolution for mmWave Radar Data

今天介绍一篇使用Diffusion模型来生成超分辨率雷达点云的方法。毫米波雷达传感器在不利的环境条件下可以保持稳定的性能&#xff0c;使其成为室外移动机器人全天候感知任务的一个有希望的解决方案。然而&#xff0c;雷达点云相对稀疏&#xff0c;包含大量鬼点&#xff0c;极大地…

迈向未来:Web3 技术开发的无限可能

在当今的数字时代&#xff0c;互联网技术日新月异&#xff0c;推动着各行各业的变革与发展。从Web1.0的信息发布&#xff0c;到Web2.0的社交互动&#xff0c;互联网的每一次进化都为人们的生活带来了深远的影响。如今&#xff0c;Web3的到来正在开启一个全新的时代&#xff0c;…

ozon物流cel费用,ozon物流cel运费多少

在跨境电商的广阔天地中&#xff0c;OZON作为俄罗斯知名的电商平台&#xff0c;为众多卖家提供了广阔的舞台。而物流作为电商交易的重要环节&#xff0c;其费用一直是卖家和买家关注的焦点。特别是OZON的CEL物流方式&#xff0c;因其高效、安全的特点而备受青睐。那么&#xff…