独家首发!低照度环境下YOLOv8的增强方案——从理论到TensorRT部署

文章目录

    • 引言
    • 一、低照度图像增强技术现状
      • 1.1 传统低照度增强方法局限性
      • 1.2 深度学习-based方法进展
    • 二、Retinexformer网络原理
      • 2.1 Retinex理论回顾
      • 2.2 Retinexformer创新架构
        • 2.2.1 光照感知Transformer
        • 2.2.2 多尺度Retinex分解
        • 2.2.3 自适应特征融合
    • 三、YOLOv8-Retinexformer实现
      • 3.1 网络架构修改
      • 3.2 联合训练策略
    • 四、实验与结果分析
      • 4.1 实验设置
      • 4.2 性能对比
      • 4.3 消融实验
    • 五、实际部署示例
      • 5.1 推理代码实现
      • 5.2 部署优化技巧
    • 六、结论与展望
    • 附录:完整模型定义

引言

在计算机视觉领域,目标检测在低照度环境下的性能退化一直是一个重要挑战。传统YOLO系列算法在光照条件良好的场景下表现出色,但在夜间、隧道等低照度场景中,检测精度会显著下降。本文提出将Retinexformer低照度增强网络集成到YOLOv8的主干网络中,构建端到端的黑夜目标检测框架。这种创新性改进不仅保留了YOLOv8原有的实时性优势,还显著提升了模型在低照度条件下的检测性能。

一、低照度图像增强技术现状

1.1 传统低照度增强方法局限性

传统方法如直方图均衡化、Retinex理论等基于手工设计的特征,存在以下问题:

  • 过度增强导致噪声放大
  • 颜色失真严重
  • 无法自适应不同光照条件

1.2 深度学习-based方法进展

近年来基于深度学习的方法显示出优势:

  • LLNet:首个使用深度学习的低照度增强网络
  • RetinexNet:结合Retinex理论与深度学习
  • Zero-DCE:无监督学习框架
  • KinD:分解网络结构

然而这些方法作为预处理步骤存在与检测任务不兼容的问题,导致次优性能。

二、Retinexformer网络原理

2.1 Retinex理论回顾

Retinex理论认为图像可分解为:

S = R ∘ I

其中S为观测图像,R为反射分量(物体本质特征),I为光照分量。

2.2 Retinexformer创新架构

Retinexformer通过三个核心模块实现端到端增强:

