计算机视觉基础aiyixu

非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。

Why:目标检测的输出个数是未知的,除了Ground-Truth(标注数据)训练,模型永远无法百分百确信自己要在一张图上预测多少物体。

目标检测中,模型往往会提出远高于实际数量的区域提议, 模型的输出边界框往往是堆叠在一起的。因此,我们需要NMS从堆叠的边框中挑出最好的那个。

When:NMS使用在回归边框之后,即所有的框已经被分类且精修了位置。且所有区域提议的预测结果已经由置信度与阈值初步筛选之后。

How:最大的置信度B_BOX为局部最大值,与其 IOU > 阈值的 Box 是它的局部比较对象要被抑制。

算法输入

算法对一幅图产生的所有的候选框,每个框有坐标与对应的打分(置信度)。

如一组5维数组:

注意:每次输入的不是一张图所有的边框,而是一张图中属于某个类的所有边框(因此极端情况下,若所有框的都被判断为背景类,则NMS不执行;反之若存在物体类边框,那么有多少类物体则分别执行多少次NMS)。

除此之外还有一个自行设置的参数:阈值 TH

算法输出

输入的一个子集,同样是一组5维数组,表示筛选后的边界框。

算法流程

Python 实现注意,这里的NMS是单类别的!多类别则只需要在外加一个for循环遍历每个种类即可

解释:

NMS存在问题

红色框和绿色框是当前的检测结果,二者的得分分别是0.95和0.80。如果按照传统的NMS进行处理,首先选中得分最高的红色框,然后绿色框就会因为与之重叠面积过大而被删掉。

另一方面,NMS的阈值也不太容易确定,设小了会出现下图的情况(绿色框因为和红色框重叠面积较大而被删掉),设置过高又容易增大误检。

Soft-NMS引入

思路:不要粗鲁地删除所有IOU大于阈值的框,而是降低其置信度。

soft NMS算法的大致思路为:M为当前得分最高框,bi 为待处理框,bi 和M的IOU越大,bi 的得分_si_ 就下降的越厉害。

NMS算法可以用下面的式子表示:

soft NMS中:

(1)线性加权:

(2)高斯加权:但是上面这个公式是不连续的,这样会导致box集合中的score出现断层,因此就有了下面这个Soft NMS式子(也是大部分实验中采用的式子):

综上,soft-nms的核心就是降低置信度。比如一张人脸上有3个重叠的bounding box, 置信度分别为0.9, 0.7, 0.85 。选择得分最高的建议框,经过第一次处理过后,得分变成了0.9, 065, 0.55(此时将得分最高的保存在D中)。这时候再选择第二个bounding box作为得分最高的,处理后置信度分别为0.65, 0.45(这时候3个框也都还在),最后选择第三个,处理后得分不改变。最终经过soft-nms抑制后的三个框的置信度分别为0.9, 0.65, 0.45。最后设置阈值,将得分si小于阈值的去掉。

FPN是一个多尺度物体检测特征提取方法,然而大尺寸的物体检测效果一直比较理想,所以FPN主要大幅提升了小像素目标检测的效果。

思想:把高层的特征传下来,补充低层的语义,这样就可以获得高分辨率、强语义的特征,有利于小目标的检测。

1、 怎么做的上采样?

C5是 resnet最顶层的输出,它会先通过一个1×1的卷积层,同时把通道数转为256,得到FPN 的最上面的一层 P5。 C5 -> P5 直接复制

这里的实现使用的是最简单的上采样,没有使用线性插值,没有使用反卷积,而是直接复制。

2、 怎么做的横向连接,横向连接的作用是什么?像素加法 add, 不是Concate

4就是上采样之后的 P5加上1×1 卷积之后的 C4,这里的横向连接实际上就是像素加法,先把 P5和C4转换到一样的尺寸,再直接进行相加。

如果不进行特征的融合(也就是说去掉所有的1x1侧连接),虽然理论上分辨率没变,语义也增强了,但是AP下降了10%左右!作者认为这些特征上下采样太多次了,导致它们不适于定位。

3、特征融合为什么不用concate简短地说:add等价于concat之后对应通道共享同一个卷积核,且add来替代concat,这样更节省参数和计算量(concat之后一般还要接卷积恢复维度)。

如果不在乎计算量且数据足够的时候,用concat也是可以的,因为这两个本身就是包含关系。实际上concat在skip connection里用的也比add更普遍,比如题主提到的U-Net[6]、DenseNet[7]。yolov3里就是concat,做concat操作的两层通道数不同

Add 也有缺点会带来信息损失。concate保留了信息。

4、为什么相加前要通过1×1的卷积层?1x1的卷积我认为有三个作用:1、使bottom-up对应层降维至256;2、缓冲作用,防止梯度直接影响bottom-up主干网络,更稳定;3、组合特征。

