- 博客(333)
- 资源 (46)
- 收藏
- 关注
原创 Yolov5 QAT量化训练
从模型量化(5): 敏感层分析可以看出来,对于yolov5-nano模型,对最后一层detect层进行敏感层分析的时候,发现对检测精度的影响比较大。所以在PTQ/QAT在进行量化时,会跳过这些敏感层。QAT微调的模型,就是PTQ在校准后的模型。从上一小节可以看出如果PTQ中模型训练和量化是分开的,而QAT则是在模型训练时加入了伪量化节点,用于模拟模型量化时引起的误差。QAT过程中,我们首先需要选择哪些层需要进行finetune训练,并利用FP32对应层的输出作为监督进行训练。
2023-03-21 22:05:58
194
原创 模型量化(5): 敏感层分析
在实际PTQ或者QAT过程中,我们不知道哪些层属于敏感层,从而在量化的过程中跳过这些层,所以就需要进行敏感层分析。通过分析每层是否量化对map或者是精度的影响程度,从而确定敏感层。。
2023-03-19 15:18:57
235
原创 基于PTQ的yolov5量化完整代码讲解
(例如MobileNet),同时不同层对于精度的影响也比较大。基础上增加了PTQ量化的代码。的数据分布,找到合适的Scale,从而一定程度上。等量化算子来替换torch.nn对应的算子。(例如ResNet101),但是在。是目前常用的模型量化方法之一。baseline模型。
2023-03-18 22:43:54
37
原创 Pytorch 钩子函数hook的使用
PyTorch会自动舍弃图计算的中间结果,所以想要获取这些数值就需要使用hook函数。(1)因为模块可以是多输入的,所以输入是tuple型的,需要先提取其中的。(remove),以避免每次都运行钩子增加运行负载。的值(不能返回,本地修改也无效),修改时最好用。用来导出指定张量的梯度,或修改这个梯度值。输出是Tensor型的可直接用。(2)导出后不要放到显存上,很。的梯度(即只能返回gin),用来导出指定子模块(可以是。,但只可修改输出,常用来。用来导出指定子模块的。输出张量梯度不可修改。
2023-03-18 15:46:43
382
原创 模型量化(4): Pytorch 量化工具包介绍
在实际开发过程中,单独开发量化的工具进行PTQ或者QAT量化,同时去适配TensorRT, onnxruntime,openvion等推理引擎。Pytorch官方推出了量化工具:Pytorch Quantization库,方便大家使用。是一个工具包,用于训练和评估具有模拟量化的PyTorch模型。支持将 PyTorch 模块自动转换为其量化版本。转换也可以使用 API 手动完成,这允许在不想量化所有模块的情况下进行部分量化。例如,一些层可能对量化比较敏感,对其不进行量化可提高任务精度。
2023-03-18 15:04:17
352
原创 量化(3): 量化校准
为了简单起见,这里只描述了对称范围的校准(工业界一般对称量化即可满足需求),如对称量化所需。(threshold),舍弃那些超出范围的数进行量化,这种量化方式。的方法,它的显著特点是int8的表示空间没有充分利用,因此称为。那么问题来了,对于数据流的饱和量化,怎么在数据流中找到这个。我们都知道量化的过程与数据的分布有关。选择使FP32和int8的激活值分布的。方式虽然充分利用了低比特表示空间,但是。时,高精度向低精度进行映射就会将表示。的选择主要有2种方式,分别是。的表示空间,因此称为。
2023-03-18 13:18:06
377
原创 量化(2):模型常见的量化方式
量化的映射量化的粒度量化的方式量化的对象以及量化的Bit。其中,在量化的映射中,包括线性映射和非线性映射(DSQ),在实际工程项目中主要使用的是线性映射。
2023-03-16 20:25:35
248
原创 量化(1):基础知识
这里数组为[-0.52, 0.3, 1.7],这里我们用映射的方法来进行一个数组的映射,首先,通过求组数组的最大最小值之差然后除以int8的表示范围可以得到Scale=(1.7 -(-0.52))/(127-(-128)) = 0.0087059然后,根据Scale和上式的量化映射方法,可以得到映射后的int8数组为[-60, 34, 195];最后,由于int8的定点表示范围为[-128, 127],因此对于前面得到的结果需要进行Clip。
2023-03-15 22:33:10
209
原创 YOLOv8 网络详解
具体到 YOLOv8 算法,其核心特性和改动提供了一个全新的 SOTA 模型,包括P5 640和P6 1280分辨率 的目标检测网络和基于YOLACT的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了N/S/M/L/X尺度的不同大小模型,用于满足不同场景需求骨干网络和 Neck 部分可能参考了设计思想,将 YOLOv5 的C3结构换成了梯度流更丰富的C2f结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。
2023-03-15 18:11:40
244
原创 ncnn部署(CMakelists.txt)
打开VS2013/VS2019的X64命令行(注意不是cmd),我这里以V32013环境进行编译。注意:cmake -G…这条命令有三个需要换成之前安装protobuf-3.4.0的根目录。表示编译是通过vs2013打开,有如下可以选择的选项。
2023-03-08 10:54:02
309
原创 CMakeList常用命令
https://blog.csdn.net/weixin_44966641/article/details/122355304
2023-03-07 20:23:37
13
原创 目标检测:VOC标注xml数据保存为一个txt文件
代码实现其中保存了voc数据集的20个类别名称运行会在根目录上生成和,用于模型的训练和验证。保存的和的数据格式每一行:2. 自定义Dataset参考B导的github地址:https://github.com/bubbliiiing/detr-pytorch
2023-03-06 13:56:23
24
原创 目标检测: 数据增强代码详解
(水平翻转,缩放,色域变换等)。创建一张像素值为(128,128,128),大小为input_shape 大小比如(640,640)的图片,将4张图片分别放在该图片。然后每张图片分别创建一张和mosaic大小,像素为(128,128,128,128),将图片放在对应的部分。对左上角,左下角,右上角,右下角4个部分box坐标,进行限制,防止坐标超出对应位置以及越界。分别计算每张图片与mosaic后图片,同一点的坐标。等数据增强变换后的图像,逐像素融合为一张图片。,因此需要对标签的坐标信息进行相应的变换。
2023-03-05 19:32:53
404
原创 旋转矩形框标注--roLabelImg的使用
(2) 安装LabelImg: roLabelImg 环境依赖于LabelImg,因此需要先安装好LabelImg。,当angle小于pi/2时,theta等于angle,当angle大于pi/2时,theta等于angle-pi。xml文件保存了旋转检测框的类别(wenben)、中心点坐标(cx,cy)、宽高(w,h)、旋转角(angle)与常规的目标检测bounding box不同,在它的基础上添加了旋转角度,对常规水平检测框进行旋转。预定义的类别名为自定义Dataset的类别名,比如。
2023-03-03 13:52:56
279
原创 目标检测:DETR详解
DETR:, DETR 是 Facebook 团队于2020年提出的基于 Transformer 的端到端目标检测,是Transformer在目标检测的开山之作 –。相比于传统的Faster-rcnn,yolo系列,DETR有以下几个优点:1).无需NMS后处理2).无需设定anchor3).高效并行预测。整个由网络实现端到端的目标检测实现,大大简化了目标检测的 pipeline。
2023-02-26 20:16:05
292
原创 NCNN量化详解2
量化算法介绍的文章的话,下面这篇文章的大佬 @章小龙介绍的比我好多啦。虽然介绍的是NVIDIA TensorRT的算法,但是NCNN是参考其算法做出来的,方法几乎一样变换公式正常的量化,FP32 Value 和 INT8 Value之间的关系是这样的:取值范围由于float32的取值范围几乎是无穷的,而int8只有-128~127。因此建立映射关系时,确定float32的取值范围很重要。
2023-02-25 22:11:58
208
原创 NCNN Conv量化详解1
本文介绍了NCNN代码中目前对于量化的处理。至于如何得到量化模型,请参考NCNN github上的wiki:quantized int8 inference,可以将caffe模型量化成NCNN模型。, 本文仅做学术分享,如有侵权,请联系删文。
2023-02-25 19:16:41
603
原创 NCNN+Int8+yolov5部署和量化
本文提出shufflev2-yolov5的部署和量化教程;剖析了之前yolov5s之所以量化容易崩坏的原因;ncnn的fp16模型对比原生torch模型精度可保持不变;[上图,左为torch原模型,右为fp16模型]ncnn的int8模型精度会略微下降,速度在树莓派上仅能提升5-10%,其他板子暂未测试;
2023-02-25 16:54:55
715
原创 Vision Transformer(ViT) 2: 应用及代码讲解
(1)下载好数据集,代码中默认使用的是花分类数据集,下载地址:, 如果下载不了的话可以通过百度云链接下载:提取码:58p0(2)在train.py脚本中将设置成解压后的文件夹绝对路径(3)下载预训练权重,在文件中每个模型都有提供预训练权重的下载地址,根据自己使用的模型下载对应预训练权重(4)在train.py脚本中将--weights参数设成下载好的预训练权重路径(5)设置好数据集的路径以及预训练权重的路径--weights就能使用train.py脚本开始训练了(训练过程中会自动生成文件)
2023-02-20 13:05:52
399
原创 python简单解析打印onnx模型信息
(TensorProto类型),其中node中存放了模型中所有的计算节点,input存放了模型的输入节点,output存放了模型中所有的输出节点,之后,我们获得的就是一个ModelProto,它包含了一些版本信息,生产者信息和一个GraphProto。这里用python,将onnx中包含的有用的信息打印出来,进行一个直观可视化。里面又包含了四个repeated数组,它们分别是。(ValueInfoProto类型),(ValueInfoProto类型)和。(NodeProto类型),
2023-02-16 17:41:40
473
原创 基于ncnn的yolov5模型部署
这里为什么修改,nihui大佬的解释是u版yolov5是支持动态尺寸推理的,但是ncnn天然支持动态尺寸输入,无需reshape或重新初始化,给多少就算多少。u版yolov5将最后Reshape层把输出的grid写死了,导致检测小图时会出现检测框密密麻麻布满整个画面,或者根本检测不到东西。: 下采样32倍的输出节点name为419,下采样16倍的输出节点name为405,下采样8倍的输出节点name为out,3 ) .打开生成的.param文件,去除不支持的网络层。的编译环境下,配置NCNN。
2023-02-16 00:28:37
191
原创 Mask-RCNN(3) : 自定义数据集读取(VOC &COCO)以及pycocotools的使用
按照3个一组进行划分,前2个值代表关键点的x,y坐标,第3个值代表该关键点的可见度,它只会取。0表示该点一般是在图像外无法标注,1表示虽然该点不可见但大概能猜测出位置(比如人侧着站时虽然有一只耳朵被挡住了,但大概也能猜出位置),2表示该点可见。它的boundingbox信息,可以知道它对应的是分割图片上的红色目标,红色目标它的像素值都是1,刚好。同理第二个目标小飞机,对应分割区域的像素值都是为2的,同理目标3,目标4也是这样。,以上图的标注文件为例,总共标注了4个目标(目标1,目标2,目标3,目标4)。
2023-02-14 15:24:06
449
原创 Mask-RCNN(2) : 代码使用
当一个batch的长宽比率相差比较大的时候,我们真正输入网络的图片其实是很大的。,如果在验证的时候单张输入图片的话,那么我们输入网络的图片大小其实是和当前图片大小是一样的,此时我们对图片不需要太多处理。每隔10个epoch进行验证, 不过这样就没法获得保存每个epoch的验证结果,这样就没法根据每个epoch它的验证结果去绘制对应的曲线了。所以按照长宽比率进行排序之后,我们对它分组,然后再组内进行采样,这样我们输入网络的图片打包成batch它的大小会更小些,从而对。的,在目标检测中是没有使用到的。
2023-02-12 17:00:47
517
1
原创 语义分割基础讲解
(比如像素0对应的是(0,0,0)黑色,像素1对应的是(127,0,0)深红色,像素255对应的是(224,224,129))。Labelme是一款非常老的标注工具,使用起来非常简单,就是靠你人工一个个点去标,将我们的目标慢慢的框出来。这个标注工具,基于百度提供的预训练模型,这些模型在一些非常大的数据集上进行训练,它已经包含了我们日常生活中大部分常见的一些目标,使用起来非常简单。针对分割任务的标注工具有很多,网上搜一搜一大把,你一个个去试,总有一款是你喜欢的。语义分割,实例分割,全景分割这三个分割任务的。
2023-02-04 16:53:50
479
原创 图像分割FCN(3):FCN模型搭建和自定义数据集
对应代码,里面有类,Args:Returns:Args:Returns:Args:Returns:其中__init__方法中,定义了图片的路径image_dir以及分割标签mask的路径mask_dir, 并根据txt_path(训练集为train.txt验证集为val.txt)找到所有的训练或验证图片数据以及分割标签。: 根据索引index,利用self.image[index]获取图片的路径,然后将图片转换为RGB。
2023-02-02 09:58:13
313
原创 深度学习知识点总结
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)(参考百度)。在HSV模型中,颜色是由色度(Hue),饱和度明度(Value)共同组成。色度(Hue)使用角度度量的,范围是从0 ° 到360 ° (逆时针旋转),比如0 ° / 360 ° 代表红色,120 ° 代表原谅色,240 ° 代表蓝色饱和度(Saturation)表示颜色接近光谱色的程度。
2023-01-31 10:15:08
236
原创 图像分割FCN(2):代码的使用讲解
因为如果自己的数据集有问题,一上来训练就会出现各种错误。排错的时候,基本发现都是自己数据的问题。所以建议先用PASCAL VOC训练,训练没问题之后,你再去训练自己的数据集。最终根据设置train是否为True选择对应的Train阶段的预处理还是推理阶段的预处理方法。其中train.txt和val.txt记录的是train和val过程中使用的图片名称。,会从一个非常小的学习率慢慢的增加到我们指定的初始学习率,然后再慢慢地下降。对于验证过程,其实和Train阶段的预处理,其实是差不多的。
2023-01-30 15:14:47
268
原创 深度学习部署:多线程基础学习(1)
这种方法的好处是infer_worker()函数中可以通过this访问变量或者直接访问变量,相对于static函数来说更方便些。只要线程没有启动,一定不能join。当线程t没有启动时, 去执行t.join会异常。若线程启动了,如果join 不加,会在析构时提示异常,出现core dumped。来解决,但这种方式并不是一种较好的选择,因为需要多传入self参数。避免错误执行join操作,程序出现异常。join的作用等待线程执行介绍, 完整的启动线程程序。,说明join确实是起到等待线程结束的作用。
2023-01-03 16:29:41
366
1
原创 BEV视觉3D感知算法梳理
这部分的实现逻辑与传统的Transformer的Decoder的逻辑类似,利用Cross-Attention模块将生成的3D空间下的Object Query和具有3D空间位置的语义特征进行交互,得到Output Embedding,然后利用FFN网络充当3D检测头实现最终的3D检测结果。
2023-01-03 13:40:10
1284
原创 机器视觉2D/3D标注工具汇总
标注工具是处理原始数据的第一关,无论是检测任务、分割任务还是3D感知、点云等,都需要制作真值来监督网络学习。企业级的标注方案一般通过内部的自研工具或专业标注团队完成,而对于个人或小的团队来说,一款开源好用的标注工具则至关重要。
2022-12-30 16:30:43
619
2
原创 传统卷积与Transformers 优缺点对比
近两年Transformer如日中天,刷爆各大CV榜单,但在计算机视觉中,传统卷积就已经彻底输给Transformer了吗?
2022-12-30 15:52:23
1627
原创 Labelme分割标注的使用(非常好)
博客转自于: Labelme分割标注软件使用这里建议大家按照我提供的目录格式事先准备好数据,然后在该根目录下启动labelme(启动目录位子,因为标注json文件中存储的图片路径都是以该目录作为相对路径的)1.1 创建label标签文件虽然在labelme中能够在标注时添加标签,但我个人强烈建议事先创建一个label.txt标签(放在上述位置中),然后启动labelme时直接读取。标签格式如下:每一行代表一个类型的名称,前两行是固定格式__ignore__和_background_都加上,否则后续使用
2022-12-30 14:58:55
771
1
原创 权值衰减weight decay的理解
权值衰减weight decay即L2正则化,目的是通过在Loss函数后加一个正则化项,通过使权重减小的方式,一定减少模型过拟合的问题。L1正则化:即对权重矩阵的每个元素绝对值求和,λ∗∣∣W∣∣λ * ||W||λ∗∣∣W∣∣1/2∗λ∗∣∣W∣∣21/2∗λ∗∣∣W∣∣2注意:正则化项不需要求平均数,因为权重矩阵和样本数量无关,只是为了限制权重规模。L1损失函数。
2022-12-29 14:51:54
1232
原创 model.state_dict(),modules(),children(),named_children(),parameters() 详解
网络 Net 本身是一个nn.Module的子类,包含了backbone和classifierNet(nn.Module子类)backbone和 classifier(Sequential,nn.Module子类),是 Net 的子网络层具体的网络层如 conv,relu,batchnorm 等(nn.Module子类),是 backbone 或 classifier 的子网络层。
2022-12-28 13:36:01
112
原创 目标跟踪MOT15数据集说明
目标检测文件中内容见下图,第一个值表示目标出现在第几帧,第二个值表示目标运动轨迹的ID号,在目标信息文件中都为-1,第三到第六个值为标注bounding box的坐标尺寸值,第七个值为目标检测表示的confidence score,最后三个数字表示行人实际坐标中的3D位置。MOT15数据集的文档组织格式,所有视频被按帧分为图像,图像统一采用jpeg格式,命名方式为6位数字如:000001.jpg,目标和轨迹信息标注文件为CSV格式。在本例中,序列的第一帧中有2个行人,其身份标签为1,2。
2022-12-26 22:47:01
171
原创 卡尔曼滤波在非线性系统中的扩展
卡尔曼滤波器在1960年被卡尔曼发明之后,被广泛应用在动态系统预测。在自动驾驶、机器人、AR领域等应用广泛。卡尔曼滤波器使用类似马尔可夫链的性质,假设系统状态只与上一时刻的系统状态有关。基础的卡尔曼滤波器使用线性方程对系统状态进行建模。为了能够应用到非线性系统,扩展卡尔曼滤波器利用泰勒展开,并只保留一次项,抛弃高次项,将非线性关系近似为线性关系。这一篇文章对扩展卡尔曼滤波器(r)的具体步骤和公式进行讲解。[1]:kalman滤波与目标跟踪1: kalman滤波理论详解。
2022-12-26 15:42:41
351
基于yolov5的PTQ和QAT量化完整代码
2023-03-18
图像分割FCN算法的源码及项目实战
2023-02-04
YOLOX原理及无人机检测项目实战源码
2022-11-04
模型轻量化-YOLOv5无损剪枝
2022-10-28
基于yolov5的目标检测和双目测距源码
2022-10-28
pytorch多GPU并行训练教程及源码
2022-10-16
基于yolov5的知识蒸馏实战源码
2022-10-13
makefile从入门到项目编译实战
2022-10-13
图像分类MobileNet系列源代码:v1-v3
2022-07-05
深度学习图像分类花朵数据集
2022-07-05
完整的GAN网络讲解及源码
2022-06-24
基于UNet的视网膜血管分割源码
2022-06-13
unet 医学影像分割源码
2022-06-13
基于Dlib训练一个自定义目标检测器并进行手势操控
2022-06-12
TensorFlow模型优化工具包源码及讲解
2022-06-12
目标检测Faster-RCNN源码
2022-05-31
基于3D卷积的视频分析与动作识别
2022-05-25
基于keras的1D CNN时间序列分析
2022-05-23
基于Detectron2和LSTM的人体动作识别
2022-05-21
基于Java的Android OpenCV安装配置及人脸识别源码
2022-05-21
Opencv停车位识别源码及教程
2022-05-21
使用Tensorflow Lite Model Maker 创建边缘端机器学习模型
2022-05-19
国内车牌识别数据集及源码
2022-05-16
双目相机标定源代码及工具
2022-05-12
Pytorch使用预训练模型进行图像分类
2022-05-07
使用Mediapipe制作抖音特效
2022-05-06
TensorFlow Lite:针对边缘端模型优化
2022-05-05
经典图像分类-目标检测-图像分割PPT合集
2022-04-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人