检测到目标服务器启用了trace方法_深度学习检测小目标常用方法

引言

在深度学习目标检测中,特别是人脸检测中,小目标、小人脸的检测由于分辨率低,图片模糊,信息少,噪音多,所以一直是一个实际且常见的困难问题。不过在这几年的发展中,也涌现了一些提高小目标检测性能的解决手段,本文对这些手段做一个分析、整理和总结。

欢迎探讨,本文持续维护。

实验平台

N/A

传统的图像金字塔和多尺度滑动窗口检测

最开始在深度学习方法流行之前,对于不同尺度的目标,大家普遍使用将原图build出不同分辨率的图像金字塔,再对每层金字塔用固定输入分辨率的分类器在该层滑动来检测目标,以求在金字塔底部检测出小目标;或者只用一个原图,在原图上,用不同分辨率的分类器来检测目标,以求在比较小的窗口分类器中检测到小目标。

在著名的人脸检测器MTCNN(https://arxiv.org/abs/1604.02878)中,就使用了图像金字塔的方法来检测不同分辨率的人脸目标。

d3a42d5bec0ff6beb6c827132715e461.png

不过这种方式速度慢(虽然通常build图像金字塔可以使用卷积核分离加速或者直接简单粗暴地resize,但是还是需要做多次的特征提取呀),后面有人借鉴它的思想搞出了特征金字塔网络FPN,它在不同层取特征进行融合,只需要一次前向计算,不需要缩放图片,也在小目标检测中得到了应用,在本文后面会讲到。

简单粗暴又可靠的Data Augmentation

深度学习的效果在某种意义上是靠大量数据喂出来的,小目标检测的性能同样也可以通过增加训练集中小目标样本的种类和数量来提升。在《深度学习中不平衡样本的处理》[2]一文中已经介绍了许多数据增强的方案,这些方案虽然主要是解决不同类别样本之间数量不均衡的问题的,但是有时候小目标检测之难其中也有数据集中小样本相对于大样本来说数量很少的因素,所以其中很多方案都可以用在小样本数据的增强上,这里不赘述。另外,在19年的论文Augmentation for small object detection(https://arxiv.org/abs/1902.07296)中,也提出了两个简单粗暴的方法:

1. 针对COCO数据集中包含小目标的图片数量少的问题,使用过采样OverSampling策略;

44e1e2a5a4dde323c1fc97b887414742.png

2. 针对同一张图片里面包含小目标数量少的问题,在图片内用分割的Mask抠出小目标图片再使用复制粘贴的方法(当然,也加上了一些旋转和缩放,另外要注意不要遮挡到别的目标)。

c5782e7528403b278a10929b32d10bfd.png

在同一张图中有更多的小目标,在Anchor策略的方法中就会匹配出更多的正样本。

0cc06ea7f3f465b00e4045059886b23b.png

特征融合的FPN

不同阶段的特征图对应的感受野不同,它们表达的信息抽象程度也不一样。浅层的特征图感受野小,比较适合检测小目标(要检测大目标,则其只“看”到了大目标的一部分,有效信息不够);深层的特征图感受野大,适合检测大目标(要检测小目标,则其”看“到了太多的背景噪音,冗余噪音太多)。所以,有人就提出了将不同阶段的特征图,都融合起来,来提升目标检测的性能,这就是特征金字塔网络FPN(https://arxiv.org/abs/1612.03144)。

53f97ba91a441be8676e822237fbfb0a.png

在人脸领域,基本上性能好一点的方法都是用了FPN的思想,其中比较有代表性的有RetinaFace: Single-stage Dense Face Localisation in the Wild(https://arxiv.org/pdf/1905.00641.pdf)

5b4a94012bb798f7c4bac7488a6f1201.png

另外一个思路:既然可以在不同分辨率特征图做融合来提升特征的丰富度和信息含量来检测不同大小的目标,那么自然也有人会进一步地猜想,如果只用高分辨率的特征图(浅层特征)去检测小脸;用中间分辨率的特征图(中层特征)去检测大脸;最后用地分辨率的特征图(深层特征)去检测小脸。比如人脸检测中的SSH(https://arxiv.org/pdf/1708.03979.pdf)。

477abcd6c2ba7816886c902f446849d8.png

合适的训练方法SNIP,SNIPER,SAN

机器学习里面有个重要的观点,模型预训练的分布要尽可能地接近测试输入的分布。所以,在大分辨率(比如常见的224 x 224)下训练出来的模型,不适合检测本身是小分辨率再经放大送入模型的图片。如果是小分辨率的图片做输入,应该在小分辨率的图片上训练模型;再不行,应该用大分辨率的图片训练的模型上用小分辨率的图片来微调fine-tune;最差的就是直接用大分辨率的图片来预测小分辨率的图(通过上采样放大)。但是这是在理想的情况下的(训练样本数量、丰富程度都一样的前提下,但实际上,很多数据集都是小样本严重缺乏的),所以放大输入图像+使用高分率图像预训练再在小图上微调,在实践中要优于专门针对小目标训练一个分类器

694a25c0fc4a9ec87b34d3c3107ca570.png
e7833baa94acbbdfd1bb101ec8c24e3b.png

在下图中示意的是SNIP训练方法,训练时只训练合适尺寸的目标样本,只有真值的尺度和Anchor的尺度接近时来用来训练检测器,太小太大的都不要,预测时输入图像多尺度,总有一个尺寸的Anchor是合适的,选择那个最合适的尺度来预测。对R-FCN(https://arxiv.org/abs/1605.06409)提出的改进主要有两个地方,一是多尺寸图像输入,针对不同大小的输入,在经过RPN网络时需要判断valid GT和invalid GT,以及valid anchor和invalid anchor,通过这一分类,使得得到的预选框更加的准确;二是在RCN阶段,根据预选框的大小,只选取在一定范围内的预选框,最后使用NMS来得到最终结果。

0516511767f5f2e00fb6360995b1b9f5.png

SNIPER是SNIP的实用升级版本,这里不做详细介绍了。

更稠密的Anchor采样和匹配策略S3FD,FaceBoxes

在前面Data Augmentation部分已经讲了,复制小目标到一张图的多个地方可以增加小目标匹配的Anchor框的个数,增加小目标的训练权重,减少网络对大目标的bias。同样,反过来想,如果在数据集已经确定的情况下,我们也可以增加负责小目标的Anchor的设置策略来让训练时对小目标的学习更加充分。例如人脸检测中的FaceBoxes(https://arxiv.org/abs/1708.05234)其中一个Contribution就是Anchor densification strategy,Inception3的anchors有三个scales(32,64,128),而32 scales是稀疏的,所以需要密集化4倍,而64 scales则需要密集化2倍。在S3FD(http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhang_S3FD_Single_Shot_ICCV_2017_paper.pdf)人脸检测方法中,则用了Equal-proportion interval principle来保证不同大小的Anchor在图中的密度大致相等,这样大脸和小脸匹配到的Anchor的数量也大致相等了。

另外,对小目标的Anchor使用比较宽松的匹配策略(比如IoU > 0.4)也是一个比较常用的手段。

70211f04374a1bac01644097d5b609e7.png

先生成放大特征再检测的GAN

Perceptual GAN使用了GAN对小目标生成一个和大目标很相似的Super-resolved Feature(如下图所示),然后把这个Super-resolved Feature叠加在原来的小目标的特征图(如下下图所示)上,以此增强对小目标特征表达来提升小目标(在论文中是指交通灯)的检测性能。

ddbf7d87d459e1499040febb5221e67f.png
223d4a3d9b736f7b926e4b91728591a2.png

利用Context信息的Relation Network和PyramidBox

小目标,特别是像人脸这样的目标,不会单独地出现在图片中(想想单独一个脸出现在图片中,而没有头、肩膀和身体也是很恐怖的)。像PyramidBox(https://arxiv.org/abs/1803.07737)方法,加上一些头、肩膀这样的上下文Context信息,那么目标就相当于变大了一些,上下文信息加上检测也就更容易了。

545917bc74dfae472e88f3d43372fc85.png

这里顺便再提一下通用目标检测中另外一种加入Context信息的思路,Relation Networks(https://arxiv.org/abs/1711.11575)虽然主要是解决提升识别性能和过滤重复检测而不是专门针对小目标检测的,但是也和上面的PyramidBox思想很像的,都是利用上下文信息来提升检测性能,可以归类为Context一类。

bbfa67911d0a57fe47c7b468285e2275.png

总结

本文比较详细地总结了一些在通用目标检测和专门人脸检测领域常见的小目标检测的解决方案,后面有时间会再写一些专门在人脸领域的困难点(比如ROP的侧脸,RIP的360度人脸)及现在学术界的解决方案。

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

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

相关文章

php正则大小写字母,php 常见email,url,英文大小写,字母数字组合等正则表达式详解...

操作符 描述\ 转义符(), (?:), (?), [] 圆括号和方括号*, , ?, {n}, {n,}, {n,m} 限定符^, $, \anymetacharacter 位置和顺序| “或”操作全部符号解释字符 描述\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,’…

学python五大理由_学习Python的五大理由

Python已经是25岁的大叔级编程语言了,但近年来Python反而变得越来越流行,在TIOBE编程语言指数排行榜中,Python的排名从去年的第八名飙升到了第五名(下图)。无论是编程新手还是保持饥饿的编程老鸟,Python都有着不可阻挡的魅力&…

redis连不上java,java使用jedis连不上linux上redis服务

java用的jedis连接redis。reids是安装在虚拟机里面,ip是192.168.216.128,在本地能ping通虚拟机,并且xshell也能远程登录虚拟机。虚拟机内的redis服务正常,可以启动,并且执行命令没问题。问题:在虚拟机外tel…

python图片隐写_Lsb图片隐写

前言在刚刚过去的网鼎杯第一场比赛中,做到了一道杂项题是关于lsb隐写的。LSB全称为 least significant bit,是最低有效位的意思。Lsb图片隐写是基于lsb算法的一种图片隐写术,以下统称为lsb隐写,这是一种常见的信息隐藏方法。当然关…

php自定义能过滤器,过滤器与自定义过滤器的介绍

angularjs中的过滤器为了实现对于表达式结果的筛选、过滤、格式化,达到更好的表现效果。过滤器的语法:支持多重过滤和传参{{expression | 过滤器名称 : ‘参数’ | 过滤器名称2:‘参数’ }}方式:| -》 管道常用的过滤器&#xff1…

python二维元素向量_详解python Numpy中求向量和矩阵的范数

在python Numpy中求向量和矩阵的范数实例np.linalg.norm(求范数):linalglinear(线性)algebra(代数),norm则表示范数。函数参数x_normnp.linalg.norm(x, ordNone, axisNone, keepdimsFalse)①x: 表示矩阵(也可以是一维)②ord:范数类型向量的范数&#xff…

find查找所有php,linux中的find命令—查找文件名

1.在某目录下查找名为“elm.cc”的文件find /home/lijiajia/ -name elm.cc2.查找文件名中包含某字符(如"elm")的文件find /home/lijiajia/ -name *elm*find /home/lijiajia/ -name elm*find /home/lijiajia/ -name *elm3.根据文件的特征进行查询find /home/lijiajia/…

mac定时执行python_Python脚本实现在Mac上DIY定时提醒功能

背景:这两天一直沉迷于在电脑上看书,每到12点该吃饭时就会忘了,同事还要到工位上叫我,于是就想搞出来一个每天能够定时提醒我该做什么事情的功能,这样能够有提前准备。今天下午花了半天的时间研究了一下,最…

php 制造异常,php 异常

PHP 5 添加了类似于其它语言的异常处理模块。在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。使用多个 catch 可以捕获不同…

大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...

壹猫眼Top100电影数据分析概述从这一节开始,我们就综合利用已学到的一些分析技术来尝试做一些比较复杂的实际数据分析项目。在这些实际的项目案例中,我们将会看到一个完整的数据分析流程:数据清理——数据分析——数据可视化(即数据解释)。最…

php utf8格式显示中文,php截取中文字符(utf-8格式)的函数

/**UTF-8中文字符截断程序http://www.jquerycn.cn*/$str "321这是测试字符串";$str1 "()()";echo subUTF8str($str,0,3)."";echo subUTF8str($str,0,4)."";echo subUTF8str($str1,0,4)."";echo subUTF8str($str1,0,10).&q…

python计算一年有多少天_Python 案例 004 (计算当前时间是一年中的第几天)

# -*- coding:utf-8 -*-"""计算当前时间是一年中的第几天"""bissextile [31,60,91,121,152,182,213,244,274,305,335,366] #leap yearcommonYear [31,59,90,120,151,181,212,243,273,304,334,365]enterYear int(raw_input("enter the Yea…

php截取字符串函数 左右,php截取中文字符串函数的技巧

这篇文章主要介绍了php截取中文字符串函数,实例分析了php针对中文字符串操作的技巧,注意utf-8与gb2312编码的转换问题,具有一定参考借鉴价值,需要的朋友可以参考下本文实例讲述了php截取中文字符串函数。具体实现方法如下&#xff1a;代码如下:<?php //中文字符串截取funct…

python从list中取出连续的数_python list 中找连续的数字(由网友处学习)

# -*- coding: utf-8 -*-# python:2.x__author__ ‘Administrator‘#学习这个要求的&#xff1a;http://wsky.org/archives/162.htmlimport sysfrom itertools import *from operator import *def parse(f):d{}for line in open(f,‘r‘):_lineline.split()d.setdefault(_line…

php中rectangle函数怎么用,rectangle函数参数 请教VB中使用API函数rectangle的问题

C#中两个参数为RectangleF的函数A矩形相对于B矩形的位置。 A矩形的X坐标减去B矩形的X坐标&#xff0c;A矩形的Y坐标减去Y矩形的X坐标。 public PointF RelativePosition(RectangleF recA, RectangleF recB) { PointF point new Point(); point.X recA.X - recB.X; point.Y r…

navicat 只对比一张表的数据_Excel VBA批量新建工作表(对比数据透视表的使用)...

在之前的一篇文章中&#xff0c;分享过用数据透视表的方法批量新建工作表。https://zhuanlan.zhihu.com/p/115191339​zhuanlan.zhihu.com本次将用VBA的方式快速新建多张工作表并命名&#xff0c;基于上篇文章中对插入工作表和计算工作表数的分析。https://zhuanlan.zhihu.com/…

matlab广泛用于什么,目前,Matlab已成为世界上最受欢迎的科学和工程计算软件工具....

目前&#xff0c;Matlab已成为世界上最受欢迎的用于科学和工程计算的软件工具. 它是一种新型的计算机高级编程语言&#xff0c;具有广阔的应用前景. 有人将其称为“第四代”计算机语言. 就影响而言&#xff0c;仍然没有其他计算软件可与Matlab匹敌. Matlab简介Matlab于1984年发…

必须使用列别名命名此表达式_lambda表达式

一般的&#xff0c;如果一个类定义了函数调用运算符&#xff0c;则我们可以像使用函数一样使用这个类&#xff0c;例如&#xff1a;一个类A定义了函数调用运算符&#xff0c;我们就可以使用A()这样的形式调用对象&#xff0c;实际上调用了类的调用运算符函数。如果一个类定义了…

mysql数据库出现幻读,MySQL 幻读怎样处理?_数据库

MySQL 幻读怎样处理&#xff1f;1、MVCC快照&#xff0c;将历史数据存一份快照&#xff0c;在其事件增添与删除数据时&#xff0c;保证当前事件来说是不可见的&#xff1b;多半数据库都完成了多版本并发掌握&#xff0c;而且都是靠保留数据快照来完成的。以 InnoDB 为例&#x…

搜索引擎提交软件_增加SEO超级外链须知的高权重网站目录提交方法

做SEO的朋友对开放式网站目录应该不陌生吧。网站目录就是按一定的分类方法把收录的网站进行分类归档。网站目录本身是不主动抓取网页的&#xff0c;一般只记录网站的名称&#xff0c;网址和有限的说明文字。和网址站、导航站、酷站网址大全等如同一辙。一般高质量的聚合目录网站…