当前位置: 首页 > news >正文

Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions(IA-YOLO)

1、总体概述

基于深度学习的目标检测在常规条件的数据集可以获得不错的结果,但是在环境、场景、天气、照度、雾霾等自然条件的综合干扰下,深度学习模型的适应程度变低,检测结果也随之下降,因此研究在复杂气象条件下的目标检测方法就显得尤为重要。现有的方法在增强图像和目标检测之间很难做到平衡,有的甚至忽略有利于检测的信息。

本文为了解决上述问题,提出了IA-YOLO架构,该架构可以自适应的增强图像,以获得更好的检测结果。文中提出一个可微分的图像处理模块DIP,DIP使用轻量级的深度学习网络(CNN-PP)学习其参数,用以提高复杂天气状况下的目标检测性能。将DIP插入YOLOV3中,直接使用原有检测模型的分类和回归损失来弱监督DIP模块的参数,进而可以使用DIP模块进行图像增强。IA-YOLO代码tensorflow版本链接

2、IA-YOLO整体架构

高分辨率的图像(如1920*1080),缩放到低分辨率的图像(256*256),低分辨率的图像通过一个轻量级的CNN-PP模块,学习一组参数,文中在去雾过程中参数为15个,因此输出为【N,15】;高分辨率的图像,依次通过去雾、白平衡、Gamma增强、Tone、对比度Contrast、锐化Sharpen进行图像的增强操作,这个过程可以看作是图像的预处理阶段,预处理增强过后的图片,送入传统的YOLOV3检测器进行目标物体的检测,使用预测框和GT框的之间的分类和回归损失进行整个网络结构的监督,进而使得DIP模块学到自适应的参数。

3、可微过滤器介绍

3.1 Pixel-wise Filters

像素级的过滤器实际上就是对输入图像每个像素R、G、B三个通道的数值通过一定的映射,输出相对应的R、G、B三个通道的数值。文中提到四个Pixel-wise Filters,它们的映射关系函数如表所示。

由表可知,WB和Gamma都是通过简单的乘法以及幂指数变化来进行像素值的转换,因此,它们对于输入图像和需要学习的参数来说都是可微分的。

对于contrast的可微分设计,作者采用如下三个公式完成:

Lum(P_{i}) = 0.27r_{i} + 0.67g_{i}+ 0.06b_{i}              EnLum(P_{i}) =\frac{1}{2}(1-\cos (\pi\times (Lum(P_{i})) ))

En(P_{i}) = P_{i} \times \frac{EnLum(P_{i})}{Lum(P_{i}) }

对于Tone滤波器,作者将其设计成为一个单调分段函数,学习Tone filter需要使用L个参数,参数分别为\left \{ t_{0},t_{1},...,t_{L-1} \right \},tone曲线的点可表示为\left ( k/L,T_{k}/T_{L} \right ),其中T_{k} = \sum_{i=0}^{k-1}t_{l}。最终的映射函数为:

P_{o} = \frac{1}{T_{L}}\sum_{j=0}^{L-1}clip(L.P_{i}-j,0,1)t_{k}

3.2 Sharpen Filter

图像锐化可以凸显图像的细节信息,作者使用如下公式进行图像的锐化:

F(x,\lambda )=I(x)+\lambda (I(x)-Gau(I(x)))

其中,I(x)是输入图像,Gau(I(x))是对图像进行高斯变换,\lambda是一个大于0的缩放比例系数。

3.3 Defog Filter

去雾模型主要就是使用了大气散射模型,结合暗通道先验进行推算初来的结果,其中大气散射模型公式如下所示:

I(x) = J(x)t(x)+A(1-t(x))

其中A是全球大气光值,t(x)是转换参数,其定义如下:

t(x) = e^{-\beta }d(x)

去雾模型的具体过程参考之前的文章:Single Image Haze Removal Using Dark Channel Prior(暗通道先验)

4、CNN-PP模块

由前述网络的整体框架可知,CNN-PP是一个轻量级的全卷积网络,其输入是一个低分辨率的256*256图像,输出是一个【N,15】的向量,网络的具体结构可以看文中具体描述:

作者使用tensorflow实现的具体代码如下:

