富阳设计网站,黑帽seo怎么做网站排名,做复印机的模板网站,手机官方网站1. pytorch和mindspore的区别 与PyTorch典型区别 — MindSpore master documentation
2. 目标检测的发展
#xff08;1#xff09;双阶段#xff1a;
用于对象检测的第一类深度网络是基于区域的CNN#xff08;R-CNN#xff09;系列。
1. RCNN 一张图片通过搜索算法获得…1. pytorch和mindspore的区别 与PyTorch典型区别 — MindSpore master documentation
2. 目标检测的发展
1双阶段
用于对象检测的第一类深度网络是基于区域的CNNR-CNN系列。
1. RCNN 一张图片通过搜索算法获得2k个候选区域将每个区域化为固定大小输入CNN提取候选框特征随后采用SVM分类器判断候选区域的类别使用线性回归获得更准确的边界框。
优点首个将深度学习引入目标检测任务缺点
1整个目标检测阶段涉及到三个模型用于特征提取的CNN、用于分辨目标物体类别的SVM分类器、用于调整边界框的线性回归模型。RCNN无法做到端到端训练只能分别训练这三个模型这增大了训练难度与训练时间。
2每张图片要提取2000个训练区域随后又要用CNN分别提取每个区域的特征特征的数量将非常大这降低了模型的推理速度。通常每张图片需要45秒进行预测基本无法处理大型数据集。
2. Fast RCNN
在RCNN中每个候选区域都需要用CNN单独提取特征。为了减少算法的计算时间Fast-RCNN希望在每张图片上只使用一次CNN就能提取到所有关注区域的特征。为此RCNN设计了如下步骤的目标检测算法 首先对图片使用启发式算法得到大量候选区域。随后将图片输入到卷积神经网络中得到图片的特征与候选区域的相对位置结合就可以得到候选区域的特征。随后使用ROI池化层将候选区域调整至相同尺寸并将调整后的结构输入到全连接神经网络中。最后在全连接神经网络后面添加softmax层预测目标的列别并以相同的方式添加线性回归层。
与RCNN相比Fast RCNN计算一张图片只需要2秒速度有大幅提升每张图片的计算时间只有但仍不够理想。因为它依然用到了选择性搜索方法得到感兴趣区域而这一过程通常很慢。
3. Faster RCNN Faster RCNN针对感兴趣区域的生成方式对RCNN进行了优化进一步提高了计算速度和准确率。具体来说Faster RCNN使用Reigion Proposal NetworkRPN生成感兴趣区域
首先将图片输入到CNN中得到高层特征映射随后将其传递到RPN中。
RPN会在特征映射上使用一个滑动窗口并在每个窗口设置K个不同大小、不同长宽比的先验框。
对于每个先验框RPN会分别预测该框包含目标物体的概率以及对该框的调整回归量。最终得到不同形状、尺寸的边界框调增尺寸后将其传递到完全连接层得到目标类别以及最终的先验框。
Faster RCNN进一步提高了计算速度并获得了较高的准确率。时至今日依然是目标检测领域的主流算法之一。
2单阶段
与两阶段方法相比一阶段算法具有更高的卷积运算共享度、更快的速度和更小的内存占用但是检测精度低。 1. Yolo
YOLO系列[29]–[31]将提出候选区域和分类结合到一个单一的回归问题中通过回归输出层的边界框位置和类别实现了一阶段的端到端学习。
1Yolov1 对于一张输入图片首先将图片缩放成统一的尺寸并在图片上划分出若干表格。随后使用卷积神经网络提取图片特征并使用全连接层在每个网格上进行回归预测每个网格预测K个box每个box预测五个回归值。其中的四个回归值代表box的位置第五个回归值代表box中含有物体的概率和位置的准确程度。
随后对于含有物体的box使用全连接层回归预测物体的在各个类别的条件概率。因而卷积网络共输出的预测值个数为N×(K×5C)其中N为网格数K为每个网格生成box个数C为类别数。 2改进版本
YOLOv2使用了很多trick包括Batch Normalization、高分辨率图像分类器、使用先验框、聚类提取先验框的尺度信息、约束预测边框的位置、在passthrough层检测细粒度特征、分层分类等。
1Batch Normalization批量正则化。YOLOv2中在每个卷积层后加Batch Normalization(BN)层去掉dropout. BN层可以起到一定的正则化效果能提升模型收敛速度防止模型过拟合。YOLOv2通过使用BN层使得mAP提高了2%。
2High Resolution Classifier高分辨率分类器。原来的YOLO网络在预训练的时候采用的是224*224的输入这是因为一般预训练的分类模型都是在ImageNet数据集上进行的然后在detection的时候采用448*448的输入这会导致从分类模型切换到检测模型的时候模型还要适应图像分辨率的改变。而YOLOv2则将预训练分成两步先用224*224的输入从头开始训练网络大概160个epoch表示将所有训练数据循环跑160次然后再将输入调整到448*448再训练10个epoch。注意这两步都是在ImageNet数据集上操作。最后再在检测的数据集上fine-tuning也就是detection的时候用448*448的图像作为输入就可以顺利过渡了。作者的实验表明这样可以提高几乎4%的mAP。
3Convolutional With Anchor Boxes带Anchor Boxes的卷积。YOLOv1利用全连接层直接对边界框进行预测导致丢失较多空间信息定位不准。YOLOv2去掉了YOLOv1中的全连接层使用Anchor Boxes预测边界框同时为了得到更高分辨率的特征图YOLOv2还去掉了一个池化层。由于图片中的物体都倾向于出现在图片的中心位置若特征图恰好有一个中心位置利用这个中心位置预测中心点落入该位置的物体对这些物体的检测会更容易。所以总希望得到的特征图的宽高都为奇数。YOLOv2通过缩减网络使用416*416的输入模型下采样的总步长为32最后得到13*13的特征图然后对13*13的特征图的每个cell预测5个anchor boxes对每个anchor box预测边界框的位置信息、置信度和一套分类概率值。使用anchor boxes之后YOLOv2可以预测13*13*5845个边界框模型的召回率由原来的81%提升到88%mAP由原来的69.5%降低到69.2%.召回率提升了7%准确率下降了0.3%。
4Dimension Clusters维度聚类。在Faster R-CNN和SSD中先验框都是手动设定的带有一定的主观性。YOLOv2采用k-means聚类算法对训练集中的边界框做了聚类分析选用boxes之间的IOU值作为聚类指标。综合考虑模型复杂度和召回率最终选择5个聚类中心得到5个先验框发现其中中扁长的框较少而瘦高的框更多更符合行人特征。通过对比实验发现用聚类分析得到的先验框比手动选择的先验框有更高的平均IOU值这使得模型更容易训练学习。
5New Network新的网络。 YOLOv2采用Darknet-19其网络结构如下图所示包括19个卷积层和5个max pooling层主要采用3*3卷积和1*1卷积这里1*1卷积可以压缩特征图通道数以降低模型计算量和参数每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用global avg pool 做预测。采用YOLOv2模型的mAP值没有显著提升但计算量减少了。
7细粒度特征Fine-Grained Features。 YOLOv2借鉴SSD使用多尺度的特征图做检测提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起从而实现多尺度检测。YOLOv2提取Darknet-19最后一个max pool层的输入得到26*26*512的特征图。经过1*1*64的卷积以降低特征图的维度得到26*26*64的特征图然后经过pass through层的处理变成13*13*256的特征图抽取原特征图每个2*2的局部区域组成新的channel即原特征图大小降低4倍channel增加4倍再与13*13*1024大小的特征图连接变成13*13*1280的特征图最后在这些特征图上做预测。使用Fine-Grained FeaturesYOLOv2的性能提升了1%。
8多尺度训练Multi-Scale Training。 YOLOv2中使用的Darknet-19网络结构中只有卷积层和池化层所以其对输入图片的大小没有限制。YOLOv2采用多尺度输入的方式训练在训练过程中每隔10个batches,重新随机选择输入图片的尺寸由于Darknet-19下采样总步长为32输入图片的尺寸一般选择32的倍数{320,352,…,608}最小的选项是320×320最大的是608×608。我们调整网络的尺寸并继续训练。采用Multi-Scale Training, 可以适应不同大小的图片输入当采用低分辨率的图片输入时mAP值略有下降但速度更快当采用高分辨率的图片输入时能得到较高mAP值但速度有所下降。
YOLOv3借鉴了SSD的思想使用了多尺度特征进行目标检测与SSD不同的是YOLOv3采用上采样特征融合的方式对多尺度特征进行了一定的融合。
YOLOv7[38]结合了扩展高效层聚合网络E-ELAN[39]、粗到细标签分配和计划的重新参数化[6]卷积等策略在保持单级网络优势的同时表现出与Faster RCNN相对相似的性能。 3基于Transformer
DETR
DETR是首个用transformer完成目标检测任务的代表性工作。
首先DETR使用CNN提取图片的特征再加上NLP领域常用的位置编码最终生成了一批序列化数据。
在encoder阶段将序列化数据其送入encoder中利用注意力机制提取数据中的特征。在decoder阶段输入N个随机初始化向量每个object query关注图片的不同位置。经过decoder的解码最终会生成N个向量每个向量对应一个检测到的目标。最后将这N个向量输入到神经网络中得到每个目标的类别和位置。
相较于其它目标检测算法DETR生成的检测框数量大幅减少与真实的检测框数量基本一致。DETR使用匈牙利算法将预测框与真实框进行了匹配随后就可以计算出loss完成对模型的训练。
DETR取得了好于Faster RCNN的检测效果并且它不需要预先指定候选区域不需要使用NMS去除重复的目标框算法流程十分简洁。 3. Yolov5 以Yolov5s的网络结构为主线讲解与其他三个模型Yolov5m、Yolov5l、Yolov5x的不同点。
YOLOv1
【目标检测论文阅读】YOLOv1 - 知乎
YOLOv1的检测流程
Resize image将输入图片resize到448x448。Run ConvNet使用CNN提取特征FC层输出分类和回归结果每个网格预测K个box每个box预测五个回归值。其中的四个回归值代表box的位置第五个回归值代表box中含有物体的概率和位置的准确程度。图像分割成7 x 7的单元格Non-max Suppression非极大值抑制筛选出最终的结果。
YOLOv1维度输出
输入448 x 448 x 3卷积后7 x 7 x 1024全连接1 x 1 x 4096 --1 x 1 x 1470输出 7 x 7 x 30 由fc层后的向量reshape而来
7 x 7 网格数目输出tensor中的 7 x 7 对应着输入图像的 7 x 7 个单元格
30维
20类对象分类的数目注意这些概率值其实是在各个边界框置信度下的条件概率也就是说不管一个单元格预测多少个边界框该单元格只预测一组类别概率值YOLOv1的一大缺点。2个bounding box的置信度代表该边界框含有目标的可能性代表边界框的准确度置信度计算为2个bounding box的位置4个数值(x, y, w, h)来表示其位置。中心点对应的宽和高都归一化为0-1 YOLOv1的损失计算 总结起来就是
对于有object的cell那么计算cell的分类误差然后cell中两个bbox的置信度误差然后cell中和ground truth box的IoU最大的bbox的位置误差。对于没有object的cell那就只计算cell中两个bbox的置信度误差。 YOLOV1缺点
每个单元格只能预测一个类别训练难度比较法偶然出现的长宽比无法预测泛化能力低定位误差大损失函数多次下采样信息丢失比较多
YOLOv2
主要是加了很多trick来提高预测精度。
tricks
batch nomalization替换dropout防止过拟合采用了卷积和anchor boxes来预测边界框移除全连接层实现一个box可以预测多个类别移除一层pool提高特征图分辨率k-means方法对方框进行聚类分析使得预测框与ground truth的IOU更好替换主干网络Darknet-19global avg pooling做预测使用1x 1来降低计算量和参数粗略-精细的预测方法适合小目标多尺度训练的方法
YOLOv维度输出
205x 2
YOLOv3 改进点
类别预测方面主要是将原来的单标签分类改进为多标签分类softmax-logisticYOLO v3采用多个scale融合的方式做预测——predictions across scales backbone网络架构完全不一样darknet-19-darknet-53
输出 YOLOv4
Yolov4在Yolov3的基础上进行了很多的创新。
比如输入端采用mosaic数据增强Backbone上采用了CSPDarknet53、Mish激活函数、Dropblock等方式Neck中采用了SPP、FPNPAN的结构spp是金字塔池化层可以增强感受野。输出端则采用CIOU_Loss、DIOU_nms操作。 YOLOv5
深入浅出Yolo系列之Yolov5核心基础知识完整讲解 - 知乎大白在之前写过 《深入浅出Yolo系列之Yolov3Yolov4核心基础知识完整讲解》对 Yolov4的相关基础知识做了比较系统的梳理但Yolov4后不久又出现了Yolov5虽然作者没有放上和Yolov4的直接测试对比但在COCO…https://zhuanlan.zhihu.com/p/172121380 创新点
1输入端Mosaic数据增强、自适应锚框计算、自适应图片缩放2BackboneFocus结构CSP结构
focus结构
实际上就是下采样操作具体步骤
采用切片操作把高分辨率的图片/特征图拆分成多个低分辨率的图片/特征图如下图所示隔行采样拼接 将4×4×3的Tensor通过间隔采样拆分成4份在通道维度上进行拼接生成2×2×12的Tensor。Focus层将w-h平面上的信息转换到通道维度再通过卷积的方式提取不同特征。采用这种方式可以减少下采样带来的信息损失。
csp结构
CSP结构是将原输入分成两个分支分别进行卷积操作使得通道数减半然后一个分支进行Bottleneck * N操作然后concat两个分支使得BottlenneckCSP的输入与输出是一样的大小这样是为了让模型学习到更多的特征。
3NeckFPNPAN结构
FPN 结构通过自顶向下进行上采样使得底层特征图包含更强的图像强语义信息PAN 结构自底向上进行下采样使顶层特征包含图像位置信息两个特征最后进行融合使不同尺寸的特征图都包含图像语义信息和图像特征信息保证了对不同尺寸的图片的准确预测。
4PredictionGIOU_Loss
IoU系列IoU, GIoU, DIoU, CIoU_iou giou diou_PoomHey的博客-CSDN博客
总的损失函数 classification loss localization loss confidence loss
YOLOv5使用二元交叉熵损失函数计算类别 概率和目标置信度得分 的损失。 YOLOv5使用 CIOU Loss作为bounding box回归的损失。
普通IoU存在的问题
若两者不相交则IoU为0Iou作为损失时梯度无法更新无法对方框预测值进行优化IoU无法区分两个对象之间不同的对齐方式。
GIoU_loss的计算过程 GIOU作为loss函数时Loss1-GIOU当A、B两框不相交时A∪B值不变最大化GIOU就是就小化C这样就会促使两个框不断靠近。 疑惑点
anchor box 和 bounding box 的区别 ground truth是真实标注框也就是人工标注一般被看作“真值” Bounding box一般认为为什么是一般认为原因参照下面一段最后括号中的内容是网络最终预测的结果也就是“可能值”因为网络可能预测正确也可能错误 Anchor box被称作预选框anchor的机制会更复杂一些有许多帖子来专门讲解这个。总的来说就是在图像上会按照一定的规律放置一些anchor网络会学习anchor相对于ground truth的偏移量我们可以把anchor看作bounding box的“爷爷”anchor/-/×/÷偏移量所得到的框是bounding box的“父亲”“父亲”经过非极大值抑制NMS之后就是bounding box了但是也可以说“父亲”就是bounding box了只是因为“父亲”很少出现在这个领域的相关内容中所以一般说bounding box的时候指的是NMS之后的结果 IOU在不同的阶段会代表不同目标之间的交并比比如在训练阶段需要判断anchor是正样本还是负样本这个时候就需要用ground truth和anchor box计算IOU。在推理预测阶段进行NMS操作的时候又要计算“父亲”每个框的IOU来进行合并删除操作
最后的输出维度如何计算anchor-based 和 anchor free的区别 根据是否预定义锚框将目标检测算法分为Anchor-based和Anchor-free两种。 1Anchor-free 无锚框的目标检测算法是直接预测物体的边界框。代表yolov1 优点是泛化能力强、框架更简洁、异常尺度目标检测精度高 缺点是不适合进行通用目标检测适用多尺度目标检测、小目标检测等精度低于基于锚框的算法。 2Anchor-based 基于锚框的目标检测算法就是结合场景和数据事先定义好锚框锚框就是定义好的大小不同的检测框然后对锚框里的内容进行分类和回归。代表YOLOv2、YOLOv3、YOLOv4、YOLOv5用的都是基于锚框的。 优点是技术较成熟对特定场景效果好 缺点缺点是泛化能力差计算冗余等。 选择anchor的方法1)yolov3:用k-means算法在训练集中所有样本的真实框ground truth中聚类得到具有代表性形状的宽高维度聚类 anchor转化为bbox的过程1三种scale的feature map每个cell对应3个anchor2anchor是通过x,y,w,h来计算bbox其中xy为偏移量wh为缩放量3选择与gt置信度nms非极大值抑制最高的作为最后的bbox。
各类loss的总结
IoU系列IoU, GIoU, DIoU, CIoU_iou giou diou_PoomHey的博客-CSDN博客
4. GAN进行数据增强
YangChen、Yong-Jin LIU 等人提出的算法 CartoonGAN:Generative Adversarial Networks for Photo Cartoonization 基于 GAN 网络迭代训练生成器和判别器由判别器提供的对抗性损失约束最终将自然图片转换为具有卡通风格的图片效果惊艳。
下图为卡通图像生成的整体框架
以 GenerativeAdversarial Networks(GAN)为基础其架构包括一个生成器Generator和一个判别器Discriminator通过迭代训练两个网络由判别器提供的对抗性损失约束最终使得网络能够将自然图片转换为具有卡通风格的图片结果并且保持原图片的内容信息。 图 1 卡通图像生成整体架构
生成器结构
生成器采用自编码器为全卷积结构包括编码器如图 3解码器如图 4。 图 3 编码器结构 图 4 解码器结构
编码器输入为真实图片其架构由 7×7 的卷积核步长为 1 的卷积层开始随后紧跟两个步长为 2 的降采样块进行特征提取对风格图片生成有用的信息将在这个过程中被提取。然后紧接 4 个残差块Residual Block用来重建内容特征。
解码器架构由 5 个残差块开始通过两个上采样块步长为 2来实现对不同风格特征的重建最后在添加一层使用 7×7 卷积核、步长为 1 的卷积层得到最终输出生成的卡通图片结果。
6. 开发板部署
Atlas 200 AI加速模块型号 3000是一款高性能的AI智能计算模块集成了昇腾310 AI处理器Ascend 310 AI处理器可以实现图像、视频等多种数据分析与推理计算。
1环境准备
联网 烧录
2模型转换 第一步ckpt转onnx
原因运行模型所需的环境难以配置。深度学习模型的结构通常比较庞大需要大量的算力才能满足实时运行的需求。
onnx ONNX文件不仅仅存储了神经网络模型的权重同时也存储了模型的结构信息以及网络中每一层的输入输出和一些其它的辅助信息。可以用Netron可视化onnx模型。其中算子包括算子属性、图结构和权重信息。
模型部署指把训练好的模型在特定环境中运行的过程。模型部署要解决模型框架兼容性差和模型运行速度慢这两大问题。模型部署的常见流水线是“深度学习框架-中间表示-推理引擎”。其中比较常用的一个中间表示是 ONNX。深度学习模型实际上就是一个计算图。模型部署时通常把模型转换成静态的计算图即没有控制流分支语句、循环语句的计算图。PyTorch 框架自带对 ONNX 的支持只需要构造一组随机的输入并对模型调用 torch.onnx.export 即可完成 PyTorch 到 ONNX 的转换。推理引擎 ONNX Runtime 对 ONNX 模型有原生的支持。给定一个 .onnx 文件只需要简单使用 ONNX Runtime 的 Python API 就可以完成模型推理。
现在主流的推理框架包括TensorRTONNXRuntimeOpenVINOncnnMNN 等。
onnx转om 使用CANN提供的ATC模型转换工具。可以将开源矿机的网络模型转换为昇腾AI处理器支持的模型文件.om格式用于后续的模型推理。
第二步CANN实现om推理 主要实现的过程是 模型预处理和后处理最后输出。
第三步优化模型
待做事项 遇到的问题
转.om模型用的atc显示没有input_shape错误是因为netron查看onnx发现模型输入名字命名为x其次shape必须要和onnx模型的输入相同最后soc_version需要和开发板型号对应比如200dk 2a是310b1。om模型运行关键就是输入输出要符合。不符合会无法预测如果tensor进入会导致alc资源分配错误。