5、融合特征后为什么又使用了3×3卷积?另外这里 P2-P5最后又做了一次3×3的卷积,作用是消除上采样带来的混叠效应。

6、上面得到的5个融合了不同层级的特征图怎么使用?这里只使用P2-P5四个特征图,不同大小的ROI使用不同特征图ROIpooling。

7、如何确定某个 ROI 使用哪一层特征图进行 ROIpooling ?不同尺度的ROI,使用不同特征层作为ROI pooling层的输入,大尺度ROI就用后面一些的金字塔层,比如P5;小尺度ROI就用前面一点的特征层,比如P4。具体层级判断:

224是ImageNet的标准输入,k0是基准值,设置为5,代表P5层的输出(原图大小就用P5层),w和h是ROI区域的长和宽,image_area是输入图片的长乘以宽,即输入图片的面积,假设ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该ROI应该使用P4的特征层。k值会做取整处理,防止结果不是整数。

BiFPN (也就是大名鼎鼎的 EfficientDet)

NAS-FPN

简介:

先进行区域生成(region proposal,RP)(一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。

​ 任务:特征提取—>生成RP—>分类/定位回归。

​ 常见的two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。

目录:

Faster RCNN则抛弃了传统的滑动窗口和Selective Search方法,直接使用RPN生成检测框。

四个主要部分:

其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已!

输入:feature maps操作:

上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

anchors box

每次滑窗所划到的3x3的区域,就以该区域中心点为坐标,生成9个anchor

Anchor一共有多少个?原图800x600,VGG下采样16倍,feature map每个点设置9个Anchor,所以:

上文提到的k就是anchors的数量,所以2k个分数就是9个anchors的共18个分数,36个坐标。对于每个anchor, 计算anchor与ground-truth bounding boxes的IoU,大于0.7则判定为有目标,小于0.3则判定为背景,介于0.3-0.7,则设为0,不参与训练

positive和negative anchor 判定

推理时,采用 Softmax判断。

训练时:计算anchor与ground-truth bounding boxes的IoU,大于0.7则判定为有目标,小于0.3则判定为背景,介于0.3-0.7,则设为0,不参与训练。

补充:全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练

RPN的Loss

分类:交叉熵损失 回归:smooth L1 损失

soomth L1 loss,计算公式如下:

** bounding box regression 原理**

Faster-RCNN论文中在RoI-Head网络中,将128个RoI区域对应的feature map进行截取,而后利用RoI pooling层输出7×7大小的feature map。

RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。从图2中可以看到Rol pooling层有2个输入:

Why?proposals 的 box 大小形状各不相同

创新:

faster-RCNN 整体还是采用了RCNN 那种 proposal+classifier 的思想,只不过是将提取 proposal 的步骤放在 CNN 中实现了,而 YOLO 则采用直接回归的思路。

2、由于损失函数的问题,定位误差是影响检测效果的主要原因。

检测框分配:

损失函数

\begin{equation}\begin{array}{l}\lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}{i j}^{\text {obj }}\left[\left(x{i}-\hat{x}{i}\right)^{2}+\left(y{i}-\hat{y}{i}\right)^{2}\right] \\qquad \begin{array}{rl}+\lambda{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} & \mathbb{1}{i j}^{\text {obj }}\left[(\sqrt{w{i}}-\sqrt{\hat{w}{i}})^{2}+(\sqrt{h{i}}-\sqrt{\hat{h}{i}})^{2}\right] \& +\sum{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}{i j}^{\text {obj }}\left(C{i}-\hat{C}{i}\right)^{2} \+\lambda{\text {noobj }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} & \mathbb{1}{i j}^{\text {noobj }}\left(C{i}-\hat{C}{i}\right)^{2} \& +\sum{i=0}^{S^{2}} \mathbb{1}{i}^{\text {obj }} \sum{c \in \text { classes }}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2}\end{array}\end{array}\end{equation}

变化

1、Batch Normalization通过对 YOLO 的每一个卷积层增加 Batch Normalization,最终使得 mAP 提高了 2%,同时还使模型正则化。使用 Batch Normalization 可以从模型中去掉 Dropout,而不会产生过拟合。

2、High resolution classifier (高分辨率预训练)

目前业界标准的检测方法,都要先把分类器(classifier)放在ImageNet上进行预训练。从 Alexnet 开始,大多数的分类器都运行在小于 256×256 的图片上。而现在 YOLO 从 224×224 增加到了 448×448,这就意味着网络需要适应新的输入分辨率。

为了适应新的分辨率,YOLO v2 的分类网络以 448×448 的分辨率先在 ImageNet上进行微调,微调 10 个 epochs,让网络有时间调整滤波器(filters),好让其能更好的运行在新分辨率上,还需要调优用于检测的 Resulting Network。最终通过使用高分辨率,mAP 提升了 4%。

