- 博客(16)
- 收藏
- 关注
原创 yolov8中obb旋转框的角度范围与表示方法转换
yolo obb格式的数据集标注方法是多边形标注法,即标注出来旋转框的四个xy坐标,即是一个长度为8的张量,但在yolo的obb检测头中,并不是直接预测8个坐标值,而是预测xywhθ,这就牵涉到ground truth标签的转换。这里我们可以知道,通过segments2boxes方法,得到旋转框的最大最小顶点 ,作为xyxy表示法的坐标,再转换为xywh。可以看到,lb变量每个子数据长度都是9,其中第一个是object类别,其余8个是多边形的顶点xy,再回过头去看这个函数,可以发现,
2024-09-30 22:19:20
3134
7
原创 Yolo11网络结构详解与对比
可以发现,引入了自注意力机制,首先使用了卷积块提取特征,并分为两部分a,b,其中b会通过PSAblock进行注意力计算,最后再通过cat与a连接,并用一个卷积进一步提取特征。可以看到,相比于C2f,当超参数c3k=True时,瓶颈块替换为 C3k,否则还是C2f,而C3k相比于C3则是可以让使用者自定义卷积块大小,更加灵活。而在PSAblock中,则是使用了多头注意力和一个前馈神经网络ffn,ffn是通过两个1*1的卷积层实现的最后通过超参数判断是否残差连接,最后返回结果。
2024-09-30 13:38:49
6430
原创 yolov8 obb_head解析
然后选择候选框方法也被重写了,首先将坐标转换为多边形表示法,然后通过split方法,得到矩形的四个顶点a, b, _, d,它们分别代表了每个顶点的(x,y),通过相减,我们可以得到矩形的两条边向量ab,ad.这里判断锚点是否落在了真实框内,用到了向量的知识,如果顶点a到锚点p的向量ap与真实框的两条边的向量点乘均为正,说明在同侧,同时如果点乘大小小于两条边的长度,说明确实落在了真实框内部。相应的dfl部分也是 简单粗暴的直接舍去了旋转角度,直接去计算hbb的四个点的损失。
2024-09-29 13:12:16
755
原创 YOLOV8中的多分类预测框非极大值抑制
之前在研究目标检测推理时后处理时,只了解了会进行预测框之间的非极大值抑制(nms),但在仔细研究了YOLOV8的nms源码后,发现它的做法并非传统的nms,而是会进行类别偏移处理。其中x是一个形状为(num_preds, 6)的张量,其中x[:, :4]表示的是预测框的四个点,而x[:, 4:]表示的是分类的置信度、类别索引,所以我们可以知道,c得到的是类别索引*max_wh,因为这里agnostic默认设置为false,这样一来,所有的类别索引都会被放大 max_wh倍。
2024-09-18 21:29:14
749
原创 yolov8head解析
也就是说,当特征图通过检测头的时候,会被转换为形状为(batch_size, 16 *4, w, h),而yolov8默认开启3个尺度的回归,所以前向传播会返回一个长度为3的列表,其中每个列表的形状是(batch_size, 16 *4, wi, hi)i=0,1,2。这个函数生成了每个特征图的中心点,0.5代表我们取中心点的意思,设想一下我们的坐标如果取(0,0), (1,1)...这实际上是反映了每个预测框的左上角坐标,通过+0.5可以理解为取中间的位置。
2024-09-11 16:46:58
1873
4
原创 mmdetection旧版安装指南
由于版本更新,新版的mmcv对应旧版的mmcv-full,新版的mmcv-lite对应旧版的mmcv,本人通过此文档确定安装mmcv-full==1.3.17。接着安装mmdet,请注意,这里一定要使用源码安装,也就是使用你克隆的那个仓库的代码进行安装,而不是再去克隆mmdetection的代码,本人在这里踩了坑。接下来,再查看你克隆的项目的readme文档,使用pip install -r 安装所需的项目依赖。设置环境变量,请注意,这个命令是临时的,当你关闭当前ssh会话后,就会失效。
2024-09-03 22:09:26
876
原创 X-anylabeling使用ai模型标注闪退
这表明设备安装了cuda,但没有启动成功,本人经过搜索,发现是由于安装cuda时,默认不按照cudnn导致,但是由于pytorch包自带了cudnn运行所需文件,因此我们在执行训练时不会出错。遇到该问题首先确保使用的是源码启动,如果不是,请到github下载源码运行。
2024-07-12 11:25:41
1527
1
原创 python条件分支简化
比如我们需要编写一个电影评分的判断,小于6分的评分为D,6-7评分为C,7-8评分为B,8-8.5评分为A,8.5以上评分为S。我们可以使用python内置的二分查找包。只需要将对应的区间与评分对齐即可,这时python会自动完成相应区间查找,并返回对应的评分。当在编写复杂的业务逻辑需要大量嵌套if-else语句时,会导致代码可读性很差,并且难以维护。
2024-04-14 13:46:04
485
2
原创 yolov8添加/删除模块报错Expected to have finished reduction in the prior iteration before starting a new one
这个时候我们从第0层开始数,可以发现我们的添加的层应当是5,因此下面的Concat和Detect操作凡是有层数大于等于5的,全部需要+1,修改如下。不懂得这些参数含义的同学可以先把配置文件的含义搞清楚,再进行修改。
2024-04-11 21:06:33
572
1
原创 yolo报错RuntimeError: CUDA error: device-side assert triggered
此问题是由于数据集配置有误,导致类别id与yaml文件中的索引号匹配不上导致的,这里我以为hrsid数据集为例,由于该数据集在标注时默认从1开始索引,这与yolo从0开始的不匹配,因此如果直接使用通用的coco2yolo脚本进行转换后,进行训练就会报错。该数据集只有一个类别,但索引却是1,因此我们需要修改coco2yolo脚本,找到你的脚本对应的id部分。这时候我们打开转换后的任意一个标注文件。其他的脚本大同小异,修改后开始炼丹!
2024-04-10 19:53:54
1832
2
原创 释放gpu显存
在进行深度学习时,有时候会出现训练结束后,显存依旧占用的问题,可能是因为训练进程未能正确关闭,使用如下命令查看gpu进程占用。接着使用linux的kill命令杀掉进程即可。
2024-04-01 22:49:58
709
原创 mmdetection常用命令
使用--show将会在窗口中展示原图和测试后的图像,--show-dir将会把show展示的结果保存到指定路径,请注意,这两个命令相互独立,可以单独运行。resume将会接着上次的epoch继续训练,直到达到设置的最大epoch。本篇博客是本人在进行目标检测实验中使用到的一些命令,不定时更新。
2024-03-29 21:01:38
462
1
原创 pytorch中元素维度扩张和广播的个人理解
这里可能比较绕,我直接给出规律,即对于新的矩阵第二个维度的“第一行”相当于原来第一个元素的x坐标重复了4次,第二行是原来的第二个元素的x坐标重复了4次,以此类推,也就是说第二个维度保存了原本矩阵的4个元素的x坐标;于是,第二个维度也就保存了原本矩阵的每个元素的y坐标。可以看到,从第二个维度开始,好像是fmpa转置了一样,也就是说,对于第二个维度的每一行,保存的是原来fmp矩阵的第一个元素的x坐标,也就是说第一行重复了四次第一个元素的x坐标,第二行重复了广播前fmp矩阵的第二个元素的x坐标。
2024-03-22 21:18:45
330
2
原创 Python中NamedTuple的用法以及好处
而自定义类则需要更多的代码来定义类及其属性,并且需要手动编写。我们必须一一找到并进行修改,这带来了巨大的工作量,但是如果我们一开始就使用NamedTuple,这些问题就可以得到规避。而在自定义类中,需要手动编写方法来实现属性的访问和设置。实例是不可变的,一旦创建就无法修改其字段的值。而自定义类的实例通常是可变的,可以通过方法修改实例的属性值。如果我们有新的业务需求,只需修改address类即可,之前调用的代码不需要更改。可以看到,如果继承NamedTuple,我们的类就拥有了元组的特性。
2024-03-22 16:49:59
621
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人