论文阅读之《Learn to see in the dark》
Learning to See in the Dark-CVPR2018
Chen ChenUIUC(伊利诺伊大学厄巴纳-香槟分校)
Qifeng Chen, Jia Xu, Vladlen Koltun Intel Labs(英特尔研究院)
文章链接:https://arxiv.org/pdf/1805.01934.pdfhttps://arxiv.org/pdf/1805.01934.pdf源码地址:
GitHub - cchen156/Learning-to-See-in-the-Dark: Learning to See in the Dark. CVPR 2018Learning to See in the Dark. CVPR 2018. Contribute to cchen156/Learning-to-See-in-the-Dark development by creating an account on GitHub.https://github.com/cchen156/Learning-to-See-in-the-Dark
研究背景
在暗光条件下,受到低信噪比和低亮度的影响,图片的质量会受到很大的影响。此外,低曝光率的照片会出现很多噪声,而长曝光时间会让照片变得模糊、不真实。目前很多关于去噪、去模糊、图像增强等技术在极端光照条件下作用很有限。论文中主要解决关注的问题是极端低光条件下的图像成像问题,提出了一种在黑暗中也能快速、清晰的成像系统。
主要工作
论文提出一种通过全卷积神经网络(FCN)方法将在黑暗环境中进行的拍摄还原的方法,通过控制变量法来对比不同的去噪方法,增加信噪比,并找到一个较好的解决方案。
创新点
本文的主要创新点为:
1.提出了一个新的照片数据集,包含原始的short-exposure low-light图像,并附有long-exposure reference图像作为Ground truth,以往类似的研究使用的都是合成的图像;
2.与以往方法使用相机拍摄出RGB图像进行复原不同,使用原始的传感器数据作为网络输入。
3.提出了一种端到端学习方法,通过训练一个全卷积网络来直接处理快速成像系统中低亮度图像。
已有工作回顾
传统图像处理过程会应用一系列模块,例如白平衡、去马赛克、去噪、增加图像锐度、 伽马矫正等等。而这些图像处理模块针对不同的相机需要特定的去设计。一些研究提出使用局部线性、可学习的L3 过滤器来模拟现代成像系统中复杂的非线性流程,但是这些方法都无法成功解决在低光条件中快速成像的问题,也无法解决极低的SNR 问题。此外,通过智能手机相机拍摄的照片,利用bursting imaging破裂成像方法,结合多张图像也可以生成效果较好的图像,但是这种方法的复杂程度较高。
提出的方法
这是一种端到端的学习方法,训练一个全卷积网络FCN 来直接处理快速成像系统中的低亮度图像。纯粹的FCN 结构可以有效地代表许多图像处理算法,用原始传感器数据作为输入。对于 Bayer 数组,将输入打包为四个通道并在每个通道上将空间分辨率降低一半。原始数据以6×6排列块组成;通过交换相邻通道元素的方法将36个通道的数组打包成9个通道。消除黑色像素并按照期望的倍数缩放数据,将处理后数据作为 FCN 模型的输入,输出是一个带12通道的图像,其空间分辨率只有输入的一半。这个一半大小的输出被子像素层处理,以恢复原始分辨率。
两个标准的 FCN 作为模型的核心:用于快速图像处理的多尺度上下文聚合网络 (CAN) 和U-net 网络,最终选用的是U-net网络。放大比率决定了模型的亮度输出,在外部指定并作为输入提供给模型,这类似于相机中的 ISO 设置。模型使用L1损失和Adam优化器,网络输入为原始短曝光图像,对应的真实数据是长曝光图像,他们之间的曝光时间的倍数差作为放大因子,训练中随机裁剪512x512的补丁用于训练,用翻转,旋转等操作来做数据增强,初始学习率设为0.0001,2000次迭代后降为0.00001,共进行4000次迭代。
FCN网络
FCN和CNN的区别:CNN卷积层之后连接的是全连接层;FCN卷积层之后仍连接卷积层,输出的是与输入大小相同的特征图。FCN将传统CNN中的全连接层转化成一个个的卷积层。FCN多次卷积图像越来越小,像素越来越低。
在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,7,7)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,称为全卷积网络。
Unet网络
U-Net整体的流程是编码和解码,可用于分割,压缩图像和去噪声。也可以用在原图像去噪,做法就是训练的阶段在原图人为的加上噪声,然后放到编码解码器中,下采样可以增加对输入图像的一些小扰动的鲁棒性,比如图像平移,旋转等,减少过拟合的风险,降低运算量,和增加感受野的大小。上采样把抽象的特征再还原解码到原图的尺寸,得到输出。
复制+剪切特征图可以使浅层网络会保留明显的内容信息,网络层变深,内容会减少,特征会增多,在深层网络添加内容的信息。简单来说就是前期不断的卷积池化来进行下采样,然后再不断卷积上采样,形成一个U形。而下采样的结果还会合成至对应的上采样结果,实现抽象与细节的结合。
CAN卷积
作者提出一个新颖的卷积方式:膨胀卷积-CAN:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS。通过膨胀卷积实现多尺度语义信息融合,增长感受野的区域,从而获得更好的稠密分类结果。目前FCN通过pooing的方式增大感受野代价是空间分辨率降低,这种方式浪费了很多空间信息。相比原来的标准卷积膨胀卷积多了一个超参数-扩张率,指的是kernel各点之前的间隔数量。这样在不丢失分辨率的前提下拥有了更大的感受野。
数据集
See in the dark(SID)数据集包含5094张原始的短曝光图像,每一张都有一个参考的长曝光图像。图像由两台相机(顶部和底部)采集,包含室内和室外。比较有价值的一点就是数据集合都是在极其暗的光照条件下进行拍摄的,是第一个建立的有groundtruth的低光照数据集合。
实验结果
传统的图像处理方法在极端低光条件下容易受到严重的噪声影响,该方法能够有效地抑制图像噪声,生成色彩均衡、逼真的图像。
总结
论文创建了一个黑暗的图像数据集 (SID) 以支持数据驱动方法的研究。利用 SID 数据集,提出一种基于 FCN 模型(以U-net为核心),通过端到端训练,改善了传统的处理低光图像的方法。可以抑制噪声并正确地实现颜色转换。
相关文章:

论文阅读之《Learn to see in the dark》
Learning to See in the Dark-CVPR2018 Chen ChenUIUC(伊利诺伊大学厄巴纳-香槟分校) Qifeng Chen, Jia Xu, Vladlen Koltun Intel Labs(英特尔研究院) 文章链接:https://arxiv.org/pdf/1805.01934.pdfhttps://arxiv.org/pdf/1805.01934.p…...
Docker 生成自定义镜像并使用Docker Compose部署
Docker 生成自定义镜像并使用Docker Compose部署 Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,可以轻松管理复杂的应用程序。本文将介绍如何在 Docker Compose 中使用自定义 Docker 镜像,并提供了生成自定义 Docker 镜像的步骤。 步骤…...
设计模式~调停者(中介者)模式(Mediator)-21
调停者(中介者)模式(Mediator) (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: 代码 调停者&a…...

计算机毕业设计选什么题目好?springboot 医院门诊在线预约挂号系统
✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...

linux中使用ps查看进程的所有线程
在 Linux 系统中,可以使用 ps 命令和 ps H 命令结合来查看进程的线程信息。ps 命令用于显示系统中当前运行的进程信息,而 ps H 命令则可以显示进程中的所有线程。 使用以下命令可以查看指定进程的所有线程信息: ps H -T <PID>将 替换…...

本、硕、博区别真的辣么大吗?
61: 发际线已经说明了一切…… Super Mario: 小学,老师告诉学生:“森林里有只老虎,已经被我关在笼子里,我会带你去那个地方,然后给你一把猎枪,告诉你猎枪怎么用,并开枪…...

[Spring] SpringMVC 简介(一)
目录 一、SpringMVC 简介 1、什么是 MVC 2、什么是 SpringMVC 3、SpringMVC 实现原理 4、SpringMVC 的特点 二、简单案例 1、引入依赖 2、在 web.xml 中配置前端控制器 DispatcherServlet 3、创建 SpringMVC 的配置文件 4、创建请求控制器 5、测试页面 6、访问不到 …...

机器学习基础之《回归与聚类算法(2)—欠拟合与过拟合》
一、背景 1、上一篇说正规方程的时候,实际情况中使用很少,主要原因它不能解决过拟合。 2、训练集上表现的好,测试集上表现不好—过拟合 二、欠拟合和过拟合 1、欠拟合 训练集:有3个训练集,告诉机器都是天鹅 机器学…...
flutter dio 请求封装(空安全)
一、添加依赖 dio: ^5.3.2二、请求封装 class HttpHelper {static Dio? mDio;static BaseOptions? options;static HttpHelper? httpHelper;CancelToken cancelToken CancelToken();static const String GET get;static const String POST post;static const String PU…...
chatgpt GPT-4V是如何实现语音对话的
直接上代码 https://chat.openai.com/voice/get_token 1. 请求内容 Request:GET /voice/get_token HTTP/1.1 Host: ios.chat.openai.com Content-Type: application/json Cookie: _puiduser***Fc9T:16962276****Nph%2Fb**SU%3D; _uasid"Z0FBQUF***nPT0"; __cf_bmBUg…...
C++项目-求水仙花数
求水仙花数 #include <iostream> using namespace std;int main() {int n 100;do {int a 0;int b 0;int c 0;a n % 10; //个位b n / 10 % 10; //十位c n / 100 % 10; //百位if (a * a * a b * b * b c * c * c n) {cout << n << endl;}…...
从零开始基于LLM构建智能问答系统的方案
本文首发于博客 LLM应用开发实践 一个完整的基于 LLM 的端到端问答系统,应该包括用户输入检验、问题分流、模型响应、回答质量评估、Prompt 迭代、回归测试,随着规模增大,围绕 Prompt 的版本管理、自动化测试和安全防护也是重要的话题&#x…...

Android---Synchronized 和 ReentrantLock
Synchronized 基本使用 1. 修饰实例方法 public class SynchronizedMethods{private int sum 0;public synchronized void calculate(){sum sum 1;} } 这种情况下的锁对象是当前实例对象,因此只有同一个实例对象调用此方法才会产生互斥效果;不同的…...
【解题报告】牛客挑战赛70 maimai
题目链接 这个挑战赛的 F F F是我出的,最后 zhoukangyang 爆标了。。。orzorz 记所有有颜色的边的属性集合 S S S 。 首先在外层容斥,枚举 S ∈ [ 0 , 2 w ) S\in [0,2^w) S∈[0,2w),计算被覆盖的的边中不包含 S S S 中属性,…...
算启新程 智享未来 | 紫光展锐携手中国移动共创数智未来
10月11日-13日,2023年中国移动全球合作伙伴大会在广州举行,此次大会以“算启新程 智享未来”为主题,与合作伙伴一起共商融合创新,共创数智未来。作为中国移动每年规模最大、最具影响力的盛会,吸引了数百家世界500强企业…...

thinkphp5.1 获取缓存cache(‘cache_name‘)特别慢,php 7.0 unserialize 特别慢
thinkphp5.1 获取缓存cache(‘cache_name’)特别慢,php 7.0 unserialize 特别慢 场景: 项目中大量使用了缓存,本地运行非常快,二三百毫秒,部署到服务器后 一个表格请求就七八秒,最初猜想是数据库查询慢&am…...
【Linux】UNIX 术语中,换页与交换的区别和Linux 术语中,换页与交换的区别?
UNIX换页和交换的区别 在UNIX中,换页(Paging)是一种内存管理技术,用于在程序运行时动态地将其代码和数据从磁盘加载到内存中。当程序需要访问的页面不在内存中时,就会发生页错误(page error)&a…...
零基础学python之集合
文章目录 集合1、创建集合2、集合常见操作方法2、1 增加数据2、2 删除数据2、3 查找数据 3、总结 集合 目标 创建集合集合数据的特点集合的常见操作 1、创建集合 创建集合使用{}或set(), 但是如果要创建空集合只能使用set(),因为{}用来创建空字典。 …...

PromptScript:轻量级 DSL 脚本,加速多样化的 LLM 测试与验证
TL;DR 版本 PromptScript 是一个轻量级的 Prompt 调试用的 DSL (Yaml)脚本,以用于快速使用、构建 Prompt。 PromptScript 文档:https://framework.unitmesh.cc/prompt-script Why PromptScript ? 几个月前&…...

强化学习(Reinforcement Learning)与策略梯度(Policy Gradient)
写在前面:本篇博文的内容来自李宏毅机器学习课程与自己的理解,同时还参考了一些其他博客(懒得放链接)。博文的内容主要用于自己学习与记录。 1 强化学习的基本框架 强化学习(Reinforcement Learning, RL)主要由智能体(Agent/Actor)、环境(Environment)、…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...