def extract_parameters(net, cfg, trainable):output_dim = cfg.num_filter_parameters# net = net - 0.5min_feature_map_size = 4print('extract_parameters CNN:')channels = cfg.base_channelsprint('    ', str(net.get_shape()))net = convolutional(net, filters_shape=(3, 3, 3, channels), trainable=trainable, name='ex_conv0',downsample=True, activate=True, bn=False)net = convolutional(net, filters_shape=(3, 3, channels, 2*channels), trainable=trainable, name='ex_conv1',downsample=True, activate=True, bn=False)net = convolutional(net, filters_shape=(3, 3, 2*channels, 2*channels), trainable=trainable, name='ex_conv2',downsample=True, activate=True, bn=False)net = convolutional(net, filters_shape=(3, 3, 2*channels, 2*channels), trainable=trainable, name='ex_conv3',downsample=True, activate=True, bn=False)net = convolutional(net, filters_shape=(3, 3, 2*channels, 2*channels), trainable=trainable, name='ex_conv4',downsample=True, activate=True, bn=False)net = tf.reshape(net, [-1, 4096])features = ly.fully_connected(net,cfg.fc1_size,scope='fc1',activation_fn=lrelu,weights_initializer=tf.contrib.layers.xavier_initializer())filter_features = ly.fully_connected(features,output_dim,scope='fc2',activation_fn=None,weights_initializer=tf.contrib.layers.xavier_initializer())return filter_features

5、训练流程

作者在构建数据集的时候需要区分是雾天数据还是低照度数据,训练的每一个batch数据,其中的每一张图片有\frac{2}{3}的几率随机加上随机雾或者随机亮度变化,这样可以使得模型对于雾天或者低照度环境有更大的适应性。由于在训练过程中随机生成雾天图像会让整个训练时长成倍增加,因此,作者在线下完成雾天图像的生成。

其中雾天生成数据的主要代码如下所示:存疑的点是td = math.exp(-beta * d)这个公式,按照公式和自身理解,感觉应该是td = math.exp(-beta )d

def AddHaz_loop(img_f, center, size, beta, A):(row, col, chs) = img_f.shapefor j in range(row):for l in range(col):d = -0.04 * math.sqrt((j - center[0]) ** 2 + (l - center[1]) ** 2) + sizetd = math.exp(-beta * d)img_f[j][l][:] = img_f[j][l][:] * td + A * (1 - td)return img_f

6、实验结果

雾天检测效果:

低照度检测结果:

消融试验针对不同的filter进行的对比,可以看到具体结果如下:

 总体来说,IA-YOLO使用可微分的filter,使得图像在进入目标检测器之前进行增强操作,有效提高了最终的目标检出性能。

——END——

相关文章:

Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions(IA-YOLO)

1、总体概述 基于深度学习的目标检测在常规条件的数据集可以获得不错的结果,但是在环境、场景、天气、照度、雾霾等自然条件的综合干扰下,深度学习模型的适应程度变低,检测结果也随之下降,因此研究在复杂气象条件下的目标检测方法…...

Mac电脑Jmeter集成到Jenkins,压测多个接口并生成测试报告

Jenkins支持的JDK版本17、21,通过java -version查看当前JDK版本,确认是否匹配 打开网址https://www.jenkins.io/download 点击下载,选择mac版本 commend空格打开终端,输入安装命令brew install jenkins 安装完成后输入brew servi…...

redis-Hash

一,应用场景 Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Set就是一种简化的Hash,只变动key,而value使用默认值填充。 可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。 二,命令 H…...

Kubernetes kafka系列 | Strimzi 部署kafka-bridge

Strimzi kafka集群部署直通车 一、kafka bridge 介绍 Kafka Bridge 是 Apache Kafka 生态系统中的一个工具或组件,用于实现 Kafka 与其他系统或协议之间的通信或集成。Kafka 本身是一个分布式事件流平台,广泛用于构建实时数据流水线和流式应用程序。然而…...

AR和VR如何改变客户体验?

How AR and VR are transforming customer experiences? How AR and VR are transforming customer experiences AR和VR如何改变客户体验 AR and VR technology was largely expedited by the past pandemic with at least 93.3 million and 58.9 million users r…...

微信小程序中实现埋点的方法

在小程序开发过程中,埋点是实现数据采集和用户行为分析的重要手段。通过埋点,我们可以获取用户在使用小程序时的各种操作信息,从而更好地了解用户行为特征,优化产品体验。下面将介绍如何在小程序中实现埋点,并通过代码示例进行说明。 一、埋点实现思路 小程序的埋点实现主要依…...

vue记事本渲染以及交互

以下是记事本的源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>记事本</title><styl…...

Zookeeper中的脑裂

简单点来说&#xff0c;脑裂(Split-Brain) 就是比如当你的 cluster 里面有两个节点&#xff0c;它们都知道在这个cluster 里需要选举出一个 master。那么当它们两个之间的通信完全没有问题的时候&#xff0c;就会达成共识&#xff0c;选出其中一个作为 master。但是如果它们之间…...