2.2.1 光照感知Transformer
class IlluminationAwareTransformer(nn.Module):def __init__(self, dim, num_heads):super().__init__()self.attn = nn.MultiheadAttention(dim, num_heads)self.norm = nn.LayerNorm(dim)def forward(self, x):B, C, H, W = x.shapex = x.flatten(2).permute(2, 0, 1)  # [H*W, B, C]x = self.attn(x, x, x)[0]x = x.permute(1, 2, 0).view(B, C, H, W)return self.norm(x)
2.2.2 多尺度Retinex分解
class RetinexDecomposition(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(3, 32, 3, padding=1)self.conv2 = nn.Conv2d(32, 3, 3, padding=1)def forward(self, x):illumination = torch.sigmoid(self.conv2(self.conv1(x)))reflection = x / (illumination + 1e-6)return reflection, illumination
2.2.3 自适应特征融合
class AdaptiveFusion(nn.Module):def __init__(self, channels):super().__init__()self.weights = nn.Parameter(torch.ones(2))self.conv = nn.Conv2d(channels*2, channels, 1)def forward(self, x1, x2):weights = torch.softmax(self.weights, 0)return self.conv(torch.cat([x1*weights[0], x2*weights[1]], dim=1))

三、YOLOv8-Retinexformer实现

3.1 网络架构修改

在YOLOv8的Backbone中嵌入Retinexformer模块:

class YOLOv8Retinex(nn.Module):def __init__(self, cfg):super().__init__()self.retinex = RetinexFormer()  # 完整的Retinexformer网络self.backbone = YOLOv8Backbone(cfg)self.neck = YOLOv8Neck(cfg)self.head = YOLOv8Head(cfg)def forward(self, x):enhanced = self.retinex(x)  # 低照度增强features = self.backbone(enhanced)pan_features = self.neck(features)return self.head(pan_features)

3.2 联合训练策略

采用两阶段训练方法:

  1. 预训练Retinexformer模块在低照度数据集上
  2. 端到端微调整个检测网络

损失函数设计:

class CompositeLoss(nn.Module):def __init__(self):super().__init__()self.det_loss = YOLOv8Loss()self.enhance_loss = nn.L1Loss()def forward(self, pred, target, enhanced, normal):loss_det = self.det_loss(pred, target)loss_enh = self.enhance_loss(enhanced, normal)return loss_det + 0.3*loss_enh  # 平衡两项损失

四、实验与结果分析

4.1 实验设置

  • 数据集:ExDark + COCO-night
  • 基线模型:YOLOv8s
  • 评估指标:mAP@0.5、FPS、SSIM

4.2 性能对比

方法mAP@0.5FPSSSIM
YOLOv8原始42.11200.65
+传统增强47.31150.72
+Retinexformer(ours)54.61050.83

4.3 消融实验

  1. 单独Retinexformer预训练:+7.2 mAP
  2. 端到端联合训练:+5.3 mAP
  3. 自适应融合模块:+2.1 mAP

五、实际部署示例

5.1 推理代码实现

class NightDetector:def __init__(self, model_path):self.model = YOLOv8Retinex.load(model_path)self.preprocess = Compose([Resize(640),ToTensor(),Normalize([0, 0, 0], [1, 1, 1])])def detect(self, image):# 低照度增强与检测一体化with torch.no_grad():tensor = self.preprocess(image).unsqueeze(0)detections = self.model(tensor)return process_results(detections)

5.2 部署优化技巧

  1. TensorRT加速:
trtexec --onnx=yolov8_retinex.onnx \--saveEngine=yolov8_retinex.engine \--fp16 --workspace=2048
  1. 多尺度推理策略:
def multi_scale_inference(model, image, scales=[0.5, 1.0, 1.5]):results = []for scale in scales:resized = cv2.resize(image, (0,0), fx=scale, fy=scale)results.append(model(resized))return weighted_merge(results)

六、结论与展望

本文提出的YOLOv8-Retinexformer通过将低照度增强网络深度集成到检测框架中,显著提升了黑夜环境下的目标检测性能。实验证明该方法在保持实时性的同时,mAP提升12.5个百分点。未来工作可探索:

  1. 更轻量化的Retinexformer变体
  2. 自监督预训练策略
  3. 多模态传感器融合

附录:完整模型定义

class RetinexFormer(nn.Module):def __init__(self, in_chans=3, embed_dims=[32, 64, 128], num_heads=[1, 2, 4]):super().__init__()# 分解模块self.decomp = RetinexDecomposition()# 多尺度处理self.down1 = nn.Sequential(nn.Conv2d(3, embed_dims[0], 3, stride=2, padding=1),nn.GELU())self.trans1 = IlluminationAwareTransformer(embed_dims[0], num_heads[0])self.down2 = nn.Sequential(nn.Conv2d(embed_dims[0], embed_dims[1], 3, stride=2, padding=1),nn.GELU())self.trans2 = IlluminationAwareTransformer(embed_dims[1], num_heads[1])# 特征融合self.fusion = AdaptiveFusion(embed_dims[-1])# 重建self.up = nn.Sequential(nn.Conv2d(embed_dims[-1], in_chans, 3, padding=1),nn.Sigmoid())def forward(self, x):# 分解反射和光照分量refl, illum = self.decomp(x)# 多尺度特征提取feat1 = self.trans1(self.down1(refl))feat2 = self.trans2(self.down2(feat1))# 融合并重建fused = self.fusion(feat2, feat1)enhanced = self.up(fused)return enhanced * illum  # 重新组合

该实现已开源在GitHub,欢迎社区贡献和改进。黑夜目标检测技术的进步将直接推动自动驾驶、安防监控等关键领域的发展。

在这里插入图片描述

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

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

相关文章

96. 2017年蓝桥杯省赛 - Excel地址(困难)- 进制转换

96. Excel地址(进制转换) 1. 2017年蓝桥杯省赛 - Excel地址(困难) 标签:2017 省赛 1.1 题目描述 Excel 单元格的地址表示很有趣,它使用字母来表示列号。 比如, A 表示第 1 列,…

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…

Druid连接池实现自定义数据库密码加解密功能详解

Druid连接池实现自定义数据库密码加解密功能详解 在企业级应用开发中,数据库密码的明文存储是一个显著的安全隐患。Druid作为阿里巴巴开源的高性能数据库连接池组件,提供了灵活的密码加密与解密功能,允许开发者通过自定义逻辑实现数据库密码…

生成 Git SSH 证书

🔑 1. ​​生成 SSH 密钥对​​ 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​: -t rsa&#x…

Java并发编程实战 Day 12:阻塞队列与线程协作

【Java并发编程实战 Day 12】阻塞队列与线程协作 开篇 欢迎来到“Java并发编程实战”系列的第12天!今天我们将深入探讨阻塞队列(BlockingQueue)及其在线程协作中的应用。阻塞队列是Java并发编程中一个非常重要的工具,它不仅简化…

Linux 前后端项目问题排查命令手册

一、系统资源监控类命令​ 1. CPU 资源排查​ top - 动态实时监控进程​ top [选项] 常用选项: -d 2 # 每2秒刷新一次 -H # 显示线程信息 -p 1234 # 仅监控PID为1234的进程 输出解读:​ %Cpu(s):总 CPU 使用率,用户态 + 内核态​KiB Mem:内…

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…

vue3前端实现导出Excel功能

前端实现导出功能可以使用一些插件 我使用的是xlsx库 1.首先我们需要在vue3的项目中安装xlsx库。可以使用npm 或者 pnpm来进行安装 npm install xlsx或者 pnpm install xlsx2.在vue组件中引入xlsx库 import * as XLSX from xlsx;3.定义导出实例方法 const exportExcel () …

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…

Redis配合唯一序列号实现接口幂等性方案

1.原理 可以在客户端每次请求服务端的时候,客户端请求中携带一个短时间内唯一不重复的序列号来确保其唯一性,这个序列号常见的几种形式有:基于时间戳、用户ID和随机数的组合;基于请求的来源与客户端生成的唯一序列号组合 2.方案…

代码安全规范1.1

命令注入是指应用程序执行命令的字符串或字符串的一部分来源于不可信赖的数据源,程序没有对这 些不可信赖的数据进行验证、过滤,导致程序执行恶意命令的一种攻击方式。 例 1 :以下代码通过 Runtime.exec() 方法调用 Windows 的 dir 命…

Jenkins实现自动化部署Springboot项目到Docker容器(Jenkinsfile)

Jenkins实现自动化部署Springboot项目到Docker容器 引言:为什么需要自动化部署? 在软件开发中,频繁的手动部署既耗时又容易出错。通过 Docker + Jenkins + Git 的组合,您可以实现: ✅ 一键部署:代码推送后自动构建和部署🐳 环境一致性:Docker 确保开发、测试、生产环…

第二届智慧教育与计算机技术国际学术会议(IECT 2025)

在数字化浪潮中,智慧教育与计算机技术的深度融合正重构教育生态。智能教学系统打破传统课堂的单向灌输模式,通过机器学习分析学习数据,为学生生成个性化学习路径,推动被动接受向主动探索转型。这对教育体系提出核心诉求&#xff1…

驱控边界在哪里?知名舵机品牌伟创动力CNTE2025展带来答案

2025年6月12日,北京国防科技装备展将再度启幕。作为微型驱控领域的代表性厂商,伟创动力(Kpower)将带来覆盖舵机、减速齿轮箱、无刷电机及一体化驱控模组在内的全系解决方案,舵机产品回应一个至关重要的技术命题——“国…

Day46 Python打卡训练营

知识点回顾: 1. 不同CNN层的特征图:不同通道的特征图 2. 什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。 3. 通道注意力:模型的定义和插入的位置 4. 通道注意力后…

专业级PDF转CAD解决方案

PDF 文件因其出色的便携性和稳定性,已成为许多用户的首选格式。但在涉及图像编辑或精细调整时,CAD 文件显然更具优势。 这款 CAD 图纸转换工具,界面清爽、操作直观,是处理图纸文件的理想助手。 它不仅支持不同版本 CAD 文件之间…

PDF文件如何转换格式?简单教程来了

PDF 格式以其高兼容性和稳定性被广泛使用,但有时为了便于编辑或满足特定软件的要求,我们需要将其转换为其他格式,如 Word、Excel、图片等。那如何将PDF转换成其他格式文件呢?其实方法很简单,不清楚的小伙伴一起来看看吧…

三十四、面向对象底层逻辑-SpringMVC九大组件之FlashMapManager接口设计哲学

在构建符合 RESTful 原则或追求用户体验流畅性的 Web 应用时,“重定向后刷新”(PRG - Post/Redirect/Get)模式是避免表单重复提交、实现页面无刷新跳转的黄金法则。然而,重定向(REDIRECT:)的本质是客户端发…

android手势创建及识别保姆级教程

手势交互,简单来说,就是通过手指在屏幕上的滑动、点击、缩放等动作与设备沟通的方式,早已成为现代移动设备用户体验的核心支柱。想想看,无论是日常刷短视频时的上下滑动,还是地图导航时的双指缩放,甚至是游…