[C#]winform使用onnxruntime部署LYT-Net轻量级低光图像增强算法

news2024/11/23 8:49:24

【训练源码】

https://github.com/albrateanu/LYT-Net

【参考源码】

https://github.com/hpc203/Low-Light-Image-Enhancement-onnxrun

【算法介绍】

一、研究动机

1.研究目标

研究的目标是提出一种轻量级的基于YUV Transformer 的网络(LYT-Net),用于低光照图像增强。与传统的Retinex模型不同,LYT-Net利用YUV色彩空间的亮度(Y)和色度(U和V)自然分离的特性,简化了图像光照和颜色信息的解耦任务。

2.过去方法

过去的低光照图像增强方法主要分为两类:

  1. 直接映射:使用卷积神经网络(CNN)直接将低光照图像映射为正常光照图像,此类方法往往忽视了人类对颜色感知的特点,缺乏理论解释。
  2. Retinex理论:基于Retinex理论采用更复杂的多阶段训练流程,利用不同的卷积神经网络进行颜色图像分解、去噪和光照调整。此类方法更具理论可解释性,但其复杂性和多阶段训练要求带来了显著的挑战。

3.本文方法

本文提出的LYT-Net基于Transformer结构,通过将输入的RGB图像转换为YUV色彩空间,分别增强亮度和色度信息。主要模块包括多头自注意力(MHSA)模块、多阶段压缩和激励融合(MSEF)模块和通道去噪器(CWD)模块。利用YUV色彩空间的分离特性,LYT-Net专注于提高图像的亮度和细节,同时保留颜色信息。

4.优势及创新点

LYT-Net在LLIE任务上实现了SOTA性能的同时模型参数量和FLOPS显著低于一般方法

Low-Light Image Enhancement on LOL Rank 5

  1. 轻量级设计:LYT-Net结构简单,计算复杂度低,参数数量少,适用于资源受限的应用场景。
  2. 色彩空间分离:利用YUV色彩空间分离亮度和色度,增强图像的可视性和细节,而不影响颜色信息。
  3. 混合损失函数:设计了一个新的混合损失函数,提高了模型的训练效率和增强能力。

二、算法主要思想

算法框架

LYT-Net采用双路径方法,将色度和亮度视为独立的实体,以帮助模型更好地理解光度调整和降噪恢复之间的区别。 具体实现方式如下:

亮度通道Y通过卷积和池化提取特征,然后通过MHSA模块进行增强。色度通道U和V通过CWD模块进行降噪,保持纹理细节。增强后的色度通道U和V重新组合并通过MSEF模块处理,增强输入特征的空间和通道特征。最终与亮度通道Y进行拼接,通过一组卷积层得到高质量的增强图像。

模型的混合损失计算公式如下,α1到α6是用于平衡各组成部分损失函数的超参数:

损失函数

损失从左到右依次为平滑L1损失(避免对异常值过度敏感,增强鲁棒性)、感知损失(监督人眼视觉感知的高层特征)、直方图损失(对齐真实和预测图像的像素数量分布)、PSNR损失(控制噪声)、颜色失真损失(对齐真实和预测图像的色彩)、SSIM损失(结构相似性,图像保真度)。

【界面展示】

【效果演示】

 

【C#部分调用代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;

namespace FIRC
{
    public partial class Form1 : Form
    {
        Mat src = new Mat();
        LytNet yn = new LytNet();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
            openFileDialog.RestoreDirectory = true;
            openFileDialog.Multiselect = false;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
              
                src = Cv2.ImRead(openFileDialog.FileName);
                pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);


            }


        }

        private void button2_Click(object sender, EventArgs e)
        {
            if(pictureBox1.Image==null)
            {
                return;
            }
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var result = yn.Inference(src);
            sw.Stop();
            this.Text = "耗时" + sw.Elapsed.TotalSeconds + "秒";
            pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(result); //Mat转Bitmap
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            yn.LoadWeights(Application.StartupPath+ "\\weights\\lyt_net_lolv2_real_320x240.onnx");

        }

        private void btn_video_Click(object sender, EventArgs e)
        {
            var detector = new LytNet();
            detector.LoadWeights(Application.StartupPath + "\\weights\\lyt_net_lolv2_real_320x240.onnx");
            VideoCapture capture = new VideoCapture(0);
            if (!capture.IsOpened())
            {
                Console.WriteLine("video not open!");
                return;
            }
            Mat frame = new Mat();
            //var sw = new Stopwatch();
            //int fps = 0;
            while (true)
            {

                capture.Read(frame);
                if (frame.Empty())
                {
                    Console.WriteLine("data is empty!");
                    break;
                }
                //sw.Start();
                var result = detector.Inference(frame);
                //sw.Stop();
                //fps = Convert.ToInt32(1 / sw.Elapsed.TotalSeconds);
                //sw.Reset();
                //显示结果
                Cv2.ImShow("Result", result);
                int key = Cv2.WaitKey(10);
                if (key == 27)
                    break;
            }

            capture.Release();
  
        }
    }
}

