自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【多目标跟踪与计数】(三)DeepSORT实战车辆和行人跟踪计数

一、DeepSort介绍论文地址:https://arxiv.org/pdf/1703.07402.pdf参考文章:DeepSort讲解代码地址:https://github.com/mikel-brostrom/Yolov5_DeepSort_OSNet(可参考这个源代码,如果需要我这边的源代码可私信)SORT对比DeepSORT:虽然SORT是一个非常简单、有效、实用的多目标跟踪算法,但仅仅通过IOU来匹配虽然速度很快,相应的ID Switch次数也多;DeepSORT在原有基础上,通

2022-04-29 18:30:27 9099 90

原创 【多目标跟踪与计数】(一)YOLOV5实战口罩识别

项目概述​ 本篇介绍本实战系列的第一篇——YOLOV5的基本原理及实践,作为对工业界最友好的检测网络,本次主要讲解其原理以及如何训练自己的数据集;会主要结合源码进行讲解,像一些检测相关的基础知识不在这过多介绍,V5版本是基于V4进行一系列的消融实验,可以先参考YOLOV4的论文进行初步了解;YOLOV4论文地址:https://arxiv.org/pdf/2004.10934v1.pdf本次项目地址:https://github.com/ultralytics/yolov5一、数据获取这里推荐

2021-11-16 11:16:42 6928 5

原创 Docker入门——实战图像分类

本篇Docker入门文章并没有具体讲解Docker的一些底层原理,而是从实际使用的角度出发,用一个图像分类的案例讲述了如何拉取镜像并使用,如何上传自己的镜像供他人使用;如果有一些问题或者想法的话欢迎私信探讨!最后放最爱的小企鹅!!

2023-08-16 15:29:02 683

原创 实战——OPenPose讲解及代码实现

一些细节例如匈牙利匹配算法、PAF权值计算、模型结构改进等在这里并没有过多介绍;并且对于现在OPenpoe的使用,主要是将其编译成一个库,作为Python程序的调用;并且相比于本次的代码,其实时性很好,符合大部分落地场景的需求;如果有想要本次项目源码的,可以在评论区留下邮箱,也欢迎大家一起讨论,后续也会探讨更多最新的技术;

2023-08-14 18:54:32 3428 17

原创 基于Flask的模型部署

虽然是一个简单的分类项目,但整体部署的流程以及一些代码的模板是不变的,换成别的任务可能会复杂一些,主要还是前后处理相对复杂一些,并且做UI界面的话也会相对复杂一些;

2023-08-08 14:05:49 2702

原创 【人体姿态估计】(一)原理介绍

人体姿态估计本质上是一个关键点检测的项目;关键点检测在生活中的应用十分广泛,包括人脸识别、手势识别,而人体姿态估计则是对身体的关键点进行检测;本文将介绍一些常见的数据集、评价指标以及比较经典的算法;

2023-04-25 16:09:28 2203 1

原创 CUDA和TensorRT入门

1、对于深度神经网络的推理,TRT可以充分发挥GPU的算力,以及节省GPU的存储空间;2、要多参考官方源码的sample案例,尝试替换现有模型,再深入了解API进行网络的搭建;3、如果要使用自定义组件,至少先了解CUDA基本架构以及常用属性;4、推荐使用FP16(定义很少变量,明显能提高速度,精度影响不大)和INT8(更大的潜力,可能导致精度下降)这两种量化模式;5、在不同架构的GPU或者不同的软件版本的设备上,引擎不能通用,要重新生成一个;

2023-04-17 11:56:10 1392

原创 基于Python的图像缓冲池实现

在项目学习中,看到有用python实现的一个图像缓冲池,在此记录一下,方便后续使用;

2023-02-01 15:49:41 277

原创 CV—经典分割网络总结

FCN:语义分割端到端训练的开端;U-Net:医学分割算法中的龙头;SegNet&DeconvNet:对称的编解码结构;DeepLab系列:从V1到V3+,算法越来越完善,效果越来越好;GCN:从另一角度思考,重新使用大卷积核;DFN:从另一角度思考,宏观角度看待语义分割;实际上分割的很多思想是借鉴了分类和检测的,分割任务本质也是对像素点的检测和分类;所以其中很多思想是值得去学习和思考的,针对场景和数据集的不同,模型的选型和设计也需要做出改变;

