自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 模型优化部署CUDA基础篇:第一个CUDA代码-打印hello-world

但是最好使用cmake,因为cmake在项目复杂的时候更加方便。功能:使用gpu打印helloworld。可以直接使用nvcc去编译CUDA代码。cmake是学习cuda的基础。

2024-05-22 14:44:53 62

原创 cuda0:为什么学习cuda

最近在用tensorrt做部署的时候发现如果想要把模型部署作为主业,仅仅会调用tensorrt一些函数是不够用的,还需要对cmake和cuda有更深的理解。cuda是平台和编程模型使得我们可以通过C++和其他编程语言直接利用 GPU 的并行计算能力。c++、cmake、蒸馏、剪枝、量化、cuda编程等是做模型部署的比较基础的东西。tensorrt是用来优化模型。

2024-05-21 10:11:28 55

原创 深度学习模型部署:OpenCV的DNN模块学习

OpenCV的DNN模块可以用来加载和使用由各种深度学习框架训练的模型,例如TensorFlow, Caffe, Darknet, Torch/PyTorch等。使用OpenCV DNN模块,可以在不需要安装这些框架的情况下运行深度学习模型,对于部署在较低功耗或限制性环境中的应用程序特别有用。:使用,其中XXX可以是Caffe, TensorFlow, Torch, Darknet或者是onnx等,具体取决于模型格式。:准备好输入数据,通常需要进行一些预处理,比如缩放、中心化、归一化等。

2024-05-10 14:23:46 220

原创 open3D嵌入pyqt+动态射线及平面可视化

原理:假设平行四边形的前三个点是ABC,这里是找到在同一个平面上的平行四边形的第四个点D,这里要假设AD//BC,BD//AC 则有-> A-C = CA;BD + B = D;1)现在用到的视线的起点是固定的起点,终点是平行四边形四条线间隔0.08采样离散点得来的 是加载的txt文件得到的array。这里的顺序要和后面的线条对应 因为AD//BC,BD//AC 所以画线的时候要画 AD BC BD AC 四条线。这里不是用的A-B-C-D-A的方式,而是AD-DB-BC-CA的方式,可以自行更改。

2024-04-01 10:15:02 403

原创 mmrotate代码学习之delta_xywha_rbbox_coder.py

主要作用是,输入预测框和anchor输出偏移量,或者输入偏移量和anchor输出预测框。这个文件在用l1损失的时候会用到。计算GT和anchor的偏移量。由偏移量计算bbox。

2024-03-02 13:56:42 165

原创 mmrotate中的rotate_anchor_head.py—loss()部分

这是mmrotate,anchor-base的head损失的计算部分。

2024-03-01 18:32:42 172

原创 yolov8-obb中的probiou

原论文 “https://arxiv.org/pdf/2106.06072v1.pdf”。该函数接受两个定向边界框(Oriented Bounding Boxes,OBB)作为输入,分别为真实的边界框和预测的边界框,然后计算它们之间的相似度。这个函数 probiou 是用于计算定向边界框之间的概率交并比是yolov8-obb计算损失时的核心代码,其可以缓解边界不连续的问题。

2024-02-27 21:47:05 947 1

原创 mmdetection中的TOOD动态标签分配器代码注释tood.py-assign

类的主要功能是为每个预测框分配一个对应的真实框或背景。这个分配过程基于计算预测框与真实框之间的对齐度量(alignment metric),并选择与每个真实框对齐度最高的前k个预测框作为候选。论文 "TOOD: Task-aligned One-stage Object Detection"

2024-02-26 22:23:00 294 1

原创 mmrotate代码解读之RotatedAnchorHead—get_anchors()函数

生成锚点:首先,使用anchor_generator的grid_priors方法为一组特征图尺寸生成多尺度的锚点。为每张图像根据其特征图的大小生成锚点,并为每个锚点生成一个判断是否有效的布尔值(valid flag)。anchor_list:每张图像的锚点列表,每个元素是一个张量,包含了该图像所有锚点的坐标。复制锚点:接着,将这组多层次锚点复制给每张图像即batchsize张图片,组成anchor_list。featmap_sizes: 特征图的尺寸列表,每个元素都是一个二元组,表示特征图的高度和宽度。

2024-02-17 22:48:27 124 1

原创 mmrotate代码解读之RotatedAnchorHead—loss_single()函数

1.cls_score (torch.Tensor): 单个尺度的类别分数,形状为 (N, num_anchors * num_classes, H, W),其中N是批次大小,num_anchors是每个位置的锚框数量,num_classes是类别数量,H和W是特征图的高和宽。x,y,w,h,角度。它是由标签分配得来的。7.bbox_weights (torch.Tensor): 每个锚框的边界框回归损失权重,形状为 (N, num_total_anchors, 5)。否则,它是正锚框的数量。

2024-02-16 11:40:20 692 1

原创 mmrotate框架代码学习1:mmrotate和mmdetection的安装使用

mim可以帮助我们完成版本之间的搭配,基本上跟着mmrotate的官方文档安装不会出现问题。但是,如果想要在使用mmrotate的同时,本地安装mmdet,就是用git clone来安装,方便更改mmdet里面的代码的话还是有点麻烦的。这样按照mim给的版本对应着安装的mmdet基本上出现版本问题的概率会小很多。然后去mmdet的github主页下载mmdet对应版本的代码。我自己摸索了一个简单的方法找到我们应该安装的mmdet的版本。然后,按照mmrotate给的方法安装mmdet。

2024-02-15 16:30:20 269 1

原创 python函数装饰器的简单理解和mmdet、mmrotate中的部分组件debug不到的原因

