精华内容
下载资源
问答
  • 小目标检测率的提升
    千次阅读
    2018-10-08 13:21:25

    下列哪些措施有利于提升ssd架构的小目标检测率,假定以VGG为主干网络?
    A.更换主干网络为resnet152
    B.使用FPN(特征金字塔)架构
    C.增加输入分辨率
    D.prior box由原来的1/16下采样层变更为1/8下采样层

    更多相关内容
  • 文章目录误报率、故障检测率、漏报率等指标1. 一些标准指标的计算true positive rate (tp rate)【真阳性率】, or hit rate 【命中率】, or recall 【召回率】:false positive rate (fp rate) 【假阳性率】, or ...

    误报率、故障检测率、漏报率、虚警率、误警率等指标异同及计算公式

    1. 一些标准指标的计算

    参考论文:Fawcett T. An introduction to ROC analysis[J]. Pattern Recognition Letters, 2006, 27(8): 861–874.

    谷歌学术显示这篇文章引用量有一万四千多,应该是比较权威经典的。

    下面这部分相关指标的定义是从该论文中摘抄出来的

    中括号【】内的【中文】,是自己根据相应英文含义加的

    True class 【真实类别】True class 【真实类别】
    p 【阳性】n 【阴性】
    Hypothesized class 【预测类别】Y 【阳性】TP(True Positives) 【真阳性】FP(False Positives) 【假阳性】
    Hypothesized class 【预测类别】N 【阴性】FN(False Negatives) 【假阴性】TN(True Negatives) 【真阴性】

    注:Hypothesized class直接翻译好像是“被假定的类别”,不太清楚是什么意思,个人认为应该是指“预测类别”。

    true positive rate (tp rate)【真阳性率】, or hit rate 【命中率】, or recall 【召回率】:

    tp rate = T P T P + F N ≈ Positives correctly classified 【被正确分类的阳性数目】  Total positives 【总阳性数目】  \textrm{tp rate}=\frac{TP}{TP+FN}\approx\frac{\textrm{Positives correctly classified 【被正确分类的阳性数目】 }}{\textrm{Total positives 【总阳性数目】 }} tp rate=TP+FNTPTotal positives 【总阳性数目】 Positives correctly classified 【被正确分类的阳性数目】 

    注:关于上面是约等号的问题,首先,原文说的是用后面这部分的公式去估计tp rate,个人想法是,前面的计算公式是理论公式,后面公式是用实验的结果来估计的意思吧。

    false positive rate (fp rate) 【假阳性率】, or false alarm rate:

    fp rate = F P F P + T N ≈ Negatives incorrectly classified【被错误分类的阴性数目】 Total negatives【总阴性数目】 \textrm{fp rate}=\frac{FP}{FP+TN}\approx\frac{\textrm{Negatives incorrectly classified【被错误分类的阴性数目】}}{\textrm{Total negatives【总阴性数目】}} fp rate=FP+TNFPTotal negatives【总阴性数目】Negatives incorrectly classified【被错误分类的阴性数目】

    sensitivity【灵敏度】:

    sensitivity=recall \textrm{sensitivity=recall} sensitivity=recall

    specificity【特异度】:

    specificity = True negatives【真阴性】  False positives【假阳性】+True negatives【真阴性】 = 1 − fp rate \textrm{specificity}=\frac{\textrm{True negatives【真阴性】 }}{\textrm{False positives【假阳性】+True negatives【真阴性】}}=1-\textrm{fp rate} specificity=False positives【假阳性】+True negatives【真阴性】True negatives【真阴性】 =1fp rate

    precision【精确度】:

    precision = T P T P + F P \textrm{precision}=\frac{TP}{TP+FP} precision=TP+FPTP

    accuracy【准确度】:

     accuracy = T P + T N T P + F N + T N + F P \textrm{ accuracy}=\frac{TP+TN}{TP+FN+TN+FP}  accuracy=TP+FN+TN+FPTP+TN

    F measure【F值】:

     F measure = 2 1 precision + 1 recall \textrm{ F measure}=\frac{2}{\frac{1}{\textrm{precision}}+\frac{1}{\textrm{recall}}}  F measure=precision1+recall12

    2. 在化工等领域的故障检测中相关指标计算

    以下是个人的理解,没有特意参照某篇论文,如有不同意见或错误,欢迎指出。

    在故障检测里,因为只是故障检测,并不会区分故障1或者故障2,而是统统当成故障这一类别。

    所以,将故障定义为阳性P,正常定义为阴性N,例如,故障1是阳性P,故障2也是阳性P。

    那么故障检测中,常用的相关指标定义如下:

    故障检测率(fault detection rate,FDR):

    FDR = 被正确检测的故障(即故障被成功预测成故障)数目  故障总数目 = T P T P + F N = tp rate \textrm{FDR}=\frac{\textrm{被正确检测的故障(即故障被成功预测成故障)数目 }}{\textrm{故障总数目}}=\frac{TP}{TP+FN}=\textrm{tp rate} FDR=故障总数目被正确检测的故障(即故障被成功预测成故障)数目 =TP+FNTP=tp rate

    因此,故障检测率与召回率、真阳性率是同一个计算公式,同一个含义。

    故障L的故障检测率

    故障L故障检测率  = 被正确检测的故障L(即故障L被成功预测成故障)总数  故障L总数目 \textrm{故障L故障检测率 }=\frac{\textrm{被正确检测的故障L(即故障L被成功预测成故障)总数 }}{\textrm{故障L总数目}} 故障L故障检测率 =故障L总数目被正确检测的故障L(即故障L被成功预测成故障)总数 

    其中,L是具体某类故障的标签。因此论文中,谈到“不同故障检测率”,用的是故障L的故障检测率公式。而“平均故障检测率”就是在不区分故障几的情况下计算的结果,即用的FDR或tp rate计算。

    所以,如果在“fault detection rate”的讨论环境中,存在着不同故障,那用的是故障L的故障检测率公式。如果没有区分故障,那么指的就是原来的含义,不过,为了说明的更清楚,一般采用“average fault detection rate”,即平均故障检测率,所以,这样也算是作了相应的区分了。

    论文示例 1:

    来源:Lv F, Wen C, Bao Z, et al. Fault diagnosis based on deep learning[C]. 2016 American Control Conference (ACC). Boston, MA, USA: IEEE, 2016: 6851–6856.

    这个讨论的是平均故障检测率:
    在这里插入图片描述

    论文示例 2:

    来源:Zhang X, Kano M, Li Y. Principal Polynomial Analysis for Fault Detection and Diagnosis of Industrial Processes[J]. IEEE Access, 2018, 6: 52298–52307.

    这个讨论的是各故障的检测率,用的是故障L的故障检测率公式,左边第一列是21种故障:
    在这里插入图片描述

    误报率(false alarm rate,FAR)、虚警率、误检率:

    FAR = 误报成故障的正常样本数目 正常总数目 = F P F P + T N = fp rate \textrm{FAR}=\frac{\textrm{误报成故障的正常样本数目}}{\textrm{正常总数目}}=\frac{FP}{FP+TN}=\textrm{fp rate} FAR=正常总数目误报成故障的正常样本数目=FP+TNFP=fp rate

    误报的含义肯定是指正常被误报成故障(真实类别为正常,预测类别为故障),显然不会有故障误报成正常这一说法,只有故障漏报成正常的说法。

    因此,误报率是与假阳性率同一个计算公式,同一个含义

    关于虚警率这个指标的问题,个人认为,完全是翻译的问题。

    毕竟,false alarm rate 这个词,字面意思,假的警报比率,翻译成“误报率”、“虚警率”都是合理的翻译,甚至翻译成“误警率”,“虚报率”字面意思好像也完全说的通的,只是可能没有人这么说。

    在百度翻译中,“虚警率”甚至被翻译成了“false positive rate”,即“假阳性率”了(而上面公式表明误报率和假阳性率确实是一样的)。

    而在谷歌翻译中,“虚警率”被翻译成“false alarm rate”,而“false alarm rate”再翻译回中文时又成“误报率”了。

    个人猜测,会不会是不同领域的故障检测的研究人员,由于侧重点不同或者什么原因,在翻译“false alarm rate”时,分别翻译成了“误报率”、“虚警率”、“误检率”之类的名称了,所以导致存在不同的翻译名称,但计算公式和含义是完全一样的。

    漏报率(missing alarm rate,MAR)、漏检率、漏警率:

    MAR = 漏报为正常的故障数目 故障总数目 = F N T P + F N \textrm{MAR}=\frac{\textrm{漏报为正常的故障数目}}{\textrm{故障总数目}}=\frac{FN}{TP+FN} MAR=故障总数目漏报为正常的故障数目=TP+FNFN

    个人认为,漏报率、漏检率、漏警率等也是不同领域的翻译问题,它们其实是一样的。

    故障L的漏报率:

    故障L漏报率 = 漏报为正常的故障L数目 故障L总数目 \textrm{故障L漏报率}=\frac{\textrm{漏报为正常的故障L数目}}{\textrm{故障L总数目}} 故障L漏报率=故障L总数目漏报为正常的故障L数目

    因此漏报率也可以分成“平均故障漏报率”和“故障L漏报率”。不过好像没见过用“平均故障漏报率”这一说法的。

    漏报率这一指标,在使用时,存在和检测率一样的使用规则。

    论文示例 3:

    来源:Shi L, Tong C, Lan T, 等. Statistical process monitoring based on ensemble structure analysis[J]. IEEE/CAA Journal of Automatica Sinica, 2018: 1–8.

    这个漏报率实际是各故障的漏报率,用的故障L的漏报率计算公式
    在这里插入图片描述

    显然,这个漏报率+故障检测率=1,或者说平均漏报率+平均故障检测率=1,再或者说故障L漏报率+故障L故障检测率=1

    因为和为1,所以,用故障检测率,一般就不用漏报率,反之亦然。

    而“精确度”、“准确率”、“错误率”这类指标,在故障检测上一般没见使用,可能是这类指标会受到不同类别数目的影响,所以,在该领域讨论意义不大。

    3. 在化工等领域的故障检测中哪个指标说法更专业?

    误报率、故障检测率、false alarm rate、fault detection rate

    阅读了一些该领域中的中英文论文,包括国内的硕博论文。

    中文论文中,大家基本都是用的误报率、故障检测率这两个指标。用漏报率的比较少。用“虚警率”这类说法的几乎没有看到过。

    个别人用了故障准确率等类似的说法,但是个人认为这一说法并不好,不知道什么意思,容易有歧义,也没看到它的计算公式,通过文章上下文,个人猜测,大概是故障检测率的意思吧。

    英文论文中,一般都是用false alarm rate、fault detection rate,用missing alarm rate也有,但比较少见。

    所以,个人认为,在化工过程的故障检测中,用误报率、故障检测率比用“虚警率、漏警率”更专业些。如有需要,不用故障检测率,用漏报率也是可以的。

    4. 上述论述得到的结论

    在 故障定义为阳性,正常定义为阴性 的前提下。

    结论① 故障检测率=真阳性率=召回率

    结论② 误报率=假阳性率

    结论③ false alarm rate=误报率=虚警率=误检率等名称(纯粹是翻译不同)

    结论④ missing alarm rate=漏报率=漏警率=漏检率等名称

    结论⑤ 漏报率+故障检测率=1

    结论⑥ 在化工等领域的故障检测中,用“误报率(false alarm rate)、故障检测率(fault detection rate)”是比较通用、比较专业的说法。

    展开全文
  • 深度学习中,为了提高模型的精度和泛化能力,往往着眼于两个方面:(1)使用更...训练负样本的目的是为了降低误检测率、误识别率,提高网络模型的泛化能力。通俗地讲就是告诉检测器,这些“不是你要检测的目标”。 3.F

    深度学习中,为了提高模型的精度和泛化能力,往往着眼于两个方面:(1)使用更多的数据(2)使用更深更复杂的网络。

    **
    一、什么是负样本

    **
    负样本是指不包含任务所要识别的目标的图像,也叫负图像(Negtive Image)。以识别限速牌为例,如下所示,左图包含限速牌,为正样本,右图不包含限速牌,为背景图,即负样本。

    正样本

    负样本

    2.为什么要训练负样本

    训练负样本的目的是为了降低误检测率、误识别率,提高网络模型的泛化能力。通俗地讲就是告诉检测器,这些“不是你要检测的目标”。

    3.Faster R-CNN、SSD、YOLO等神经网络模型中的负样本

    例如在Faster R-CNN中,在RPN阶段,会根据backbone生成的特征图上的每一点,按照不同尺寸、不同长宽比构建很多的候选锚框。这些锚框按照与Ground Truth box的交并比,选择特定阈值进行分类,比如IOU>0.7的锚框,被视为正锚框,也就是正样本,IOU<0.3的被视为负锚框,也就是负样本。通常负样本的数量会远远超过正样本,因此为了平衡类别比例,提高模型精度,常通过Focal Loss方法或hard example mining算法来恰当地利用正、负样本计算Clasification Loss与regresion Loss,并进行反向传播。因此网络模型中的负样本与负图像是不一样的,不能完全同等看待。

    4.如何收集负样本

    可以通过下面两种方式收集负样本:

    采用本任务场景的不包含目标物体的背景图像,例如你的目标是识别某园区内的行人,那么所有本园区内不包含行人的图片都视作负样本。不要使用不属于本任务场景的负图像,因为其对检测器的性能影响不大。
    测试图像中被识别错误的目标所在区域。(通常对原图像进行裁剪,使得裁剪下来的图像只包含误识别的物体,而不包含目标)

    5.负样本的标签文件

    用于目标检测任务的标签通常是xml文件,在xml文件中没有目标位置相关的节点,只有文件名,文件路径、图片宽度、高度、通道数等信息,这就是负样本的标签文件。关于负样本的标签文件的生成方式,可以参考博客:https://blog.csdn.net/dulingwen/article/details/89669928

    6.如何训练负样本

    将正负样本集及其标签作为训练集送入模型训练即可。

    注意:正负样本必须放在一起训练,不能单独训练负样本,否则经过训练,网络会把所有的图像都识别为背景。正负样本的比例最好为1:1到1:2左右,数量差距不能太悬殊,特别是正样本数量本来就不太多的情况下。

    尝试方法一:直接对误检的图像生成一个空的xml文件。(文件中没有任何对象)
    训练结果:由于xml文件中没有任何正样本对象,所以网络无法学习到背景信息,使用训练后的模型测试误检的图像,依然会产生误检。(这里网上有人说即使没有正样本,SSD网络在训练时也会产生负样本,本人测试,当整幅图像没有任何正样本时,网络学习不到任何信息,训练时loss=0)

    尝试方法二:误检的图像中含有正样本对象,但不是误检的类别。(例如:该图像中人物类别出现误检,但对该图像进行训练时只标注了一个汽车类别,而没有增加人物的正样本类别)
    训练结果:这种情况下,对网络进行训练时,会产生loss,并且训练后的模型,不会再把误检图像中的背景误检为人物。

    7.怎样消除误检——加强检测器

    把使用正样本训练好的模型拿来进行测试,此时会得到一些被错误识别的图片。把这些图片收集起来作为负样本加入到正样本集(如果图片中同时包含误识别物体和目标,可以将图像裁剪,裁剪后的图像包含误识别物体而不包含目标并尽量覆盖原图大部分区域,然后再将其分辨率resize回原图大小),组成新的训练集,送入模型进行训练。
    如果负样本的来源只有误识别的图片,那么由于误识别的图片往往占少数,可以利用图像增强(如高斯滤波、对比度增强、锐化、平滑等)的方法扩充负图像数量至和正样本数量相同,并组合在一起。将这样得到的训练集送入模型进行训练,经过若干个epoch,当Loss收敛到稳定值时,再次测试原来的出现误识别的图像你会发现误识别现象基本消失了,并且类似原来误识别的场景将会被正确识别。

    下面是扩充负样本数量的代码:

    import cv2
    from imgaug import augmenters as iaa
    import numpy as np
    import os
     
    imgdir = '/home/dulingwen/Pictures/pic1/'
    imgsave_dir = '/home/dulingwen/Pictures/pic2/'
     
    #do the gaussian blur transform
    BLUR_ARG = 2
    for i_blur in range(100*BLUR_ARG):
        for jpgfile in os.listdir(imgdir):
            jpgname = os.path.splitext(jpgfile)[0]
            img = cv2.imread(imgdir + jpgname + '.jpg')
            blurer = iaa.GaussianBlur(i_blur/100)
            img_aug = blurer.augment_image(img)
            cv2.imwrite(imgsave_dir + jpgname + '_blur_' + str(i_blur) + '.jpg', img_aug)
     
    #sharp the images in different arguments of alpha and lighness
    ALPHA = np.linspace(0,0.5,20)
    LIGHTNESS = np.linspace(0.5,1.25,20)
    for i_alpha in ALPHA:
        for i_lightness in LIGHTNESS:
            for img_file in os.listdir(imgdir):
                img_name = os.path.splitext(img_file)[0]
                img = cv2.imread(imgdir+img_name+'.jpg')
                sharp = iaa.Sharpen(alpha=i_alpha, lightness=i_lightness)
                img_aug = sharp.augment_image(img)
                cv2.imwrite(imgsave_dir + img_name+ '_sharp_' + str(int(10000*i_alpha)) + '_' + str(int(10000*i_lightness)) + '.jpg', img_aug)
     
    

    二、解决目标检测中的难分样本(漏检测与误检测问题)

    1、SRGAN

    论文题目:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial
    论文链接:https://arxiv.org/abs/1609.04802
    论文代码:https://github.com/JustinhoCHN/SRGAN_Wasserstein
    超分辨率重建就是将低分辨率图像恢复成对应的高分辨率图像。但是由于低分辨率图像信息的缺失,这是一个病态的求逆问题尤其是在恢复的倍数较高的时候。传统的方法考虑加入一些先验信息以恢复高分辨率图像(如插值法)还有基于回归方法的随记森林也可以用于超分问题稀疏学习,CNN在超分上也取得了非常好的效果,特别是CNN,使得超分已经可以达到实时应用。
    作者用sub-pixel网络作为生成网络,用VGG作为判别网络构建GAN得到了非常好的结果,但这个用的是逐像素差作为损失函数。之后作者尝试了自己提出的感知损失函数作为优化目标,虽然PSNR和SSIM不高,但是视觉效果都要优于其他网络,避免了其他方法的过度平滑的特性。
    主要有两点:
    提出的SRResNet取得了state-of-art的结果,将感知损失引入GAN,实现了4倍超分辨率重建。

    2、ASDN

    论文题目:Hard Positive Generation via Adversary for Object Detection
    论文地址:https://arxiv.org/pdf/1704.03414.pdf
    论文代码:https://github.com/xiaolonw/adversarial-frcnn
    ASDN网络使用RoI池层提取的功能作为输入图像补丁。 ASDN网络比预测遮挡/退出掩码,然后将其用于丢弃特征值并传递到Fast-RCNN的分类塔。对抗空间丢弃网络(ASDN),它学习如何封闭给定的目标,使得FRCN难以对其进行分类。我们在本文中考虑的第二种类型的生成是变形。在这种情况下,我们提出了对抗空间变换网络(ASTN),它学习如何旋转物体的“部件”,使其难以被检测器识别。通过与这些网络的竞争和克服障碍,FRCN学会以鲁棒的方式处理物体遮挡和变形。请注意,所提出的网络ASDN和ASTN在训练期间与FRCN一起同时学习。联合训练能防止检测器对固定生成的特征产生过拟合。
    相比于在输入图像上产生遮挡和变形,我们发现在特征空间上的操作更有效率。因此,我们设计对抗网络来修改特征,使目标变得更难识别。请注意,这两个网络仅在训练过程中应用才能改进检测器。我们将首先单独介绍ASDN和ASTN,然后在统一的框架中将它们组合在一起。在RoI-pooling层之后获得每个前景目标候选区域的卷积特征。我们使用这些基于区域的特征作为对抗网络的输入。对于一个目标的特征,ASDN将尝试生成一个掩码,指示要丢弃的特征的哪些部分(分配零),以便检测器无法识别目标。对抗空间变换网络(ASTN)
    我们现在介绍对抗空间变换网络(ASTN)。我们的关键思想是在目标特征上创建变形,并使检测器的目标识别变得困难。我们的网络建立在[14]中提出的空间变换网络(STN)上。 在他们的工作中,STN被提出来使特征变形,使分类更容易。而我们的网络正在完成相反的任务。通过与我们的ASTN网络竞争,我们可以训练一个更好的对变形具有鲁棒性的检测器。
    STN概述。空间变换网络[14]有三个部分:定位网络,网格生成器和采样器。对于输入的特征图,定位网络将估计要变形的量(例如,旋转度,平移距离和缩放因子)。这些变量将被用作在特征图上的网格生成器和采样器的输入。输出是变形的特征图。请注意,我们只需要了解定位网络中的参数。STN的关键贡献之一是使整个过程是可微分的,从而可以通过反向传播直接优化分类目标的定位网络。有关更多技术细节,请参阅[14]。
    对抗STN。在我们的对抗空间变换网络中,我们专注于特征图旋转。也就是说,在RoI-pooling层后给出了一个特征图作为输入,我们的ASTN将学习旋转特征图,使其更难识别。我们的定位网络由3个完全连接的层组成,其中前两层使用来自ImageNet预训练网络的fc6和fc7层进行初始化,就像我们的对抗空间丢弃网络一样。
    我们共同训练ASTN和Fast-RCNN检测器。对于训练检测器,类似于ASDN中的过程,RoI-pooling之后的特征首先由ASTN进行转换,并转发到较高层以计算SoftMax损失。为了训练ASTN,我们优化它以便检测器将前景目标分类为背景类。与ASDN不同,由于空间变换是可以微分的,我们可以直接使用分类损失来对ASTN的定位网络中的参数进行回溯和微调。
    实现细节。在我们的实验中,我们发现限制ASTN的旋转度非常重要。否则,很容易将目标上下颠倒,这在大多数情况下是最难识别的。我们将旋转度限制在顺时针和逆时针10度以内。相比于沿同一方向旋转所有特征图,我们将通道尺寸上的特征图划分为4个块,并为不同的块估计4个不同的旋转角度。由于每个通道对应于一种类型的激活特征,旋转通道分别对应于导致变形的不同方向的物体的旋转部分。我们还发现,如果我们对所有特征图使用一个旋转角度,ASTN将经常预测最大的角度。通过使用4个不同的角度而不是一个,我们增加了任务的复杂性,防止网络预测琐碎的变形。

    2.3 对抗融合
    两个对抗网络ASDN和ASTN也可以在同一个检测框架中组合在一起并联合训练。由于这两个网络提供不同类型的信息。通过同时竞争这两个网络,我们的检测器变得更加健壮。
    我们将这两个网络以顺序的方式组合到Fast-RCNN框架中。 如图4所示,在RoI-pooling之后提取的特征映射首先进入到我们的ASDN,ASDN会删除一些激活值。修改后的特征由ASTN进一步变形。
    ASDN分析。我们比较我们的对抗空间丢弃网络与使用AlexNet架构的训练中的各种丢弃/遮挡策略。我们尝试的第一个简单基线是RoI-Pooling后的特征的随机空间丢弃。为了公平的比较,我们屏蔽了与ASDN网络中相同数量神经元的激活值。如表2所示,随机丢失的表现为57.3%mAP,略好于基线。我们比较的另一个丢弃策略是我们在训练ASDN时应用的类似策略(图3)。我们详细列举了不同种类的遮挡,并在每次迭代中选择最好的遮挡进行训练。表现为57.7%的mAP(Ours(hard dropout)),略好于随机丢弃。

    我们发现穷举策略只能探索非常有限的遮挡策略空间,我们使用预先训练的ASDN网络来代替它。然而,当我们固定ASDN的参数时,我们发现性能是57.5%的mAP(Ours(fixed ASDN)),这不如穷尽的策略。原因是固定的ASDN没有收到更新Fast-RCNN的任何反馈,而详尽的搜索得到了反馈。如果我们一起共同学习ASDN和Fast-RCNN,我们可以获得58.5%的mAP,与没有丢弃策略的基线相比,mAP提高1.5%。这个证据表明,ASDN和Fast-RCNN的共同学习是有所不同的。

    ASTN分析。我们将对抗空间变换网络与目标候选区域的随机抖动进行了比较。增强包括对Fast-RCNN进行训练的尺寸的随机变化,纵坐标和旋转。使用AlexNet,使用随机抖动的性能为57.3%mAP,而ASTN结果为58.1%。使用VGG16,随机抖动有68.6%mAP而ASTN有69.9%mAP。对于这两种架构,ASTN的模型比随机抖动更好。
    简单的阅读OHEM
    论文代码:https://github.com/abhi2610/ohem

    三、小目标检测

    小目标有两种定义方式,一种是相对尺寸大小,如目标尺寸的长宽是原图像尺寸的0.1,即可认为是小目标,另外一种是绝对尺寸的定义,即尺寸小于32*32像素的目标即可认为是小目标。
    小目标检测在深度学习卷积神经网络模型中一直是一个难题。早期的目标检测框架大多数是针对通用的目标来进行检测,如经典的单阶段方法yolo和ssd,两阶段方法faster-rcnn等,这些方法主要是针对通用目标数据集来设计的解决方案,因此对于图像中的小目标来说,检测效果不是很理想。
    为了解决小目标问题提出的方法有:

    图像的缩放。也是最琐碎的一个方向——是在检测前对图像进行缩放。但是,由于大图像变得太大,无法装入GPU进行训练,因此单纯的升级并不有效。ao等[2017]首先下采样图像,然后利用强化学习训练基于注意力的模型,动态搜索图像中感兴趣的区域。然后对选定的区域进行高分辨率的研究,并可用于预测较小的目标。这避免了对图像中每个像素进行同等关注分析的需要,节省了一些计算成本。一些论文[Dai等,2016b,2017年,Singh和Davis, 2018年]在目标检测上下文中训练时使用图像金字塔,而[Ren et al., 2017]在测试时使用。

    浅网络。小物体更容易被接受场较小的探测器预测。较深的网络具有较大的接受域,容易丢失关于较粗层中较小对象的一些信息。Sommer等[2017b]提出了一种非常浅的网络,只有四个卷积层和三个完全连接的层,用于检测航空图像中的目标。当期望的实例类型很小时,这种类型的检测器非常有用。但是,如果预期的实例具有不同的大小,则效果更好
    上下文信息。利用围绕小对象实例的上下文。Gidaris和Komodakis [2015], Zhu等[2015b]使用上下文来提高性能,Chen等[2016a]则专门使用上下文来提高小对象的性能。他们使用上下文补丁对R-CNN进行了扩展,与区域建议网络生成的建议补丁并行。Zagoruyko等人[2016]将他们的方法与深度掩模对象建议相结合,使信息通过多条路径流动。

    超分辨率。还有针对小目标的图像增强等。最典型的是利用生成对抗性网络选择性地提高小目标的分辨率。
    它的生成器学会了将小对象的不佳表示增强为超分辨对象,这些超分辨对象与真实的大对象非常相似,足以欺骗竞争的鉴别器。
    近两年提出了利用多层特征图的方法(特征金字塔、RNN思想、逐层预测),对小目标检测的效果产生了显著的提升。
    现阶段主流算法有:
    图像金字塔:较早提出对训练图片上采样出多尺度的图像金字塔。通过上采样能够加强小目标的细粒度特征,在理论上能够优化小目标检测的定位和识别效果。但基于图像金字塔训练卷积神经网络模型对计算机算力和内存都有非常高的要求。计算机硬件发展至今也难有胜任。故该方法在实际应用中极少。
    逐层预测:该方法对于卷积神经网络的每层特征图输出进行一次预测,最后综合考量得出结果。同样,该方法也需要极高的硬件性能。
    特征金字塔:参考多尺度特征图的特征信息,同时兼顾了较强的语义特征和位置特征。该方法的优势在于,多尺度特征图是卷积神经网络中固有的过渡模块,堆叠多尺度特征图对于算法复杂度的增加微乎其微。

    RNN思想:参考了RNN算法中的门限机制、长短期记忆等,同时记录多层次的特征信息(注:和特征金字塔有本质区别)。但RNN固有的缺陷是训练速度较慢(部分操作无法矩阵化)

    四:Q&A

    问:我觉得博客中有些地方说得不对,我谈下我的个人理解:对正负样本来说,可以理解成是从原始图片中进行截图获得的。并不需要单独去造什么负样本。---原始图片中会截出很多图片,也就是所谓的锚框。然后将锚框截图出来,这些截图会与GT(也就是标注框的区域的图片)计算IOU,IOU大于0.7的,视为正样本,IOU小于0.3的视为负样本,介于两个阈值之间的图片就被丢弃。对IOU小于0.3的截图而言,由于IOU过小,则会被视为并不包含目标物体(即使边角落处有,也是被忽视的)。 因此,我们正常进行标注,提供完整的xml和图片即可。模型在训练过程中,会自行挑选相应数量的正负样本,而不必人为去构造。 如果我理解有误,还请大佬指点下~~

    答:直接拿原本的数据集可能会存在误识别的场景中的负样本无法学习到。拿人脸识别来说,在一个动漫的测试样本中发生误识别时,是很难从原先数据集中学习到负样本的,即很难找到有人脸和动漫脸都存在的样本,所以增加负样本训练是降低误识别必要的

    问:我觉得这边博主这边说的“负样本”指的是(以行人检测为例,图中原本没有任何人,但是拿训练好的模型去测试,检测结果中存在预测边界框)。对于这种误检测应该采取什么样的处理方式? 博主在上面也提到过直接拿这种图片来训练时,损失为0。主要是因为根据@lmw0320提到的正负样本的定义上。因为图中并不存在着gt boxes。因此这边所有的图都被当成ignore的样本来看待。直接训练根本没有办法处理当前的这个问题。

    答:说的没错

    问:“正负样本的比例最好为1:1到1:2左右”博主,请教一下,对于一个目标检测模型来说。正样本:负样本中的正样本数目,是所有类别的数据总量还是单个类别的数据量?

    答:无

    问:我一直没搞明白,对于目标检测算法,最终模型误检率高算是欠拟合还是过拟合?

    答:都有看LOSS

    答:都有

    参考:
    目标检测(降低误检测率及小目标检测系列笔记)_Z.w.j的博客-CSDN博客

    展开全文
  • 检测率,召回率,mAP,ROC

    万次阅读 2017-03-15 21:10:07
    在信息检索、分类体系中,有一系列的...信息检索、分类、识别、翻译等领域两个最基本指标是召回(Recall Rate)和准确(Precision Rate),召回也叫查全,准确也叫查准,概念公式:  召回(Recall) =

    在信息检索、分类体系中,有一系列的指标,搞清楚这些指标对于评价检索和分类性能非常重要,因此最近根据网友的博客做了一个汇总。

    准确率、召回率、F1

    信息检索、分类、识别、翻译等领域两个最基本指标是召回率(Recall Rate)准确率(Precision Rate),召回率也叫查全率,准确率也叫查准率,概念公式:

                 召回率(Recall)      =  系统检索到的相关文件 / 系统所有相关的文件总数

                 准确率(Precision) =  系统检索到的相关文件 / 系统所有检索到的文件总数

    图示表示如下:


    注意:准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。一般情况,用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:

     

     

    如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。

    所以,在两者都要求高的情况下,可以用F1来衡量。

    [python]  view plain copy
    1. F1 = 2 * P * R / (P + R)  

     

    公式基本上就是这样,但是如何算图1中的A、B、C、D呢?这需要人工标注,人工标注数据需要较多时间且枯燥,如果仅仅是做实验可以用用现成的语料。当然,还有一个办法,找个一个比较成熟的算法作为基准,用该算法的结果作为样本来进行比照,这个方法也有点问题,如果有现成的很好的算法,就不用再研究了。

     

    AP和mAP(mean Average Precision)

    mAP是为解决P,R,F-measure的单点值局限性的。为了得到 一个能够反映全局性能的指标,可以看考察下图,其中两条曲线(方块点与圆点)分布对应了两个检索系统的准确率-召回率曲线

     

    可以看出,虽然两个系统的性能曲线有所交叠但是以圆点标示的系统的性能在绝大多数情况下要远好于用方块标示的系统。

    从中我们可以 发现一点,如果一个系统的性能较好,其曲线应当尽可能的向上突出。

    更加具体的,曲线与坐标轴之间的面积应当越大。

    最理想的系统, 其包含的面积应当是1,而所有系统的包含的面积都应当大于0。这就是用以评价信息检索系统的最常用性能指标,平均准确率mAP其规范的定义如下:(其中P,R分别为准确率与召回率)


    ROC和AUC

    ROC和AUC是评价分类器的指标,上面第一个图的ABCD仍然使用,只是需要稍微变换。



    回到ROC上来,ROC的全名叫做Receiver Operating Characteristic。

    ROC关注两个指标

       True Positive Rate ( TPR )  = TP / [ TP + FN] ,TPR代表能将正例分对的概率

       False Positive Rate( FPR ) = FP / [ FP + TN] ,FPR代表将负例错分为正例的概率

    在ROC 空间中,每个点的横坐标是FPR,纵坐标是TPR,这也就描绘了分类器在TP(真正的正例)和FP(错误的正例)间的trade-off。ROC的主要分析工具是一个画在ROC空间的曲线——ROC curve。我们知道,对于二值分类问题,实例的值往往是连续值,我们通过设定一个阈值,将实例分类到正类或者负类(比如大于阈值划分为正类)。因此我们可以变化阈值,根据不同的阈值进行分类,根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve。ROC curve经过(0,0)(1,1),实际上(0, 0)和(1, 1)连线形成的ROC curve实际上代表的是一个随机分类器。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。如图所示。


    用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。

    于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的Performance。

    AUC计算工具:

    http://mark.goadrich.com/programs/AUC/

    P/R和ROC是两个不同的评价指标和计算方式,一般情况下,检索用前者,分类、识别等用后者。

    转自:http://blog.csdn.net/wangzhiqing3/article/details/9058523

    参考链接:

    http://www.vanjor.org/blog/2010/11/recall-precision/

    http://bubblexc.com/y2011/148/

    http://wenku.baidu.com/view/ef91f011cc7931b765ce15ec.html

    展开全文
  • WAF检测率及误报测试工具Gotestwaf

    万次阅读 2022-01-01 23:44:23
    WAF检测率 误报率测试工具
  • 异常检测 | Street Scene

    千次阅读 2022-04-05 16:22:04
    他们使用简单的最近邻位置相关的异常检测方案,使用手工制作的视频块表示(光流场或模糊的前景掩模)和手工制作的距离测量(分别为L1或L2归一化体素方向的距离).通过从训练数据中构建一个简洁的代表性范例模型...
  • 在和客户沟通过程中, 会不断被问及系统的检测率、检测能力,这时候我们需要用几个指标去表达系统的实际检测效果。站在客户的角度,有几个方面的问题需要考虑:(1)不良品是否都能检测出来,有多少会被漏掉;(2)...
  • 检测概率与虚警概率

    热门讨论 2015-03-10 15:04:45
    用于描述在信号检测中单个用户的检测概率和虚警概率之间的关系。
  • 前言 在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall,IoU等等。为了怕以后忘了,现在把自己对这几种度量方式的理解记录一下。 这一文章首先假设一个测试集,...检测率,召回率,mAP,ROC
  • 目标检测:mAP (Mean Average Precision)

    千次阅读 2022-01-31 22:22:06
    目标检测,mAP解释
  • yolo跌倒检测、摔倒检测

    千次阅读 2021-04-27 17:13:39
    自建跌倒数据集训练的跌倒检测,准确95%以上。 直接上图吧。欢迎私信交流
  • 可以检测各个类型的导航端口及其波特,使用方法: 把文件下载到导航上,把导航路径设置为启动此软件,运行导航后就可以看到自己导航的端口及波特了。
  • 一般是步长越小,检测率越好,但是要考虑到误检和时间问题。所以找一个平衡点。  3、检测机制。一般有两种,一是被检测对象大小不变,改变检测窗口尺度。二是检测窗口尺度不变,通过改变图像大小。这里用第一种...
  • 目标检测的算法原理

    千次阅读 2019-05-19 17:47:35
    目标检测的算法分为三种: one-stage算法:SSD、yolo、retinanet等,检测精度低,速度快 经典的two-stage算法:Faster RCNN、FPN、Mask RCNN等,精度高,速度低 Multi-stage算法:R-CNN、SPPNet,精度低、速度低...
  • Yolov5 安装详细教程及目标检测和识别

    万次阅读 多人点赞 2021-10-23 17:26:22
    文章内容: 1.在 Anaconda 环境下,进行目标检测程序(Yolov5)的下载及安装,实现 Yolov5 的整体安装; 2.通过调用手机摄像头进行简单的目标检测和识别。
  • 检测与分类中的召回、准确

    千次阅读 2015-09-24 15:10:35
    本文整理自wangran51的《准确召回》与wangzhiqing3的《准确与召回》,原文链接分别为: http://blog.csdn.net/wangran51/article/details/7579100 ...
  • 它对非自然图像物体的检测率远远高于DPM和RCNN系列检测方法。 缺点: 1. 识别物体位置精准性差。 2. 召回率低。 3. 由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。 4. ...
  • 目标检测所有评价指标

    千次阅读 2020-07-23 16:50:18
    准确(Accuracy):预测正确的样本占总样本的百分比 虽然准确可以判断总的正确,但是在正负样本不平衡的情况下,准确这个评价指标有很大的缺陷。比如在总样本中,正样本占90%,负样本占10%。对于这种情况,只...
  • 理解精确(precision)、准确(accuracy)和召回(recall) 正样本 负样本 预测正例 TP FP 预测反例 FN TN ...
  • 人脸检测算法对比分析

    万次阅读 2016-11-24 17:02:13
    人脸识别包括以下5个步骤:人脸检测、图像预处理、特征提取、匹配、结果输出。 人脸检测是人脸识别中的第一个环节,是一项关键技术。人脸检测是指假设在输入图像中存在一个或者多个人脸区域的情况下,确定图像中全部...
  • 串口自动波特率检测简单介绍

    千次阅读 2020-02-11 20:34:05
    串口自动波特率检测功能(ABR)可以让设备在进行串口通信时不用提前设置好波特,根据对方的波特实时更改自己的波特,可以大大提高己方设备的兼容性。波特率检测分为硬件检测和软件检测。 硬件检测仅适用于...
  • 深度学习以及其目标检测应用场景下,训练出来的模型到底好不好有一些评价指标,在这里我们罗列一下这些常见的评价指标。
  • Python 为目标检测任务绘制 ROC 和 PR 曲线

    万次阅读 多人点赞 2018-08-05 20:51:07
    需要两个分别记录检测结果和标准答案的 .txt 文件,记录格式与 FDDB 的要求相同,即 ... image name i number of faces in this image =im face i1 face i2 ... face im ... 当检测框为矩形时,...
  • 漏报和误报

    千次阅读 多人点赞 2019-07-12 15:33:06
    漏报:进门时保安没有把小偷识别出来,让他进门了,可理解为漏网之鱼。 误报:保安一时糊涂将一个好人当成小偷抓起来了,错怪好人 ...误报:正确的当成错误的个数/正确的个数,也就是FPR(假正) ...
  • Metis异常检测算法检测和量值检测源码刨析1. 测试代码2. 检测2.1 rate_predict方法(detect.py)2.2 predict方法(statistic.py)2.3 http接口/PredictRate3. 量值检测 系列之前文章 Metis异常检测数据集训练...
  • 基于PCA的故障诊断(附MATLAB代码)

    千次阅读 热门讨论 2020-12-23 13:57:21
    %Q故障检测率 k1=0; for i=1:159 if Q(i)>QU k1=k1+1; end end FARQ=k1/159; %绘图 for i=1:n if T2(i,1)>TU break end end figure('Name','PCA'); subplot(4,1,1); plot(1:i,T2(1:i),'k'); hold on; plot(i:n,T2(i...
  • 人脸识别活体检测技术

    千次阅读 2017-07-31 16:16:19
    随着深度学习方法的应用,识别人脸图像的技术的识别已经得到质的提升,目前识别人脸图像的技术已经达到99%。识别人脸图像的技术与其他生物特征识别技术相比,在实际应用中具有天然独到的优势:通过摄像头直接...
  • 目标检测中召回和准确介绍

    千次阅读 2021-04-27 16:21:07
    本文节选于《深度学习之pytorch物体检测实战》,供以后复习时查看 目标检测的评价标准 ​    对于一个检测器,我们需要制定一定的规则来评价其好坏,从而选 择需要的检测器。对于图像分类任务来讲,...
  • 阴影检测(shadow detect)

    万次阅读 2018-03-27 18:40:38
    不管是无人机影像或者其它方式摄取的图像,由于光照,难免会存在阴影,笔者这篇文章介绍检测阴影一种简单的方式。参考论文:1、Damaged Building Detection in Aerial Images using Shadow Information2、Linearized...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 382,849
精华内容 153,139
关键字:

检测率