【测试环境】

vs2019
netframwork4.7.2
opencvsharp==4.8.0
onnxruntime==1.16.2
模型都在FIRC\bin\x64\Debug\weights
测试图片都在FIRC\bin\x64\Debug\weights
下载源码后一般打开直接可以运行但是偶尔也可能报错,如果报错可以参考博文blog.csdn.net/FL1623863129/article/details/139207146

【视频演示】

C# winform使用onnxruntime部署LYT-Net轻量级低光图像增强算法_哔哩哔哩_bilibili【测试环境】vs2019netframwork4.7.2opencvsharp==4.8.0onnxruntime==1.16.2模型都在FIRC\bin\x64\Debug\weights测试图片都在FIRC\bin\x64\Debug\weights博文地址:https://blog.csdn.net/FL1623863129/article/details/139653895更多信息参考博文, 视频播放量 5、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:用C#部署yolov8的tensorrt模型进行目标检测winform最快检测速度,C++使用纯opencv部署yolov9的onnx模型,C和C++的区别竟然是这样!看完我瞬间悟了,C语言、C++和C#的区别竟是这样,看完我瞬间懂了!,使用C#的winform部署yolov8的onnx实例分割模型,使用C++部署yolov8的onnx和bytetrack实现目标追踪,labelme json转yolo工具用于目标检测训练数据集使用教程,使用C++部署yolov9的tensorrt模型进行目标检测,yolov7部署在ros机器人操作系统视频演示,用opencv和onnxruntime去部署yolov5-7-8icon-default.png?t=N7T8https://www.bilibili.com/video/BV1YD421M7R5/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee

【C#算法实现源码下载】

https://download.csdn.net/download/FL1623863129/89429033

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

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

相关文章

neo4j-官网学习

1、cypher 代码学习文档 https://neo4j.com/docs/cypher-cheat-sheet/5/auradb-enterprise 2、APOC函数包安装(desktop) 直接点击就可以安装,安装完之后重启一下,Cypher查询中使用CALL apoc.help(‘apoc’)来检查APOC插件是否已…

Java技术驱动的工程项目管理系统源码:工程管理的数字化解决方案

工程项目管理系统是一款基于Java技术的专业工程管理软件,它采用了Spring Cloud、Spring Boot、Mybatis、Vue和ElementUI等前沿技术,通过前后端分离架构构建了一个功能全面的工程项目管理系统。 随着公司的发展,工程管理的需求日益增长&#x…

图像处理与视觉感知复习--彩色图像处理

文章目录 三原色原理及其两种应用常用彩色模型及其应用领域各种颜色模型的转换彩色图像处理 三原色原理及其两种应用 三基色原理 自然界中绝大多数的颜色都可看作是由红、绿、蓝三种颜色组合而成;自然界中的绝大多数的颜色都可以分解成红、绿、蓝这三种颜色。这即…

渗透测试模拟实战-tomexam网络考试系统

渗透测试,也称为“pentest”或“道德黑客”,是一种模拟攻击的网络安全评估方法,旨在识别和利用系统中的安全漏洞。这种测试通常由专业的安全专家执行,他们使用各种技术和工具来尝试突破系统的防御,如网络、应用程序、主…

【PyQt5】简要介绍

