- 博客(45)
- 资源 (3)
- 收藏
- 关注
原创 ultralytics-YOLOv11的目标检测解析
mask_multi_gts获取一个anchor预测多个gt框的位置,max_overlaps_idx每个anchor中overlap值最大的位置获取,通过torch.where更新mask_pos,即一个anchor分配多个框时,选择overlap最大GT,分配到该anchor上。target_gt_idx是[0,n_max_boxes-1]的值,更新索引值,不同batch_idx索引唯一,如下。最后merge所有的mask返回为mask_pos,其中mask_topk、mask_in_gts大小为。
2024-12-04 00:06:23
2240
原创 YOLOX训练代码分析3-损失函数
yolox构建模型时,是通过yolox_base.py中的get_model函数获取,其中分成两部分YOLOXPAFPN与YOLOXHead两个类,由YOLOX加载封装整个网络。if getattr(self, "model", None) is None: # 该对象中是否存在model属性,默认值为None,设置成模型 in_channels = [256, 512, 1024] backbone = YOLOPAFPN(self.depth, self.width, in_cha
2021-10-11 12:01:41
17494
22
原创 YOLOX训练代码分析2-trainer.py
1. yolox网络构建(1) 网络加载通过tools/train.py中main函数get_exp构建网络,其中get_exp可以通过名称与文件获取网络模型与参数。if exp_file is not None: return get_exp_by_file(exp_file) # 通过文件获取模型参数else: return get_exp_by_name(exp_name) # 通过名称获取模型参数get_exp_by_name最终是调用get_exp_by_fil
2021-10-08 15:30:31
3421
6
原创 YOLOX训练代码分析1-COCO与VOC训练
1. YOLOX的网络结构图与代码YOLOv3、YOLOv4、YOLOv5、YOLOx的网络结构图(清晰版)_YMilton的专栏-优快云博客((1) 网络结构图(2) yolox代码URL:https://github.com/Megvii-BaseDetection/YOLOX.git2. yolox如何训练coco数据(1) 第一步:yolox...
2021-09-30 17:35:30
3364
5
原创 公开人脸识别数据集
1. 口罩遮挡人脸数据由武汉大学多媒体研究中心发起,目前是全球最大的口罩遮挡人脸数据集。分为真实口罩人脸和模拟口罩人脸两部分,真实口罩人脸包括525人的5000张口罩人脸和9万张正常人脸。模拟口罩人脸包含1万个人共50万张模拟人脸数据集。应用项目:人脸检测、人脸识别URL:https://github.com/X-zhangyang/Real-World-Masked-Face-Dataset2. Wider Face人脸数据香港中文大学发起的,包含3万张图片共40万张人脸。应用项.
2021-09-27 10:38:24
26215
1
原创 YOLOv3、YOLOv4、YOLOv5、YOLOx的网络结构图(清晰版)
YOLO系列网络结构图2. Yolov4网络结构图3. Yolov5网络结构图4. Yolox网络结构图
2021-09-13 16:03:52
49745
89
原创 BBox边界框损失函数演进
边界框损失计算的演进边界框回归损失近些年的发展过程:1. MSE Loss2. IoU Loss计算IoU交并比示意图如图,蓝色为真实目标框,橘红色为预测目标框。IoU Loss存在的问题,存在检测框大小相同,重叠区域面积相等的情况(IoU相等),无法区分不同相交情况。3. GIoU Loss为了改进IoU Loss存在的问题,提出了GIoU方法。GIoU Loss的计算公式其中 表示真实框与预测框的最小闭包区域面积,即外接矩形面积。...
2021-09-02 18:58:42
1778
原创 yolov4与yolov5的区别
不同点:1. yolov4采用了较多的数据增强方法(图像增强方法(Data Augmentation)_YMilton的专栏-优快云博客,博客中方法都使用),而yolov5进行了3中数据增强:缩放、色彩空间调整与Mosaic数据增强。2. yolov5锚点框是基于训练数据集自动学习的,而yolov4没有自适应锚点框。3. yolov5采用的激活函数包括leakyReLU和Sigmoid,yolov5的中间隐藏层使用的是leakyReLU激活函数,最后的检测层使用的是Sigmoid激活函数。而y
2021-09-02 09:54:32
19611
原创 目标检测图像增强方法(Data Augmentation)
1. 图像遮挡1.1 Random Erase用随机值或训练集的平均像素替换图像区域。Paper: Random Erasing Data Augmentation URL: https://arxiv.org/pdf/1708.04896.pdf1.2 Cutout仅对CNN第一层的输入图像使用随机剪切框Mask。Paper:Improved Regularization of Convolutional Neural Networks with Cutout...
2021-09-01 16:05:21
6295
1
原创 YOLOX环境搭建与运行效果
通过git clone git@github.com:Megvii-BaseDetection/YOLOX.git或者下载方式获得旷世在github上共享的工程文件。1. 虚拟环境创建通过如下命令在conda下创建用于工程YOLOX的虚拟环境,假设虚拟环境为yoloxconda create -n yolox python=3.8然后通过命令conda activate yolox进入yolox虚拟环境,接着下面的安装。2. pycocotools的安装在Linux环境下安装
2021-08-16 23:47:47
3800
1
原创 YOLOX采用的最新技术
YOLOX检测器的锚框:采用anchor-free的方式,以及使用例如网络头解耦(decoupled head),与以标签分配策略为主导(leading label assignment strategy SimOTA)的技术生成网络模型。YOLOX使用的相关技术论文1.anchor-free detectors: (1) Hei Law and Jia Deng. Cornernet: Detecting objects as paired keypoints. In ECCV, 2...
2021-08-06 14:49:22
575
原创 yolov4中带groups的route理解
1. yolov4-tiny配置文件示意图其中yolov4-tiny.cfg文件[route]中多出了groups与group_id
2021-06-29 16:37:10
782
1
原创 yolov2中的reorg网络层数据理解
yolov2的reorg数据理解 以上是yolov2的reorg层在整个yolov2网络的示意图。yolov2的reorg层的输入是38x38x64=92416,通过reorg重组得到输出19x19x256。本文需要理解的是reorg是如何重组的。1.reorg的darknet代码2. 根据程序理解矩阵重组本文只考虑长、宽、通道维度上的变化过程。(1) 根据yolov2中的参数,可以得到reorg层:stride=2, in_c=64, [out_w, out_h...
2021-05-26 11:37:18
1596
2
原创 Batch Normalization的Darknet代码解析
Batch_Norm公式推导与Darknet代码理解论文:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》URL:https://arxiv.org/pdf/1502.03167.pdf1. Batch_Norm的正向推导2. Batch_Norm反向推导其中对均值与xi的求导会用到复合函数的求导计算:3. darknet代码3.
2021-05-19 09:46:55
345
原创 darknet的batch_norm是如何融合到卷积层conv的
前向传播中,batch_norm与conv的融合1. batch_norm层的前向传播其中mean(X)表示训练过程中得到的滑动平均值,var(X)表示训练过程中得到的滑动方差。具有泛化整个训练过程所有的图片的像素值。表示缩放因子,表示为平移因子,为学习过程中学习到的值。2. conv层的前向传播其中W表示为卷积核,b表示为偏置,卷积层一般为0。3. 合并batch_norm与conv4. darknet中的函数fuse_conv_batchnorm...
2021-05-07 16:41:16
754
原创 coco数据集的理解
coco数据集的理解一键式下载:https://github.com/pjreddie/darknet/tree/master/scripts/get_coco_dataset.sh,然后在Linux环境下运行.sh文件。1. coco数据集下载地址(1) 图像集下载地址训练图像集:https://pjreddie.com/media/files/train2014.zip验证图像集:https://pjreddie.com/media/files/val2014.zip(2) 图像
2021-04-14 16:53:19
2980
1
原创 评估计算recall、precision、AP、F1、mAP(PyTorch-YOLOv3代码解析二)
目标检测评估计算(Python+Pytorch)代码github地址:https://github.com/eriklindernoren/PyTorch-YOLOv31. 检测的评估函数# reference: https://github.com/eriklindernoren/PyTorch-YOLOv3/blob/f917503ffe4a21d2b1148d8cb13b89b834517d76/utils/utils.pydef ap_per_class(tp, conf, pre
2021-04-13 11:44:03
7197
8
原创 非极大值抑制(PyTorch-YOLOv3代码解析一)
目标检测中的非极大值抑制之代码解析(Python)1. 非极大值抑制函数代码# reference: https://github.com/eriklindernoren/PyTorch-YOLOv3/blob/f917503ffe4a21d2b1148d8cb13b89b834517d76/utils/utils.pydef non_max_suppression(prediction, conf_thres=0.5, nms_thres=0.4): """ 剔除目标置信度小
2021-04-09 15:30:07
1778
原创 “[...]“、“[::]“与torch.cat的解析(YOLOv5 Focus common.py)
"[...]"、"[::]"与torch.cat的解析YOLOv5中common.py的函数Focus.forward,返回为self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)),这句话的解析。def forward(self, x): # x(b,c,w,h) -> y(b,4c,w/2,h/2) return self.conv(
2021-03-18 20:18:18
973
3
原创 图像缩放后单应性还原(Image Stitching 4)
图像缩放后的单应性还原1. 公式推导假设待拼接的两幅图像分别为与,两幅的单应性矩阵为。再假设图像的坐标点与图像的坐标点单应性对应。则有等式(1-1): (1-1) 再假设按照尺度缩放的图像为与,缩放的两幅图像间的单应性矩阵为,同理有等式(1-2): (1-2) 由于图像与是通过尺度缩放后,得到的两幅图像分别为与,因此图像、的坐标点与图像、的关系表为等式(1-3): (1-3) 令 (1-4) 根据公式(1-2)(1-3)(1-4),则有以下推导
2021-03-11 14:02:41
1283
2
原创 动态规划最佳缝合线查找(Image Stitching 3)
相关链接:https://github.com/xitu/gold-miner/blob/master/TODO1/real-world-dynamic-programming-seam-carving.md
2020-10-29 15:27:17
8469
8
原创 centos7编译opencv4.1.2(带sift、surf特征)
1、下载opencv4.1.2与opencv_contrib4.1.2Opencv: https://github.com/opencv/opencv/releasesOpencv_contrib: https://github.com/opencv/opencv_contrib/releases2、camke opencv4(1)解压opencv4.1.2与opencv_con...
2020-01-08 17:48:03
1295
原创 任意个摄像头数据采集与显示
C++中的OpenCV打开多个摄像头需要声明多个VideoCapture对象,这是大部分同学能够想到的。但是如果在不清楚自己设备上连接有多少个摄像头的情况下,这样的方式打开摄像头并采集数据会非常的麻烦。于是本文为了解决这一问题,有一种新的解决办法,主要的思想是通过创建指针的形式来完成,并且把创建的指针放入vector中。具体如下:vector<VideoCapture*&...
2019-12-23 12:02:30
801
1
原创 python最佳缝合线(Image Stitching 2)
最佳缝合线能够有效的去除拼接中运动物体移动出现的鬼影,如何寻找最佳缝合线对于图像拼接去除鬼影比较的重要。寻找最佳缝合线涉及到比较重要的一个思想是动态规划,寻找强度值最优的路径。 关于强度值的计算,具体情况如下:以上公式是重叠像素点的颜色值之差,是结构值之差。这里的结构值计算采用Sobel算子,也可以考虑其他的边缘检测算子,其中x,y方向的算子如下: ...
2019-12-20 17:02:14
10540
23
原创 python加权平均融合矩阵运算(Image Stitching 1)
考虑到python通过for循环实现加权平均融合效率比较低,本文采用矩阵运算的形式实现加权平均融合。其中加权平均融合的公式如下:是融合图像,是需要拼接的两幅图像,是渐入渐出法中的权重,权重的计算公式如下:也就是上面的两个公式,挺简单的,相对于C++而言,用python实现加权平均融合的矩阵运算更加容易理解。直接上结果图,以下是加权平均融合之前与融合之后的对比。加...
2019-12-20 16:00:56
6241
27
原创 VS2019/VS2022编译opencv4.1.2/4.5.5(带sift等额外算法)
编译opencv4.1.2opencv4中的sift、surf受专利保护,不能直接使用,所以需要自己动手编译相关的库。1. 下载opencv与opencv-contrib代码,其中下载的版本为4.1.2,另外还需要cmake工具。它们具体的下载地址如下:Opencv: https://github.com/opencv/opencv/releasesOpencv_contrib: .........
2019-11-04 16:31:18
7341
10
原创 隐写算法(DE: Diamond Encoding)
1. DE直译过来为钻石编码,以下称钻石编码。其模型公式根据上面的公式可以得到钻石编码模型的图形大致如下:2. 钻石编码编码的进制确定,则3. 钻石特征值的计算公式(DCV):4. 列举,秘密信息与钻石特征值的距离:,其中决定着选择的位置,若,则秘密信息嵌入的在D1,D2,D3中对应的位置如下图红色方框所示。于是相应的像素值的改为如下:,,其...
2019-07-18 22:43:35
2392
原创 隐写算法(EMD: Exploiting Modification Direction)
1. EMD算法介绍 该算法嵌入过程分成5中情况: (1) 当,则不用改变,函数能够表示秘密信息; (2) 当,则; (3) 当,则; (4) 当,则; (5) 当,则; 该算法秘密信息的提取过程,用以下函数: 其中,是两个相邻的像素值。...
2019-07-17 20:28:40
2608
原创 隐写算法(OPAP: Optimal Pixel Adjustment Process)
设像素值为,假定待嵌入的二进制为,则嵌入数据的位数,值为。把秘密二进制替换到像素点最右边的最低位得。其中像素值最右边的最低位,,于是。因此,嵌入到最低位,即157为嵌入秘密二进制的像素值。提取时,只需要提最低位二进制。 OPAP方法中,为了减少图像的失真,则相应的调整如下:其中,是像素点最右边位被秘密信息二进制替换的结果;为待嵌入二进制位数,为像素值最右边位二进制...
2019-07-15 21:37:37
1631
2
原创 远程访问CentOS的jupyter,相关配置
1. 生成jupyter notebook的配置文件,命令:jupyter notebook --generate-config会生成文件~~./jupyter/jupyter_notebook_config.py2. 生成sha1码,需要在python环境中生成。相关命令:>>> from notebook.auth import passwd>&g...
2019-07-05 18:10:09
837
1
原创 Centos无法ping通百度,不能上网的解决办法
1. 首先查看Linux服务器的ip地址,命令ifconfig, 或者ifconfig 网卡。主要是查看是否配置DNS,如果没有配置DNS就无法上网。情况如下:2. 配置DNS相关信息,编辑 /etc/resolv.conf,添加如下信息:search localdomainnameserver 网关nameserver 61.139.2.69/电信 (或其他)3. 重新...
2019-05-30 15:06:18
2865
1
原创 最简单的梯度下降法求最优值
梯度下降法,主要通过梯度方向与学习率两个值,一步一步迭代求出最优值的过程。1. 随机产生开始迭代的初始值,包括x值,学习率;2. 计算函数的导数,通过学习率与导数的乘积更新x,即其中是学习率,是函数的导数。3. 用更新的x,更新y,重复2与3,直到相邻两个y值相同,或者相邻两个y的差值小于某个值终止。假设以为例,则相关python代码实现如下:# 第一步:随机生成一个...
2019-05-15 21:20:53
2364
1
原创 深度学习图绘制工具汇总
1. NN-SVG麻省理工学院弗兰克尔生物工程实验室, 该实验室开发可视化和机器学习工具用于分析生物数据。GitHub地址:https://github.com/zfrenchee画图工具体验地址:http://alexlenail.me/NN-SVG/2. PlotNeuralNet萨尔大学计算机科学专业的一个学生开发。https://github.com/HarisI...
2019-04-25 10:59:49
3081
1
原创 PyQt5界面快速开发(QtDesigner与PyUIC工具)
首先要实现PyQt5界面的快速快发,需要两个工具QtDesigner与PyUIC。它们功能分别是界面设计与界面代码转换工具。(1) 打开PyCharm中file的setting,定位到Tools下的External Tools,如图1所示。 ...
2019-04-23 14:27:06
2638
原创 CIFAR10中的KNN分类
1. KNN思路 相对于NN算法而言,KNN的关键在于,通过欧式距离计算待分类图像与训练集图像之间的距离,做距离之间从小到大的排序,找出前K个从小到大出现次数最多的标签作为预测分类标签。具体的示意图如图1所示。 图1 KNN分类CIFAR10大致思...
2019-04-16 21:46:56
2833
1
原创 PCA(主成分分析方法)
目录1. 降维问题2. 向量与基变换2.1 内积与投影2.2 基2.3 基变换的矩阵3.协方差矩阵及优化目标3.1 方差3.2协方差3.3协方差矩阵3.4协方差矩阵对角化4. 算法与实例4.1 PCA算法4.2 实例5. 讨论 PCA(Principal Component Analysis)是常用的数据分析方法。...
2019-04-13 00:16:15
32912
5
原创 CIFAR10图像生成与NN分类
1. CIFAR10的数据集描述 整个CIFAR10数据集包括5个batch,一个test,整个数据集文件如图1所示。其中数据集以字典形式存放,包括数据集的名称、标签、数据矩阵、图片文件名称四个数据。标签范围从0到9变化,数据矩阵大小为10000*(3*32*32),后面的数字表示图像的大小为32*32的彩色图像。具体键名称为'batch_label', 'labels', 'da...
2019-04-10 14:51:01
959
1
原创 git使用篇
GIT篇目录 GIT篇1. 分布式与集中式管理2. 时光穿梭2.1 版本回退2.2工作区与暂存区2.3 管理修改2.4 撤销修改2.5 删除文件3. 远...
2019-04-06 00:14:07
210
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人