自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 收藏
  • 关注

原创 一文读懂Swin-Transformer

Swin Transformer是2021年微软亚洲研究院发表在ICCV(ICCV 2021 best paper)上的一篇文章。Swin Transformer是继ViT之后,Transformer模型在视觉领域的又一次碰撞。该论文一经发表就已在多项视觉任务中霸榜,值得大家仔细研读。Swin Transformer可能是CNN的完美替代方案。

2023-09-09 10:31:51 853

原创 一文看懂DETR(三)

1.输入图像经过CNN的backbone获得32倍下采样的深度特征;2.将图片给拉直形成token,并添加位置编码送入encoder中;3.将encoder的输出以及Object Query作为decoder的输入得到解码特征;4.将解码后的特征传入FFN得到预测特征;5.根据预测特征计算cost matrix,并由匈牙利算法匹配GT,获得正负样本;6.根据正负样本计算分类与回归loss。前两章,我们分析了训练步骤的1,2,3。

2023-09-04 11:05:18 257

原创 一文看懂DETR(二)

1.输入图像经过CNN的backbone获得32倍下采样的深度特征;2.将图片给拉直形成token,并添加位置编码送入encoder中;3.将encoder的输出以及Object Query作为decoder的输入得到解码特征;4.将解码后的特征传入FFN得到预测特征;5.根据预测特征计算cost matrix,并由匈牙利算法匹配GT,获得正负样本;6.根据正负样本计算分类与回归loss。

2023-08-31 19:55:56 362

原创 一文看懂DETR(一)

DETR是Meta AI研究院提出的CV通用框架,论文中将其应用于目标检测与全景分割。DETR舍弃了以往一阶段,二阶段检测模型的先验trick,比如anchor的设置,nms极大值抑制,也没有多尺度特征融合(由于Swin transformer在其后发表)以及复杂的数据增强,其整个pipeline简洁,直观,得到后人称赞并应用于cv各个task中。总结来说,DETR将目标检测任务(分类与回归)看作集合预测问题。

2023-08-31 09:24:01 581

原创 一文看懂Vision Transformer(VIT)

Transformer早在2020年就在NLP领域大放异彩,并通过BERT等无监督预训练技术将NLP推上一个新的高度。VIT受其启发,尝试将Transformer应用到CV领域,并通过JFT数据预训练,在ImageNet1K上能够达到88.55%的准确率。如今,Transformer在CV,NLP,多模态等领域均已达到最先进水平,值得大家学习并应用于工作中。接下来的时间,将记录我在CV领域大模型的学习历程,欢迎大家一起讨论,互相学习。

2023-08-23 11:25:19 386

原创 YOLO v8目标跟踪详细解读(二)

卡尔曼滤波(kalman Filtering)是一种利用线性系统状态方程,通过系统输入观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。卡尔曼滤波在测量方差已知的情况夏能够从一系列存在测量噪声的数据中,估计动态系统的状态。在目标跟踪中,将检测框的坐标看作观测数据,通过状态转移矩阵与状态协方差矩阵来更新下一帧的最优估计。

2023-08-14 17:06:20 1682

原创 YOLO v8目标跟踪详细解读(一)

目标跟踪现阶段是强烈依赖目标检测结果的,主流的目标跟踪pipeline,简单的总结一下:首先,目标检测模型输出的检测框是我们跟踪的对象。假设我们在第一帧确定了跟踪对象,即给定检测框id,那当检测模型输出第2帧检测结果,我们需要将第2帧的检测框与第1帧检测框的id进行匹配。那么匹配的过程是怎样的呢?有人说,直接用两帧检测框的IOU去匹配呗,将IOU看作cost_matrix,利用匈牙利算法去匹配两帧的id。

2023-08-11 14:36:40 7215 3

原创 目标检测label assignment:A Dual Weighting Label Assignment Scheme