3、Convolution with anchor boxes

YOLO 一代包含有全连接层,从而能直接预测 Bounding Boxes 的坐标值。 Faster R-CNN 的方法只用卷积层与 Region Proposal Network 来预测 Anchor Box 偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。

4、Dimension clusters在训练集的 Bounding Boxes 上跑一下 k-means聚类,得到Anchor Box 的尺寸。

5、Multi-Scale Training

作者希望 YOLOv2 能健壮地运行于不同尺寸的图片之上。

区别于之前的补全图片的尺寸的方法,YOLOv2 每迭代几次都会改变网络参数。每 10 个 Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是 32,所以不同的尺寸大小也选择为 32 的倍数 {320,352…..608},最小 320320,最大 608608,网络会自动改变尺寸,并继续训练的过程。

6、Datasets combination with wordtree

用 WordTree 把数据集合中的类别映射到分层树中的同义词上,例如上图 Figure 6,WordTree 混合 ImageNet 与 COCO。号称训练9000类。

变化1、多尺度预测 (类FPN),并使用了 anchor box

YOLO v3可以进行3种不同尺度的预测。检测层在分别具有步幅32,16,8的三种不同尺寸的特征图上进行检测。

2.更好的基础分类网络(类ResNet)和分类器 darknet-53

3.分类器-类别预测:

YOLOv3 不使用 Softmax 对每个框进行分类,主要考虑因素有:

聚类 anchor box

在YOLOv3中,获取数据集的全部anchor box,通过K-Means算法,将这些边界框的宽高,聚类为9类,获取9个聚类中心,面积从小到大排列,作为9个anchor box。

EarlyStopping

训练或验证集中的loss不再减小,即减小的程度小于某个阈值,则会停止训练。

作者将那些增加模型性能,只在训练阶段耗时增多,但不影响推理耗时的技巧称为 ——赠品(bag of freebies),也就是白给的提高精度的方法。而那些微微提高了推理耗时,却显著提升性能的,叫做——特价(bag of specials),就是那些不免费,但很实惠的技巧。

数据增强方法

其他:

新引入:

正则化方法

Bounding box 回归 loss 的改进

增大感受野技巧

特征融合集成

后处理非最大值抑制算法

注意力机制

激活函数

difficult to train

choose

跨批量归一化 CmBN

这里的CmBN,是对CBN的改进,收集一个batch内多个mini-batch内的统计数据。BN, CBN, CmBN的区别如下图所示:

CSPDarknet53 (backbone) + SPP+PAN(Neck,也就是特征增强模块)+ YoloV3组成

训练难度大 4 gpu 训练

Softmax函数:

其梯度:

解决难易样本数量不平衡(注意,有区别于正负样本数量不平衡)的问题思想:易分样本(即,置信度高的样本)对模型的提升效果非常小,模型应该主要关注与那些难分样本(这个假设是有问题的,是GHM的主要改进对象)

二分类版:标准CE:

进一步 为解决难以样本不均衡 把高置信度(p)样本的损失再降低一些:

综合最终的 Focal Loss:

L1 Loss

L2 Loss

Smooth L1 Loss其实是 L1 Loss 与 L2 Loss 的综合

L1 Loss 相比较于L2 Loss收敛速度慢,0点处无梯度且其他位置梯度为常数,因此在极值点附近容易产生震荡,但其对离群点的处理上要好于L2 Loss。(离群点指远离序列的一般水平的极端大值和极端小值也称为歧异值)

Faster RCNN中:soomth L1 loss,计算公式如下:

YOLO_v1中:

评价标准:

FCN提出可以把后面几个全连接都换成卷积,这样就可以获得一张2维的feature map,后接softmax获得每个像素点的分类信息,从而解决了分割问题

FCN是语义分割的开山之作,主要特色有两点:

1.全连接层换成卷积层

缺点:1、是得到的结果还是不够精细2、是对各个像素进行分类,没有充分考虑像素与像素之间的关系。

特点:能够适应很小的训练集(大约30张图),完全对称。

U-net用于解决小样本的简单问题分割,比如医疗影片的分割。它遵循的基本原理与FCN一样:

2.更丰富的信息融合:如灰色剪头,更多的前后层之间的信息融合。这里是把前面层的输出和后面层concat(串联)到一起,区别于FCN的逐元素加和。不同Feature map串联到一起后,后面接卷积层,可以让卷积核在channel上自己做出选择。注意的是,在串联之前,需要把前层的feature map crop到和后层一样的大小。

语义分割网络在特征融合时也有2种办法:

总结一下,CNN图像语义分割也就基本上是这个套路:

看,即使是更复杂的DeepLab v3+依然也是这个基本套路

