yolov2训练的时候出现段错误怎么办

3.添加了Atrous算法(hole算法),参考该链接;

光修正还不够,我们的目的是下次错误的地方能听对。建议你这样做:如果备考时间比较长,那么你可以看着写出来的原文跟着speaker 朗读,同样一句一停,对自己写错或者没有写出来的地方要特别注意,还要多读几遍,如果你时间比较紧张也建议你把写错的地方单独摘出来模仿跟读,你模仿得越像,下次写错得几率也就越小了。有时间的话可以去需要注意到这里使用的卷积预测器而不是全连接层(yolov1使用的是全连接层)。新东方的听说速成班去听一下老师是怎么表达的。长此下去,你的口语语音也会得到很大的提高,会越来越像外国人,那么口语分数也会相应的提高。这样认真对待听写的稿子才会让自己的口语听力同步提高。

yolo怎么读 yolo怎么读中文读法yolo怎么读 yolo怎么读中文读法


yolo怎么读 yolo怎么读中文读法


把错误贴出来看看吧,我之前训练yolo-v2的时候也有段错误,后来检查是opencv版本的问题,opencv3以上好像不行,你可以把makefile里面的opencv设为0,重新make试一下

详细解读TPH-YOLOv5 | 让目标检测任务中的小目标无处遁形

最终在test-set-challenge上取得了39.18的好成绩,远远高于VisDrone2020的成绩37.37。

1

针对无人机捕获场景的目标检测是最近比较流行的一项任务。由于无人机在不同高度飞行,目标尺度变化较大,这样给模型的优化也带来了很大的负担。此外,在无人机进行高速低空飞行时,也会带来密集目标的运动模糊问题。

图1 小目标与密集问题

为了解决上述2个问题,本文提出了 TPH-YOLOv5 。 TPH-YOLOv5 在YOLOv5的基础上增加了一个prediction heads 来检测不同尺度的目标。然后通过探索Self-Attention的预测潜力使用了Transformer Prediction Heads(TPH)代替原来的prediction heads。同时作者还集成了卷积块Attention模型(CBAM)来寻找密集场景下的注意力区域。

为了进一步改进 TPH-YOLOv5 ,作者还提供了大量有用的策略,如数据增强、多尺度测试、多模型集成和使用额外的分类器。

本文的贡献如下:

2 前人工作总结 2.1 Data Augmentation

数据增强的意义主要是扩展数据集,使模型对不同环境下获得的图像具有较高的鲁棒性。

Photometric和geometric被研究人员广泛使用。对于Photometric主要是对图像的色相、饱和度和值进行了调整。在处理geometric时主要是添加随机缩放、裁剪、平移、剪切和旋转。

除了上述的全局像素增强方法外,还有一些比较独特的数据增强方法。一些研究者提出了将多幅图像结合在一起进行数据增强的方法,如MixUp、CutMix和Mosaic。

MixUp从训练图像中随机选取2个样本进行随机加权求和,样本的标签也对应于加权求和。不同于通常使用零像素mask遮挡图像的遮挡工作,CutMix使用另一个图像的区域覆盖被遮挡的区域。Mosaic是CutMix的改进版。拼接4幅图像,极大地丰富了被检测物体的背景。此外,batch normalization计算每层上4张不同图像的激活统计量。

在TPH-YOLOv5的工作中主要是结合了MixUp、Mosaic以及传统方法进行的数据增强。

2.2 Multi-Model Ensemble Mod

我们都知道深度学习模型是一种非线性方法。它们提供了更大的灵活性,并可以根据训练数据每个Transformer encoder block包含2个子层。第1子层为multi-head attention layer,第2子层(MLP)为全连接层。每个子层之间使用残连接。Transformer encoder block增加了捕获不同局部信息的能力。它还可以利用自注意力机制来挖掘特征表征潜能。在VisDrone2021数据集中,Transformer encoder block在高密度闭塞对象上有更好的性能。量的比例进行扩展。这种灵活性的一个缺点是,它们通过随机训练算法进行学习,这意味着它们对训练数据的细节非常敏感,每次训练时可能会得到一组不同的权重,从而导致不同的预测。 这给模型带来了一个高方 。

