自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Pytorch 混合精度训练(Automatic Mixed Precision)原理解析

默认情况下,大多数深度学习框架(比如 pytorch)都采用 32 位浮点算法进行训练。Automatic Mixed Precision(AMP, 自动混合精度)可以在神经网络推理过程中,针对不同的层,采用不同的数据精度进行计算,从而实现节省显存和加快速度的目的。Pytorch AMP 是从 1.6.0 版本开始的,在此之前借助 NVIDIA 的 apex 可以实现 amp 功能。Pytorch 的 AMP 其实是从 apex 简化而来的,和 apex 的 O1 相当。AMP 里面的 Mixed

2022-08-15 08:08:05 2978 1

原创 目标检测中的数据类别不均衡问题总结

目标检测中的数据类别不平衡问题1. 问题概述在目标检测任务中存在各种各样的不均衡问题(参考 目标检测领域中的数据不均衡问题综述),这里仅仅针对数据类别不均衡问题,就是下表的前景类别间不均衡问题,也是我们常说的长尾数据问题。当然这个问题并非是检测任务才有,其他的比如分类任务也是一样存在的,可能有区别的是,对于检测来说,是每个类别的 bbox 数量而不是图片数量。2. 解决思路2.1 从数据着手从数据上来说,哪一类少就增加哪一类,但是如果要去收集代价可能又太大了,有时候甚至是不可能。重采样(r

2021-12-31 15:08:17 5843 2

原创 小目标检测常用解决方法

小目标检测1 定义通用的定义来自 COCO 数据集,定义小于 32x32 pix 的为小目标。2 小目标检测的难点可利用特征少现有数据集中小目标占比少小目标聚集问题首先小目标本身分辨率低,图像模糊,携带的信息少。由此所导致特征表达能力弱,也就是在提取特征的过程中,能提取到的特征非常少,这不利于我们对小目标的检测。另外通常网络为了减少计算量,都使用到了下采样,而下采样过多,会导致小目标的信息在最后的特征图上只有几个像素(甚至更少),信息损失较多。在 COCO 挑战赛上,小目标的检测精度(

2021-12-31 15:06:21 12843 1

原创 模型推理速度与硬件算力

模型推理速度与硬件算力1. 模型大小衡量指标参数量这里的参数量就是指模型的权重,对于 CNN 网络而言,主要就集中在 Conv 和 FC 层。参数量主要会体现在模型的物理大小(硬盘占用大小),在运行时也会体现在内存(显存)占用上,对运行速度没有直接的影响(间接的影响显然是存在的)。具体来说就是,如果模型硬盘占用很大,显然会影响最终软件的大小,如果模型内存占用很多,显然会影响一块显卡(或其他硬件)能同时加载模型的数量。计算量FLOPs(Floating Point Operations)浮点计

2021-11-28 09:43:54 3487

原创 CV 经典主干网络 (Backbone) 系列: CSPNet

CV 经典主干网络 (Backbone) 系列: CSPNet作者:Chien-Yao Wang 等发表时间:2019Paper 原文: CSPNet: A New Backbone that can Enhance Learning Capability of CNN开源代码:Cross Stage Partial Networks该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。作者认为目前的网络结构虽然效果好,但是都是建立在较大的计算量上的,这阻碍了算法应用 ,特别是

2021-11-13 14:17:55 7598

原创 多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解1. 概览在开始具体讨论卡尔曼滤波和匈牙利算法之前,首先我们来看一下基于检测的目标跟踪算法的大致流程。2. 卡尔曼滤波(Kalman filter)目标跟踪中使用的就是最基础的 Kalman filter 算法。这里也仅仅讨论最基础的 Kalman filter 算法。卡尔曼滤波算法的过程很简单,如下图所示。最核心的两个步骤就是预测和更新(下图的 correct)。在目标跟踪任务中,目标的

2021-10-24 12:08:14 19740 4

原创 目标跟踪之 MOT 经典算法:ByteTrack 算法原理以及多类别跟踪

目标跟踪之 MOT 经典算法:ByteTrack 算法原理以及多类别跟踪作者:Yifu Zhang 等发表时间:2021Paper 原文:ByteTrack: Multi-Object Tracking by Associating Every Detection Box开源代码:ByteTrack1. 概述ByteTrack 是基于 tracking-by-detection 范式的跟踪方法。作者提出了一种简单高效的数据关联方法 BYTE。它和之前跟踪算法的最大区别在于,并不是简单的去掉低分检

2021-10-20 19:33:13 70254 34

原创 目标检测中目标框回归损失函数(IoU, GIoU, DIoU, CIoU)总结

目标检测中目标框回归损失函数(IoU, GIoU, DIoU, CIoU)总结1. Smooth L1 Loss这个是 Faster-RCNN 中的损失函数。具体可以参考深度学习目标检测之 R-CNN 系列:Faster R-CNN 网络详解 中相应介绍。Smooth L1 Loss 相比 L1 和 L2 的优势可以参考 损失函数:L1 loss, L2 loss, smooth L1 loss。总结其优势就是:smooth L1和L1-loss函数的区别在于,L1-loss在0点处导数不唯一,可

2021-09-29 15:08:39 2723

原创 Pytorch 并行训练(DP, DDP)的原理和应用

Pytorch 并行训练(DP, DDP)的原理和应用1. 前言并行训练可以分为数据并行和模型并行。模型并行模型并行主要应用于模型相比显存来说更大,一块 device 无法加载的场景,通过把模型切割为几个部分,分别加载到不同的 device 上。比如早期的 AlexNet,当时限于显卡,模型就是分别加载在两块显卡上的。数据并行这个是日常会应用的比较多的情况。每一个 device 上会加载一份模型,然后把数据分发到每个 device 并行进行计算,加快训练速度。如果要再细分,又可以分

2021-09-27 20:18:10 17494 7

原创 3D 池化(MaxPool3D) 和 3D(Conv3d) 卷积详解

3D 池化(MaxPool3D) 和 3D(Conv3d) 卷积详解池化和卷积的过程是类似的,只是池化没有权重,相比起来更容易说明计算的过程。这里从 3D 池化开始详细接受 MaxPool3D 和 Conv3d 的过程,并尝试通过 2D 和 1D 的池化来实现 3D 池化的过程。3D (池化或者卷积)相比 2D 增加了一个维度,但是大致过程依然和 2D 类似,所以在看 3D 之前应该确保已经清楚 2D 的过程了,如果对 2D 不熟悉的朋友,可以参考 动图详细讲解 LeNet-5 网络结构,里面有动图演示

2021-09-11 09:22:02 18085 7

原创 python 中的模块、包以及搜索路径的问题

Python1. 模块(module)1.1 什么是模块?一个 .py 文件就是一个模块。1.2 模块搜索路径当你导入一个模块,Python 解析器对模块位置的搜索顺序是:1、当前目录(入口的目录,比如 python main.py 是指 main.py 所在的目录)2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。3、如果都找不到,Python 会察看默认路径。UNIX下,默认路径一般为 /usr/local/lib/python/。

2021-09-08 14:40:37 932

原创 目标检测 YOLO 系列:你有我无 YOLOX

目标检测 YOLO 系列:你有我无 YOLOX作者:Zheng Ge发表时间:2021Paper 原文:YOLOX: Exceeding YOLO Series in 20211. 概览那边 YOLOv5 还在不断更新,这边旷世 YOLOX 又开了新头了,真是一幅百舸争流啊。。。当然作为一名工业界的搬运工,还是很兴奋的,又有新的砖可以搬了。YOLOX 一出,各种公众号“吊打一切”,“秒天秒地” 的声音就出来了,真有这么神?作为一名搬运工,我觉得单从工业应用的角度,吸引力没有那么大,因为精度提升不大

2021-08-15 12:30:22 1330

原创 目标检测 YOLO 系列:快速迭代 YOLO v5

目标检测 YOLO 系列:快速迭代 YOLO v5作者:Glenn Jocher发表时间:2020Paper 原文:没有发表论文,通过 github(yolov5) 发布。1. 概览YOLOv5 刚发布之初还颇有争议,有人觉得它能不能叫 YOLOv5,但是它凭借优秀的性能和完善的工程配套(移植到其他平台)能力,现在(2021年)YOLOv5 依然是检测领域最活跃的模型。YOLOv5 不仅生而不凡,更关键的是它还非常勤快,从发布至今,已经发布了 5 个大版本。所以在使用 YOLOv5 的时候需要注意

2021-08-01 12:21:21 2379

原创 目标检测 YOLO 系列: 你有我有 YOLO v4

目标检测 YOLO 系列: 你有我有 YOLO v4作者:Alexey Bochkovskiy 等发表时间:2020Paper 原文: YOLOv4: Optimal Speed and Accuracy of Object Detection2020 年 Alexey 从 Joseph 手中接棒,推出了 YOLO v4。只是仅仅两个月后 YOLO v5 就来了,所以工业界 v4 应用的可能不及 v5 广泛(不同的领域可能有不同)。YOLO v4 可以说是集大成者,把市面上各种目标检测的 trick

2021-08-01 12:19:34 422

原创 目标检测 YOLO 系列: 持续改进 YOLO v3

目标检测 YOLO 系列: 持续改进 YOLO v3作者:Joseph Redmon, Ali Farhadi发表时间:2018Paper 原文: YOLOv3: An Incremental Improvement(严格来说,这并非是一篇学术论文,因为没有正式发表,作者行文也比较潇洒)YOLO v3 最大的特点是精度不错,但是速度飞快,并且对小目标的效果也有提升。320x320 YOLO v3 精度和 SSD321 差不多,但是速度是 SSD321 的三倍。凭借卓越的性能,YOLO v3 在工业界

2021-08-01 12:16:00 907

原创 目标检测 YOLO 系列: 更快更准 YOLO v2

目标检测 YOLO 系列: 更快更准 YOLO v2作者:Joseph Redmon, Ali Farhadi发表时间:2016Paper 原文: YOLO9000: Better, Faster, StrongerJoseph Redmon 等于 2016 年在 YOLO9000: Better, Faster, Stronger 中提出了 YOLO 的改进版本 YOLO V2 和 YOLO9000,其中 YOLO9000 是在 YOLO V2 的基础上采用联合训练的方式,使其可以检测超过 900

2021-08-01 12:12:35 677

原创 目标检测 YOLO 系列: 开宗立派 YOLO v1

目标检测 YOLO 系列: 开宗立派 YOLO v1作者:Joseph Redmon,Santosh Divvala , Ross Girshick , Ali Farhadi发表时间:2015Paper 原文:You Only Look Once:Unified, Real-Time Object Detection1 网络结构先来看看 YOLO V1 的网络结构,如下图(来自目标检测 YOLO)所示。这里 backbone 是基于 GoogleNet 修改的。具体来说,这里的 GoogLe

2021-08-01 12:09:07 629

原创 目标检测 YOLO 系列: 开篇

目标检测 YOLO 系列: 开篇该系列主要由以下几篇文章组成:目标检测 YOLO 系列: 开篇目标检测 YOLO 系列: 开宗立派 YOLO v1目标检测 YOLO 系列: 更快更准 YOLO v2目标检测 YOLO 系列: 持续改进 YOLO v3目标检测 YOLO 系列: 你有我有 YOLO v4目标检测 YOLO 系列:快速迭代 YOLO v51. 概览1.1 V1 到 V4YOLO 是 Joseph Redmon 和 Ross Girshick 等于

2021-08-01 12:02:51 662

原创 Pytorch LSTM 代码解读及自定义双向 LSTM 算子

Pytorch LSTM 代码解读及自定义双向 LSTM 算子1. 理论关于 LSTM 的理论部分可以参考PaperLong Short-Term Memory Based Recurrent Neural Network Architectures for Large Vocabulary Speech Recognition解析Understanding LSTM Networks人人都能看懂的LSTMPytorch LSTM 算子LSTM 文档2. 源代码python

2021-07-13 16:02:21 4051 3

原创 C/C++ 中的位运算及其典型应用

C/C++ 中的位运算及其典型应用C/C++ 中提供了6种位运算,对于每一种都很好理解。位运算比较简单,但是如果能灵活应用往往能取得预想不到的效果。这里将不会一一介绍其定义,这里的重点是介绍一些比较经典的应用。如果对其定义还不是很熟悉的朋友可以参考位运算。需要注意的是负数按补码形式参加位运算。操作符标记&按位与|按位或~取反^按位异或<<左移>>右移1. 按位与1.1 判断奇偶 int x =

2021-06-02 23:21:52 1128

原创 CV 经典主干网络 (Backbone) 系列: EfficientNet

CV 经典主干网络 (Backbone) 系列: EfficientNet作者:Mingxing Tan 等发表时间:2019Paper 原文: EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。练丹师在练丹的时候,对于卷积神经网络,通常通过调整网络深度(depth)、**网络宽度(width)和输入图像分辨率 (resolution

2021-03-20 15:15:29 2703

原创 CV 经典主干网络 (Backbone) 系列: Darknet-53

CV 经典主干网络 (Backbone) 系列: Darknet-53作者:Joseph Redmon发表时间:2018Paper 原文: YOLOv3: An Incremental Improvement该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。1. 网络结构Darknet-53 是 YOLOv3 的 backbone。具体结构参考下面的图片。左侧是 Darknet-53 的完整结构图,右侧是对左侧中的 “Convolutional” 层 和 “Residual

2021-03-20 15:13:04 13072

原创 CV 经典主干网络 (Backbone) 系列: Darknet-19

CV 经典主干网络 (Backbone) 系列: Darknet-19作者:Joseph Redmon发表时间:2016Paper 原文: YOLO9000: Better, Faster, Stronger该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。1. 网络结构Darknet-19 是 YOLO v2 的 backbone。Darknet-19 总共有 19 层 conv 层, 5 个 maxpooling 层。Darknet-19 吸收了 VGG16, NIN

2021-03-20 15:11:35 10512

原创 CV 经典主干网络 (Backbone) 系列: SKNet

CV 经典主干网络 (Backbone) 系列: SKNet作者:Xiang Li 等发表时间:2019Paper 原文: Selective Kernel Networks该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。SKNet 是对 SENet (参考 CV 经典主干网络 (Backbone) 系列: SENet)的改进,SENet 在 channel 维度上做 attention,而 SKNet 在 SENet 的基础上又引入了 kernel 维度上的 attenti

2021-03-20 15:08:24 680

原创 CV 经典主干网络 (Backbone) 系列: SENet

CV 经典主干网络 (Backbone) 系列: SENet作者:Jie Hu 等发表时间:2017Paper 原文: Squeeze-and-Excitation Networks该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。SENet 是最后一届 ImageNet 挑战赛(ILSVRC2017)的冠军。SENet 的核心是一种叫做 SE Block(Squeeze-and-Excitation) 的结构,其本质是在 channel 维度上做attention 或者 g

2021-03-20 15:06:39 1047

原创 CV 经典主干网络 (Backbone) 系列: ResNet变种

CV 经典主干网络 (Backbone) 系列: ResNet变种该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。ResNet 出来后,大家又基于 ResNet 提出了很多改进版本,这里主要对一些效果比较好的变种进行简单介绍。1. ResNeXt作者:Saining Xie 等发表时间:2016Paper 原文: Aggregated Residual Transformations for Deep Neural NetworksResNeXt 一作虽然不是何凯明,但

2021-03-20 15:05:34 1729

原创 CV 经典主干网络 (Backbone) 系列: ResNet家族

CV 经典主干网络 (Backbone) 系列: ResNet家族作者:Kaiming He 等发表时间:2015Paper 原文: Deep Residual Learning for Image Recognition该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。ResNet 在 CV 发展史上有非常重要的意义,它在 ImageNet 挑战赛上,首次实现了超越人类的水平。关于 ResNet 的介绍,将分为上下两个部分:ResNet家族:主要介绍原版(凯明大神论文

2021-03-20 15:04:20 2487 1

原创 CV 经典主干网络 (Backbone) 系列: GoogLeNet(InceptionNet)

CV 经典主干网络 (Backbone) 系列: GoogLeNet(InceptionNet)GoogLeNet 有多个版本(V1到V4),这里讲的仅仅是 V1。如果想全面了解可以参考 图像分类丨Inception家族进化史「GoogleNet、Inception、Xception」。GoogLeNet 也叫 Inception net, 因为 GoogLeNet 中的核心组成部分就是 inception module.另外值得一提的是 GoogLeNet 的名字有向 LeNet 致敬的意思.Goo

2021-03-18 23:32:38 907

原创 CV 经典主干网络 (Backbone) 系列: VGGNet

CV 经典主干网络 (Backbone) 系列: VGGNet作者:Karen Simonyan 等发表时间:2014Paper 原文:Very Deep Convolutional Networks for Large-Scale Image Recognition这个模型在当年的 ImageNet 挑战赛上分别取得了检测和分类任务的第一和第二名的成绩。论文中提出了一系列网络结构,用的较多的是 VGG16 和 VGG19,当然到了今天(2021年)都已经很少用了。1. 网络结构现在来看这个网络

2021-03-18 23:28:02 1623

原创 CV 经典主干网络 (Backbone) 系列: 开篇

CV 经典主干网络 (Backbone) 系列: 开篇这篇是 深度学习中的经典基础网络结构(backbone)总结 的下篇。上篇中从大的发展趋势介绍了下主干网络的发展趋势,而这篇主要是对一些比较经典的主干网络进行简单梳理。目录CV 经典主干网络 (Backbone) 系列: VGGNet (2014年)CV 经典主干网络 (Backbone) 系列: GoogLeNet (2014年)CV 经典主干网络 (Backbone) 系列: ResNet家族(2015年)CV 经典主干网

2021-03-18 23:21:30 5839

原创 Linux C++(QT) 下获取 CPU 序列号(processor serial number)

Linux C++(QT) 下获取 CPU 序列号(processor serial number)亲测(Intel core-i)可用。#include <cpuid.h>#include <sstream>std::string GetCPUId(){ std::string strCPUId; unsigned int level = 1; unsigned eax = 3 /* processor serial number */, eb

2021-01-08 12:06:44 3851

原创 C++ 中 map 容器的内存释放机制及内存碎片管理

C++ 中 map 容器的内存释放机制及内存碎片管理C++ 中的容器很好用,比如 vector, map 等,可以动态扩容,自己管理内存,不用用户关心,但是在某些极端情况下,如果内存比较紧张的情况下,可能用户对于这些容器自己的管理规则(主要是释放规则)就不太满意了。1. erase, clean通常在使用 map 的时候直接通过 erase,或者 clean 方法就可以删除数据,如果结合智能指针,用户不用关心内存的问题。但是需要注意的是,调用 erase 或者 clean 方法后,内存并没有立马释放,

2021-01-08 11:59:36 12597 4

原创 数据增强(Data Augmentation)系列: SnapMix 原理及应用

数据增强(Data Augmentation)系列: SnapMix作者:Shaoli Huang发表时间:2020Paper 原文: SnapMix: Semantically Proportional Mixing for Augmenting Fine-grained Data、官方开源代码:https://github.com/Shaoli-Huang/SnapMixSnapMix 是由 Shaoli Huang 等人提出的一种针对细粒度数据增强的方法。论文于 2020 年 12 月 9

2020-12-28 23:55:47 2701 1

原创 霍夫变换圆检测原理及 OpenCV API 应用

霍夫变换圆检测原理及 OpenCV API 应用1. 霍夫圆变换霍夫圆检测和霍夫直线检测的原理类似。建议先理解霍夫直线检测的原理,再来看霍夫圆检测。圆在极坐标下的数学表达式如下:{x=a+r⋅cosθy=b+r⋅sinθ\left\{ \begin{aligned}x = a + r\cdot cos\theta \\y = b + r\cdot sin\theta \\\end{aligned}\right.{x=a+r⋅cosθy=b+r⋅sinθ​其中 a,ba, ba,b 是

2020-11-30 14:40:47 1691 1

原创 霍夫变换直线检测原理及 OpenCV API 应用

霍夫变换直线检测原理及 OpenCV API 应用1. 霍夫变换霍夫变换(Hough Transform)于1962年由Paul Hough 首次提出,后于1972年由Richard Duda和Peter Hart推广使用,是图像处理领域内从图像中检测几何形状的基本方法之一。经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆。霍夫变换运用两个坐标空间之间(图像空间和霍夫空间)的变换,将在一个图像空间中具有相同形状的曲线或直线映射成霍夫空间的一个点,从而把检测

2020-11-30 14:35:58 1514

原创 角点检测(Harris & Shi-Tomas)的原理及OpenCV API 的应用

角点检测(Harris & Shi-Tomas)的原理及OpenCV API 的应用这篇博客的内容主要时对参考中多篇博客的总结。1. 角点在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。关于角点的具体描述可以有几种:1). 一阶导数(即灰度的梯度)的局部最大所对应的像素点;2). 两条及两条以上边缘的交点;3). 图像中梯度值和梯度方向的变化速率都很高的点;4).角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向。从求解思路上可以分为

2020-11-29 23:10:13 1779

原创 C++ 调用 Python 脚本,并把 cv::Mat 类型传参到 Python 端

C++ 调用 Python 脚本,并把 cv::Mat 类型传参到 Python 端前言查看了很多参考,最后找到一个完整的示例并且跑通,在开始这个任务之前,首先应该确保你的环境是没有问题的,比如:C++ 和 Python 直接可以传递简单类型的参数C++ 端独立通过 opencv 加载图像是没有问题的Python 端 import 独立加载图像是没有问题的具备上面这些条件后,可以参考下面的代码,将 cv::Mat 类型的参数传递到 Python 端。代码这部分主要参考 sending M

2020-10-30 14:26:36 3709 5

原创 CUDA Installer 前面的 X

CUDA Installer 前面的 X这里的X表示 execute,安装的意思,并非叉叉。所以下面表示不安装驱动。

2020-10-27 16:42:52 3964 2

原创 C++ 多线程基础及 C++11 多线程库总结

1. 多线程基础1.1 进程与线程根本区别:进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位开销方面:每个进程都有自己独立的代码和数据空间,程序之间的切换开销较大。线程可以看作是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换开销小。所处环境:一个操作系统能同时运行多个进程(程序)。在一个进程中,可以有多个线程同时执行。内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间。对线程而言,系统不会为

2020-10-22 22:56:15 3391

原创 C++11 中的 Smart Pointer(shared_ptr/weak_ptr/unique_ptr) 总结

Smart PointerC++ 111. shared_ptrShared Ownershipsource code1.1 constructshared_ptr<int> p = make_shared<int>(88);shared_ptr<int> p1(new int(88));auto p2 = make_shared<int>(88);auto p3(p2);1.2 why make_shared is

2020-10-22 21:31:25 1562

空空如也

空空如也

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

TA关注的人

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