自定义博客皮肤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的博客

呼哥,听我说!

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

原创 设计模式 - 状态模式

状态模式作为设计模式的一种,主要用于根据状态的改变执行不同的动作,它允许一个对象在其内部状态改变时改变它的行为。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

2024-08-13 16:19:28 708

原创 C++(27): 线程池

线程池技术绝不是C++独有的,Java和Python都有比较晚完善的线程池构造接口。通俗的讲,线程池只是一种管理线程的方式。很多时候,我们为了充分利用CPU和Memory资源,会创建一些独立的线程,执行同步或异步的任务。但有一个不得不考虑的问题是,现成的创建和销毁本身也是消耗系统资源的,尤其是一些需要频繁创建和销毁线程的应用场景下。当然有时候有一些连续的任务也不需要通过线程池技术来完成。如上所述,为了避免频繁创建和销毁线程带来的系统资源的消耗,我们可以提前创建一定数量的线程,用来等待和处理队列中的事

2024-08-13 16:15:26 599

原创 Linux应用开发(15):Linux IO复用技术:epoll详细讲解

epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本。它能够显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

2024-08-07 11:16:30 1892

原创 PyTorch学习(14):张量(Tensor)填充(Padding)(torch.nn.functional.pad)

我们在做卷积的时候,不可避免的会遇到对Tensor进行填充的情况。以卷积操作为例,在操作中,padding指的是在输入特征图的边缘填充额外的值(通常为0),以增加输入特征图的大小,从而影响卷积层的输出尺寸。通过调整padding的大小,可以精确控制输出特征图的维度,一方面保持边缘信息,另一方面也能够使其满足网络设计的需求。

2024-08-07 11:06:31 1440

原创 DepthAnything(3): 基于TensorRT在NVIDIA边缘平台部署DepthAnything(pt转onnx,经trtexec转engine,tensorrt反序列化推理)

DepthAnything是一种能在任何情况下处理任何图像的简单却又强大的深度估计模型。 TensorRT是NVIDIA推出的运行在NV平台上的推理加速框架,我们常用的TX2、Jetson Nano、Jetson Xavier NX以及Jetson Orin系列均可通过TensorRT实现推理加速。TensorRT 基于 C++ 语言开发,能够实现高性能推理,TensorRT 推理应用程序与英伟达的 GPU 结合可以提供最大的吞吐量和较低的延迟速度。

2024-07-11 09:44:16 1246

原创 DepthAnything(2): 基于ONNXRuntime在ARM(aarch64)平台部署DepthAnything

DepthAnything是一种能在任何情况下处理任何图像的简单却又强大的深度估计模型。

2024-07-11 09:02:18 2115

原创 Linux系统应用与设置(4):Linux抓包工具tcpdump

tcpdump 是一款广泛使用的命令行网络分析工具,它能够捕获和分析网络上的数据包。这个强大的工具对于网络故障排查、安全监控和网络流量分析非常有用。 值得注意的是,通过tcpdump抓取的数据还可以通过保存为*.pcap文件,然后使用wireshark进行更深层次的可视化分析。

2024-07-04 16:57:30 1457

原创 OpenCV杂记(4):OpenCV之色彩映射(伪彩applyColorMap)

我们在开发基于热成像(红外)或者做深度估计应用时,为了便于直观的观察,常常将检测结果进行色彩上的映射,这样便可以很直观的看出哪里温度高,哪里温度低,或者哪里深度更深或更浅。 我们将一些标量值赋予特定的颜色的做法,称作色彩映射,更通俗的,我们称之为伪彩。

2024-07-04 16:45:42 1469

原创 Linux系统应用与设置(3):串口调试(minicom)

在Linux系统中,minicom是一个功能强大的串口通信工具,可用于与外部设备进行字符和HEX数据的收发,以下是详细的使用说明。

2024-06-28 11:50:35 2110

原创 YOLOv10(7):YOLOv10训练(以训练VOC数据集为例)

我们在YOLOv10初探第一课中,已经涉及到了一些关于如何训练自己数据集的信息,接下来本节将以VOC数据集(VOC标注形式)来更详细的带领小伙伴们走一遍训练。

2024-06-28 11:42:02 1695

原创 Linux应用开发(14):Linux系统零拷贝技术(sendfile)

