深度学习小目标检测问题——(转载)对于ssd对小目标检测效果的思考

2024-06-13 10:38

本文主要是介绍深度学习小目标检测问题——(转载)对于ssd对小目标检测效果的思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版权声明:本文为CSDN博主「mazinkaiser1991」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012927281/article/details/87426473

对于ssd模型对于小目标检测效果不好的问题,我认为可以结合.prototxt文件进行分析,以conv4_3_norm_mbox_priorbox为例:

prior_box_param {
min_size: 30.0
max_size: 60.0
aspect_ratio: 2
flip: true
clip: false
variance: 0.1
variance: 0.1
variance: 0.2
variance: 0.2
step: 8
offset: 0.5
}

其中min_size比较明确为30pixel,若以IOU 0.5为例,则原物体大小至少为21.21pixel,才能与原物体有0.5以上的IOU。也因此小于21pixel的物体,ssd无法检测。因为没有办法生成anchor。针对这个问题其实可以通过min_size与step的方式进行解决。

但仅生成anchor还不够,若要检测小物体,既需要一张足够大的featuremap来提供更加精细的特征和做更加密集的采样,同时也需要足够的semantic meaning来与背景区分开。当前conv4_3_norm_mbox_priorbox一方面featuremap不够大,特征信息不够,另一方面conv4_3_norm_mbox_priorbox属于比较靠近输入的卷积层,semantic信息同时不够。以上两方面的原因都造成了conv4_3_norm_mbox_priorbox无法用于检测小目标。

但对于conv9_2_mbox_priorbox层:

prior_box_param {
min_size: 264.0
max_size: 315.0
aspect_ratio: 2
flip: true
clip: false
variance: 0.1
variance: 0.1
variance: 0.2
variance: 0.2
step: 300
offset: 0.5
}

最小的框是264pixel,同理最小物体的尺寸是186.67pixel,conv9_2_mbox_priorbox包含语义信息较多,但可以检测的最小物体过大,也造成了conv9_2_mbox_priorbox无法用于检测小目标。
针对既要较大的featuremap,又要较为丰富的语义信息的问题,FPN、retinanet、yolov3等采用的方法比较一致,使用较小的featuremap通过upsample操作与较大的featuremap concat在一起,即保留了深层featuremap的语义信息,又利用了浅层featuremap较为精细的特征。yolov2同样使用了多尺度特征融合。

除了多尺度特征融合之外,还可以采用的另一个思路是detnet。使用专门的目标检测主干网络,代替当前针对分类任务的主干网络。针对分类任务的主干网络有以下问题:当前主干网络基于较大的降采样因子产生较大的感受野,较大的感受野对分类任务有利。(Traditional backbone produces higher receptive field based on large downsampling factor, which is beneficial to the visual classification)然而以上做法造成了空间分辨率的让步,这造成了大目标的定位不准确与小目标的识别困难(However, the spatial resolution is compromised which will fail to accurately localize the large objects and recognize the small objects.)

其核心思想是空洞瓶颈结构(dilated bottleneck structure),总结起来就是一句话:DetNet不仅保持较高分辨率的特征图,同时具有较大的感受野。(DetNet not only maintains high resolution feature maps but also keeps large receptive field)

论文中认为FPN在较深的层次生成并预测较大的物体,上述物体的边界可能会过于模糊以致于不能准确的回归。(large object is generated and predicted within deeper layers, the boundary of these object may be too blurry to get an accurate regression)。较大的步长的另一个缺点是小物体的丢失。(Another drawback of large stride is the missing of small objects.)

PS:FPN使用P2-P6层,retinanet使用P3-P7层。在retinanet中anchor与gt的IOU大于0.5为正样本,小于0.4为背景,大于0.4小于0.5的在训练过程中忽略。FPN仍然使用与faster-rcnn相同的原则,与某个gt有最高的IOU,或者与任何gt的IOU大于0.7,则认为是正样本,与任何gt IOU都小于0.3,则认为是负样本。

最后回到核心内容上来,detnet的实现就是将resnet中原来的33卷积换成33,dilate为2的空洞卷积,网络结构见下图:
在这里插入图片描述

参考:
重要
知乎:https://www.zhihu.com/question/49455386

githubMobileNet-SSD-windows:https://github.com/eric612/MobileNet-SSD-windows/blob/master/models/VGGNet/VOC0712/SSD_300x300/train.prototxt

这篇关于深度学习小目标检测问题——(转载)对于ssd对小目标检测效果的思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057071

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修