【漏洞复现】金和OA XmlDeal.aspx XXE漏洞

0x01 产品简介 金和数字化智能办公平台(简称JC6)是一款结合了人工智能技术的数字化办公平台,为企业带来了智能化的办公体验和全面的数字化转型支持。同时符合国家信创认证标准,支持组织数字化转型,实现业务流程的数字化、智能化和协同化,提高企业竞争力。 0x02 漏洞概述…...

对比:React 还是 Vue

自己之前的开发栈一直是 Vue&#xff0c;对 Vue 的设计理念及底层实现原理算是颇有了解&#xff1b;随着公司技术迭代&#xff0c;近半年来开始接触&使用 React。 前面写了几篇关于 React 的文章&#xff0c;但大部分都是知识点以及开发过程问题的沉淀总结。 这篇文章想尝…...

ubuntu 20.04 SD 卡分区类型 msdos 改为 GPT 的方法

前言 默认 SD 卡分区是 FAT32 格式&#xff0c;为了用于嵌入式Linux ext4 文件系统&#xff0c;需要改为 ext4 文件系统&#xff0c;但是SD 卡分区类型默认是 msdos 类型&#xff0c;也就是 MBR 类型&#xff0c;不是 GPT 类型。 烧写 ext4 分区表&#xff0c;或者使用 ubuntu…...

Kubernetes(K8s)技术解析

1. K8s简介 Kubernetes&#xff08;简称K8s&#xff09;是一个开源的容器编排平台&#xff0c;旨在简化容器化应用程序的部署、扩展和管理。为开发者和运维人员提供了丰富的功能和灵活的解决方案&#xff0c;帮助他们更轻松地构建、部署和管理云原生应用程序。以下是关于Kubern…...

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十 简单颜色反转效果 一、简单介绍 二、简单颜色反转效果实现原理 三、简单颜色反转效果案例实现简单步骤 四、注…...

【ELK+Kafka+filebeat分布式日志收集】部署filebeat和Kibana(三)

filebeat下载 官网:https://www.elastic.co/cn/downloads/beats/filebeat 或者 cd /opt wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.8.1-linux-x86_64.tar.gz依次执行如下命令...

二.音视频编辑-媒体组合-播放

引言 当涉及到音视频编辑时&#xff0c;媒体资源的提取和组合是至关重要的环节。在iOS平台上&#xff0c;AVFoundation框架提供了丰富而强大的功能&#xff0c;使得媒体资源的操作变得轻松而高效。从原始的媒体中提取片段&#xff0c;然后将它们巧妙地组合成一个完整的作品&am…...

前端安全-面试题(2024)

1. 面试总结话术: 前端常见的安全问题主要包括以下几种: 跨站脚本攻击(XSS):攻击者通过在目标网站注入恶意脚本,当用户访问网站时,恶意脚本会被执行,从而窃取用户信息或进行其他恶意操作。这种攻击通常利用表单提交、URL参数等方式注入脚本。存储型 xss 恶意代码存在数…...

CVE-2022-29405 Apache Archiva任意用户密码重置漏洞分析

Apache Archiva是一套可扩展的Artifact Repository管理系统。它能够与Maven&#xff0c;Continuum和ANT等构建工具完美结合。Archiva提供的功能包括&#xff1a;远程Repository代理&#xff0c;基于角色的安全访问管理&#xff0c;Artifact分发、维护、查询&#xff0c;生成使用…...

ssm框架配置文件例子

emmm。。。。 就是说&#xff0c;正常ssm的配置文件长啥样&#xff1f; 就最基础的&#xff1f; 贴一下&#xff0c;备忘吧。 第一个&#xff1a;applicationContext.xml <beans xmlns"http://www.springframework.org/schema/beans"xmlns:context"http…...

maven构建项目报错:Failure to find com.microsoft.sqlserver:sqljdbc4:jar:4.0 in

背景 今天在项目里面查询sqlserver的数据库的时候&#xff0c;本地maven中引入依赖&#xff1a; <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>4.0</version></dependenc…...

已解决rabbitmq AMQPConnectionClosedException:管道破裂或连接关闭异常的正确解决方法,亲测有效!!!

已解决rabbitmq AMQPConnectionClosedException&#xff1a;管道破裂或连接关闭异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 一、问题分析 二、报错原因 三、解决思路 四、解决方法 五、总结 博主v&#xff1a;XiaoMing_Java 一、…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理&#xff1a;检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目&#xff1a;RankRAG&#xff1a;Unifying Context Ranking…...

JavaScript 标签加载

目录 JavaScript 标签加载script 标签的 async 和 defer 属性&#xff0c;分别代表什么&#xff0c;有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...