在目标检测中,为了与NMS兼容,一个好的检测器应该能够预测具有较高分类得分和精确位置的box。然而,如果所有的训练样本都被同等处理,两个头部之间就会出现错位:类别得分最高的位置通常不是回归对象边界的最佳位置。这种失调会降低检测器的性能,特别是在高IoU指标下。soft label assignment是通过加权损失以软标签的方式处理训练样本,试图增强cls和reg头之间的一致性。

2023-04-03 14:33:54 602 1

原创 一文看懂YOLO v8

2023年,YOLO系列已经迭代到v8,v8与v5均出自U神,为了方便理解,我们将通过与v5对比来讲解v8。想了解v5的可以参考文章。

2023-01-30 20:56:00 16886 7

原创 如何删除图片数据中的重复数据

我们使用result_dict来寄存图片地址与图片hash值,其中key为hash值,value为图片地址,这样我们在遍历dict时,就可以根据hash值找到对应的图片地址,并删除冗余图片。平均哈希算法是三种Hash算法中最简单的一种,它通过下面几个步骤来获得图片的Hash值,这几个步骤分别是(1) 缩放图片;我们在工作中经常这种情况,leader给你一堆数据,让你用这些没有清洗过的数据完成项目。得到图片的ahash值后,比较两张图片ahash值的汉明距离,通常认为汉明距离小于10的一组图片为相似图片。

2023-01-12 11:22:42 947

原创 Repoptimizer论文理解与代码分析

上一篇介绍了,RepVGG存在量化问题,Repopt通过将先验融入优化器中,统一训练与测试模型解决了其量化不友好的问题。

2022-12-01 16:03:39 934

原创 RepVGG论文理解与代码分析

最近,看到很多轻量化工作是基于RepVGG改进而来,决定重新回顾一下RepVGG,并在此记录一些理解与心得。论文地址:https://arxiv.org/abs/2101.03697。

2022-12-01 10:43:33 974 2

原创 mmpose关键点(四):优化关键点模型(原理与代码讲解,持续更新)

这种影响会随着特征尺寸的变大而更剧烈。Removing the Bias of Integral Pose Regression提出debias方法消除Softmax软化产生的影响。具体而言,假设响应值是符合高斯分布的,我们可以根据响应最大值点两倍的宽度,把特征图划分成四个区域:我们知道一旦经过Softmax,原本都是0值的2、3、4象限区域瞬间就会被长长的尾巴填满,而对于第1象限区域,由于响应值正处于区域的中央,因此不论响应值大小,该区域的估计期望值都会是准确的。让我们回到Softmax公式:

2022-10-27 17:48:21 4010 5

原创 Generalized Focal Loss(GFLv1)论文理解与代码分析

GFLv1是较早提出在训练和推理过程中,质量评估和分类不一致问题的论文。质量与分类往往被独立训练,(yolo输出中,有独立的一个维度用于目标的置信度评估,在训练时与分类解耦;fcos,atss则利用centerness作为质量评估,同样也与分类解耦),但在test过程中却被相乘联合使用。监督只分配给正样本,但有时候负样本可能会提供更高质量的监督,必然会存在一部分分数较低的“负样本”的质量预测是没有在训练过程中有监督信号的,有就是说对于大量可能的负样本,他们的质量预测是一个未定义行为。

2022-10-11 11:48:42 2348 2

原创 关键点论文详解之:Human Pose Regression with Residual Log-likelihood Estimation(RLE)

做过关键点的同学都知道,一般Heatmap-based方法在性能上会优于Regression-based的方法。因为Heatmap-based方法通过显式地渲染高斯热图,让模型学习输出的目标分布,将输入图片滤波成为最终希望得到的高斯热图即可,这极大地简化了模型的学习难度,并且这种方式规定了学习的分布,相对于除了结果以外内部一切都是黑盒的Regression-based方法,对于各种情况(遮挡、动态模糊、截断等)要鲁棒得多。

2022-08-24 19:02:29 1465

原创 生成网络之Flow-based Generative Model

最近看关键点论文时发现,可以使用Flow-based生成网络去模拟生成真实潜在误差概率分布,从而增加Regression-based信息获取,大幅提高Regression-based方法的AP。为了真正搞懂这篇论文,我详细了解了Flow-based Generative Model的相关知识,并记录在这里,有不对的地方还请大佬指点。