2022-10-09 14:26:26 1674

原创 【记录】数据处理方法总结及实现

数据增强作为前处理的关键步骤,在整个计算机视觉中有着具足轻重的地位;数据增强往往是决定数据集质量的关键,主要用于数据增广,在基于深度学习的任务中,数据的多样性和数量往往能够决定模型的上限;本次记录主要是对数据增强中一些方法的源码实现;

2022-09-15 17:22:56 517

原创 基于C++的OpenCV项目实战——零部件的自动光学检测

多窗口展示背景去除连通图的实现轮廓边缘检测并且在实际的C++代码中,还涉及了智能指针等高阶知识;工业质检项目作为视觉领域较为成熟的落地项目,其大部分都是基于深度学习的方式实现了,但如果能掌握一些OpenCV的方法,也可以在项目中起到优化效果的作用;

2022-09-14 11:06:34 3242 2

原创 基于C++的OpenCV项目实战——文档照片转换成扫描文件

基于OpenCV的C++版本的实战项目,涉及霍夫变换、Canny边缘检测、透视变换、单应性矩阵、鼠标事件等知识点;目的在于提取图像中的指定区域,并且进行文档化的展示;

2022-09-13 10:40:21 2510 2

原创 Python之并发编程

并行:指的是任务数小于等于CPU核数,即任务真的是一起执行的;并发:指的是任务数大于CPU核数,通过操作系统的各种任务调度算法,实现多个任务"一起"执行,但实际上有些任务不在执行,只是由于切换任务速度快,看起来像一起执行;2、进程、线程和协程的区别线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间和资源;线程的上下文切换要比进程上下文切换快得多;...

2022-08-29 16:58:03 1215

原创 CV—BaseLine总结(从AlexNet到SENet的发展历程)

深度学习从2015年发展到现在,模型也在不断地迭代优化;现在许多新的模型往往是站在巨人的肩膀上,在这里想记录下baseline模型发展的一个历程,以及不断更新的内容;不会将模型的每一层剖开来将,而是将关键的创新点进行重点记录,当然也包括了一些个人理解和思考,如果有不对或者不全的地方欢迎沟通,也希望在以后工作中不断完善对模型的理解;BaseLine指的是什么呢?通常我们又称BaseLine模型为分类模型,往往入门都是用它来实现一个分类任务。但这些模型不仅仅出现在分类任务中,而是整个CV领域的基石。在后面接触到

2022-06-12 14:04:17 2377 1

原创 Python进阶学习(一)

背景在编程语言的大背景下,Python普遍被认为是一门易上手的脚本语言;而随着Python的应用越来越广泛,仅仅停留在会跑Python程序是不够的;本篇专栏主要记录一些高阶的用法以及Python语言的一些机制;Python语言掌握需要具备的能力:1、深入掌握Python编程机制,掌握高级语法功能,能够解决更加复杂的编程问题;2、面对常见的Python编程问题明白其原理,能够快速解决;3、深入理解面向对象和面向函数的作用,写出高质量代码;4、掌握并发编程、异步编程等高级编程方法,解决高并发问题

2022-04-22 19:16:45 1820

原创 Git的原理及使用

一、简述在Git出现之前,大部分公司还是用SVN进行项目管理的,这里来对比一下;集中式(SVN):集中式的版本控制系统都有一个单一的几种管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新;优点:1、管理方便,符合一般逻辑;2、安全性高;3、代码一致性高;4、适合人数不多的开发;缺点:1、服务器压力大,数据库容量暴增;如果连接不上服务器,基本不能工作;3、不适合开源开发;分布式(Git):在分布式版本控制系统中,客户端不只提取最新版本的

2022-04-19 09:20:18 1208

原创 轻量级车道线检测