介绍:

3、使用修改过的 Xception

有几种方法如PSPNet采用基于金字塔的模块或全局池化来有规律的聚合区域或全局上下文信息。然而,它们捕获了同类的上下文关系,却忽略了不同类别的上下文。

最近基于注意力的方法,如通道注意力、空间注意力,有选择地聚合不同类别之间的上下文信息。

DANet引入了双注意力机制(Dual[ˈduːəl] Attention)来获取上下文关系:通道(channel)以及空间(spatial)的 Attention 机制。

THE END
0.图片乱用怕侵权?推荐50个图频素材网站,免费还无版权!4.Visual Hunt——有付费和免费素材,有明确标记CC0授权的才是免费素材哦! 链接请戳👉VisualHunt 5.Picjumbo——分类很多,色彩鲜明,内含图片、插画、矢量图等素材 链接请戳👉picjumbo: Free Stock Photos 6. IM FREE——加载较慢,图片分类详细,方便查询 jvzq<84yyy4489iqe0ipo8hqpvkov87612<3;867146:89952a724@9626730|mvon
1.图片分类管理软件有什么APP推荐图片分类管理软件有什么下载豌豆荚图片分类管理软件有什么榜单为您提供最新图片分类管理软件有什么大全,这里不仅有图片分类管理软件有什么安卓版本APP、历史版本应用下载资源,还有类似图片分类管理软件有什么的应用推荐,欢迎大家前来豌豆荚下载。jvzquC41yy}/yjsfqwpjc7hqo1hbppicp1:18@;51
2.北师大版一年级上册数学公开课教案(通用12篇)4.给图片分类 师出示图片:熊猫、小鱼、自行车、小狗、汽车、飞机、轮船、蝴蝶、老鹰。 小朋友说一说可以怎样分类。 (1)可以分成动物和交通工具两类 (2)也可以分成天上飞的、地上跑的和水里游的三类 然后在本子上分一分。 四、课堂总结 1.通过这节课的学习,你有那些收获? jvzquC41yy}/qq6220ipo8pcqunj1sncqct08;83444ivvq
3.一年级开学数学第一课教案(通用11篇)4.给图片分类 师出示图片:熊猫、小鱼、自行车、小狗、汽车、飞机、轮船、蝴蝶、老鹰。 小朋友说一说可以怎样分类。 (1)可以分成动物和交通工具两类 (2)也可以分成天上飞的、地上跑的和水里游的三类 然后在本子上分一分。 四、课堂总结 1.通过这节课的学习,你有那些收获? jvzq<84yyy4vpsx0eqs0lrfqcp5tj~}wg1814;6249697@99a7>28B550jznn
4.写给程序员的机器学习入门(九)对象识别RCNN与Fast图片分类与对象识别 在前面的文章中我们看到了如何使用 CNN 模型识别图片里面的物体是什么类型,或者识别图片中固定的文字 (即验证码),因为模型会把整个图片当作输入并输出固定的结果,所以图片中只能有一个主要的物体或者固定数量的文字。 如果图片包含了多个物体,我们想识别有哪些物体,各个物体在什么位置,那么只用 CNNjvzquC41yy}/hu~ck0ipo8ftvkimg8=9;
5.幼儿园中班手工教案(精选16篇)2、看图说说预防感冒的方法,并将图片分类整理。 (1)两组幼儿分别从两个药箱取图片。 (2)幼儿讨论理解图片上预防感冒的方法。 (3)幼儿将手中的图片分类张贴。 (4)说说图片上预防感冒的方法。 提问:你们觉得有没有需要改动的图片?为什么? (5)引导幼儿区分预防感冒好的做法和不好的做法。 五、游戏《打地鼠》 (1)热 jvzquC41yy}/fr~khctxgw3eqo5kc8=725>70qyon
6.淘宝图片怎么合理分类?店铺运营淘宝/天猫电子商务淘宝店铺中有很多宝贝图,为了方便管理,可以给图片分类,下面我们就来看看详细的教程,很简单,需要的朋友可以参考下 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用! 【如果你想靠AI翻身,你先需要一个靠谱的工具!】 淘宝图片分类制作是很重要的,下面我们就来看看详细的教程。jvzquC41yy}/lk:30pku1mncpunbpp4772;4;7mvon
7.上海莱德减速机有限公司上海莱德减速机有限公司,主要产品有:减速机,减速电机,减速器,包括:R系列斜齿轮硬齿面减速机、MB行星摩擦式无极减速器、H/B工业齿轮箱减速器、S系列斜齿轮-蜗轮蜗杆减速机、F系列平行轴斜齿轮减速电机、RV系列蜗轮减速机、X/B摆线针轮减速电机、WB系列微型摆线针轮减速机等,jvzq<84yyy4tjufkfg4dqv4