在Linux系统中,零拷贝(Zero-Copy)技术是一种高效的数据传输技术,它允许数据直接在发送方和接收方之间传输,无需在内核和用户空间之间复制数据。这种技术可以显著提高文件传输、网络通信等操作的性能。

2024-06-25 11:39:01 956

原创 C++(26): 原子操作(std::atomic)

开发过多线程、并发编程的小伙伴一定接触过mutex,通过对资源进行加锁和解锁,实现对方问和修改的互斥操作。mutex使用起来很方便,很强大,但也有局限性。频繁地加锁和解锁会造成较大的资源消耗,影像系统的性能。 与mutex相比,原子(atomic)操作相对灵活和简单。 注意,这种灵活性在一定程度上是做了某些妥协的。

2024-06-21 11:43:19 1532

原创 YOLOv10(6):YOLOv10基于TensorRT的部署(基于INetworkDefinition)

我们在前面已经讲过很多关于YOLOv10的一些知识点,也简单理了一下如何训练自己的数据。 现在本篇文章主要是讲解一下如何在TensorRT中部署YOLOv10,相信经过这一步,各位小伙伴已经能够无限的接近于将YOLOv10产品化了。 另一个需要说明的是,本文中所述的TensorRT部署并不是基于ONNX中转方法的部署,而是通过基于INetworkDefinition的手动构建网络进行部署,这种方式能过使得我们对网络有一个较为清晰的了解和认识。

2024-06-19 09:00:21 1556

原创 Linux系统应用与设置(2):串口嗅探器(jpnevulator)

jpnevulator是一个机器轻量化的linux系统的串口嗅探软件,用于打开相应的串口,打印接收到的数据。

2024-06-19 08:50:58 393

原创 TensorRT教程(1)初探TensorRT

TensorRT(NVIDIA TensorRT)是 NVIDIA 开发的一个用于深度学习推理的高性能推理引擎。它可以针对 NVIDIA GPU 进行高效的深度学习推理加速,提供了许多优化技术,使得推理速度更快,并且可以在生产环境中部署。

2024-06-06 22:45:20 1352

原创 PyTorch学习(13):PyTorch的张量相乘(torch.matmul)

torch.matmul()是PyTorch库中用于执行矩阵乘法的函数。它可以处理不同尺寸的矩阵,包括批量矩阵和张量。该函数的特点在于能够利用Python的广播机制,处理维度不同的张量结构进行相乘操作。 torch.matmul也可以使用“@”符号来替代。

2024-06-06 15:32:44 1498

原创 YOLOv10(4):损失(Loss)计算及其检测模型代码部分阅读

YOLOv10几乎完美继承了YOLOv8的Loss计算方法,不同点就是YOLOv8只需要计算一次的,YOLOv10需要计算两次。究其原因,就是YOLOv10采用了双标签分配策略。

2024-06-03 23:37:28 2849

原创 PyTorch学习(12):PyTorch取极值(max, argmax, min, argmin)

PyTorch提供了大量的API接口,帮助我们快速的搭建训练工程,开发新的算法。求极值或者获得极值所处的位置是算法种常见的操作,比如网络的后解算过程中,我们常通过求极值来获得某一个预测点的类别信息。PyTorch提供了max,argmax,min,argmin这四个接口帮助我们快速的获得极值信息。

2024-06-03 09:53:52 1216 1

原创 PyTorch学习(11):PyTorch的形状变换(view, reshape)与维度变换(transpose, permute)

在深度学习框架PyTorch中,view, reshape, permute, 和 transpose 是用于操作张量的重要函数。它们允许我们对张量的形状和维度进行变换,这在神经网络的设计和实现中是非常常见的。下面,我们将逐一介绍这些函数的功能和用法。

2024-06-02 10:44:28 1222

原创 PyTorch学习(10):torch.where

在PyTorch中,torch.where 函数是一种强大的工具,用于根据条件从两个张量中选择元素。这个函数在数据处理和神经网络的正则化技术中特别有用,比如实现dropout或者masking策略。torch.where 的基本用法类似于Python的内建函数 np.where,但它专门针对PyTorch张量进行了优化。

2024-06-02 10:39:13 703

原创 PyTorch学习(9):torch.topk

PyTorch的topk函数用于返回Tensor中的前k个元素及其对应的索引。这个函数非常有用,尤其是在处理分类问题时,可以用来找出每个样本最可能属于的k个类别。 在实际的部署过程中,topk非常重要,可以实现快速的筛选和过滤。