2022-08-24 11:28:03 993

原创 mmpose关键点(二):构建自己的训练集

mmpose一般使用如同coco数据json文件格式读取数据与标注,但是当我们用labelme去标注自己的训练集时,只能获取每张图片的标注json文件。接下来,我们简单介绍coco的关键点json文件,并教大家如何获得自己训练集的json文件。

2022-08-19 11:37:21 3872 12

原创 mmpose关键点(三):轻量型Lite-HRNet与onnx输出

最近,项目中需要在终端使用关键点检测,对于模型性能要求相对严苛。在这里我将讲解并记录模型优化的过程,希望对大家有所帮助。由于终端算力有限,在内存速度与性能需要权衡好,我选择轻量型关键点性能较好的Lite-HRNet作为模型的backbone。下面,将对Lite-HRNet模型与如何输出onnx模型详细讲解。...

2022-08-17 16:51:50 1692 2

原创 mmpose关键点(一):评价指标(PCK,OKS,mAP)

由于,近期项目需要引入关键点做一些方向逻辑的判断,在此记录一些实验与经典论文方法。首先,我们先了解一下关键点估计的评价指标。

2022-08-10 09:23:23 6438 5

原创 yolov5模型压缩之模型剪枝

稀疏剪枝

2022-07-16 15:08:07 12397 27

原创 mmcls多标签分类实战(三):多标签分类指标

前面两篇分别介绍了制作多标签数据,resnet多标签分类。接下来,我将介绍多标签分类的指标并分享一些关于多标签分类的细节,即如何操作可以提点。在此之前,想提一下损失函数cross_entropy与binary_cross_entropy的区别交叉熵的数学公式如上所示,P表示target,Q表示prediction,H就是交叉熵损失。在pytorch中可以调用 F.cross_entropy(input, target)来实现交叉熵损失的计算。其实分解一下就是下面的公式,先把prediction按照最后的

2022-06-25 15:57:01 3145 1

原创 mmcls多标签分类实战(二):resnet多标签分类