文章目录 一、PyQt5的简介、安装、配置1.1 简介1.2 安装与配置1.3 QtDesigner1.3.1 基础操作 二、PyQt5的基本控件(Widget Box)2.1 基类(QWidget)2.1.1 QWidget 2.2 Button类(属于QtWidgets:QPushButton&am…

轮到国产游戏统治Steam榜单

6月10日晚8点,《黑神话:悟空》实体版正式开启全款预售,预售开启不到5分钟,所有产品即宣告售罄。 Steam上,《黑神话:悟空》持续占据着热销榜榜首的位置。 但在《黑神话:悟空》傲人的光环下,还有一款国产游戏取得出色的成绩。 6月10日&#…

vue3+ Element-Plus 点击勾选框往input中动态添加多个tag

实现效果&#xff1a; template&#xff1a; <!--产品白名单--><div class"con-item" v-if"current 0"><el-form-item label"平台名称"><div class"contaion" click"onclick"><!-- 生成的标签 …

六西格玛培训都培训哪些内容 ?

天行健六西格玛培训的内容通常涵盖多个方面&#xff0c;旨在帮助学员全面理解和应用六西格玛管理方法。以下是详细的培训内容概述&#xff1a; 一、六西格玛基础知识 引入六西格玛的概念、原理和历史&#xff0c;包括DMAIC&#xff08;定义、测量、分析、改进、控制&#xff0…

轻松搭建,一键开发,MemFire Cloud:懒人开发者的创意神器

在如今快节奏的时代&#xff0c;对于开发者来说&#xff0c;时间就是金钱。但是&#xff0c;要想快速开发一个应用&#xff0c;却需要花费大量时间搭建服务、开发接口、集成认证等等&#xff0c;这无疑增加了开发者的工作负担。但现在&#xff0c;有了MemFire Cloud&#xff0c…

Petalinux由于网络原因产生的编译错误(2)--Fetcher failure:Unable to find file

1 Fetcher failure:Unable to find file 错误 如果编译工程遇到如下图所示的“Fetcher failure for URL”或相似错误 出现这种错误的原因是 Petalinux 在配置和编译的时候&#xff0c;需要联网下载一些文件&#xff0c;由于网 络原因这些文件不能正常下载&#xff0c;导致编译…

分享一些经典的国外二维码活动案例,含二维码制作技巧

二维码具有信息容量大、编码范围广、自由度高、容错能力强、保密性、防伪性好、译码可靠性高等多项优势&#xff0c;所以二维码应用极其广泛&#xff0c;它作为一种及时、准确、可靠、经济的数据输入手段&#xff0c;已在工业、商业、交通、金融、医疗卫生、办公自动化等许多领…

Python发送Outlook邮件的步骤流程有哪些?

Python发送Outlook邮件的技巧&#xff1f;如何使用Python发信&#xff1f; 在Python中使用SMTP协议发送邮件到Outlook邮箱是一项常见的任务。AokSend将介绍如何通过Python编程语言实现这一过程&#xff0c;从准备工作到实际发送邮件的具体步骤。 Python发送Outlook邮件&#…

Beyond Compare 提示“缺少评估信息或损坏”,无法打开只要操作一行命令就可以了

在CMD 或者powershell下执行如下命令重新打开即可。 reg delete "HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare 4" /v CacheID /f重新打开&#xff0c;就ok 了

工业交换机的供电功率配置

在工业领域中&#xff0c;交换机作为网络设备中的重要组成部分&#xff0c;其供电功率配置必不可少。工业交换机的供电功率配置不仅关系到设备的稳定运行&#xff0c;还直接影响到整个工业生产系统的效率和安全性。因此&#xff0c;在选择工业交换机时&#xff0c;必须对供电功…

无需插件脚本,IDEA配置多服务一键启动

分享本教程的初衷是本人在本地调试时业务场景中需要调用多个服务&#xff0c;并且每次为了找到需要启动的服务花了很多不必要的时间&#xff0c;我相信很多同为开发的小伙伴也有和我一样的困扰。但是学会这招后多个服务需要同时启动时仅需一键即可搞定。接下来让我们一步步设置…

科普趣味知识API:探索奇妙世界

开发者必备科普知识类API是一种不可或缺的资源&#xff0c;为开发者们提供了广泛的科学和技术知识&#xff0c;帮助他们在软件开发过程中更全面地理解和应用技术。这个API涵盖了多个领域的科普知识&#xff0c;包括计算机科学、网络安全、人工智能、数据科学等等。通过使用这个…

1. NAS和SAN存储

NAS和SAN存储 一、存储设备1、根据工作方式2、DAS 直接附加存储3、NAS存储4、SAN存储 二、模拟配置SAN存储1、创建虚拟机、安装openfiler2、访问openfiler webUI3、创建RAID设备4、开启iSCSI服务5、配置SAN存储设备共享空间5.1 设置IQN 6、业务服务器连接使用存储6.1 安装客户端…

Illustrator 2024 mac/win版:创新设计,一触即发

Illustrator 2024是一款由Adobe公司开发的强大且全面的矢量图形设计软件&#xff0c;它以其卓越的性能和丰富的功能&#xff0c;为设计师们提供了一个高效、直观且富有创意的工作环境。 Illustrator 2024 mac/win版获取 作为一款矢量图形设计软件&#xff0c;Illustrator 2024…

减治法思想-二分查找图解案例

减治法介绍 减治法思想 ​ 分治法是将一个大问题划分为若干个子问题&#xff0c;分别求各个子问题&#xff0c;然后把子问题的解进行合并得到原问题的解。 ​ 减治法同样是把一个大问题划分为若干个子问题&#xff0c;但是并不是求解所有的子问题&#xff0c;因为原问题的解…

CID引流电商下的3C产品选品策略深度解析

​摘要&#xff1a;随着电商行业的迅猛发展和消费者需求的日益多样化&#xff0c;CID引流电商作为一种新兴的电商模式&#xff0c;逐渐受到了广泛关注。在这一模式下&#xff0c;3C产品作为高客单价、高技术含量的代表品类&#xff0c;其选品策略的制定显得尤为重要。本文将从多…