一、前置知识首先需要知道实例分割的任务主要有两种实现方式:1、自上而下:先检测出框,再对框内的物体进行像素点分类,缺点在于对于一些目标检测框不完整,会影响精度;2、自下而上,先对目标像素点进行分类,再通过聚类的方式将像素点归到各个目标上;总结:对于车道线场景,采用自下而上的方式较多,因为车道线的场景复杂,不利于检测;二、聚类算法通过自下而上的方式分类点后,需要聚类,将各个像素点归到不同的目标上;这里又称为度量学习距离度量学习相似度学习;注意:在分割、关键点检测、人脸识别 任务中都涉及该概念

2022-04-18 15:09:51 5974 5

原创 Normalization总结

Normalization总结一、BN全称:Batch Normalization背景:随着深度学习网络越来越深,发现深层网络训练起来困难,效果也并没有很好;这里存在一个问题:内部协变量偏移,也就是每一层的参数变化会影响下一层的参数变化;计算公式:注意:会用到两个参数γ和β,也是在训练时候进行学习的,推理的时候只需要用全局的均值和方差即可;作用:引入BN层之后,将各个层之间都进行标准化,起到一个解耦的作用;优点:1、提升训练速度,加快收敛过程;2、起到一个正则化的作用,提升分类效果

2022-04-11 12:38:16 4240

原创 【模型压缩】(四)——知识蒸馏

一、概述一句话概括:将一个复杂模型的预测能力转移到一个较小的网络上;(复杂模型称为教师模型,较小模型称为学生模型)Teacher and Student的概念:对大网络学习的知识进行"蒸馏",并将其转移到小网络上,同时小网络的性能能够接近大网络;蒸馏模型(Student)被训练模仿大网络(Teacher)的输出,而不仅仅是直接在原始数据上训练,通过这种方式让小网络学习到大网络的抽象特征能力和泛化能力;二、流程详解方法一简单流程如下:1、数据集上训练一个teacher网络;2、训练

2022-04-07 08:27:03 2142

原创 【模型压缩】(三)——量化

一、概述量化:剪枝是删除不重要的权重参数,量化则是减少存储权重的bit,将权重存储在更小的空间中;权重不需要以高精度方式存储,甚至不应该以高精度方式存储;如果用简单的量化方式效果并不好,需要一些训练量化参数的计较;方法:1、二值化这是最简单的一种量化方式,就是用0-1两个值代替原来的参数值,往往能达到32倍的压缩程度;该方法能够大大提升模型的训练和推理速度,但性能明显下降;也可以采用一种二值化变体,就是用两个常量(C1和C2)来替代0-1两个值,阈值也可以修改;缺点:损失精度过多,并且在

2022-04-07 08:22:32 2372 1

原创 【模型压缩】(二)—— 剪枝

一、概述剪枝(Pruning)的一些概念:当提及神经网络的"参数"时,大多数情况指的是网络的学习型参数,也就是权重矩阵weights和偏置bias;现代网络的参数量大概在百万至数十亿之间,因此实际上在一个网络中也并不是所有权值都是重要的,剪枝的作用就是削减那些不重要权重矩阵的一种直接压缩模型的方式;对于一个已经训练好的模型,切断或删除某些连接,同时保证不对精度造成重大影响,这样得到的模型就是一个参数较少的剪枝模型;从生物学的角度来说,人类在成长过程中突触会减少,但思维能力反而更强了;和drop

2022-04-01 09:35:04 9938 64

原创 C++基础总结

C++基础总结一、基本的代码含义1、程序的第一行#include <iostream>是预处理器指令,告诉 C++ 编译器在实际编译之前要包含iostream 文件;2、using namespace std表示我们可以使用标准库中对象和变量的名称;3、int main()是主函数,程序从这里开始执行;4、/*...*/将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释;5、return 0;终止 main() 函数,并返回值 0;二、定义常量的两种方式1、const

2022-03-30 17:41:03 12255 2

原创 深度学习之损失函数小结

