- 博客(97)
- 资源 (3)
- 收藏
- 关注
原创 yolov5:Conv类参数量计算
即输入通道=3,输出通道=32,kernel_size=3,padding=2,stride=2。Conv是yolov5自定义的类,里边包含了卷积层、BN层和激活函数。参数量=conv2d参数+BN2d参数=
2024-07-09 22:24:37
481
原创 FCOS长文详解
FCOS是一种one-stage、全卷积(Fully Convolutional)结构的目标检测模型,发表于2019年ICCV。什么是one-stage?作者的源码有些复杂,我找了一个简单的版本,作为本文的详解代码。FCOS不同于在此之前热门的anchor based方法(比如R-CNN系列),没有设置anchor boxes来作为目标的候选区域,而是使用全卷积网络,结合FPN,直接拿去做检测,实现了anchor free,并达到了当时的state-of-art。
2024-05-12 21:33:06
2944
原创 libtorch c10::IValue类解析,从IValue获取值
像一个数据容器,但是它又不用来直接存储数据,只是一层数据的封装。怎么理解呢?可以存储里很多类型的数据,比如存储可能是一个Tensor,一组Tensor,或者是一个Moudle,甚至是一个int,所以更像是一种封装,对不同的数据类型进行了一次统一的封装,然后很多很多函数的接口都可以使用这种统一的数据类型了。如果你用过opencv,那么你可以觉得眼熟,不就是这么干的么,比如常用的cv::resize函数,它的输入、输出数据就是,而不是直接使用cv::Mat,这其实就是一种封装的思想。
2024-04-25 17:28:41
1083
原创 对RPN网络的理解
RPN, Reigion Proposal Network, 中文名称为候选区域提取网络,最早在faster RCNN一文中提出,用于提取目标候选框。
2024-04-11 22:36:44
971
原创 FPN(Feature Pyramid Network)详解
FPN,全名Feature Pyramid Networks,中文称为特征金字塔网络。它是2017年cvpr上提出的一种网络,主要解决的是目标检测中的多尺度问题。FPN通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。
2024-04-10 22:17:00
10711
2
原创 linux C/C++ 捕获 SIGSEGV 段错误信号
崩溃是常见现象,有时候,我们希望程序在崩溃的时候,先做点其他操作再崩溃,比如记录崩溃时刻的堆栈信息,或是提前释放一些硬件资源等等,那么就需要让程序捕获错误信号。信号,主要由访问空指针、内存访问越界、访问已释放的内存等原因导致。
2024-03-22 17:26:03
643
原创 linux系统breakpad安装、使用方法
BreakPad是Google开发的一款软件崩溃信息记录工具,其大致原理是捕获系统底层发出的崩溃信号,将此刻软件的堆栈信息并进行分析生成报告,可以很方便的定位问题代码。
2024-03-19 15:12:14
1944
原创 libtorch::Tensor与Eigen::Tensor互相转换
C++ libtorch::Tensor 与 Eigen::Tensor互相转化
2023-08-04 21:00:16
837
原创 LInux:生成崩溃程序的core文件
core文件是linux系统下一种记录软件异常的机制,在进程运行崩溃时,系统会将coredump信息写入core文件。这样就方便我们定位软件问题。
2023-07-03 11:38:29
3447
原创 Linux系统安装QQ最新版 2023-06-30
腾讯在2023-05-30更新了linux版的qq,这次界面终于不再复古,好看多了。选择跟自己计算机匹配的版本,一般都是X86,如果是arm开发板就选ARM版。由于我都是ubuntu系统,因此这里我下载的是X84版的deb包。由于之前安装了2.0.0版本的QQ,所以报了几个警告。如果是CentOS,自行选择rpm即可。界面较上个版本确实进行了很大的优化。找到下载好deb,执行安装命令。
2023-06-30 17:13:34
11804
6
原创 C/C++ 运行shell脚本,并获取返回结果
C/C++运行shell命令通常有两种办法,调用system()或者popen()函数。 `system()` 函数会运行shell命令,并返回标志位,告知用户命令是否运行成功,但是不会返回shell指令的运行结果。有时,我们需要shell命令的运行结果,比如我们写系统监控日志,我们需要把结果写到文件里`popen`函数可以帮助我们。
2023-06-30 16:35:04
5456
4
原创 如何检测视频中的绿屏、绿帧问题
由于我的问题中的绿帧很稳定,我是指像素值很稳定,固定的[0,153,0],因此简单的均值就可以很好的检测出来。由于问题暂时没有定位,只能先表面解决一下,就是过滤掉出现绿屏的帧。今天给项目拷机,发现视频会偶先绿屏,非常偶现,很难复现出来。当然,首先要把绿帧检测出来,才能做后续的补救措施。R、B通道像素值为0,G通道像素值全都是153;于是我们就可以直接使用均值、标准差来检测绿帧。函数,它返回是三通道的均值;或者也可以加上标准差,使用。
2023-06-18 15:55:55
1228
1
原创 RK3588 MPP解码句柄泄露问题记录
最近在用瑞芯微3588开发板做一个视频处理的项目,前两天拷机发生了闪退,弹出的问题是“打开文件过多”,经过初步排查定位到是MPP硬解码部分出的问题。
2023-06-15 10:03:49
2763
8
原创 error: static assertion failed: std::atomic requires a trivially copy type
cppreference对`TriviallyCopyable`的稍微总结了一下,“这意味着可平凡复制类没有虚函数或虚基类”。我们一条一条看`TriviallyCopyable`类型主要分为三类: - 标量类型这里的标量我猜测应该是`int,double,long`之类的内置类型。 - 类而对于类,cppreference说的6条,可以总结成三条:①这个类,至少一个复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符未弃置 ,就是至少有一个未被delete;②未被弃置的复制构造函数、
2023-05-11 15:18:20
1686
原创 C++ error: undefined reference to `__atomic_is_lock_free‘
对于常见的内置类型,比如`int,double,char,long`等等,都是`lock_free`的,可以正常调用`is_lock_free`函数。测试了自定义类型`struct A`从1字节到>8字节的情况,发现1、2、4、8字节是`lock_free`的,其他时候都不是,而且`is_lock_free`函数编译不过,
2023-05-11 11:13:10
1069
4
原创 C++ 多线程编程(四) 原子类型atomic
atomicatomic可以实现无锁编程,在效率上要比mutexmtx.lock();return;sum1++;i++)这个例子里边,用多线程对一个变量自增,自增到一个值后结束,比较加锁和原子类型的运行时间,结果如下:经多次测试,这个示例中atomic的效率是mutex的3~4倍。
2023-05-11 10:48:12
1295
2
原创 C++ 多线程编程(三) 获取线程的返回值——future
C++11标准库增加了获取线程返回值的方法,头文件为,主要包括futurepromise、async四个类。那么,了解一下各个类的构成以及功能。
2023-05-05 19:24:21
2342
原创 C++ 多线程编程(二) 各种各样的锁
本篇文章主要对C++现有的锁进行介绍,由于锁的种类繁多,而且相关文章已经非常多了,本文不再细讲各种锁的技术细节,而是更注重于各种锁的由来,以及他们针对的问题,如此便能针对自己面临的问题,选择合适的锁。今天是2023年4月21号,目前我使用的是C++20,因此在这篇文章,我们记录C++20中各类的锁。主要包括基本锁和RAII锁,基本锁包括互斥锁 (mutex),定时互斥锁 (timed_mutex),条件变量 (condition_variable),读写锁 (shared_mutex),
2023-04-24 17:14:54
4591
原创 C++多线程编程(一) thread类初窥
多线程编程使我们的程序能够同时执行多项任务。在C++11以前,C++没有标准的多线程库,只能使用C语言中的pthread,在C++11之后,C++标准库中增加了thread类用于多线程编程。thread类其实是对pthread的封装,不过更加好用,现在已经广泛用于C++多线程编程。C++11的多线程库主要包含 等头文件,这篇文章只要整理记录头文件的内容。
2023-04-20 11:38:19
1164
原创 Linux系统如何设置开机自启脚本
Linux系统开启自启脚本的配置,我这里记录了三种办法,对于绝大多数linux系统,这三种方法里肯定有合适的。
2023-04-14 16:02:24
15457
5
原创 Linux以非堵塞模式执行shell脚本
还有部分命令是不会立马执行完的,需要等待一段时间,甚至永远不会执行完(比如`top`),这种情况就会阻塞终端,我们就没法继续使用这个终端了,除非你`ctrl+c`退出正在执行的脚本。
2023-04-13 11:08:34
2515
原创 C++ STL,resize 和 reserve 的区别
resize和reserve扩容处理的区别,带来了主要问题就是push函数使用问题,比如vector的push_back()函数,如果是resize之后再push_back,容器会继续扩容,因为这时候容器已经满了;如果是reverse之后push_back,则会放到vector现有元素的后边。
2023-04-04 11:42:21
589
原创 C++ 手动创建二叉树,并实现前序、中序、后序、层次遍历
二叉树的创建是个麻烦事,我的思路是:首先将一个普通的二叉树转化为满二叉树,其中的空节点用一些标识数据来代替,如此一来,就可以用数组索引来描述数据在二叉树的什么位置了。
2022-12-07 20:01:42
1167
原创 C++ 手动实现栈(stack) (课后作业版)
栈,一种遵循先进先出原则的数据结构,可以用顺序表实现,也可以用链表进行实现。这里我使用数组实现方法,包含了进栈,出栈,访问栈顶等功能,以及一些辅助功能。
2022-11-24 19:18:53
1077
原创 C++ 手动实现单向循环链表(课后作业版)
单向循环链表,并实现增删查改等功能首先定义节点类,类成员包含当前节点的值, 指向下一个节点的指针。循环链表的尾节点指向头节点
2022-11-23 15:23:59
727
原创 C++ 构造函数详解
在定义类的成员函数的时候,一般的成员函数与普通的全局函数没有太大的区别,在定义函数的时候都需要说明要返回的类型,但是,类中有一种函数比较特殊,函数名与类名相同,且没有返回值类型,这中函数称为构造函数,它承担着类初始化的工作,非常重要。常用的构造函数有默认构造函数、一般构造函数、拷贝构造函数、转换构造函数、移动构造函数。
2022-10-16 22:19:08
18906
2
原创 C/C++ 关键字 static 详细解析
static关键字是一个修饰符,根const类似,被它修饰的变量和函数分别被称为静态变量和静态函数,根据修饰的对象的不同,static表现出来的作用也不同。其实只记住一条就够了,静态成员变量=全局变量。 想到这一点之后,前边的条条框框都好理解了。
2022-10-13 10:36:06
453
1
原创 Ubuntu18.04 右上角网络连接消失问题记录
ubuntu18.04 右上角网络连接消失问题,内核版本切换,以及显卡驱动nvidia-smi failed等等问题
2022-10-12 21:44:05
973
原创 C/C++ FILE 和 fstream 用法详解
FILE 是C语言自带的文件操作结构体, fstream 是C++的文件操作类,两者使用都比较常见,且用法比较类似,再次记录。
2022-09-25 20:01:26
5844
原创 C/C++:printf 函数格式化输出,用法详细记录
printf ( print format )函数是接触C/C++之后接触的第一个函数,它的功能除了输出hello world外,更重要的是进行格式化输出,比如输出整数的%d,输出小数的%f,%lf 等等。printf 格式化输出的完整格式为:`% [flag] [width] [.precision] type`其中,常用等级为 `type > [.precision] > [flag] > [width]`注意,实际使用的时候不带 [ ] .
2022-09-25 09:25:26
9634
原创 Linux Socket通信:一文详解TCP通信API用法
Linux所有的硬件接口都被当成一个文件来操作,相应的,这些硬件接口也有对应的文件操作符。比如,文件操作符0表示标准输入流,对应的硬件是键盘;文件操作符1表示标准输出流,对应的硬件是显示器。这么看的话,套接字被当成文件就容易理解了。而且,Linux通过read()函数和write()函数进行文件的读写,同样,也可以用这两个函数对其他计算机发送和接收消息。.........
2022-08-28 22:54:35
803
rk3588 MPP硬解码RTSP流,项目为QT工程
2023-06-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人