2024-05-31 09:39:14 2131

原创 YOLOv10(2):网络结构及其检测模型代码部分阅读

YOLOv10的代码结构和YOLOv8很相似,说是基于YOLOv8魔改的也不为过。话说回来,也算是魔改的非常成功的了。从代码工程上看,也是通过类一层层继承,获得一个完整的模型网络。

2024-05-31 09:19:22 8217 4

原创 YOLOv9(4): DFL(Distribution Focal Loss)

DFL最早在论文Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection中被提及,在YOLOv8中就已经在使用。DFL的作者认为,在很多时候,检测目标的边界并不是一个确切的值,而是一个分布。

2024-05-30 17:26:19 13374 1

原创 PyTorch学习(8):PyTorch中Tensor的合并于拆分(torch.cat, torch.stack, torch.trunk, torch.split)

在使用PyTorch执行深度学习开发时,经常会用到对Tensor的合并于拆分操作。如我们在使用CSP时,有时候会需要将Tensor拆分成两部分,其中一部分进行进行Cross Stage操作,另一部分执行多重卷积操作,这个时候我们就会用到四个典型的接口,分别是torch.cat, torch.stack, torch.trunk, torch.split。接下来将逐一进行讲解。

2024-05-30 17:09:45 701

原创 C++(11): set与multiset

在C++标准模板库(STL)中,std::set是一个基于平衡二叉搜索树(通常是红黑树)的关联容器,它能够存储唯一的元素并保持这些元素按排序顺序。由于std::set内部通常使用红黑树(一种自平衡的二叉搜索树)来实现,所以保证高效的查找、插入和删除操作。multiset与set类似,都是基于红黑树的结构,不同的是,multiset允许存储多个值相同的元素。

2024-05-29 23:31:49 789

原创 YOLOv10(1):初探,训练自己的数据

很多人YOLOv9还没有完全研究透,YOLOv10出来了。 惊不惊喜,意不意外! 据论文里提到,YOLOv10就是为了加速推理,在保证精度的同时,降低参数量,减小计算量。就冲这,还没有研究YOLOv9的同学们,直接跳过吧。

2024-05-29 23:12:24 2199

原创 C++(25): C++17探索:std::optional

std::optional是C++17标准引入的一个新的标准库组件。这是一个轻量级的容器,旨在以类型安全的方式包装可能为空的值。std::optional为处理可能缺失的数据提供了一种优雅而简洁的方法,这在以往通常需要使用专门的“存在”标志或复杂的错误处理机制。简单点讲,std::optional在使用上并不复杂,主要用来替代那些需要返回NULL,或以返回-1表示错误等的场合。这样做最直观的一个改进就是易读性增强了。

2024-05-28 08:28:07 381

原创 OpenCV杂记(3):写视频(cv::VideoWriter)

在使用OpenCV的时候,会经常遇到想连续的图像帧连起来存储成本地视频写入本地。OpenCV提供了相应的API接口VideoWriter来完成这一操作。

2024-05-23 19:16:42 1037

原创 卡尔曼滤波(2):卡尔曼滤波与递归计算

比较经典的说法是,卡尔曼滤波适用于任何带有不确定性的系统中。那么我们怎么来理解这种不确定性呢?具体来讲,包含以下几种情况。 当前系统不存在完美的数学表达模型,即不能够通过一些数学方式来表达这个系统。 当前系统是不可控的,即其中的状态不能通过外部手段来实现精准控制; 当前系统的状态是不能通过外部手段来精准测量的。 总结一下,如果一个系统不可表达、不可测量也不可控制,那么可以考虑使用卡尔曼滤波来跟踪系统的状态。

2024-05-23 15:54:46 607

原创 卡尔曼滤波(1):初探黄金五公式

卡尔曼滤波是一个递归算法,可以用在任何存在不确定信息的系统中。

2024-05-21 14:52:34 567

原创 C++(24): C++17探索:std::variant的使用

std::variant是C++标准库中的一个模板类,它允许我们在一种类型安全的方式下存储多种类型的值。它的行为类似于C语言中的联合体(union),但提供了更多的类型安全性和功能。与C语言的联合体不同,std::variant跟踪其当前持有的类型,并确保在使用时不会出现未定义的行为。

2024-05-21 14:13:15 688