深度学习之损失函数小结开篇损失函数在深度学习中的作用相当于引领模型学习的方式,其重要程度不言而喻;下图为一些损失函数的关系:Sigmoid和Softmax损失Sigmoid公式:S(x)=11+e−xS(x)=\frac{1}{1+e^{-x}}S(x)=1+e−x1​Softmax公式:S(xj)=exj∑k=1Kexk,j=1,2,…,KS\left(x_{j}\right)=\frac{e^{x_{j}}}{\sum_{k=1}^{K} e^{x_{k}}}, j=1,2, \ldots

2022-03-21 20:00:46 8688

原创 深度学习之激活函数小结

深度学习之激活函数小结激活函数的作用和意义:引入非线性,增加网络表达能力;基本激活函数介绍首先看一下一些常见的激活函数:Sigmoid:总结:第一个出现的激活函数,存在以下问题,所以后面基本不使用了1、梯度消失的情况2、不是以0为对称中心(梯度下降比较慢)3、计算公式相对复杂,比较慢tanh:总结:为了解决Sigmoid中不以0为对称中心的问题,但还是没能解决梯度消失的问题;ReLU:总结:最经常使用的激活函数,计算简单,小于0的情况下神经元会失活;Leaky Re

2022-03-21 19:56:02 4201

原创 【模型压缩】(一)开篇及轻量模型介绍

一、开篇​ 随着神经网络的发展,transformers和高级卷积网络架构给视觉和预研领域任务带来提升的同时,模型的规模及计算量也越来越大;​ 虽然模型的体积增大往往能带来更好的效果,但在实际场景的应用性几乎为0,这也是学术界和工业界存在的一个最大差异,模型的落地往往要考虑的方面有很多,并不只是单纯看预测的效果;模型变大引发的一些问题:更长训练时间;更长的推断时间;更多的内存占用;模型压缩的目的:以一种对性能影响最小,最有效的结构或格式表示模型,从而减轻大模型的

2022-03-05 08:40:00 1301

原创 【OCR】EAST算法讲解及实现

【OCR】EAST算法讲解及实现一、概念介绍OCR(Optical Character Recognition):光学字符识别;基本流程:输入图片 —— 预处理 —— 文字定位(采用EAST算法)—— 文字分割 —— 图像识别涉及的技术点:检测、分割、分类三个大任务,感觉像图像中很多任务都是在分类、检测、分割上实现的;二、算法原理论文地址:https://arxiv.org/pdf/1704.03155.pdf关键:提出了基于两阶段的文本检测方法:全卷积神经网络和非极大值抑制,消除中间过程冗

2022-03-01 08:57:56 6036 6

原创 【OCR】EAST算法数据处理——ICDAR_2015数据集

背景下载地址:https://rrc.cvc.uab.es/?ch=4&com=downloads注意:该数据为开源数据,但需要注册一个账号,简单注册下即可下载;介绍:用于文本检测任务,数据包含1000张训练样本以及500张测试样本;所需数据展示首先,该数据是用于EAST算法,需要处理成模型所需的数据格式;原始标签数据:可以看出,每张图像对应一个文本,其中有多个框的标注信息,分别表示四个坐标点和类别;所需数据格式:需要的数据分为三个部分,Score map、d_map、θ_ma

2022-02-18 16:30:59 3413 1

原创 Vision Transformer原理及代码实战

Vision Transformer原理及代码实战背景论文地址:https://arxiv.org/pdf/2010.11929.pdf代码参考:https://github.com/BR-IDL/PaddleViT在NLP领域,Transformer深度学习技术已经"统治"了该领域;在CV领域,从2020年底开始,Vision Transformer(ViT)成为该方向的研究热点;基于Transformer的模型在多个视觉任务中已经超越CNN模型达到SOTA性能的程度;Transformer概

2022-01-28 15:29:36 5105 1

原创 基于Paddle手敲ResNet