针对不同的目标检测模型,有3种不同的ensemble boxes方法:非抑制(NMS)、Soft-NMS、Weighted Boxes Fusion(WBF)。

在NMS方法中,如果boxes的overlap, Intersection Over Union(IoU)大于某个阈值,则认为它们属于同一个对象。对于每个目标NMS只留下一个置信度的box删除其他box。因此,box过滤过程依赖于这个单一IoU阈值的选择,这对模型性能有很大的影响。

Soft-NMS是对NMS进行轻微的修改,使得Soft-NMS在标准基准数据集(如PASCAL VOC和MS COCO)上比传统NMS有了明显的改进。它根据IoU值对相邻边界box的置信度设置衰减函数,而不是完全将其置信度评分设为0并将其删除。

WBF的工作原理与NMS不同。NMS和Soft-NMS都排除了一些框,而WBF将所有框合并形成最终结果。因此,它可以解决模型中所有不准确的预测。本文使用WBF对最终模型进行集成,其性能明显优于NMS。

2.3 Object Detection

基于的物体检测器可分为多种类型:

一些检测器是专门为无人机捕获的图像设计的,如RRNet、PENet、CenterNet等。但从组件的角度来看,它们通常由2部分组成,一是基于的主干,用于图像特征提取,另一部分是检测头,用于预测目标的类和Box。

Backbone

常用的Backbone包括VGG、ResNet、DenseNet、MobileNet、EfficientNet、CSPDarknet53、Swin-Transformer等,均不是自己设计的网络。因为这些网络已经证明它们在分类和其他问题上有很强的特征提取能力。但研究人员也将微调Backbone,使其更适合特定的垂直任务。

Neck的设计是为了更好地利用Backbone提取的特征。对Backbone提取的特征图进行不同阶段的再处理和合理使用。通常,一个Neck由几个自底向上的路径和几个自顶向下的路径组成。Neck是目标检测框架中的关键环节。最早的Neck是使用上下取样块。该方法的特点是没有特征层聚合作,如SSD,直接跟随头部后的多层次特征图。

常用的Neck聚合块有:FPN、PANet、NAS-FPN、BiFPN、ASFF、SAM。这些方法的共性是反复使用各种上下采样、拼接、点和或点积来设计聚合策略。Neck也有一些额外的块,如SPP, ASPP, RFB, CBAM。

Head

作为一个分类网络,Backbone无法完成定位任务,Head负责通过Backbone提取的特征图检测目标的位置和类别。

Head一般分为2种:One-Stage检测器和Two-Stage检测器。

两级检测器一直是目标检测领域的主导方法,其中代表性的是R系列。与Two-Stage检测器相比One-Stage检测器同时预测box和目标的类别。One-Stage检测器的速度优势明显,但精度较低。对于One-Stage检测器,代表性的型号是YOLO系列、SSD和RetaNet。

3TPH-YOLOv53.1 Overview of YOLOv5

YOLOv5有4种不同的配置,包括YOLOv5s,YOLOv5m, YOLOv5l和YOLOv5x。一般情况下,YOLOv5分别使用CSPDarknet53+SPP为Backbone,PANet为Neck, YOLO检测Head。为了进一步优化整个架构。由于它是最显著和最方便的One-Stage检测器,作者选择它作为Baseline。

3.2 TPH-YOLOv5

TPH-YOLOv5的框架如图3所示。修改了原来的YOLOv5,使其专一于VisDrone2021数据集:

图3 TPH-YOLOv5模型结构 微小物体的预测头

作者统计了VisDrone2021数据集,发现它包含了很多非常小的目标,所以增加了一个用于微小物体检测的预测头。结合其他3个预测头,4头结构可以缓解剧烈的目标尺度变化带来的负面影响。如图3所示,添加的预测头(Head 1)是由low-ll、高分辨率的feature map生成的,对微小物体更加敏感。增加检测头后,虽然增加了计算和存储成本,但对微小物体的检测性能得到了很大的提高。