上一章讲了如何制作数据集,接下来我们使用mmcls来实现多标签分类。Config配置mmcls是通过config来配置整个网络结构的。如下,我使用的是resnet18,因为数据中有5个属性,所以输出的num_classes=5。需要注意的是,head要选用head=dict(type=‘MultiLabelLinearClsHead’)。这是因为多标签分类,在进入loss前,应该用sigmoid激活,将pred的值归一化。如果使用softmax,会出现属性互斥的现象(因为pred在dim=1上,sum=1

2022-06-16 15:30:07 3245 3

原创 mmcls多标签分类实战(一):制作多标签数据

Multi-Label:多标签分类指当图片或者文本存在多个属性时,多标签分类能够对一张图片中的多个属性进行分类识别。下面将用mmclassification框架完成一次多标签分类实战。Multi-class与Multi-label的区别首先,我们需要构建数据集,需要注意的是,多标签分类的数据集与多分类数据不同。Multi-class的label中只存在一个‘1’,而Multi-label中对应多个属性,label可以有多个‘1’。Multi-class构建数据集比较简单,只需要将不同类别的图片归纳到不同文

2022-06-16 15:04:21 4589 3

原创 mmcv(mmdetection)源码理解:optimizer(SGD,momentum,Nesterov)

optimizer

2022-05-25 15:30:03 2415 1

原创 一文看懂YOLO v5

YOLOv5在比赛与落地中运用广泛,它可以通过chaneel与layer的控制因子来根据落地要求灵活配置模型。与YOLO系列1-4不同的是YOLOv5对正样本的定义:其采用了跨领域网格,并在不同输出层匹配,极大的扩增了正样本anchor,加速模型收敛速度并提高模型召回率。为了大家更好的理解并使用yolov5,本文将结合代码从不同维度进行分析。网络结构YOLOv5的整体结构与YOLOv4相差不大,有兴趣的同学可以查看我之前总结的yolo系列文章YOLOv4。YOLOv5的结构如下:Backbone:

2021-08-15 21:46:18 13201

原创 一文看懂YOLO v4

很久没有更新文章了,在YOLO v3之后,目标检测方向又相继出现很多好文章,为了方便回顾以及大家相互学习,今天总结一下YOLO v4。在此之前,我总结过yolo系列的文章与代码解析,有兴趣的同学可以查看YOLO v3。Yolov4论文名:《Yolov4: Optimal Speed and Accuracy of Object Detection》Yolov4论文地址:https://arxiv.org/pdf/2004.10934.pdf1.网络结构从这儿偷张图,这个图可以很直观地展示yolov

2021-08-15 14:21:23 3927

原创 python 前缀和总结

前缀和是数据结构与算法中比较重要的知识,前缀和经常可以结合哈希表解决很多有意思的问题。为了方便学习,在这里总结leetcode中出现的前缀和问题。525. 连续数组给定一个二进制数组 nums (只含有0,1), 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0

2021-06-03 11:18:54 3742 1

原创 python 数组中两个数的最大异或值

给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。进阶:你可以在 O(n) 的时间解决这个问题吗?示例 1:输入:nums = [3,10,5,25,2,8]输出:28解释:最大运算结果是 5 XOR 25 = 28.这道题比较有意思,用到前缀树与贪心思想将复杂度降到O(n)1.构建二进制前缀树具体来说就是利用数的二进制表示,从高位到低位构建一棵树(因为只有0和1 两个值,所以是一棵二叉树),每个从根节点到叶

2021-05-17 11:13:53 786 1

原创 python 最小堆最大堆

堆本质是完全二叉树,最小堆要求节点元素不大于左右叶子节点元素,最大堆要求节点元素不小于左右叶子节点元素。下面通过例子来讲解最大堆。给定一个列表array=[16,7,3,20,17,8],对其进行堆排序。首先根据该数组元素构建一个完全二叉树,得到根据最大堆的定义要求,我们需要让节点元素不小于左右叶子节点元素,所以我们从最后一个非叶节点开始依次向上调整元素位置。构造初始堆,则从最后一个非叶节点开始调整,调整过程如下:第一步: 初始化大顶堆(从最后一个有子节点开始往上调整最大堆)20和16交换后

2021-05-15 13:44:14 525

原创 pytorch->onnx->ncnn模型移植

为了将pytorch训练出的人脸识别模型更好地部署到树莓派中,这里选用ncnn前向推理框架加速模型推理过程。pytorch -> onnxpytroch1.0以上的版本是自带onnx的,所以转换比较方便,直接用torch.onnx.export就能输出.onnx文件。为了保证pytorch与onnx的输出一致,我们用相同的输入放入torch与onnx模型中,比较它们各自输出,程序如下。import torch.onnximport torchvisionfrom model1 import

2021-04-22 10:25:13 7339 3

原创 二叉搜索树(寻找,插入,删除)

二叉搜索树二叉搜索树是特殊的二叉树。若一颗二叉树,它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 我们把这样的二叉树成为二叉搜索树,它的左、右子树也分别为二叉搜索树。二叉搜索树的例子:二叉搜索树的查找给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。如题返回解题思路:给定二叉搜索树,我们只需要在二叉搜索树的结构里

2021-03-18 11:17:18 650

原创 PCA(主成分分析)原理详解与python实现

PCA是一种数据降维的方法。当我们在处理一些高维且冗余数据时,可以使用PCA对数据进行降维,去除冗余信息,提高运行速度。如上图所示,左边3D图像,存在大量冗余数据,我们把这样的数据转移到2D可以更加清晰的观察数据本身,同时降低计算复杂度。1.PCA原理详解如果我们要对上图二维空间的特征点做特征降维,那怎样的降维结果对我们来说是好的呢?其实,二维特征降维就是找坐标系投影,如图可以看到红色箭头与黄色箭头两个坐标轴。如果我们将特征映射到黄色轴,二维特征点将会大量重叠在黄色轴上,损失大量原始信息是我们不想见.

2021-01-14 16:47:38 3516 1

原创 Docker(四):镜像操作

docker的镜像是容器的基石列出镜像sudo docker images [OPTIONS][REPOSITORY]-a:显示所有镜像,默认不显示中间层的镜像-no-trunc:指定不使用截断的方式显示镜像,默认情况会截断id-q:只显示镜像的唯一ID查看镜像:sudo docker inspect [OPTIONS] CONTAINER|IMAGE 删除镜像:sudo docker rmi [OPTIONS] IMAGE [IMAGE...]-f:强制删除镜像,可以在存在相关

2020-12-04 20:30:33 285 1

原创 docker搭建Ubuntu16.04+opencv2.4.11环境(已经上传仓库可直接pull)

首先,利用docker拉去ubuntu16.04的镜像sudo docker pull ubuntu:16.04开启交互式容器sudo docker run -i -t 9499db781771 /bin/bash进入容器并更新安装vimapt-get install vim利用vim换源mv /etc/apt/sources.list /etc/apt/sources.list.backvim /etc/apt/sources.list把下面的指令粘贴到sources.li

2020-12-04 10:57:16 749 3

原创 Docker(三):守护式容器及其操作

什么是守护式容器:交互式容器在命令结束后停止,当我们需要长期运行的容器来提供服务时,就需要docker的守护式容器。守护式容器 能够长期运行,没有交互式会话,非常适合运行应用程序。以守护形式运行容器:sudo docker run -i -t IMAGE /bin/bash在运行交互式容器时,以ctrl+p ctrl+q的组合键来退出交互式容器的bash,这样容器就会在后台运行。我们重新启动容器,然后按ctrl+p ctrl+q的组合键退出交互式容器,通过docker ps可以发现我们重启的容

2020-12-02 10:06:47 615

原创 Docker(二):容器的基本操作

启动容器sudo docker run IMAGE [COMMAND] [ARG...]IMAGE:启动容器所使用的操作系统镜像;COMMAND ARG:容器启动后运行的命令及其参数。启动交互式容器:sudo docker run -i -t IMAGE /bin/bash-i:告诉docker的守护进程为容器始终打开标准输入-t:告诉docker为创建的容器分配一个伪tty终端。这样新创建的容器才能启动交互式的shell。exit即可退出此环境查看容器:sudo docker

2020-12-01 20:30:38 230

原创 Docker(一):安装

Doker简介Docker的目标:提供简单轻量的建模方式职责的逻辑分离环境移植,开发测试部署使用同一个环境,提高开发生命周期Docker的使用场景:1.使用Docker容器开发,测试,部署服务2.创建隔离的运行环境3.搭建测试环境Docker的基本组成Docker客户端/守护进程:Docker是C/S架构的程序,docker的客户端向docker的服务器端即守护进程发出请求,守护进程处理完所有的工作并返回结果。docker客户端对服务器端的访问既可以在本地也可以远程。Docker I

2020-12-01 19:16:43 394

原创 pytorch 去除state_dict()中的某些层

在finetun时,我们经常需要对pretrain model进行裁剪,到底如何做呢,下面直接上代码import torchfrom collections import OrderedDictimport osimport torch.nn as nndef copyStateDict(state_dict): if list(state_dict.keys())[0].startswith('module'): start_idx = 1 else:

2020-11-25 11:27:01 2948 1

原创 sudo: ./exepy.sh: command not found

在linux中执行文件时出现sudo: ./exepy.sh: command not found错误时,看一下权限是否可以执行,如果不可执行会出现这个错误。我们只需要改变文件权限sudo chmod 777 exepy.sh

2020-11-22 20:41:23 244

原创 linux c++ opencv4安装指南

python的opencv安装很简单,通过pip就可以完成,但是c++在安装opencv4的时候需要注意一些。下面给出linux下安装opencv4的步骤。1.安装依赖sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev2.下载

2020-11-22 15:48:45 4384 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除