基于Paddle手敲ResNet放在开头的话作为一名算法工程师,接触各类模型是必须的,但将模型从论文转换成代码的能力往往比较欠缺;习惯了搬运开源代码,也被冠以了"炼丹师"的称号,但调参能力并不是算法工程师能力的唯一衡量指标,对模型结构的理解、通过结构图复现代码的能力往往能考验对于各类模型的理解度;从工作中来看,对于不同的任务,套用相同模型的效果是不一样的,这也就说明哪怕是开源的达到了SOTA的模型,也不适合所有任务;当遇到新的任务时,我们需要思考如何魔改模型结构,在当前任务下达到更优的效果,这是作为

2022-01-27 09:44:06 2586

原创 【OpenCV学习】(十三)机器学习

【OpenCV学习】(十三)机器学习背景OpenCV中也提供了一些机器学习的方法,例如DNN;本篇将简单介绍一下机器学习的一些应用,对比传统和前沿的算法,能从其中看出优劣;一、人脸识别主要有以下两种实现方法:1、哈尔(Haar)级联法:专门解决人脸识别而推出的传统算法;实现步骤:创建Haar级联器;导入图片并将其灰度化;调用函数接口进行人脸识别;函数原型:detectMultiScale(img,scaleFactor,minNeighbors)scaleFactor:缩放尺

2022-01-25 16:43:28 6962 1

原创 【OpenCV学习】(十二)图像分割与修复

【OpenCV学习】(十二)图像分割与修复背景图像分割本质就是将前景目标从背景中分离出来。在当前的实际项目中,应用传统分割的并不多,大多是采用深度学习的方法以达到更好的效果;当然,了解传统的方法对于分割的整体认知具有很大帮助,本篇将介绍些传统分割的一些算法;一、分水岭法原理图如下:利用二值图像的梯度关系,设置一定边界,给定不同颜色实现分割;实现步骤:标记背景 —— 标记前景 —— 标记未知区域(背景减前景) —— 进行分割函数原型:watershed(img,masker):分水岭算法,

2022-01-24 21:44:07 8164 4

原创 【OpenCV学习】(十一)图像拼接实战

【OpenCV学习】(十一)图像拼接实战背景图像拼接可以应用到手机中的全景拍摄,也就是将多张图片根据关联信息拼成一张图片;实现步骤1、读文件并缩放图片大小;2、根据特征点和计算描述子,得到单应性矩阵;3、根据单应性矩阵对图像进行变换,然后平移;4、图像拼接并输出拼接后结果图;一、读取文件第一步实现读取两张图片并缩放到相同尺寸;代码如下:img1 = cv2.imread('map1.png')img2 = cv2.imread('map2.png')img1 = cv2.resi

2022-01-15 22:35:09 3320

原创 【OpenCV学习】(十)特征点检测与匹配

【OpenCV学习】(十)特征点检测与匹配背景提取图像的特征点是图像领域中的关键任务,不管在传统还是在深度学习的领域中,特征代表着图像的信息,对于分类、检测任务都是至关重要的;特征点应用的一些场景:图像搜索:以图搜图(电商、教育领域)图像拼接:全景拍摄(关联图像拼接)拼图游戏:游戏领域一、Harris角点哈里斯角点检测主要有以下三种情况:光滑区域:无论向哪个方向移动,衡量系数不变;边缘区域:垂直边缘移动时,衡量系数变化强烈;角点区域:不管往哪个方向移动,衡量系数变化强烈;函

2022-01-15 19:33:22 4330

原创 【OpenCV学习】(九)目标识别之车辆检测与计数

【OpenCV学习】(九)目标识别之车辆检测及计数背景本篇将具体介绍一个实际应用项目——车辆检测及计数,在交通安全中是很重要的一项计数;当然,本次完全采用OpenCV进行实现,和目前落地的采用深度学习的算法并不相同,但原理是一致的;本篇将从基础开始介绍,一步步完成车辆检测计数的项目;一、图像轮廓本质:具有相同颜色或强度的连续点的曲线;作用:1、可用于图形分析;2、应用于物体的识别与检测;注意点:1、为了检测的准确性,需要先对图像进行二值化或Canny操作;2、画轮廓的时候回修改输入的图像

2022-01-14 09:37:34 20917 126

原创 【OpenCV学习】(八)图像形态学

