自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tecsai的博客

呼哥,听我说!

  • 博客(105)
  • 资源 (4)
  • 问答 (4)
  • 收藏
  • 关注

原创 PyTorch学习(7):常用损失函数(CrossEntropyLoss, BCELoss, BCEWithLogitsLoss, L1Loss, MSELoss)

在深度学习训练过程中,损失计算是非常重要的一环。有一种论调叫做“损失函数的设计在一定程度上决定了模型能干什么”。 PyTorch提供了许多损失计算函数,包括torch.nn.L1Loss,torch.MSELoss,torch.nn.CrossEntropyLoss,torch.nn.BCELoss,torch.nn.BCEWithLogitsLoss等。 具体可以参考如下连接:torch.nn — PyTorch 2.2 documentation

2024-04-19 15:34:46 447

原创 OpenCV杂记(2):图像拼接(hconcat, vconcat)

OpenCV提供了多种图像拼接的API,包括水平拼接cv:hconcat,垂直拼接cv::vconcat。此外,还可以通过创建一张大图,然后使用copyTo接口将小图像依次覆盖的形式进行拼接。

2024-04-19 10:14:53 424

原创 YOLOv9(5):YOLOv9可编程梯度信息PGI(Programable Gradient Infomation)

PGI是YOLOv9的一大特色。为了丰富网络训练过程中,梯度反馈的路径(主要是梯度反馈宽度),尽量减少在训练过程中的网络信息丢失,作者添加了一个PGI(Programable Gradient Infomation)模块。 PGI模块的引入,从宏观上看,就像是网络新加了一条Detect分支(此处将类似以往YOLOv3/5/8等的3条不同分辨率的head路线称为一个Detect分支)。作者将这一条增加的分支乘坐“辅助可逆分支”,用来产生“可信梯度信息”。

2024-04-18 16:47:00 247

原创 C++(17): C++:模板函数与模板类

泛型编程是一种编程风格,可以开发一套代码适应不同的数据类型。C++中,泛型编程是通过模板来实现的。模板是C++支持参数化多态的工具,使用模板可以使用户为类属类型(如数组的元素类型和容器的数据类型)编写通用的代码,然后再编写特定的类型来创建类属类型的特定实例。模板是一种对类型进行参数化的工具,通常有两种形式:模板函数和模板类。

2024-04-18 16:46:32 85

原创 Linux应用开发(7):Linux消息队列:POSIX消息队列

消息队列是Linux提供进程间通信的一种方式。当多个进程需要共享或交换数据时,就会用到消息队列。此外,消息队列还可以作为一个缓冲区,可以在处理速度不同的进程间提供数据交换。

2024-04-17 16:54:13 844

原创 OpenCV杂记(1):绘制OSD(cv::getTextSize, cv::putText)

我们使用OpenCV时,有时会在图像的某个位置绘制OSD信息,如绘制一些字符串作为指示信息。本文将简要介绍在图像(cv::Mat)上绘制固定的字符串信息。

2024-04-17 14:31:23 1252

原创 Linux应用开发(6):Linux信号量:POSIX和System V信号量

Linux的同步于互斥大致可以分为三个方式,分别是互斥锁,条件变量和信号量。他们针对不同的应用场景而被设计出来,其中互斥锁主要用于对共享资源的保护,条件变量用于控制操作的顺序,而信号量则用来控制对共享资源的访问数量。 Linux信号量是一种用于进程间同步和互斥的低级同步机制。信号量可以在多个进程或线程之间协调对共享资源的访问。在Linux中,主要有两种信号量:POSIX信号量和System V信号量。它们各自有不同的特性和用途。

2024-04-17 10:09:38 480

原创 Linux应用开发(5):通过系统服务部署应用自启动

在Linux系统中,将应用以服务的方式启动意味着该应用会在系统启动时自动运行,且通常以某种方式在后台持续运行。

2024-04-16 14:27:17 905

原创 C++(16): STL:函数对象(仿函数)

函数对象是“重载函数调用操作符”的类,由于其使用时类似于调用一个函数,所以也称作“仿函数”。 通俗来讲,就是我们构建一个类,在类的内部重载了“()”操作符,然后在使用的时候我们可以像调用函数一样来调用类的对象。 不同于普通的函数,函数对象可以拥有自己的状态。

2024-04-15 14:32:15 161

原创 C++(15): STL算法:排序(sort)

