杭州协会网站建设wordpress 上一篇
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:56
当前位置: 首页 > news >正文
杭州协会网站建设,wordpress 上一篇,如何做网站的推广教程,织梦网站版权前言 ☀️ 在低照度场景下进行目标检测任务#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题#xff0c;给检测带来一定的难度。 #x1f33b;使用图像增强模块对原始图像进行画质提升#xff0c;恢复各类图像信息#xff0c;再使用目标…
前言 ☀️ 在低照度场景下进行目标检测任务常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题给检测带来一定的难度。 使用图像增强模块对原始图像进行画质提升恢复各类图像信息再使用目标检测网络对增强图像进行特定目标检测有效提高检测的精确度。 ⭐本专栏会介绍传统方法、Retinex、EnlightenGAN、SCI、Zero-DCE、IceNet、RRDNet、URetinex-Net等低照度图像增强算法。 完整代码已打包上传至资源→低照度图像增强代码汇总 目录
前言
一、Zero-DCE介绍
☀️1.1 Zero-DCE简介
二、Zero-DCE网络结构及核心代码
☀️2.1 网络结构
☀️2.2 核心代码
三、Zero-DCE损失函数及核心代码
☀️3.1 Lspa—Spatial Consistency Loss空间一致性损失
☀️3.2 Lexp—Exposure Control Loss曝光控制损失
☀️3.3 Lcol—Color Constancy Loss颜色恒定损失
☀️3.4 LtvA—Illumination Smoothness Loss照明平滑度损失
四、Zero-DCE代码复现
☀️4.1 环境配置
☀️4.2 运行过程
☀️4.3 运行效果 一、Zero-DCE介绍 相关资料 论文题目《Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement》用于低光图像增强的零参考深度曲线估计原文地址https://arxiv.org/abs/2001.06826论文精读CVPR2020|ZeroDCE《Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement》论文超详细解读翻译精读源码地址项目概览 - Zero-DCE - GitCode ☀️1.1 Zero-DCE简介
本文发表在CVPR2020主要提出了一个零参考深度曲线估计Zero-Reference Deep Curve EstimationZero-DCE将光线增强转换为了一个image-specific曲线估计问题(图像作为输入曲线作为输出)通过非参考损失函数实现从而获得增强图像。
另外通过训练一个轻量级的网络DCE-NET来预测一个像素级的高阶的曲线并通过该曲线来调整图像。
主要贡献
是第一个不依赖于成对和非成对训练数据的弱光增强网络从而避免了过拟合的风险。设计一种特定的曲线能够迭代运用于自身来近似像素和高阶曲线。这种曲线能够在动态范围内有效的进行映射提出了一种无参的损失函数来直接估计增强图像的质量。
取得成效
整个方法在多个数据集上都取得了SOTA 在黑暗中的人脸检测取得成效 二、Zero-DCE网络结构及核心代码
☀️2.1 网络结构 1backbone DCE-Net包含七个具有对称跳跃连接的卷积层conv-ReLU 重复 6 次 conv-Than。注意它具有对称的级联即第 1/2/3 层输出和第 6/5/4 层输出进行通道级联2conv层 由32个3x3的卷积核组成stride13参数 整个网络的参数量为79,4164Flops Flops为5.21G(input 为256x256x3) ☀️2.2 核心代码
import torch
import torch.nn as nn
import torch.nn.functional as F
import math
#import pytorch_colors as colors
import numpy as npclass enhance_net_nopool(nn.Module):def init(self):super(enhance_net_nopool, self).init()self.relu nn.ReLU(inplaceTrue)# 一共有32个模块number_f 32# 7个3*3,padding1,stride1的卷积核self.e_conv1 nn.Conv2d(3,number_f,3,1,1,biasTrue) self.e_conv2 nn.Conv2d(number_f,number_f,3,1,1,biasTrue) self.e_conv3 nn.Conv2d(number_f,number_f,3,1,1,biasTrue) self.e_conv4 nn.Conv2d(number_f,number_f,3,1,1,biasTrue) self.e_conv5 nn.Conv2d(number_f*2,number_f,3,1,1,biasTrue) self.e_conv6 nn.Conv2d(number_f*2,number_f,3,1,1,biasTrue) self.e_conv7 nn.Conv2d(number_f2,24,3,1,1,biasTrue) # 最大池化层self.maxpool nn.MaxPool2d(2, stride2, return_indicesFalse, ceil_modeFalse) # 双线性插值上采样层 self.upsample nn.UpsamplingBilinear2d(scale_factor2)def forward(self, x):x1 self.relu(self.e_conv1(x))# p1 self.maxpool(x1)x2 self.relu(self.e_conv2(x1))# p2 self.maxpool(x2)x3 self.relu(self.e_conv3(x2))# p3 self.maxpool(x3)x4 self.relu(self.e_conv4(x3))x5 self.relu(self.e_conv5(torch.cat([x3,x4],1)))# x5 self.upsample(x5)x6 self.relu(self.e_conv6(torch.cat([x2,x5],1)))# 通过tanh激活函数处理得到增强后的图像enhance_imagex_r F.tanh(self.e_conv7(torch.cat([x1,x6],1)))# 通过torch.split将enhance_image分割成8个通道分别表示不同的增强效果r1,r2,r3,r4,r5,r6,r7,r8 torch.split(x_r, 3, dim1)x x r1(torch.pow(x,2)-x)x x r2(torch.pow(x,2)-x)x x r3(torch.pow(x,2)-x)enhance_image_1 x r4(torch.pow(x,2)-x) x enhance_image_1 r5(torch.pow(enhance_image_1,2)-enhance_image_1) x x r6(torch.pow(x,2)-x) x x r7(torch.pow(x,2)-x)enhance_image x r8*(torch.pow(x,2)-x)r torch.cat([r1,r2,r3,r4,r5,r6,r7,r8],1)return enhance_image_1,enhance_image,r 这段代码平平无奇就是实现图像增强操作。具体来说主要通过多层卷积和连接操作以及一些激活函数学习图像的增强信息。
首先初始化定义了32个模块每个模块由7个3*3padding1stride1的卷积核组成。
然后前6个卷积层使用ReLU激活函数第7层使用tanh激活函数得到增强后的图像enhance_image。
接着 通过torch.split将enhance_image分割成8个通道分别表示不同的增强效果。 最后将这些效果叠加到原始输入图像上得到最终的增强图像。 三、Zero-DCE损失函数及核心代码
其实这四个损失函数才是本文最大的亮点。
☀️3.1 Lspa—Spatial Consistency Loss空间一致性损失
目的
通过保持输入图像与增强图像相邻区域的梯度促进图像的空间一致性。
方法 首先计算输入图像和增强图像在通道维度的平均值将R、G、B三通道加起来求平均得到两个灰度图像 然后分解为若干个4×4patches不重复覆盖全图 最后计算patch内中心i与相邻j像素差值求平均
公式 局部区域的数量 是以区域 i为中心的四个相邻区域顶部、下、左、右 增强版本的局部区域的平均强度值 输入版本的局部区域的平均强度值
代码
class L_spa(nn.Module):def init(self):super(L_spa, self).init()# print(1)kernel torch.FloatTensor(kernel).unsqueeze(0).unsqueeze(0)kernel_left torch.FloatTensor( [[0,0,0],[-1,1,0],[0,0,0]]).cuda().unsqueeze(0).unsqueeze(0)kernel_right torch.FloatTensor( [[0,0,0],[0,1,-1],[0,0,0]]).cuda().unsqueeze(0).unsqueeze(0)kernel_up torch.FloatTensor( [[0,-1,0],[0,1, 0 ],[0,0,0]]).cuda().unsqueeze(0).unsqueeze(0)kernel_down torch.FloatTensor( [[0,0,0],[0,1, 0],[0,-1,0]]).cuda().unsqueeze(0).unsqueeze(0)self.weight_left nn.Parameter(datakernel_left, requires_gradFalse)self.weight_right nn.Parameter(datakernel_right, requires_gradFalse)self.weight_up nn.Parameter(datakernel_up, requires_gradFalse)self.weight_down nn.Parameter(datakernel_down, requires_gradFalse)self.pool nn.AvgPool2d(4)def forward(self, org , enhance ):b,c,h,w org.shapeorg_mean torch.mean(org,1,keepdimTrue)enhance_mean torch.mean(enhance,1,keepdimTrue)org_pool self.pool(org_mean) enhance_pool self.pool(enhance_mean) weight_diff torch.max(torch.FloatTensor([1]).cuda() 10000torch.min(org_pool - torch.FloatTensor([0.3]).cuda(),torch.FloatTensor([0]).cuda()),torch.FloatTensor([0.5]).cuda())E_1 torch.mul(torch.sign(enhance_pool - torch.FloatTensor([0.5]).cuda()) ,enhance_pool-org_pool)D_org_letf F.conv2d(org_pool , self.weight_left, padding1)D_org_right F.conv2d(org_pool , self.weight_right, padding1)D_org_up F.conv2d(org_pool , self.weight_up, padding1)D_org_down F.conv2d(org_pool , self.weight_down, padding1)D_enhance_letf F.conv2d(enhance_pool , self.weight_left, padding1)D_enhance_right F.conv2d(enhance_pool , self.weight_right, padding1)D_enhance_up F.conv2d(enhance_pool , self.weight_up, padding1)D_enhance_down F.conv2d(enhance_pool , self.weight_down, padding1)D_left torch.pow(D_org_letf - D_enhance_letf,2)D_right torch.pow(D_org_right - D_enhance_right,2)D_up torch.pow(D_org_up - D_enhance_up,2)D_down torch.pow(D_org_down - D_enhance_down,2)E (D_left D_right D_up D_down)# E 25(D_left D_right D_up D_down)return E
首先定义了四个卷积核分别用于计算图像在左、右、上和下方向上的差异。
然后在向前传播过程中进行如下计算 计算权重差异 weight_diff。计算增强图像的差异 E_1该差异受到阈值 0.5 的控制。利用卷积运算分别计算原始图像和增强图像在四个方向上的梯度差异。计算每个方向上的梯度差异的平方并将它们相加得到 E。 最后返回计算得到的空间损失 E。 ☀️3.2 Lexp—Exposure Control Loss曝光控制损失
目的
抑制曝光不足/过度区域控制曝光水平。
方法
测量的是局部区域的平均强度值与良好曝光水平E0.6 经验设置之间的距离。 首先将增强图像转为灰度图 然后分解为若干 16×16 patches不重复覆盖全图 最后计算 patch 内的平均值
公式 大小为16×16的不重叠局部区域个数 增强图像中某个局部区域的平均强度值 代码
class L_exp(nn.Module):def init(self,patch_size,mean_val):super(L_exp, self).init()# print(1)self.pool nn.AvgPool2d(patch_size)self.mean_val mean_valdef forward(self, x ):b,c,h,w x.shapex torch.mean(x,1,keepdimTrue)mean self.pool(x)d torch.mean(torch.pow(mean- torch.FloatTensor([self.mean_val] ).cuda(),2))return d
这段代码比较简单就是通过初始化平均池化层和均值函数比较输入图像的全局均值与指定均值之间的差异。
最后返回计算得到的亮度损失 d。 ☀️3.3 Lcol—Color Constancy Loss颜色恒定损失
目的
用于纠正增强图像中的潜在色偏同时也建立了三个调整通道之间的关系。
方法 首先将提亮图像分成RGB三通道计算每个通道的平均亮度 然后将不同通道的平均亮度两两相减求平均和
Color Constancy Loss值越小说明提亮图像颜色越平衡损失越大则说明提亮图像可能有色偏的问题
公式 增强后图像中p通道的平均强度值 一对颜色通道 代码
class L_color(nn.Module):def init(self):super(L_color, self).init()def forward(self, x ):b,c,h,w x.shapemean_rgb torch.mean(x,[2,3],keepdimTrue)mr,mg, mb torch.split(mean_rgb, 1, dim1)Drg torch.pow(mr-mg,2)Drb torch.pow(mr-mb,2)Dgb torch.pow(mb-mg,2)k torch.pow(torch.pow(Drg,2) torch.pow(Drb,2) torch.pow(Dgb,2),0.5)return k 这段代码也比较简单主要进行以下的计算
计算图像在每个像素位置的RGB均值这是通过对每个通道在高度和宽度上进行平均计算得到的。将RGB均值分割成单独的通道mr、mg、mb。计算颜色差异分别为红绿差异 Drg、红蓝差异 Drb 和绿蓝差异 Dgb。 最后返回计算得到的最终的颜色损失 k。 ☀️3.4 LtvA—Illumination Smoothness Loss照明平滑度损失
目的
保持相邻像素之间的单调关系。
启发
将所有通道、所有迭代次数的 A 也就是网络的输出其横竖的梯度平均值应该很小。
公式 迭代次数 水平梯度 垂直梯度 代码
class L_TV(nn.Module):def init(self,TVLoss_weight1):super(L_TV,self).init()self.TVLoss_weight TVLoss_weightdef forward(self,x):batch_size x.size()[0]h_x x.size()[2]w_x x.size()[3]count_h (x.size()[2]-1) * x.size()[3]count_w x.size()[2] * (x.size()[3] - 1)h_tv torch.pow((x[:,:,1:,:]-x[:,:,:h_x-1,:]),2).sum()w_tv torch.pow((x[:,:,:,1:]-x[:,:,:,:w_x-1]),2).sum()return self.TVLoss_weight2(h_tv/count_hw_tv/count_w)/batch_size
首先定义了一个 TVLoss_weight 属性表示总变差损失的权重默认为1。
然后在向前传播过程中进行如下计算
计算图像在水平方向上的总变差 h_tv 和在垂直方向上的总变差 w_tv。计算总变差损失包括水平和垂直方向上的总变差)以及权重调整。
最后返回计算得到的总变差损失。 四、Zero-DCE代码复现
☀️4.1 环境配置
Python 3.7Pytorch 1.0.0opencvtorchvision 0.2.1cuda 10.0 ☀️4.2 运行过程
这个运行比较简单配好环境就行。如果有报错可以参考以下博文
【代码复现Zero-DCE详解:Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement】_zerodce代码解读-CSDN博客 跑微光图像增强程序遇到的问题汇总_userwarning: nn.functional.tanh is deprecated. use-CSDN博客
暗光增强——Zero-DCE网络推理测试详细图文教程-CSDN博客 ☀️4.3 运行效果
- 上一篇: 杭州萧山做网站公司国外做伞的品牌网站
- 下一篇: 杭州学校网站开发全国建设管理信息网站
相关文章
-
杭州萧山做网站公司国外做伞的品牌网站
杭州萧山做网站公司国外做伞的品牌网站
- 技术栈
- 2026年03月21日
-
杭州微网站开发佛山网站建设首页排名
杭州微网站开发佛山网站建设首页排名
- 技术栈
- 2026年03月21日
-
杭州网站制作外包app软件开发公司员工守则
杭州网站制作外包app软件开发公司员工守则
- 技术栈
- 2026年03月21日
-
杭州学校网站开发全国建设管理信息网站
杭州学校网站开发全国建设管理信息网站
- 技术栈
- 2026年03月21日
-
杭州有哪些性价比高的网站建设服务商网站建设好后如何连接服务器
杭州有哪些性价比高的网站建设服务商网站建设好后如何连接服务器
- 技术栈
- 2026年03月21日
-
杭州正规的网站建设公司视频制作哪里可以学
杭州正规的网站建设公司视频制作哪里可以学
- 技术栈
- 2026年03月21日