Transformer encoder block

图4 Transformer Block

用Transformer encoder块替换了YOLOv5原版中的一些卷积块和CSP bottleneck blocks。其结构如图4所示。与CSPDarknet53中原有的bottleneck blocks相比,作者认为Transformer encoder block可以捕获全局信息和丰富的上下文信息。

基于YOLOv5,作者只在头部部分应用Transformer encoder block形成transformer Prediction head(TPH)和backbone端。因为网络末端的特征图分辨率较低。将TPH应用于低分辨率特征图可以降低计算和存储成本。此外,当放大输入图像的分辨率时可选择去除早期层的一些TPH块,以使训练过程可用。

Convolutional block attention module (CBAM)

CBAM是一个简单但有效的注意力模块。它是一个轻量级模块,可以即插即用到架构中,并且可以以端到端方式进行训练。给定一个特征映射,CBAM将沿着通道和空间两个维度依次推断出注意力映射,然后将注意力映射与输入特征映射相乘,以执行自适应特征细化。

图5 CBAM注意力机制

CBAM模块的结构如图5所示。通过本文的实验,在不同的分类和检测数据集上将CBAM集成到不同的模型中,模型的性能得到了很大的提高,证明了该模块的有效性。

在无人机捕获的图像中,大覆盖区域总是包含令人困惑的地理元素。使用CBAM可以提取注意区域,以帮助TPH-YOLOv5令人困惑的信息,并关注有用的目标对象。

Self-trained classifier

用TPH-YOLOv5对VisDrone2021数据集进行训练后,对test-dev数据集进行测试,然后通过可视化失败案例分析结果,得出TPH-YOLOv5定位能力较好,分类能力较的结论。作者进一步探索如图6所示的混淆矩阵,观察到一些硬类别,如三轮车和遮阳三轮车的精度非常低。

图6 检测混淆矩阵

因此,作者提出了一个Self-trained classifier。首先,通过裁剪ground-truth边界框并将每个图像patch的大小调整为64 64来构建训练集。然后选择ResNet18作为分类器网络。实验结果表明,在这个Self-trained classifier的帮助下,所提方法对AP值提高了约0.8%~1.0%。

4实验与结论

图9 检测结果图

SSD与yolov1的对比

1.使用事先设定的bounding boxes,

和fasterR区别是没有使用RPN和Pooling作

论文的贡献:

1. 引入了一种单阶段的检测器,比以前的算法YOLOv1更准更快,并没有使用RPN和Pooling作;

2. 使用一个小的卷积滤波器应用在不同的feature map层从而预测BB的类别的BB偏;

3. 可以在更小的输入中得到更好的检测效果(相比Faster-rcnn);

4. 在多个数据集(PASCAL、VOC、COCO、ILSVRC)上面的测试结果表明,它可以获得更高的mAp值;

整个是一个基于前向反馈的卷积网络,SSD模型最终提供一个固定大小的bounding boxes以及这些bounding boxes是否存在分类物品的得分的,通常在模型之后,添加了一个非极大抑制步骤来提供最终的检测结果。

主干网络backbone network

主干网络是基于VGG的, 是一个高质量的分类网络,把这个基础模型作为ssd的前面层,用于给后面的层提供高质量的分类,我们称这个层为基础网络,注意这个基础模型在使用的时候,需要截去面的分类层。在这里使用的VGG16网络。然后添加辅助的结构来 提供最终的检测功能。

主干网对VGG16的修改:

1.将VGG16的FC6和FC7层转化为卷积层,如图1上的Conv6和Conv7;

2.去掉所有的Dropout层和FC8层;

4.将Pool5从2x2-S2变换到3x3-S1;

最终的检测功能的实现依赖于下面提到的关键技术:

在基础网络之后,添加了很多个卷积层,卷积层不断的减小特征图的宽高尺寸,比如从8 8经过一层卷积之后就变成4 4了。然后在这些特征图上都应用目标检测算法。正如上面那张图所示,对于前面一层来说,相当于是在一个比较小的8 8的尺度上,对每个位置检测4个固定横纵比的bounding box,而对于后面一层来说,就是在一个相对较大的4 4尺寸上对每个位置检测4个固定横纵比的bounding box。这样就实现了在多尺度特征图上检测的目的。