std::sort 是 C++ 标准库 中提供的一个函数,用于对容器(如数组、向量等)中的元素进行排序。它基于比较操作对元素进行排序,通常使用高效的排序算法,如快速排序、归并排序或堆排序等。 在实际应用中,std::sort 通常会根据输入数据的大小和特性自适应地选择一种合适的排序算法。例如,对于小型数据集,它可能会选择插入排序或选择排序等简单算法,因为这些算法在小规模数据上通常具有较低的常数因子。对于大型数据集,它可能会选择快速排序、归并排序或堆排序等更高效的算法

2024-04-11 15:58:33 602

原创 Linux应用开发(4):POSIX条件变量: pthread_cond_t

条件变量是多线程编程中用于线程同步的一种机制,它允许线程在某个条件不满足时挂起,直到该条件变为真。在这种情况下,条件变量起着线程间同步的作用。 在Linux系统中,默认提供了POSIX线程库pthread。 在POSIX线程(pthread)库中,条件变量通过pthread_cond_t类型表示。

2024-04-11 07:24:33 231

原创 C++(14): STL条件变量std::condition_variable

在C++的标准模板库(STL)中,std::condition_variable是一个非常重要的同步原语,用于在多线程编程中实现线程间的条件同步。它允许一个或多个线程等待某个条件成立,当条件成立时,等待的线程会被唤醒并继续执行。

2024-04-10 18:45:53 1155

原创 Linux应用开发(3):Linux时间操作(time、mktime、localtime等)

在Linux系统中,时间操作函数是编程中经常使用的一部分,它们允许程序获取和设置系统时间,以及对时间进行各种处理。以下是一些常用的时间操作函数的详细介绍。

2024-04-08 18:27:36 493

原创 Linux应用开发(2):Linux线程同步_互斥锁

在Linux系统中,pthread_mutex_t 是由 libpthread 线程库提供的互斥锁机制,它用于同步多个线程对共享资源的访问,以防止竞态条件和数据不一致的问题。pthread_mutex_t 提供了多种类型的互斥锁,包括普通的互斥锁、递归互斥锁、读写锁等,以适应不同的同步需求。 pthread_mutex_t 互斥锁的基本原理是通过原子操作来控制对共享资源的访问。当一个线程尝试获取已经被其他线程持有的互斥锁时,该线程会被阻塞,直到互斥锁被释放。互斥锁内部通常使用原子变

2024-04-08 08:28:10 795

原创 PyTorch学习(6):导出ONNX模型

在使用PyTorch进行模型训练时,我们通常希望将训练好的模型导出为ONNX(Open Neural Network Exchange)格式的文件。 ONNX(Open Neural Network Exchange)是一个开放格式,用于表示深度学习模型。它允许模型被不同的深度学习框架所使用,实现了模型的互操作性和可移植性。ONNX由Facebook和微软在2016年共同推出,旨在解决深度学习模型在不同框架和工具之间的兼容性问题。

2024-04-07 16:55:31 462

原创 C++(10): std::map、std::multimap与std::unordered_map

std::map、std::multimap 和 std::unordered_map 是 C++ 标准模板库(STL)中的三种关联容器,它们提供了存储键值对(pair)的方式,并允许通过键来快速检索值。这三者之间的主要区别在于它们的内部数据结构和对元素的排序方式。

2024-04-07 10:48:45 1078

原创 C++(13): 智能指针shared_ptr

shared_ptr智能指针,本质是“离开作用域会自动调整(减小)引用计数,如果引用计数为0,则会调用析构函数”。这样一来,就进化成类似于int、float等的一种会被自动释放的类型。

2024-04-03 08:53:29 876

原创 Python学习(1):装饰器

Python的装饰器理解起来相对简单,唯一的功能就是允许程序员在不修改原有函数定义的情况下,增加函数的新功能。装饰器本质上是一个函数,它接受一个函数作为参数并返回一个新的函数。使用装饰器可以实现很多有用的功能,比如在函数执行前后自动执行某些操作、缓存函数的返回结果、检查函数的参数类型等。装饰器有三种不同的形式,分别是无参装饰器,被装饰函数带参数和装饰器带参数。

2024-04-02 23:06:30 314

原创 PyTorch学习(5):并行训练模型权重的本地化与加载

在训练深度神经网络时,我们一般会采用CPU或GPU来完成。得益于开源传统,许多算法都提供了完整的开源代码工程,便于学习和使用。随着GPU的普及,GPGPU已经占据了大部分的训练场景。 我们在这里仅以GPU训练场景做一些说明。 当我们使用单GPU训练时,我们称之为非并行训练。使用多个GPU共同训练时,我们称之为并行训练。

2024-04-02 16:23:58 485

原创 C++(12): std::mutex及其高级变种的使用

