草庐IT

让目标检测在恶劣天气下起飞---IAYOLO论文阅读笔记——恶劣天气下的目标检测

沈四岁 2023-04-20 原文

论文地址:https://arxiv.org/abs/2112.08088

代码地址:https://github.com/wenyyu/Image-Adaptive-YOLO

本文主要针对恶劣天气下的目标检测。

动机:虽然目前的目标检测器都取得了不错的成绩,但是这写检测器大多都是在清晰图像上进行训练和评估的。而在现实世界中,图像并不总是清晰的,比如在自动驾驶领域肯定会遇到有雾或者低光照的场景。在这样的场景下如果采用之前的目标检测算法,结果可能不尽人意。

创新点:针对以上问题,本文提出了(1)一个图像处理模块用于图像增强.(2)采用混合训练的方法对模型进行训练。

         从上图中可以看到,论文提出的模型在foggy条件下检测的效果确实比baseline(YOLO v3)好。

模型:本文提出的模型是一个端到端的。从下图中可以看到DIP Module (可微图像处理模块)共有6个滤波器,而这些滤波器的参数PN是由CNN-PP 模块进行预测,其中CNN-PP模块就是普通的卷积层和全连接层。在这里由于模型是端到端的,所以CNN-PP模块并不需要单独训练,而是根据后面的检测头YOLO v3的loss进行更新学习。 

        CNN-PP Module:

                we propose to employ a small CNN as a parameter predictor to estimate the         hyperparameters, which is very efficient.Given an input image of any resolution, we simply         use bilinear interpolation to downsample it to 256 × 256 resolution. As shown in Fig. 2, the         CNN-PP network is composed of five convolutional blocks and two fully-connected layers.         Each convolutional block includes a 3 × 3 convolutional layer with stride 2 and a leaky         Relu. The final fully-connected layer outputs the hyperparameters for the DIP module.          The output channel of these five convolutional layers are 16, 32, 32, 32 and 32,respectively.         The CNN-PP model contains only 165K parameters when the total number of parameter is         15.

      上文是论文中的原文,从文中描述的可以看到:CNN-PP包含5个从convolutional    block和2个个fully connected。其中每个convolutional  block包含一个3*3步长为2的卷积层和一个leaky relu激活函数。每个卷积层的输出通道数为16,32,32,32,32。最终预测出的参数PN由全连接层输出。在这里CNN-PP的输入图像大小是255*255*3的,因为作者在文中提到,大图像会造成大的计算量。最后一句作者所CNN会预测15个DIP的参数

        DIP Module:这个模块就是一个可微的图像处理模块,一共有6个。上面说NN会预测15个DIP的参数,所以对应于公式,可以看到,defog 1个,WB 3个,Gamma 1个,Tone 8个,contrast 1个,Sharpen 1个。

        首先这里的Pi就是源图像的像素值。

         1:对于WBGamma其实就是简单的乘法和幂运算

         2:contrast:​​​​​​​​​​​​​​参数为α,计算公式入下图所示,其中En由公式(1)(2)(3)计算所得:

 

 

         3:Tone:

 ​​​​​​​

         4:sharpen:Gau是高斯滤波,I(x)是源图像是要学习的参数。

        5:defog:

 从上面的公式看到,要想得到清晰图关键就是要算t(x)和A。其中A是算要处理的图像的前1000个最亮像素的平均值。而t(x)由下列公式算得,其中是要优化的参数。

 

算 法:可以看到在训练时每个batch中的图像有2/3的概率加雾和生成低光照图像。其中加雾的等级有10级,每一级对应的加雾程度不一样。

有关让目标检测在恶劣天气下起飞---IAYOLO论文阅读笔记——恶劣天气下的目标检测的更多相关文章

  1. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  4. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  5. ruby - 检测由 RSpec、Ruby 运行的代码 - 2

    我想知道我的代码是否在rspec下运行。这可能吗?原因是我正在加载一些错误记录器,这些记录器在测试期间会被故意错误(expect{x}.toraise_error)弄得乱七八糟。我查看了我的ENV变量,没有(明显的)测试环境变量的迹象。 最佳答案 在spec_helper.rb的开头添加:ENV['RACK_ENV']='test'现在您可以在代码中检查RACK_ENV是否经过测试。 关于ruby-检测由RSpec、Ruby运行的代码,我们在StackOverflow上找到一个类似的问题

  6. ruby - 使用 Ruby Daemons gem 检测停止 - 2

    我正在使用rubydaemongem。想知道如何向停止操作添加一些额外的步骤?希望我能检测到停止被调用,并向其添加一些额外的代码。任何人都知道我如何才能做到这一点? 最佳答案 查看守护程序gem代码,它似乎没有用于此目的的明显扩展点。但是,我想知道(在守护进程中)您是否可以捕获守护进程在发生“停止”时发送的KILL/TERM信号...?trap("TERM")do#executeyourextracodehereend或者你可以安装一个at_exit钩子(Hook):-at_exitdo#executeyourextracodehe

  7. ruby-on-rails - 在 irb 中阅读文档 - 2

    我怀念ipython的一件事是它有一个?为特定功能挖掘文档的运算符。我知道ruby​​有一个类似的命令行工具,但是我在irb中调用它非常不方便。ruby/irb有类似的东西吗? 最佳答案 Pry是IPython的Ruby版本,它支持?命令来查找有关方法的文档,但语法略有不同:pry(main)>?File.dirnameFrom:file.cinRubyCore(CMethod):Numberoflines:6visibility:publicsignature:dirname()Returnsallcomponentsofthef

  8. ruby - Ruby 脚本如何检测到它正在 irb 中运行? - 2

    我有一个定义类的Ruby脚本。我希望脚本执行语句BoolParser.generate:file_base=>'bool_parser'仅当脚本作为可执行文件被调用时,而不是当它被irbrequire(或通过-r在命令行上传递)时。我可以用什么来包装上面的语句,以防止它在我的Ruby文件加载时执行? 最佳答案 条件$0==__FILE__...!/usr/bin/ruby1.8classBoolParserdefself.generate(args)p['BoolParser.generate',args]endendif$0==_

  9. Ruby 无法检测字符串中的换行符 - 2

    我有以下字符串,我想检测那里的换行符。但是Ruby的字符串方法include?检测不到它。我正在运行Ruby1.9.2p290。我哪里出错了?"/'ædres/\nYour".include?('\n')=>false 最佳答案 \n需要在双引号内,否则无法转义。>>"\n".include?'\n'=>false>>"\n".include?"\n"=>true 关于Ruby无法检测字符串中的换行符,我们在StackOverflow上找到一个类似的问题: h

  10. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

随机推荐