图中的所【1】对于目标检测中我们会事先标记处ground truth,然后再算法中会生成一系列proal,这些proal有跟标记的ground truth重合的也有没重合的,那么重合度(IOU)超过一定阈值(通常0.5)的则认定为是正样本,以下的则是负样本。有信道的对应位置的像素点被认为是一个anchor,那么对于每个anchor就会有N个比率的bounding box,需要注意的是,每一层的bounding box数量不一定是一样的。

我们从feature layer或者说feature map上抽取特征。feature layer可能是基础网络上面的某一层,也可以是在基础网络后面添加的卷积层。对于一个 m x nxc的feature layer,使用一个3x3xp的核过滤器(all kernel),那么对于每一个输出的pixel,都可以得到一个channel数为p大小的检测结果,一般p=4 (|Classes|+4)大小,最终可以得到m n p大小的检测结果。这个检测结果中包含了每个位置的分类物品出现的置信度以及四个表示位置和偏移的(cx,cy,w,h)。因为设置了bounding box的数量为4,所以结果是4 (|Classes|+4).

这里的bounding box的概念类似于Faster R-中的anchor boxes.但是这里不同的feature map层可以安排不同形状和数量的bounding box。,这样可以有效的离散化可能的输出box的空间(想象一下,如果每个feature map的bounding box长的不多,那么得到的可能异只在大小上,我们需要的是不同大小和形状的box来拟合真实的物品的坐标,因此box越多样越好。

The key difference between training SSD and training a typical detector that uses region proals, is that ground truth rmation needs to be assigned to specific outputs in the fixed set of detector outputs.

把真实的物品坐标框称为ground truth,对于一张,在经过SSD模型的各层检测,会有8732个prior box(也就是检测结果),需要标记这些检测结果中,哪些是正样本,那些是负样本。 这些标记过程都是在训练之前做好的;不同层的default box的数量和大小也是在训练钱都确定好的;还需要准备好难负例挖掘的策略。

对于打标的真实框GT,需要选择哪个预测框是与真实框对应的。这里选择是jaccard overlap>0.5的所有默认框。这样正负样本就不会很悬殊。Multibox论文中则只会选择jaccard overlap的一个框框。

个人理解中,这里的预测框是指没有偏移变化的预测框prior box,也叫先验框(prior box)。在GT确定、输入图像尺寸固定、prior box确定之后,就可以得到jaccard overlap>0.5的所有先验框。然后学习的时候,这些正例需要根据ground truth进行偏移和长宽比缩放的学习。而其他负例则不需要学习位置参数。

为图像的面积的交并比.

在训练过程中,首先要确定训练中的ground truth(真实目标)与哪个先验框来进行匹配,与之匹配的先验框所对应的边界框将负责预测它。

在Yolov1中,ground truth的中心落在哪个单元格,该单元格中与其IOU的边界框负责预测它。但是在SSD中却完全不一样,SSD的先验框与ground truth的匹配原则主要有两点。

首先,对于中每个ground truth,找到与其IOU的先验框,该先验框与其匹配,这样,可以保证每个ground truth一定与某个先验框匹配。通常称与ground truth匹配的先验框为正样本(其实应该是先验框对应的预测box,不过由于是一一对应的就这样称呼了),反之,若一个先验框没有与任何ground truth进行匹配,那么该先验框只能与背景匹配,就是负样本。一个中ground truth是非常少的, 而先验框却很多,如果仅按个原则匹配,很多先验框会是负样本,正负样本极其不平衡,所以需要第二个原则。

第二个原则是:对于剩余的未匹配先验框,若某个ground truth的 IOU 大于某个阈值(一般是0.5),那么该先验框也与这个ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配,这是可以的。但是反过来却不可以,因为一个先验框只能匹配一个ground truth,如果多个ground truth与某个先验框IOU大于阈值,那么先验框只与IOU的那个先验框进行匹配。第二个原则一定在个原则之后进行,仔细考虑一下这种情况,如果某个ground truth所对应IOU小于阈值,并且所匹配的先验框却与另外一个ground truth的IOU大于阈值,那么该先验框应该匹配谁,应该是前者,首先要确保某个ground truth一定有一个先验框与之匹配。

损失函数是回归损失和置信度损失的加权平均

下面是位置回归损失函数的介绍,看着就很晕。

N表示匹配的框,应该可以理解为正样本框。首先g表示是ground truth box的各个指标,d是先验框的各个指标,l是预测结果的各个指标。g^ 这个是根据g和d得到的可以和预测结果匹配计算损失函数的指标。比如g^cx 这个指标,是归一化的横坐标偏移指标,因为先验框的中心不会完全和ground truth的中心重合,因此计算实际的偏移量。这个值就是我们希望模型学习到的值。同理,先验框的宽度也不会完全重合ground truth的宽度,我们用log函数来计算g^w,这也意味着我们希望学习到的宽度也是这种变换的。

oothL1损失函数长这样:

分类的置信度损失函数如下,正样本的softmax loss函数以及负样本的背景置信度损失.

在某些论文的方法中,为了获得不同缩放的的结果,通过现将缩放在不同的尺度然后在将每个缩放尺度的结果组合起来。而在这篇论文中使用的方式是使用同一个网络中的不同层上抽取的feature map来获得和上面的缩放效果一样的结果。

我觉得这个idea真的很赞,超级赞。这样不仅仅可以利用参数共享,而且很方便。已经有研究表明使用前面层的feature map可以优化语义分段质量semantic segmentation quality,因为前面的层可以获得更多的细节的优质的关于输入的信息。

这张图上有两个feature map。我们知道网络的不同层有不同的感受野。在SSD中,bounding box的大小不需要匹配对应层的感受野。我们设计了bounding box的尺寸规则,这样每个feature map就可以自己计算。

如果我们使用m个feature map,其中1表示较低层,m表示叫高层。bounding box的默认尺度按照如下的计算公式计算

bounding box的横纵比尺度为

什么是hard negative mining:

【2】然后扔进网络中训练。Howr,这也许会出现一个问题那就是正样本的数量远远小于负样本,这样训练出来的分类器的效果总是有限的,会出现许多false itive,把其中得分较高的这些false itive当做所谓的Hard negative,既然mining出了这些Hard negative,就把这些扔进网络得到类别的损失函数,将这些难负样本的损失函数作为背景损失函数,从而加强分类器判别阳性的能力。

绝大部分的bounding box匹配出来是没有物品的,这样会导致负样本和正样本失衡。SSD这里没有使用全部的负样本,而是对每个负样本的bounding box根据其confidence loss排序,然后选择的一批作为负样本,这样是的负样本和正样本的比率稳定在3:1。实践证明,这样的方式是的优化的碎度更快,训练也更加稳定。

数据的扩充策略中数据来自于以下三种之一此外,近年来发展起来的目标检测器往往在backbone和head之间插入一些层,人们通常称这部分为检测器的Neck。接下来分别对这3种结构进行详细介绍:

base netowrk是VGG16。SSD300的模型就是上面那张结构图所示。新的层的初始化使用xier方式( , )。实验认为和R相比,SSD在定位localization上更加,因为在神经网络模型中直接学习回归了物品的形状。但是SSD很容易有分类错误问题,尤其是类似的类别(比如动物)。SSD对bounding box的大小很敏感,也就是说,小物体的表现不如大物体。结合模型来看,因为小物体的预测使用的是网络的前面的层,而前面的层并没有很多的信息。虽然存在上面的问题,但是SSD在大物体上的表现很好,二千对于不同横纵比的物体的性能鲁棒。

下面这张图展示了ssd中的哪些技术使得性能得到了提升。

性能提升的贡献:

SSD是如何提升小物体的检测准确率的:通过数据扩充

SSD用的是VGG16(但去掉了fc层加速)而YOLO普通版有24个卷积层。

SSD的输入尺寸较小(300 300),而YOLO是448 448,即使网络结构类似计算量距还是挺明显的,速度快一点正常。

ssd全靠卷积完成,而yolo里还有全连接,用上gpu的话肯定是ssd快

在ssd中,首先每个真实物品都先选择一个负责它的bounding box,在没有训练指之前,因为prior bounding box的位置都是确定的,所以选择IOU的为正样本。为平衡正负样本的比率,将IOU大于0.5的prior bounding box都设置为正样本。这样模型就更加稳定了。

SSD算法思想和结构详解 :

SSD详解

yolo 算法 网格的两个bounding box大小是怎么确定的

fast rcnn系列的模型的套路:

在最终的输出tensor中,包含了两个bounding box的x,y,width,height信息(只不过,x,y是相对于某grid的偏移量,width,heigh减少模型方的一个成功方法是训练多个模型而不是单一模型,并结合这些模型的预测。t是相对于宽/高的比例),很显然,有这几个信息就足以确定bbox的大小和位置了。

yolov3论文引用时怎么写参考文献

一、用串口通过RS232连接,最简单

可使用方括号。

图2 THP-YOLOv5整体架构

在论文正文中所引用的参考文献,应该使用方括号,用数字,1.2.等按顺序以右上角标形式标注在引用的地方,当引用多篇文献的时候,需要将个篇参考文献的序号在方括号内列出来,各个序号用“,”的形式,如果是连续序号,那么可以标注讫序号。参考文献的引用顺序,也就是后面的编码顺序,顺序不可以乱。

yolov5怎么与单片机连接

在VisDrone2021数据集上的大量实验表明,TPH-YOLOv5在无人机捕获场景上具有良好的性能和可解释性。在DET-test-challenge数据集上,TPH-YOLOv5的AP结果为39.18%,比之前的SOTA方法(DPNetV3)提高了1.81%。在VisDrone Challenge 2021中,TPH-YOLOv5与YOLOv5相比提高了约7%。

方法如下:

二、用并口,稍微复杂点

三、用USB口连接,相对复杂些Neck,需要做USB驱动

四、将单片机作为一个外设,做成ISA卡,或PCI卡,插在计算机插槽里,最复杂,但可扩展性更强。

单片机就是一个“的电脑“---有RAM,有FLASHI,有CPU,一般也有UART口、USB口,并口等等,但是必须增加外围电路才可以真正的在产品中使用!

与电脑连接最简单的办法就是:单片机(晶振、电容等组成最小系统电路)+MAX232芯片+DB9的接头,然后编写通信程序就可以与计算机进行通信了!

更复杂的还有USB、RS485、CAN、TCP/IP、等等通信方式,需要慢慢了解与学习才行!

YOLOv3中的Anchor参数是怎么来的?

yolo系列和ssd发表的时间顺序是yolov1,ssd,yolov2,yolov3,当然现在yolov4也出现了。这个是我之前在看完yolov1之后阅读ssd论文的时候记录的笔记,因此会涉及到很多和yolov1实现的对比。

YOLOv3的配置文件中有一段对anchors参数的配置

当使用VisDrone2021数据集训练模型时,使用数据增强策略(Mosaic和MixUp)发现YOLOv5x的结果远远好于YOLOv5s、YOLOv5m和YOLOv5l, AP值的距大于1.5%。虽然YOLOv5x模型的训练计算成本比其他3种模型都要高,但仍然选择使用YOLOv5x来追求的检测性能。此外,根据无人机捕获图像的特点,对常用的photometric和geometric参数进行了调整。

根据 《YOLO9000:Better, Faster, Stronger》 文章中所述:

根据 《YOLOv3: An Incremental Improvement》 文章中所述:

从数据集中类聚出来的锚框,相当于预测框的一个参考,基于这个参考,算法生成的 预测框仅需要在这个锚框的基础上进行“精修或微调fine-tuning” 即可,这样算法可以收敛的更快,检测效果更好。