在多线程或其他许多场景下,同时对一个变量或一段资源进行读写操作是一个比较常见的过程,保证数据的一致性和防止竞态条件至关重要。C++的标准库中为我们提供了使用的互斥及锁对象,帮助我们实现资源的互斥操作。

2024-04-02 10:12:55 1107

原创 深度学习评价指标(1):目标检测的评价指标

在计算机视觉/深度学习领域,每一个方向都有属于自己的评价指标。通常在评估一个模型时,只需要计算出相应的评价指标,便可以评估算法的性能。同时,所谓SOTA,皆是基于某一评价指标进行的评估。 接下来,我们将对目标检测领域的评价指标做一个大体的说明,其中涉及Precision,AP,mAP,Accuracy等指标。

2024-03-31 23:29:16 1087

原创 PyTorch学习(4):混合精度训练(torch.cuda.amp)

混合精度训练(Mixed Precision Training)是一种深度学习训练技术,它使用不同精度的数据类型(如单精度FP32和半精度FP16)来执行训练过程中的不同部分,以达到加速训练、减少内存使用和降低计算开销的目的。这种训练方式可以在保持模型精度的同时,显著提高训练效率。

2024-03-31 18:54:00 541

原创 PyTorch学习(3):并行训练DataParallel与DistributedDataParallel

在使用pytorch训练网络时,一般都会使用多GPU进行并行训练,以提高训练速度,一般有单机单卡,单机多卡,多机多卡等训练方式。这就会使用到pytorch提供的DataParallel(DP)和DistributedDataParallel(DDP)这两个函数来实现。

2024-03-29 15:10:34 1133

原创 C++(9): std::stack的使用

std::stack 是 C++ 标准模板库(STL)中的一个容器适配器,它提供了后进先出(LIFO)的数据结构。作为适配器,std::stack 基于其他容器(默认是 std::deque,但也可以指定为 std::vector)来实现其功能。

2024-03-29 07:17:04 196

原创 PyTorch学习(2):torch.device

torch.device 是 PyTorch 中的一个类,它指定了张量(Tensor)和模型应该运行在哪个设备上。在深度学习中,通常会使用 GPU 来加速计算,而 torch.device 允许你轻松地在 CPU 和 GPU 之间切换。

2024-03-28 07:42:00 1092

原创 C++(8): std::deque的使用

std::deque 是 C++ 标准库中的一个双端队列容器。这个容器支持在序列的两端进行快速的插入和删除操作,其时间复杂度为常数时间 O(1)。同时,std::deque 也提供了对序列中任意元素的随机访问。

2024-03-28 07:14:25 430

原创 C++(7): std::list的使用

std::list是 C++ 标准模板库(STL)中的一个顺序容器适配器,它提供了双向链表的数据结构。与 std::vector 不同,std::list 不存储连续的元素,因此它可以高效地在中间插入和删除元素,而不需要移动其他元素。

2024-03-26 11:01:55 735

原创 C++(6): std::queue的使用

std::queue(队列)是C++标准容器之一,提供了的一种先进先出(FIFO)的线性存储结构。std::queue讲究先进先出,即从队列一端插入数据(入队),而从队列另一端提取数据(出队)。

2024-03-25 17:43:57 344

原创 C++(5): std::ofstream的使用

之前讲到,ifstream具有将文件从硬盘中读进内存的功能。而ofstream则是执行反操作,它提供了将文件从内存写入磁盘的功能。std::ofstream 是 C++ 标准库中用于文件输出的类,它提供了向文件写入数据的能力。std::ofstream 属于 头文件中定义的一部分,是继承自 std::ostream 的派生类,专门用于文件操作。使用 std::ofstream 可以以文本或二进制形式写入文件,非常适用于数据持久化、日志记录等场景。

2024-03-25 16:01:23 957

原创 网络传输(3):TFTP客户端使用

在前面的文章中已经讲述了如何安装TFTP客户端和TFTP服务器。本文主要讲解TFTP服务器的启动 和TFTP客户端的使用。

2024-03-23 08:09:03 195

原创 C++(4): std::stringstream的使用

std::stringstream是C++标准库中提供的字符串流操作类,提供了istringstream、ostringstream两个子类,使用时需要包含头文件。

2024-03-22 14:36:29 248

原创 网络传输(2):TFTP服务端(服务器)安装与配置

TFTP它其于UDP协议而实现,主要用来在网际实现轻量化数据的传输。在嵌入式Linux中基本已经包含了TFTP客户端,因此可以在其他设备上建立TFTP服务器,已达到轻量化网络传输的目的。如在Uboot中,Busybox中都已经包含了TFTP客户端。接下来简单讲解一下如何搭建TFTP服务器。

2024-03-22 13:04:51 441

