自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Java集合】单列集合List详解

List接口属于单列集合Collection接口下的其中一条分支,它最常用的三个实现类分别是——。这三个实现类各有各的特点,但又有着一些相同的特性。本文将从List集合的介绍、特点、使用,再到它的三个常用实现类的底层源码分析,完完整整地梳理清楚List位于,是单列集合Collection接口下的一个子接口。接口不能直接被实例化,因此需要通过创建其子类对象来完成该接口的实例化(即多态List 接口最常用的3个子类有。本文以ArrayList类为例演示List接口中的常用方法。

2025-04-04 16:47:45 327

原创 【Java集合】LinkedList源码深度分析

本文是对单列集合 List 的实现类之一LinkedList的源码解析。对于单列集合List的三个最常用的实现类——,我对的源码解读在另外两篇文章,感兴趣的话可以看看:【Java集合】ArrayList源码深度分析-优快云博客【Java集合】Vector源码深度分析-优快云博客注意 :本文对LinkedList源码的解读基于主流的JDK 8.0的版本①LinkedList是一种常见的线性表,每一个结点中都存放了下一个结点的地址。LinkedList类位于②链表可分为。

2025-04-04 16:30:45 371

原创 【Java集合】Vector源码深度分析

本文是单列集合List的实现类之一Vecto类的扩容机制源码解析。利用Debug来一步一步地剖析Vector源码,看看它底层的扩容机制到底是如何实现的建议大家在看这篇博文之前优先去看一下我的另一篇博客对ArrayList类的源码分析:【Java集合】ArrayList源码深度分析-优快云博客因为二者同属List接口的实现类,而且底层的一些实现方法非常类似注意 :本文对Vector源码的解读基于主流的JDK 8.0的版本Vector类是单列集合List。

2025-04-04 16:23:03 337

原创 【Java集合】ArrayList源码深度分析

本篇博文是对单列集合List的实现类ArrayList的内容补充。之前在List集合的详解篇,只是拿ArrayList演示了List接口中的常用方法,并没有对它进行深究。但这正是本文要做的内容up会利用Debug来一步一步地剖析ArrayList底层的扩容机制到底是如何实现的。重点是空参构造器构造ArrayList对象后,底层扩容机制的详细实现注意 : ①解读源码需要扎实的基础,比较适合希望深究的同学;②不要眼高手低,看会了不代表你会了,自己能全程Debug。

2025-04-04 16:18:03 450

原创 【Java SE】Math类、System类

System类位于,其源码如下:同样,由于用fianl关键字修饰,System类不可被继承;构造器被设置为private,因此不可被实例化。

2025-03-31 18:48:58 661

原创 【Java SE】Arrays类

①Arrays类是Java语言中用于操作数组的一个工具类,提供了多种静态方法来处理数组,包括排序、搜索、填充、比较等操作②Arrays类位于中,该类所有的构造方法被设置为private,因此无法创建Arrays 对象③Arrays所有方法都是静态的,可以直接通过"Arrays.方法"调用。

2025-03-31 16:51:41 571

原创 【Java SE】Java比较器:Comparable、Comparator

Java中的对象,正常情况下,只能进行比较:==或!。不能使用或。但是在实际开发场景中,有时候需要对多个对象进行排序,言外之意,就是需要比较对象的大小。这便引出了两个接口。

2025-03-29 18:37:52 1160

原创 【Java SE】StringBuffer、StringBuilder详解

在String类中,每个字符串对象都是常量。当创建一个字符串对象,之后对其内容进行"增删改"时,实际上原来的字符串对象已经丢弃了。JVM在底层会重新创建一个字符串对象,并令其指向新的数据空间所以,问题就来了:如果多次进行"增删改"的操作,会导致大量副本字符串对象遗留在内存中,降低效率。应该如何解决这个问题呢?这便引出了类类,指可变字符序列,用于构造字符串对象。其内部使用自动扩容的数组来存放字符串数据。类属于java.lang包下,其继承关系图如下:可以看到,类并没有像。

2025-03-29 11:17:27 790

原创 【Java SE】String类详解

①String是引用数据类型,用于保存字符串,也就是一组字符序列。例如:"你好"、"12.97"、"boy"等②字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节。

2025-03-28 17:15:34 839

原创 【Java SE】包装类 Byte、Short、Integer、Long、Character、Float、Double、Boolean

基本数据类型不是对象,不能使用类的方法;因此,Java针对基本类型提供了它们对应的包装类,八大基本数据类型,对应了八种包装类,以对象的形式来调用。包装类有了类的特点,使得可以调用包装类中的方法八大包装类位于java.lang包下,如下图所示:​除了Integer和Character这两个包装类外,其他六个包装类的类名均是对应的基本类型首字母大写后得到的基本类型 ——> 包装类型(或者叫对象类型,引用类型)包装类型 ——> 基本类型。

2025-03-27 16:46:45 1358

原创 【Java SE】异常

小明每天开车上班,正常车程 1 小时,但是可能会出意外情况。比如说堵车了、车没油了、出现交通事故了等等出现意外,即为异常情况。如果不处理异常情况,则到不了公司。所以需要对不同的异常情况做相应的处理,处理完后则可以正常开车去公司在编写程序时,经常要在可能出现错误的地方加上检测的代码,如进行x/y运算时,要检测分母是否为0,数据为空,输入的不是数据而是字符等过多的if-else分支会导致程序的代码加长、臃肿,可读性差,程序员需要花很大的精力"堵漏洞"。因此采用异常处理机制Java异常处理。

2025-03-26 19:05:17 629

原创 【Java SE】枚举

实现步骤①将自定义类的构造器私有化,使其不能在外部被地new出对象②去掉类中提供的setXxx方法,仅保留getXxx方法。因为“枚举类”对象仅可读,不能随便修改对象的属性③在自定义类中创建一组用修饰的对象(使用可实现底层优化,不会导致类加载)。并且要对外暴露这组对象,因此要添加public修饰符来公开这组对象④枚举对象名通常全部大写,以符合常量的定义规范⑤枚举对象根据需要,也可以有多个属性代码实现//调用toString方法//(1)构造器私有化,防止在外部new对象。

2025-03-25 10:41:43 651

原创 【Java SE】内部类

当一个类的内部又完整地嵌套了另一个类时,被嵌套于内部的 “内核” 我们称之为“内部类”(inner class);而包含该内部类的 “外壳” 我们称之为“外部类”(outer class)。内部类最大的特点就是可以直接访问私有属性,并且可以体现出类与类之间的包含关系PS : 底层源码中往往含有大量的内部类局部内部类(有类名)定义在外部类的局部位置,通常定义在方法体中。局部内部类的本质仍然是一个类,因此它也可以有自己的成员①本质是类②是局部内部类 ③没有显式的类名 ④本质也是对象。

2025-03-24 12:05:48 1207

原创 【Java SE】接口interface

①接口就是规范,定义的是一组规则,体现了现实世界中如果"如果要...,则必须能..."或"如果要...,则必须有...."的思想。②继承是一个 "是不是" 的is-a关系,而接口实现则是 "能不能" 的has-a关系。

2025-03-24 10:12:41 965

原创 【Java SE】抽象类/方法、模板设计模式

①当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法②类中只要存在一个抽象方法,则该类必须为抽象类③抽象类的价值更多作用在于设计,具体来说:设计者设计好后,让子类继承并实现父类的抽象方法dog.eat();//抽象类//抽象方法,只知道吃的动作,但不知道具体的动物吃什么东西System.out.println("狗吃骨头");抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。

2025-03-21 21:28:59 764

原创 【Java SE】final关键字

参考笔记:java的final关键字-优快云博客目录1.final关键字使用范围2.final修饰类3.final修饰方法4.final修饰变量5.final使用注意事项6.练习题6.1 题16.2 题2用 final 关键字修饰类,表示这个类不能被继承,没有子类。不希望别的类去修改或者重写它的方法,例如 String、StringBuffer用 final 关键字修饰方法,表示这个方法不能被子类重写,但可以被子类继承4.final修饰变量用 final 关键字修饰的变量(成员变量或局部变量)称

2025-03-21 18:44:41 485

原创 【Java SE】单例设计模式

设计模式是在大量的实践中总结和理论化之后优的代码结构、编程风格、以及解决问题的思考方式。

2025-03-21 17:26:04 705

原创 【Java SE】代码块

代码块又称为初始化块,属于类中的成员,类似于方法(可以看作只有方法体的方法),将逻辑语句封装在方法体 中,通过{ }包围起来但和方法不同,代码块没有方法名,没有返回值,没有参数,只有方法体,而且不用通过对象或者类显式调用,而是加载类时或创建对象时隐式调用。

2025-03-21 11:21:24 905

原创 labelimg标注的VOC格式(xml文件)转COCO格式(json)

文件存放路径为 D:\BaiduNetdiskDownload\yolov8-ship\okk\coco\train.json。修改为 :D:\BaiduNetdiskDownload\yolov8-ship\okk,指定生成的。标注文件存放目录:D:\BaiduNetdiskDownload\yolov8-ship\okk。下面是脚本文件,该脚本文件可以把目录下的多个。文件,需要修改的地方写在代码前面了。

2025-03-20 09:17:39 282

原创 【Java SE】静态变量、静态方法、main方法

当编写一个类时,只是在描述其对象实例的属性和行为,而并没有产生实质上的对象,只有通过。关键字才会创建对象,这时系统才会分配内存空间给对象,类中的成员才可以供对象调用。(1)静态变量的访问修饰符的访问权限和普通变量是一样的,依然要遵守;(7) 调用静态方法时,可以通过类名或对象引用调用,即使对象引用为。(3)静态方法的访问修饰符的访问权限和普通方法是一样的,依然要遵守。访问该类中的非静态成员,必须先创建该类的一个对象实例后,再通过。(3)静态变量与实例变量的区别:静态变量是该类的所有对象实例。

2025-03-17 10:08:16 864

原创 【Java SE】native关键字、== 比较符、Object类的几个常用方法

应用示例:判断两个Person对象的内容是否相等,如果各个属性值都一致,则返回true,反之返回falsePerson p1 = new Person("小马", 20, '男');Person p2 = new Person("小马", 20, '男');Person p3 = new Person("蔡徐坤", 20, '男');//true//false@Override//如果是同一对象//类型判断,是Person类型才进行比较。

2025-03-15 20:47:56 698

原创 【Java SE】面向对象编程(中级)

Java提供4种访问控制修饰符,用于控制方法、属性(成员变量)的访问权限(访问范围)4 种访问控制修饰符:public 、 protected 、 缺省 、 private(1)public:公开级别,对外公开(2)protected:对子类和同一个包中的类公开(3)缺省:没有修饰符号,向同一个包的类公开(4)private:只有类本身可以访问,子类也不能访问,不对外公开。是最严格的级别本类内部本包内其他包的子类其他包非子类public✔✔✔✔protected✔✔。

2025-03-12 15:30:15 816

原创 如何计算两个向量的余弦相似度

还有很多两个向量的相似度度量方法,比如欧式距离,曼哈顿距离,切比雪夫距离等,等后面有时间再补充了。百度的解释:余弦相似度,又称为余弦相似性,是通过计算两个。余弦相似度将向量根据坐标值,绘制到。所谓的相似是什么,假设有两个向量。a:向量,可以是高维向量,例如。b:向量,可以是高维向量,例如。:a 向量与 b 向量的夹角。

2025-03-08 20:32:13 494

原创 【Java SE】面向对象编程(基础)

局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(即引用类型,它不等同于对象本身,是对象在堆内存的首地址)。(系统生成的无参构造器的修饰符看类的修饰符跟类是一致的)。Constructor = 构造器 = 构造方法,是类的一种特殊的方法,它的主要作用是。前提下,如果通过其中某一个对象变量修改对象的属性时,会影响另一个对象变量此属性的值。(1)类是抽象的,代表一类事物,比如人类,猫类,类是一种。

2025-03-03 09:34:50 806

原创 【Java SE】Java中String的内存原理

(3)放在字符串常量池中的好处就是省去了对象的创建过程,从而提高程序的执行效率。经过上述代码,字符串常量池中有字符串:"123","456","12","k","马","s","abc","sabc"(2)如果没有,则在字符串常量池里面开辟一块空间用来存放该字符串常量,并返回。拼接生成的新字符串不会被放到字符串常量池中,只会存放到堆中。都会被放到字符串常量池中,返回的引用也是来自字符串常量池。(1)如果有,则直接返回字符串常量池中存放该字符串的。在编译阶段进行拼接。存储在字符串常量池中,字符串常量池中的。

2025-02-28 17:09:41 852

原创 【Java SE】基础知识1

字符型存储到计算机中,需要将字符对应的码值(整数)找出来比如对于'a'字符计算机的存储和读取如下:字符和码值的对应关系是通过字符编码表(人为规定的)决定的,下面有几种字符编码表,如今UTF-8使用最多。

2025-02-27 20:31:29 924

原创 【Java SE】Java入门基础、JDK安装和配置

程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序执行的集合给计算机提的要求:完成1+1,并把答案显示在电脑上,其大致的流程如下图2.Java特性面向对象面向对象 (OOP) 就是Java语言的基础,也是Java语言的重要特性面向对象的概念:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象,我们可以将这些事物的状态特征(属性)以及行为特征(方法)提取并出来,并以固定的形式表示健壮性Java的强类型机制、异常处理、垃圾的自动收集等是Java。

2025-02-25 22:03:09 945

原创 知识蒸馏基础知识

知识蒸馏知识蒸馏就是把一个大的教师模型的知识萃取出来,把它浓缩到一个小的学生模型,可以理解为一个大的教师神经网络把他的知识教给小的学生网络,这里有一个知识的迁移过程,从教师网络迁移到了学生网络身上,教师网络一般比较臃肿,所以教师网络把知识教给学生网络,学生网络是一个比较小的网络,这样就可以用学生网络去做一些轻量化网络做的事情。

2025-02-22 22:16:28 823

原创 YOLOv5改进系列(五)更换减轻模型复杂度且提升精度的GSConv+Slim-Neck

这篇论文写的挺好的。

2025-02-22 09:57:05 1132

原创 YOLOv5改进系列(四)更换损失函数 EIoU,SIoU,Alpha-IoU,MPDIoU

EIOU是在CIOU的惩罚项基础上将预测框和真实框的纵横比的影响因子拆开分别计算预测框和真实框的长和宽,来解决CIOU存在的问题。这里我们先看一下CIoU的计算公式:CIoU计算公式(1):真实框的宽:真实框的高(2):预测框的宽:预测框的高(3):可以理解为对于预测框的高和宽的惩罚系数;(4):用来衡量高宽比的一致性,当预测框与真实框的高和宽越接近时,越接近于0(5):预测框的中心点:真实框的中心点:两点之间的欧式距离(6)

2025-02-21 10:06:28 964

原创 【YOLO系列】YOLOv8训练、测试、推理

源码与之前不一样,有两种方法作模型训练、验证、推理,第一种方法是在终端输入命令行(命令行未涉及到的参数就使用。文件的数量不一定等于测试集的图片数量,因为对于某一张图片可能会有漏检的情况,即一个目标也没有检测出来。之后模型验证时输出的性能指标的计算方法就是这样的,只是没有把各类别的性能指标打印出来而已)不同,模型输出不再有检测框的置信度预测值。的检测结果,后者是对应的标签图片,可以观察是否有漏检和误检的情况。cls,center_x,center_y,w,h,置信度。(1,2):真实框的分布。

2025-02-20 12:37:13 2325 11

原创 【YOLO系列】YOLOv8理论

YOLOv8Backbone可能参考了设计思想,将YOLOv5的C3结构换成了梯度流更丰富的C2f结构,并对不同大小模型(n、s、m、l、x)调整了不同的通道数HeadHead部分与YOLOv5相比有两大改进:换成了主流的解耦头结构()将分类头和检测头分离Loss:正负样本匹配方式改变、移除置信度损失、增加(DFL)借鉴YOLOX,在训练阶段的最后10个epoch关闭Mosiac数据增强,可以有效地提升精度。

2025-02-20 11:58:56 1007

原创 Pytorch的F.cross_entropy交叉熵函数

先来讲下基本的从官网所给的资料及案例,根据传入参数的数据形式,交叉熵函数的计算方式有两种。

2025-02-19 20:02:18 853

原创 【YOLOv8】损失函数

在以往的目标检测任务中,坐标的网络预测结果服从狄拉克分布,简单理解就是网络针对预测框的坐标值只会输出一个确定的值,预测出的那个值概率为 1 ,其他值的概率为 0 ,因为只输出了这一个结果。而在YOLOv8中,首次使用参与其损失函数计算,网络模型针对(l、t、r、b)输出多个值,这多个值服从一般分布和任意分布,每个值都有它们自己对应的概率,不像狄拉克分布只预测出一个值,概率为 1。

2025-02-19 17:40:17 3045

原创 【YOLOv8】正样本匹配

强烈建议看一下这个b站up的讲解,非常清晰,博文中的图也是引自该up。

2025-02-18 10:35:49 1084

原创 Anchor-Based 与 Anchor-Free

这个b站博主讲的非常好,她的其他讲解视频也很牛,非常推荐大家看一下。

2025-02-17 21:18:16 1066

原创 YOLOv5改进系列(三)更换空间金字塔池化改进 SPP / SPPF / SimSPPF / SPPCSPC / SPPFCSPC

是何凯明在2015年的论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》中提出的。(2)解决了卷积神经网络对图相关重复特征提取的问题,大大提高了产生候选框的速度,且节省了计算成本。这是在我的数据集上跑10个epoch的结果(没有使用预训练权重),可以看到替换为。的思想提出的,在保持感受野不变的情况下获得速度提升。等各种变形的空间金字塔池化结构的提出有很大的影响。的论文里有详细的实验结果。

2025-02-17 16:13:51 716

原创 YOLOv5改进系列(二)结合轻量化网络GhostNet

此文的Ghost Module、Ghost Bottleneck主要针对官方提供的YOLOv5源码中的实现作讲解,与原生的华为官方提供的源码简化了很多。在我的数据集上跑10个epoch的结果(没有使用预训练权重),可以看到虽然计算量和参数量降低了很多,但是精度也掉了很多。这些特征图是由卷积操作得到,又输入到下一个卷积层进行运算,这个过程包含大量的网络参数,消耗了大量的计算资源。的源码实现,不过需要注意的是相比于华为的源码是简化版本。中的冗余信息可能是一个成功模型的重要组成部分,中的结构的模型训练结果。

2025-02-16 15:50:31 882

原创 神经网络-GhostNet的网络结构、代码实现

2020年,华为提出了一个轻量级网络GhostNet在优秀CNN模型中,特征图存在冗余是非常重要的。如下图所示,是对ResNet-50第一个残差块特征图进行可视化的结果,当给一个神经网络输入一张图片时,我们可以获得特别多的特征图。利用小扳手连接起来的两幅特征图(Ghost对),它们的相似性就特别高,这就是神经网络中存在的特征图冗杂的情况。如果按照传统的思考方式,可能认为这些特征图存在冗余,是多余信息,会想办法避免产生这些高度相似的特征图但是作者思路清奇,认为CNN。

2025-02-14 21:20:14 1061

原创 深度可分离卷积及其代码实现

而且这种运算对输入的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的特征信息。相同的输入,同样是得到输出通道数为4的feature map,深度可分离卷积的参数量和计算量是常规卷积的约。个卷积核(输出几个通道就要几个卷积核,这里输出4个通道所以需要4个卷积核),每个卷积核的shape是。为逐通道卷积输出特征图的通道数。所以这里的卷积运算会将逐通道卷积层输出的。的一个卷积核负责一个通道,一个通道只被一个卷积核卷积,这个过程产生的。与普通卷积非常相似,它的卷积核的尺寸为。

2025-02-13 17:16:56 1479

神经网络-DenseNet网络结构

神经网络-DenseNet网络结构

2024-11-24

空空如也

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

TA关注的人

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