- 博客(507)
- 资源 (77)
- 收藏
- 关注
原创 知识蒸馏综述及代码
全称:Distilling the Knowledge in a Neural Network发表:NIPS14最经典的,也是明确提出知识蒸馏概念的工作,通过使用带温度的softmax函数来软化教师网络的逻辑层输出作为学生网络的监督信息,使用来衡量学生网络与教师网络的差异,具体流程如下图所示(来自Knowledge Distillation A Survey)对学生网络来说,一部分监督信息来自hard label标签,另一部分来自教师网络提供的soft label。
2024-02-07 10:16:38 157
原创 pytorch 利用Tensorboar记录训练过程loss变化
import ostry:except:passtry:num = 5else:num = 15except:passplt.cla()(1) 首先利用类的构造函数__init__, 实例化的对象self.writer,并将网络结构图添加到self.writer中。其中__init__方法接收的参数包括,保存log的路径log_dir以及模型model和输入的shapetry:except:pass(2) 记录每个epoch的训练损失loss以及验证val_loss。
2024-02-02 23:43:54 1199
原创 python tqdm进度条详解
是 Python 进度条库,可以在 Python 长循环中添加一个。(optional);,用于定义进度条的具体格式,所包含的具体数据信息;基于新的bar_format格式,重新封装了。,是一个快速、扩展性强的进度条工具库。下面主要介绍这个参数的具体用法;如果没有传入可迭代对象,可以使用。传参,在实际中应用的更加普遍。进行了设置,没有使用原有的。格式, 简化了显示内容。用户只需要封装任意的。iterable为空。的参数,并且全部都是。前缀信息(desc)代码中将tqdm中的。指定迭代总数,并配合。
2024-02-02 22:20:49 1358
原创 语义分割(3):损失函数解析
容易学习的样本模型可以很轻松地将其预测正确,模型只要将大量容易学习的样本分类正确,loss就可以减小很多,从而导致模型不怎么顾及难学习的样本,交叉熵损失函数忽略了预测值和目标值之间的相似性,并且对于极端的像素值不够敏感。,这种损失会逐个检查每个像素,将对每个像素类别的预测结果(概率分布向量)与我们的。,对于语义分割更多的是前景区域的样本远小于背景区域。其中(1),(2)实现的是log_softmax计算,(3)实现的是。, 经过以上3步计算,得到最终的交叉熵损失的计算结果。损失函数是像素级别的。
2024-01-27 15:57:19 1232
原创 语义分割(2) :自定义Dataset和Dataloader
自定义Dataset需要继承Dataset需要实现__len__和方法,其中__len__返回样本的总数量,方法,根据传入的index,返回对应的图片和标签图片mask主要对图片和标签进行数据增强Dataset的完整代码实现如下:import cv2# 从文件中读取图像# 数据增强# 转化成one_hot的形式# 在这里需要+1是因为voc数据集有些标签具有白边部分# 我们需要将白边部分进行忽略,+1的目的是方便忽略。# 获得图像的高宽与目标高宽# 对图像进行缩放并且进行长和宽的扭曲。
2024-01-26 22:40:19 1061
原创 python高级(1): 迭代器详解
在Python中从头开始构建迭代器很容易。我们只需要实现这些方法__iter__()和__next__()。__iter__()方法需要返回迭代器对象, 最简单直接返回self,也可以返回新的可迭代对象。如果需要,可以执行一些初始化。__next__()方法必须返回序列中的下一项。在到达终点时,以及在随后的调用中,它必须引发这里,我们展示了一个示例,通过定义一个迭代器,手动实现python的range# 1. 每执行一次next,需要返回一个值。
2024-01-21 16:55:14 882
原创 日志记录logging
比如在general.py中定义logger对象LOGGERimport osimport sys= "utf-8":try:import ioelse:")首先通过设置日志级别(在主进程中使用info级别,其他进程error级别),通过将信息打印到控制台,并绑定输出的信息样式Formatter,然后将handler绑定到logger对象上定义的LOGGER 可以全局使用,包括等等中使用,使用时候从general中导入LOGGER即可。
2024-01-20 18:29:25 912
原创 hasattr、getattr、setattr
在Python中,hasattr()getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询。这些函数提供了一种方便的方式来检查对象是否具有特定属性,获取属性的值,以及设置属性的值。
2024-01-20 15:40:18 372
原创 语义分割(1): 前后处理代码详解
所以预测结果部分,四周的padding部分就需要截取掉, 上下左右padding的大小为: padding 大小 =获得每个像素的类别预测概率最大的索引,也就是获得对应类别的索引。,计算得到每个像素的颜色值array, 大小为。遍历所有类别,为各个类别位置,赋予对应的像素值。: 模型输入指定的图片大小, 其中通过。,经过letterbox后获得指定。, 得到分割后的3通道的图片。对原始备份,用于可视化绘图。, reshape为。
2024-01-19 15:31:56 1029
原创 RFAConv在yolov8上使用代码详解(助力yolov8再涨2个点)
卷积神经网络通过使用具有共享参数的卷积运算显著降低了模型的计算开销和复杂性。在LeNet、AlexNet和VGG等经典网络的驱动下,卷积神经网络现在已经建立了一个完整的系统,并在深度学习领域形成了先进的卷积神经网络模型。作者在仔细研究了卷积运算之后获得了灵感。对于分类、目标检测和语义分割任务,一方面,图像中不同位置的对象的形状、大小、颜色和分布是可变的。在卷积操作期间,卷积核在每个感受野中使用相同的参数来提取信息,而不考虑来自不同位置的差分信息。这限制了网络的性能,这已经在最近的许多工作中得到了证实。
2024-01-18 10:43:36 273
原创 pytorch 通用训练代码讲解(very good)
网络从0开始的训练效果会很差,因为权值太过随机,特征提取效果不明显,因此非常、非常、非常不建议大家从0开始训练!还有,如果你用了cuda,别忘了cuda的随机数种子。,在实际的项目中也经常使用到B导仓库的代码,再次对B导表示敬意,本博客主要对其中训练代码进行解读,对应为。具体来说,每次更新参数时,会对模型参数进行EMA处理,从而。此外,EMA还可以用于计算滑动平均梯度,用于优化器的更新,,用的学习率,迭代次数,batch size 都是一样?的代码,写的简介明了,对于初学者。
2024-01-14 23:07:16 381
原创 F-score 和 Dice Loss 原理及代码
通过看开源图像语义分割库的源码,发现它对Dice Loss的实现方式,是直接调用F-score函数,换言之,Dice Loss是F-score的特殊情况。
2024-01-13 23:41:33 949
原创 语义分割(4): miou指标计算详解
两方面的因素,做到了对于两者的调和,即:既要“求精”也要“求全”,做到不偏科。可作为语义分割系统性能的评价指标。a和b中每个元素代表。由于是多类别,没有负样本,因此。): 把正样本成功预测为正。):把负样本错误地预测为正。):把正样本错误的预测为负。):把负样本成功预测为负。,也就是正确预测的像素个数。为0 ,即没有所谓的负样本。精确率或者精度,指的是。
2024-01-13 22:22:31 1625
原创 yolov8 PTQ和QAT量化实战(源码详解)
量化():是指将高精度浮点数(FP32)转换为低精度(8bit或4bit)整数的过程,它是模型部署中的一种非常重要的优化方法,可以在较少的精度损失下,大幅提供神经网络的效率和性能。目前主流的神经网络量化方式有PTQ和QATPTQ是训练后量化(),无需数据集和训练,直接量化模型权重QAT是量化感知训练(),量化后需要在数据集上继续微调训练。QAT过程中,我们首先需要选择哪些层需要进行finetune训练,并利用FP32对应层的输出作为监督进行训练。
2024-01-07 18:09:34 1422
原创 yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏
特别地,在COCO数据集上对MAP中的RetinaNet检测器(resnet50主干)获得了3.4%的性能提升,在Cityscapes数据集上, 针对mIoU指标,PSPNET(resnet-18 backbone)获得5.81%的性能提升。大部分的KD方法都是通过algin学生网络和教师网络的归一化的feature map, 最小化feature map上的激活值的差异。MGD是一种真正通用的基于特征feature的知识蒸馏方法,它可以用于各种任务,包括图像分类,目标检测,语义分割和实例分割。
2023-12-27 17:33:07 3084 17
原创 Featured Based知识蒸馏及代码(3): Focal and Global Knowledge (FGD)
知识蒸馏已经在图像分类领域取得了不错的效果,然而,目标检测比较复杂,大部分知识蒸馏算法效果不佳。本文指出,在目标检测领域,教师和学生的特征在不同区域差异很大,尤其是在前景和背景区域。如果我们同等地蒸馏它们,特征图之间的不均匀差异将对蒸馏产生负面影响。因此,我们提出(FGD),Focal 蒸馏将图像分离出前景和背景,让学生网络更加关注教师网络的局部的关键像素和通道,Global蒸馏可以重建不同像素之间的关系并将知识从教师迁移到学生,补偿Focal蒸馏缺失的全局信息。由于本文提出的蒸馏算法是。
2023-12-23 19:06:23 546
原创 Bash 脚本学习
bin/bash# 无限循环与强制退出while true # 可使用 : 代替truedoprintf "条件true开始打印 \n"thenprintf "条件true,强制打印结束 \n"breakfidone# 有限循环与自动退出int=0while (( $int
2023-12-21 20:36:40 610
原创 Featured Based知识蒸馏及代码(2):Channel-wise Distillation (CWD)
知识蒸馏用于训练紧凑型(轻量)模型被证明是一种简单、高效的方法,轻量的学生网络通过教师网络的知识迁移来实现监督学习。大部分的KD方法都是通过algin学生网络和教师网络的归一化的feature map, 最小化feature map上的激活值的差异。与以往的方法不同,本文提出了将每个通道的特征图归一化来得到软化的概率图。通过简单地最小化两个网络的通道概率图之间的散度,蒸馏过程更关注每个通道最显著的区域,这对于密集预测任务很有价值。本文对几个密集预测任务进行了实验,包括语义分割和目标检测。
2023-12-19 00:07:50 375
原创 KL散度、CrossEntropy详解
在机器学习和深度学习中,在损失函数中,经常会遇到KL散度交叉熵等概念。信息量熵交叉熵相对熵(KL散度)以及交叉熵损失函数, 这几个概念可以说是递进的关系,后面的概念(KL散度、交叉熵损失等)是建立在前面(信息量、熵)等原理得到的。
2023-12-16 19:03:45 774
原创 轻松实现结构化剪枝DepGraph(2)
MagnitudePruner是一种利用权值大小定位冗余参数的经典算法,相关技术发表于”一文。在文章的开篇,作者讨论了一种神经网络中最基础的依赖关系,可视化如下:在这张图中,我们可以找到两个卷积参数矩阵(Kernel Matrix):第一个卷积层以xix_ixi作为输入,xi1x_{i+1}xi1输出特征图;第二个卷积层以xi1x_{i+1}xi1作为输入,生成特征图xi2x_{i+2}xi2。
2023-12-16 14:09:51 266
原创 Featured Based知识蒸馏及代码(1): Masked Generative Distillation (MGD)
知识蒸馏已成功地应用于图像检测、分割、分类等任务。目前的蒸馏算法通常会通过模仿教师网络的输出以使学生特征具有更强的表征能力。我们认为提升学生的表征能力并不一定需要通过直接模仿教师实现。从这点出发,我们把模仿任务修改成了生成任务让学生凭借自己较弱的特征去生成教师较强的特征。在蒸馏过程中,我们对学生特征进行了随机 mask,强制学生仅用自己的部分特征去生成教师的所有特征,以提升学生的表征能力。MGD是一种真正通用的基于特征feature的知识蒸馏方法,它可以用于各种任务,包括图像分类目标检测。
2023-12-14 21:05:16 448
原创 nn.Sequential|nn.ModuleDict|nn.ModuleList 详解
(1)nn.Sequential、nn.ModuleList、nn.ModuleDict 类都继承自 nn.Module 类。使用需要将定义的层按循序放在括号中就可以;而使用需要将定义的层放在列表[]中,这一点和list是一样的;自然和字典一样,需要一个大括号{}, 再大括号中写入key和value,其中key为层名,value为我们定义的层。
2023-12-10 19:39:10 55
原创 pytorch网络的增删改
如果想把网络的连续几层给删除掉,比如classifier中最后的几层删除掉#------------------删除网络的最后多层--------------------------#可以看出classifier看出最后2层(5,6)被删除掉了可以使用切片的方式,保留不需要被删除的层重新赋给classifier模块,没有保留的就被删除了。
2023-12-10 17:27:46 578 2
原创 yolov6 3.0 网络详解
YOLO系列一直是工业应用中最受欢迎的检测框架,因为其在速度和精度之间的出色平衡。YOLO系列的开创性作品是YOLOv1-3,它开辟了一条单级探测器的新道路,以及后来的重大改进。YOLOv4将检测框架重组为几个单独的部分(主干、颈部和头部),并验证了当时的免费赠品包和特价包,以设计适合在单个GPU上训练的框架。目前,YOLOv5、YOLOX、 PPYOLOE、YOLOv7和最近的YOLOv8都是部署高效检测器的竞争对手。在本版本中,我们对网络设计和训练策略进行了大力更新。
2023-12-09 18:37:57 168
原创 yolov8与yolov5网络对比
针对C3模块,其主要是借助CSPNet提取分流的思想,同时结合残差结构的思想,设计了所谓的C3 Block,这里的CSP主分支梯度模块为BottleNeck模块,也就是所谓的残差模块。同时堆叠的个数由参数n来进行控制,也就是说不同规模的模型,n的值是有变化的。通过C3代码可以看出,对于cv1卷积和cv2卷积的通道数是一致的,而cv3的输入通道数是前者的2倍,因为cv3的输入是由主梯度流分支(BottleNeck分支)依旧次梯度流分支(CBS,cv2分支)cat得到的,因此是2倍的通道数,而输出则是一样的。
2023-12-09 18:14:50 752
原创 支持IOU,GIOU,DIOU,CIOU,SIOU,EIOU,Focal SIOU,WIOU等
【代码】支持IOU,GIOU,DIOU,CIOU,SIOU,EIOU,Focal SIOU,WIOU等。
2023-12-09 17:45:18 62
原创 pytorch 钩子函数hook 详解及实战
这4个 hook 中有是应用于 tensor 的,另外 3 个是针对nn.Module的。模型剪枝是一种通过减少神经网络中的参数来减小模型大小和计算量的技术。在实际应用中,模型剪枝可以有效地减小模型的体积,提高模型的推理速度,从而更适合在嵌入式设备上部署。在PyTorch中,可以使用钩子函数来实现模型剪枝。
2023-12-09 16:46:27 318
原创 设置随机种子保证网络可复现性
为什么使用相同的网络结构,跑出来的效果完全不同,用的学习率,迭代次数,batch size 都是一样?但是如果你使用的是PyTorch等框架,还要看一下框架的种子是否固定了。还有,如果你用了cuda,别忘了cuda的随机数种子。benchmark 设置False,是为了保证不使用选择卷积算法的机制,使用固定的卷积算法。但是,就算是固定的卷积算法,由于其实现不同,也可能是不可控制的,即相同的值,同一个算法卷积出来有细微差别,这个 flag 置为True的话,每次返回的卷积算法将是确定的,即默认算法。
2023-12-03 18:23:06 134
原创 机器视觉最全面试题总结
空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样a. 是普通的卷积过程(dilation rate = 1),卷积后的感受野为3b. 是dilation rate = 2的空洞卷积,卷积后的感受野为5。
2023-12-03 16:22:19 1559
原创 图像分割模型及架构选型介绍(MMSegmentation|sssegmentation等)
图像分割通过给出图像中每个像素点的标签,将图像分割成若干带类别标签的区块,可以看作对每个像素进行分类。图像分割是图像处理的重要组成部分,也是难点之一。随着人工智能的发展,图像分割技术已经在交通控制、医疗影像和人脸识别等多个领域获得了广泛的应用。图像分割是预测图像中每一个像素所属的类别或者物体。语义分割(semantic segmentation):可以理解为一个分类任务,对图片上每个像素进行分类。经典网络:FCN实例分割。
2023-11-26 18:22:36 1113
原创 美团YOLOv6量化部署实战方案
综上所述,本文基于 YOLOv6 V1.0 版本,以 YOLOv6s 为例探讨了基于重参数化结构设计的 2D 检测模型的量化难点和具体方案,在模型精度基本保持的前提下,通过量化加速,提升了约 40% 的 QPS。部署时的预处理优化则额外提升了 214%,极大地提升了工业部署吞吐能力。下表列出了本文尝试的方法及叠加效果。表10 本文使用的量化方案及效果对比本文使用的速度测试环境见表 11, 测试输入 batch size 为 1,尺寸为 640x640。表11 速度测试环境。
2023-11-26 16:38:28 308
原创 makefile 学习(5)完整的makefile模板
这里报错了,因为缺少了cuda的库文件,下面是查看自己cuda版本和找到在哪里的指令,以我的CUDA11.7为例, 去到目录下看看有什么库文件,我们当前需要一个cudaruntime的头文件。这里定义的名称参数 workspace 和 binary 是用来指定工作空间和生成的可执行文件名称的。在这个 Makefile 中,表示生成的可执行文件的名称。这些参数可以在 Makefile 中的其它规则中使用,例如在。表示的是工作空间的目录名称,来看看最后要完成的工程目录。
2023-11-25 22:42:53 296
原创 markdown 公式编辑
参考:https://blog.csdn.net/qq_36584673/article/details/117167861
2023-11-20 13:08:15 251
原创 深度学习loss总结:nn.CrossEntropyLoss,nn.MSELoss,Focal_Loss,nn.KLDivLoss等
交叉熵主要是用来判定实际的输出与期望的输出的接近程度,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出(target),概率分布q为实际输出(pred),HpqH(p,q)HpqPytorch中的CrossEntropyLoss()函数而是交叉熵的另外一种方式计算得到的:Pytorch中函数的主要是将和NLLLoss最小化负对数似然函数)合并到一块得到的结果(1)首先对预测值pred进行softmax计算:其中softmax。
2023-11-19 23:19:42 369
原创 轻松实现结构化剪枝DepGraph(1)
全文概要:本文主要分为两部分:第一部分介绍工具,一种通用的结构化剪枝库,并通过实例演示如何快速实现结构化剪枝;第二部分侧重Torch-Pruning的底层算法,主要讨论如何建模结构化剪枝中的层依赖,实现任意结构的剪枝。关于设计初衷:这是一个90%时间都花在工程上的工作,原本也是自己在github上写着自娱自乐的项目。在2019年在做某项目时,需要对完成多个不同架构网络的结构化剪枝,然而实际操作后发现每一个网络都需要重新写专用的代码,顿感不妙。众所周知懒才是第一生产力,于是咱就开始琢磨起了结构化剪枝的自动化。
2023-11-12 15:27:50 615
MIOU涨5.6个点:语义分割知识蒸馏源码
2024-03-20
yolov8 剪枝源码(集成多种剪枝策略)
2024-03-20
yolov8 多任务(目标检测+可行驶区域分割+车道线分割)
2024-01-07
SOTA 跟踪论文:BoTSORT-OCSORT-StrongSORT 等
2023-12-21
yolov8 tracking支持deepocsort、strongsort、bytetrack、botsort等各类跟踪器
2023-12-21
yolov8 知识蒸馏源码
2023-12-18
YOLO 知识蒸馏学习及落地部署(v5和v8)
2023-12-10
yolov8 PTQ和QAT量化源码
2023-12-09
零基础掌握yolov8剪枝
2023-11-26
车道线UFLD-v2落地量化部署代码
2023-11-26
mmsegmentation中文文档
2023-11-26
yolov7 ptq和qat训练及tensorrt部署
2023-09-16
yolov7旋转目标检测完整代码
2023-05-13
yolov8s模型进行剪枝源码
2023-05-13
基于Tensorrt的yolov5 实例分割源码
2023-04-18
各种卷积计算性能对比(Conv,DwConv,GhostConv,PConv,DSConv,DCNV)
2023-03-26
基于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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人