原创 PyTorch学习(1):torch.meshgrid的使用

torch.meshgrid生成网格,可以用于生成坐标。函数输入两个数据类型相同的一维张量,两个输出张量的行数为第一个输入张量的元素个数,列数为第二个输入张量的元素个数,当两个输入张量数据类型不同或维度不是一维时会报错。

2024-03-22 09:28:28 435

原创 网络传输(1):Busybox的TFTP协议

熟悉Linux尤其是嵌入式Linux系统的朋友对于Busybox一定不会陌生。Busybox是一个工具软件,里面继承了丰富的Linux应用指令和工具软件。也常被用来做一个极简根文件系统。如早期的海思系列芯片,智芯的一些边缘侧芯片均使用了Busybox作为根文件系统来使用。极简意味着体量小,但也意味着用户需要动手制作更多的依赖包。Busybox中就包含了一个用于网络传输的TFTP服务器,方便用户进行网络传输,典型的是在交叉编译Host与宿主机之间进行可执行文件或其他文件的交互传输。

2024-03-22 08:37:42 365

原创 Linux应用开发(1):Linux下链接动态库(.so)的方法

在Linux系统中开发应用时(C++),经常会遇到需要链接第三方库的情形。有些第三方库是系统默认存在的,有些是自行编译或设备厂商提供的,无论哪一种情况,都需要链接进应用中。

2024-03-21 12:57:15 604

原创 C++(4): std::ofstream的使用

之前讲到,ifstream具有将文件从硬盘中读进内存的功能。而ofstream则是执行反操作,它提供了将文件从内存写入磁盘的功能。std::ofstream 是 C++ 标准库中用于文件输出的类,它提供了向文件写入数据的能力。std::ofstream 属于 头文件中定义的一部分,是继承自 std::ostream 的派生类,专门用于文件操作。使用 std::ofstream 可以以文本或二进制形式写入文件,非常适用于数据持久化、日志记录等场景。

2024-03-21 09:10:10 981

原创 C++(3): std::ifstream的使用

为了便于对文件的操作,C++标准库中提供了文件输入输出流fstream,并提供了头文件。fstream又细分了两个分支,分别是处理输入文件流的ifstream和处理输出文件流的ofstream。ifstream负责将文件从硬盘读取至内存中。ofstream负责将文件从内存写入硬盘中。这两者所处理的文件流均包含二进制文件(binary)和文本文件(text)。接下来我们将针对输入文件流ifstream用实际的例程介绍其使用方法。

2024-03-15 07:56:22 686

原创 C++(2): std::thread的使用

线程是操作系统能够进行运算调度的最小单位。为了提高任务执行效率,在一些并发编程中,我们经常会使用多线程技术来同步执行一些任务。线程的主要优势在于它们允许程序进行并发处理。在多核或多处理器的系统中,多线程可以提升应用程序的性能,因为不同的线程可以并行执行。即便在单核处理器上,通过线程的时间分片(时间片轮转),操作系统也能提供多任务并发执行的感觉,这样可以使应用程序更加响应,提高资源的利用率。C++中为我们提供了语言级的线程库std::thread,实现了对线程的高级管理功能。

2024-03-14 16:56:07 373

原创 YOLOv9(3):YOLOv9损失(Loss)计算

YOLOv9的Loss计算与YOLOv8如出一辙,仅存在略微的差异。多说一句,数据的预处理和导入方式都是一样的。因此如果你已经对YOLOv8了解的比较透彻,那么对于YOLOv9你也只是需要多关注网络结构就可以。YOLOv9本身也是Anchor-Free的,同样采用了解耦头。因此其损失计算的关键同样在于“对齐”,即通过TAL方法实现Ground Truth与Pred grid中的Cell进行对齐,然后计算Loss。

2024-03-14 16:43:30 1415 2

原创 C++(1): std::vector的使用

vector是C++编程中使用频率较高的一种顺序容器。实际上是一个可以动态扩展内存的数组。

2024-03-14 09:29:56 584

LT8619C_DataSheet_R1.2.pdf

LT8619C,HDMI转RGB24或LVDS芯片,用于将输出的HDMI输入,转换成RGB24或LVDS信号。可用于无线图传。

2020-04-27

Openvx视觉计算框架了解

Openvx视觉计算框架了解,大体知道openvx的发起者,目的及用途。

2018-12-14

linux多线程间使用共享内存例程,C++版本。

linux多线程间使用共享内存例程,C++版本。可用于大量数据的多线程共享。

2018-12-13

Caffe官方教程中文版

Caffe官方教程的中文版,使用的时候可以参考一下。初学者不建议参考。

2018-12-13

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

TA关注的人

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