在看这部分的时候感觉mmdet和mmrotate里面的部分的组件没办法debug有可能是这个原因。相当于运行了一次b_1(a_1)然后将其赋值给a_1。mmdet和mmrotate中用了大量的函数装饰器。而且这个过程自动运行,debug无法停止其过程。在定义的a_1函数上方使用函数装饰器。

2024-02-03 16:59:11 228 1

原创 mmdet下游任务mmrotate使用git clone安装mmdet,方便改代码安装方法

但是如果自己用git clone去安装mmdet,然后在用git clone的方法安装mmrotate,百分之九十的同学会遇到版本的问题,我们根本无从得知哪些版本的mmrotate对应哪些版本的mmdet。openmim可以帮助我们找到不同的版本之间的联系,根据我们的安装torch的版本安装mmdet,用mim安装一般都是没问题的。但是当我们在mmrotate里想要去更改调用的mmdet里面的代码的时候就有点困难。然后在你自己创建的这个环境中查看mmdet和mmrotate的版本。

2024-01-28 12:48:02 232

原创 关于mmrotate测试DOTA的一个小但难发现的问题

正常按照mmrotate的官方文档,进行测试一直出现这个问题,github、csdn所有差不多的问题都看了一遍,也没看到解决办法。然后搜mmrotate测试看看别人有没有遇到这个问题,果然有收获,他的文章里没有这段报错的提示部分,所以之前没有搜到。把dota.py那个文件里的test的标签路径改成images的路径。这里不知道作者怎么想的。

2024-01-27 21:03:40 386

原创 同一款相机,搭配不同焦距的镜头,在使用目标检测器检测快速运动的图片中小目标时识别率反倒是焦距长的效果更差?

长焦距镜头通常比短焦距镜头有更浅的景深,这意味着对于运动目标的对焦更加敏感,稍有不准就可能导致模糊,从而降低识别率。2.由于长焦距镜头视野更窄,对相同移动速度的目标,其在图像上的移动距离可能会更大,从而产生更明显的运动模糊。在使用不同镜头时遇到了这样的问题,由于检测的目标中大多是小目标,直觉是焦距更长目标就会更大,那么检测效果应该是更好的,但实际情况是相反的。感觉在目标检测的实践中远比在电脑上跑实验要复杂的多,感觉需要对相机、模型、实际应用场景都有较多的学习才可能达到真正落地的地步。

2024-01-25 13:45:21 344

原创 python参数union[str, Path]

主要是为了代码的可读性,没有特殊意义。这个代表该参数是字符串或路径。

2024-01-17 16:29:54 410

原创 python装饰器

也就是说如果装饰器函数,内部return了另一个函数,那么我们再去执行装饰器下面这个函数那就是执行装饰器return的那个函数。将装饰器下方的函数作为@后面这个函数的参数,并且执行@后面这个函数。然后,再将结果赋值给下方的函数。python装饰器1。

2023-12-25 20:46:03 23

原创 抽象类理解实现

可以定义一个抽象类这个抽象类中定义了抽象方法,其子类必须定义它的抽象方法并实现这些方法。这样可以分离总体设计和具体实现,方便协作编程。最近在看mmdet里面很多编程思想是没经过系统训练的我们没学到过的,拆解其中的知识点,自己实现一遍小知识点。我们在调用它子类方法的时候,可以不用看子类,直接调用。

2023-12-23 21:26:40 28 1

原创 用bool值组成的tensor去筛选/切片tensor

在yolov5的build targets里看到了这个用法,自己测试了一下。网上解析很少,这个简化版本可以帮助大家理解。

2023-08-17 15:11:30 165 1

原创 手势识别项目(个人demo)

1.offset可能会导致x和y的值小于零以致imshow和rectangle不工作,尝试使用x/10和y/10作为偏移量,取得较好效果。通过opencv打开摄像头并且截取根据cvzone检测出来的手部关节点以及边界框数据得到的手部截图。也可自选分类模型训练,只有6,7,8三个数字分类标签比较容易制作。通过在线训练网址得到训练结果的h5文件和label标签。2.数据集制作可以做多一点防止过拟合。通过在线训练网站,进行在线训练。目标:识别6、7、8 手势。

2023-07-23 09:57:03 137

原创 kaggle学习:cv_trick

1.分类_目标占图像很小一部分_将图像切割减少资源浪费,可以显著减少训练和推断时间。来源:kaggle乳腺癌。

2023-07-05 21:56:45 80

原创 t = t[j],j是true或者F组成的tensor这个切片怎么用?

在yolov5里看到这个t = t[j],j是由T和F组成的tensor(3,216),t是一个(3,216,188)的一个tensor那t = t[j]中的t经过这次切片变成了什么?也就是说j是由1和0组成的tensor,可以把j看作一个转置的矩阵每行有3个0或者1组成的数,这样就变成了用tensor来切片tensor。这样的话假设第一行为T,T,F 就可以认为是1,1,0就是第一维的第二个,第二维的第二个和第三维的第1个。但是这里的t是三维的用两个tensor就可以切片为什么用了三个?

2023-06-06 11:04:28 81 1

原创 python切片学习:a[b,c]a,b,c都是tensor,用tensor来切片tensor

用tensor来切片tensor

2023-06-06 10:46:14 165 1

原创 学习笔记:python游戏脚本1.0版本,实现自动点击、识图、识别价格、弹窗提示低于预期价格可以购买

游戏脚本1.0

2023-02-24 11:22:19 3167

原创 python学习笔记if __name__ == “__main__“:

if __name__ == "__main__": 语句的作用

2023-02-17 14:17:37 123

原创 Faster-RCNN-pytorch代码解读(1)model-rpn-generate_anchors

faster-rcnn代码

2022-08-11 23:13:35 144 1

空空如也

空空如也

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

TA关注的人

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