【OpenCV学习】(八)图像形态学背景形态学处理方法是基于对二进制图像进行处理的,卷积核决定图像处理后的效果;形态学的处理哦本质上相当于对图像做前处理,提取出有用的特征,以便后续的目标识别等任务;一、图像二值化定义:将图像的每个像素变成两种值,如0和255;全局二值化的函数原型:threshold(img,thresh,maxVal,type)img:最好是灰度图像thresh:阈值maxVal:超过阈值,替换为maxValtype:有几种类型,THRESH_BINAR

2022-01-11 17:21:32 3484 1

原创 【OpenCV学习】(七)图像滤波

【OpenCV学习】(七)图像滤波背景图像滤波的作用简单来说就是将一副图像通过滤波器得到另一幅图像;明确一个概念,滤波器又被称为卷积核,滤波的过程又被称为卷积;实际上深度学习就是训练许多适应任务的滤波器,本质上就是得到最佳的参数;当然在深度学习之前,也有一些常见的滤波器,本篇主要介绍这些常见的滤波器;一、卷积相关概念卷积核大小一般为奇数的原因:1、增加padding的原因;2、保证锚点在中间,防止位置发生偏移;卷积核大小的影响:卷积核越大,感受野越大,提取的特征越好,同时计算量也越大;边界扩

2022-01-06 19:27:04 3449 2

原创 【OpenCV学习】(六)图像基本变换

【OpenCV学习】(六)图像基本变换背景图像的变换通常用于数据预处理部分,例如缩放旋转等常见的图像变换方法;在一些深度学习框架内部都分装了图像变换的方法,对训练集做统一的图像变换操作;一、图像缩放函数原型:resize(src,dsize,[fx,fy,interpolation])fx:x轴的缩放因子;fy:y轴的缩放因子;interpolation:插值算法;插值算法有以下几种:1、INTER_NEAREST:最近邻插值,速度快,效果差;2、INTER_LINEAR:双线性插

2022-01-06 11:01:19 2609

原创 【OpenCV学习】(五)图像运算

【OpenCV学习】(五)图像运算背景图像本质就是矩阵,对图像的处理往往就是矩阵的运算;常见的运算有加法、减法和位运算等,一些进阶的滤波等操作,也是基于这些简单运算而来的,只是修改了一些参数而已;一、加法运算实际上就是像素值的相加,起到一个调节亮度(曝光)的效果;案例代码:org = cv2.imread('./org.jpg')# 创建一个相同大小的背景图img = np.ones((1200, 1920, 3), np.uint8) * 30# 像素值相加result = cv2.a

2022-01-05 21:52:24 2262

原创 【OpenCV学习】(四)图形绘制

【OpenCV学习】(四)图形绘制背景使用OpenCV进行图形绘制是一种必备的技能,在图像的任务中,不管是图像检测还是图像识别,我们都需要通过绘制图形和绘制文字对处理的结果进行说明,本篇就详细介绍下图形的绘制;一、画线line(图像,起始点,终点,颜色,线宽,线形):一般只需要前面四个参数即可;代码案例:cv2.line(img, (20, 100), (20, 500), (0,0,255))画出了一条Y方向上的红色线段;二、画矩形这个相对来说是应用最多的一种方法了,往往在检测项目中返

2022-01-05 16:48:36 2077

原创 C++小点总结(一)

C++小点总结(一)说明C++之所以难学,主要是其标准和知识点比较繁杂;之前的C++学习偏向理论,本专栏将以每20个小问题为一篇文章,主要记录实战中遇到的问题,难易程度不同,可根据标题参考;1、文件名后缀的作用?一般项目中会包含多个.cpp(源文件)和.h(头文件);那有一些后缀为.c .cc .cxx的文件是怎么来的呢?答:是由于不同的编译器导致的,一般在GNU编译器下会有这些后缀;.hpp后缀的作用是什么呢?答:实际上是.h和.cpp文件二合一,用来减少整个项目的编译过程;2、C++1

2021-12-29 11:11:38 1259

空空如也

空空如也

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

TA关注的人

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