原创 C++(23): C++:STL中的时间库(std::chrono)

C++ STL库中的 chrono 是一个关于日期和时间的库,它提供了一套丰富、灵活且类型安全的API,用于测量和操作时间。chrono 库是C++11标准的一部分,它使得我们可以进行高精度的时间测量,以及执行基于时间点的算术操作。

2024-05-15 13:43:37 1427

原创 C++(22): C++:STL中的部分计算接口(std::accumulate、std::partial_sum等)

C++ STL库中的算法组件提供了大量用于操作序列的算法函数。这些函数通常以迭代器范围为操作对象,可以非常方便地对容器中的元素进行各种操作,而不需要写循环。下面我会详细介绍几个常用的算法函数,特别是accumulate,并提供相应的例程。 本文将简单介绍std::accumulate、std::sort、std::find、std::count、std::partial_sum等函数,并给出其使用例程。

2024-05-15 13:39:31 1369

原创 C++(21): C++:std::vector与std::deque比较

std::vector和std::deque都是C++标准库中的容器,它们有一些相似之处,但也有很多重要的区别。以下是它们的相同点和不同点,以及各自的优点。

2024-05-13 09:58:43 1105

原创 C++(20): C++:异常的抛出与捕获(throw, try-catch)

在C++中,异常捕获与处理是一个强大的错误处理机制,它允许程序在执行过程中遇到错误时,能够以一种更加结构化和控制良好的方式来处理这些错误。C++提供了try, catch, throw等关键字来实现这一功能。

2024-05-11 08:04:22 835

原创 Linux系统应用与设置(1):比较、生成补丁以及应用补丁(diff与patch指令)

在我们应用Linux系统或基于Linux系统做一些软件应用开发时,经常会遇到需要将文件的改动记录下来,并且讲这些改动和差异应用到其他的Linux系统时,我们会用到diff和patch指令。 在Linux中,diff和patch是两个非常有用的命令行工具,它们通常一起使用,用于比较文件差异和应用这些差异。这两个工具在软件开发、版本控制和系统管理中特别有用。

2024-04-28 17:26:38 1383 1

原创 C++(19): C++:std::string的使用

C++的 std::string 类是C++标准库中的一个非常重要的类,用于表示和操作字符串。std::string 提供了大量的成员函数,可以方便地对字符串进行各种操作,如连接、比较、查找、替换等。相比于C语言的字符数组,std::string 更加安全,易于使用,且功能更加强大。

2024-04-28 13:53:42 1524

原创 C++(18): C++:std::bind的使用

std::bind是C++11标准库中的一个功能强大的函数适配器,它可以将一个可调用对象(函数、函数指针、函数对象或者成员函数指针)与其参数绑定,生成一个新的可调用对象。这个新的可调用对象可以像普通函数一样被调用,但是其内部实际上执行的是我们绑定的原始可调用对象。 虽然在C++11之后引入了lambda表达式可以替代并实现std::bind的功能,但是我们在此还是做一下简单的介绍。

2024-04-27 16:26:33 706

原创 Linux应用开发(11):Linux进程间通信(IPC):共享内存

Linux系统中实现进程间通信(IPC,Inter-Process Communication)有多种手段,共享内存(Shared Memory)作为一种其中比较高效的IPC机制,允许两个或多个进程共享一个给定的存储区。 这种通信方式是(几乎是)最快的IPC方式,因为进程是直接对内存进行访问,不需要像管道和消息队列一样进行数据的拷贝。持有相同区域共享内存的进程可以直接读写这块内存,无需进行数据拷贝,从而提高了通信速度。

2024-04-24 14:22:50 672 1

原创 Linux应用开发(10):Linux进程间通信(IPC):信号

在Linux系统中,信号是一种原始且功能强大的进程间通信(IPC)机制。信号可以被发送给一个进程,以通知它发生了某些事件,进程可以选择处理信号或忽略它。信号主要用于通知进程某些紧急情况,或者触发进程执行特定的操作。 信号是一个软件中断,用于通知进程发生了某种情况。每个信号都有一个唯一的编号和一个预定义好的默认动作。当进程接收到一个信号时,它会根据信号的类型和进程对该信号的处理方式来作出响应。信号可以用于多种目的,如终止进程、中断系统调用、或者在进程中执行一个预设的信号处理函数。

2024-04-23 10:35:29 998

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关注的人

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