Paper Reading 2|YoloF:You Only Look One-level Feature
文献阅读2-YoloF:You Only Look One-level Feature
本文是旷视科技&中科院孙剑团队在单阶段目标检测方面一次突破性的创新,它针对单阶段目标检测中的FPN(特征金字塔)进行了深入的分析并得出:FPN最重要的成分是分而治之的处理思路缓解了优化难问题。针对FPN的多尺度特征、分而治之思想分别提出了Dilated编码器提升特征感受野,Uniform Matching进行不同尺度目标框的匹配;结合所提两种方案得到了本文的YOLOF,在COCO数据集上,所提方案取得了与RetinaNet相当的性能且推理速度快2.5倍;所提方法取得了与YOLOv4相当的性能且推理速度快13%。
Abstract本文对单阶段目标检测中的FPN进行了重思考并指出FPN的成功之处在于它对目标检测优化问题的分而治之解决思路而非多尺度特征融合。从优化的角度出发,作者引入了另一种方式替换复杂的特征金字塔来解决该优化问题:从而可以仅仅采用一级特征进行检测。基于所提简单而有效的解决方案,作者提出了YOLOF(You Only Look One-level Feature)。
YOLOF有 ...
FPN网络结构及源码分析
FPN网络结构及源码分析
FPN即Feature Pyramid Networks,特征金字塔。
特征金字塔是多尺度(muiti-scale)目标检测领域中的重要组成部分,但是由于此方法对计算和内存的需求,在FPN之前的深度学习任务都刻意回避了这类模型。在文献阅读2中,作者利用深度神经网络固有的多尺度、多层级的金字塔结构,使用一种 自上而下的侧边连接 在所有尺度上构建出高级语义特征图,构造了特征金字塔的经典结构。
具体做法是:把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征自上而下进行融合,使得所有尺度下的特征都有丰富的语义信息。
其结构如下图所示:
在FPN网络结构中,还有很多图像算法。
Featurized image pyramid
生成不同尺寸的图片,每张图片生成不同的特征,分别进行预测,最后统计所有尺寸的预测结果。
一种比较笨的多尺度方法,对输入图像设置不同的缩放比例实现多尺度。这样可以解决多尺度,但是相当于训练了多个模型(假设要求输入大小固定),即便允许输入大小不固定,但是也增加了存储不同尺度图像的内存空间。
Single feature map相当于 ...
Yolov5学习笔记8——v6.0源码剖析——Head部分
Yolov5学习笔记8——v6.0源码剖析——Head部分Yolov5s网络结构总览
要了解head,就不能将其与前两部分割裂开。head中的主体部分就是三个Detect检测器,即利用基于网格的anchor在不同尺度的特征图上进行目标检测的过程。由下面的网络结构图可以很清楚的看出:当输入为640*640时,三个尺度上的特征图分别为:80x80、40x40、20x20。
Detect解析Detect源码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849class Detect(nn.Module): stride = None # strides computed during build onnx_dynamic = False # ONNX export parameter def __init__(self, nc=80, anchors=(), ch=(), inplace=True): # detection layer ...
Yolov5学习笔记7——v6.0源码剖析——Neck部分
Yolov5学习笔记7——v6.0源码剖析——Neck部分
在网络结构配置文件yolov5s.yaml中,并未将neck和head区分开来,而是直接以head命名,这也是方便在model/yolo.py中的加载。Yolov5学习笔记7只讨论head中的neck部分。
neck结构概览及参数neck部分结构图
neck部分参数配置源码1234567891011121314151617181920# YOLOv5 v6.0 headhead: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, C3, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Co ...
Yolov5学习笔记6——v6.0源码剖析——Backbone部分3
Yolov5学习笔记6——v6.0源码剖析——Backbone部分3Backbone概览及参数源码如下1234567891011121314151617181920212223# Parametersnc: 80 # number of classesdepth_multiple: 0.33 # model depth multiplewidth_multiple: 0.50 # layer channel multipleanchors: - [10,13, 16,30, 33,23] # P3/8 - [30,61, 62,45, 59,119] # P4/16 - [116,90, 156,198, 373,326] # P5/32# YOLOv5 v6.0 backbonebackbone: # [from, number, module, args] [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, C3, [128]], ...
基于DNN神经网络的手写数字识别
基于DNN神经网络的手写数字识别导入相关的库
1234567import numpy as npimport paddle as paddleimport paddle.fluid as fluidfrom PIL import Imageimport matplotlib.pyplot as pltimport ospaddle.enable_static()
读取数据
123456789101112131415161718192021# 使用多层感知器训练(DNN)模型,用于预测手写数字图片。BUF_SIZE=512BATCH_SIZE=128#用于训练的数据提供器,每次从缓存中随机读取批次大小的数据train_reader = paddle.batch( paddle.reader.shuffle(paddle.dataset.mnist.train(), buf_size=BUF_SIZE), batch_size=BATCH_SIZE)#用于训练的数据提供器,每次从缓存中随机读取批次大小的数据test_reade ...
Yolov5学习笔记5——v5.0源码剖析——Backbone部分2
Yolov5学习笔记5——v5.0源码剖析——Backbone部分2用netron得到yolov5s的框架结构图如下,可以非常直观的得到关于backbone部分的网络结构图。
注:所使用的代码版本为 2020年11月24日发布的Yolov5-master。
YOLOv5s结构图如下所示:
Backbone结构图
backbone的意义是:在不同图像细粒度上聚合并形成图像特征的卷积神经网络;
backbone所需的主要模块在common.py里面可以找到。
从整体结构中我们抽出backbone部分学习:
backbone的结构图如下:
Netron打开yolov5s.pt导出的BackBone部分的框架图如下:
backbone对应的代码为:
1234567891011121314# YOLOv5 backbonebackbone: # [from, number, module, args] [[-1, 1, Focus, [64, 3]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, Bottlen ...
Paper Reading 1|YOLO-Z
文献阅读1-YOLO-Z: Improving small object detection in YOLOv5 for autonomous vehicles本文的中文题目为:YOLO-Z:基于改进YOLOv5的自动驾驶车辆小目标检测算法。
概述本研究探索了如何对YOLOv5进行修改,以提高其在检测较小目标时的性能,并在自动赛车中进行了特殊应用。为了实现这一点,作者研究了替换模型的某些结构会如何影响性能和推理时间。在这一过程中在不同的尺度上提出一系列的模型YOLO-Z,并得到高达6.9%的改善,相比原YOLOv5推理时间检测更小的目标时的成本就增加3ms。
数据集(Dataset)本文所采用的数据集为基于自动驾驶赛车视角的带注释的锥体数据集。该数据集包括数字增强图像和具有挑战性天气条件的情况。数据集共有4类圆锥体(黄色、蓝色、橙色和大橙色),接近4000张图像。
数据集以65:15:20的比例分为训练、验证和测试。
架构改进YOLOv5使用yaml文件来指导解析器如何构建模型。为了实现新的YOLOv5模型结构,作者为原有的YOLOv5的每个构建模块或层提供参数,并在必要时指导解析器如 ...
Yolov5学习笔记4——源码剖析——Head部分
Yolov5学习笔记4——源码剖析——Head部分Detect类对应yolov5的检查头(head)部分
Detect类在yolo.py程序中的33行。
class Detect()代码分析1234567891011121314151617181920212223242526272829303132333435363738class Detect(nn.Module): stride = None # strides computed during build onnx_dynamic = False # ONNX export parameter def __init__(self, nc=80, anchors=(), ch=(), inplace=True): # detection layer super().__init__() self.nc = nc # number of classes self.no = nc + 5 # number of outputs per anchor se ...
Yolov5学习笔记3——源码剖析——Backbone部分1
Yolov5学习笔记3——源码剖析——Backbone部分1yolo.py源码解析该代码路径为”models/yolo.py“
12345678910111213141516171819202122232425262728293031323334353637def __init__(self, cfg='yolov5s.yaml', ch=3, nc=None, anchors=None): # model, input channels, number of classes super().__init__() if isinstance(cfg, dict): self.yaml = cfg # model dict else: # is *.yaml import yaml # for torch hub self.yaml_file = Path(cfg).name with open(cfg, encoding='ascii', errors=& ...