- 博客(122)
- 收藏
- 关注
原创 【论文#目标检测】End-to-End Object Detection with Transformers
DETR(DEtection TRansformer)是一种新颖的目标检测方法,将检测任务视为直接的集合预测问题,简化了传统检测流程。该方法消除了非极大值抑制(NMS)和锚点生成等手工设计组件,采用了Transformer编码器-解码器架构和基于二分图匹配的全局损失函数。DETR通过一组固定的目标查询,推理目标间关系及全局图像上下文,并行输出最终预测集合。在COCO数据集上,DETR与Faster R-CNN基线性能相当,尤其在大目标检测上表现更优,但在小目标检测上稍显不足。此外,DETR可轻松扩展至全景分
2025-05-17 09:30:06
1108
原创 【OpenCV】网络模型推理的简单流程分析(readNetFromONNX、setInput和forward等)
本文简要介绍了使用OpenCV的dnn模块进行网络模型推理的流程,主要包括模型读取、输入数据准备和模型推理三个步骤。首先,通过readNetFromONNX()函数从指定路径读取ONNX模型,该函数内部调用了ONNXImporter类来解析模型文件并构建网络结构。ONNXImporter类使用Protocol Buffers库解析ONNX文件,并通过populateNet()方法将模型转换为OpenCV DNN的内部表示。文章还提到了一些实现细节,如解析操作符集合版本、简化图结构以及提取张量等,但未深入探讨
2025-05-13 16:00:52
1143
原创 【OpenCV】imshow函数的简单分析
imshow()函数是OpenCV中用于显示图像的核心函数,本文详细分析了其在Windows平台下的实现过程。首先,imshow()函数会检查窗口是否存在,若存在则直接显示图像;若不存在,则创建新窗口并显示图像。接着,函数通过showImage_()处理图像数据,包括图像格式转换、垂直翻转等操作,以确保图像显示方向正确。最后,函数通过InvalidateRect()标记窗口区域为“无效”,强制窗口在下一次消息循环时重绘,从而更新图像显示。整个过程涉及窗口管理、图像处理和GDI(图形设备接口)操作,确保了图像
2025-05-10 11:03:00
167
原创 【OpenCV】imread函数的简单分析
OpenCV中的imread()函数用于从指定文件中读取图像,并返回OpenCV的Mat格式。该函数支持多种图像格式,如bmp、gif、jpeg等,并且能够处理嵌入在图像中的exif元信息。读取过程首先需要查找合适的解码器,然后对压缩图像进行解码并转换为Mat格式。具体流程包括:查找解码器、设置图像处理参数、解析图像头信息、验证图像参数以及解析图像内容。imread_()是imread()的实际实现,负责执行这些步骤。该函数首先根据文件内容查找解码器,设置处理参数,读取图像头信息,最后解码图像数据并存储在M
2025-05-10 11:01:59
1225
原创 【论文#目标检测】Attention Is All You Need
目前主流的序列转换模型是基于复杂的循环神经网络或卷积神经网络,这些模型包括编码器和解码器。表现最好的模型还通过注意力机制将编码器和解码器连接起来。我们提出了一种新的简单网络架构——Transformer,它完全基于注意力机制,摒弃了循环和卷积结构。在两项机器翻译任务上的实验表明,这些模型在质量上更为出色,同时具有更好的并行性,并且训练时间显著减少。我们的模型在WMT 2014英德翻译任务上达到了28.4的BLEU分数,比现有的最佳结果(包括集成模型)提高了超过2 BLEU。
2025-04-23 21:11:48
979
原创 【目标检测】对YOLO系列发展的简单理解
在阅读了YOLO系列的文章之后,简单梳理一下其发展的路径和规划。从深度图像处理的基本思想看,目标检测大致的流程是:输入图像–>提取图像特征–>预测图像中物体的类别–>根据标签计算损失–>更新网络参数,循环若干个轮回,最终获得一个好的输出结果。与传统的图像处理对比,深度图像处理将处理图像的公式展开,分成了很多的层级,逐层处理输入的信息,然后获得计算的结果。
2025-04-22 20:30:44
1011
1
原创 【论文#目标检测】YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
当今的深度学习方法主要关注如何设计最合适的损失函数,以便模型的预测结果尽可能接近真实值。同时,还需要设计合适的网络架构,以便能够获取足够的信息来进行预测。然而,现有的方法忽视了一个事实,即当输入数据经过逐层的特征提取和空间变换时,会丢失大量的信息。本文深入探讨了数据在通过深度网络传输时的信息丢失问题,即信息瓶颈和可逆函数问题。我们提出了可编程梯度信息(Programmable Gradient Information, PGI)的概念,以应对深度网络为实现多目标所需的多种变化。
2025-04-22 20:29:36
1004
原创 【论文#目标检测】YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
YOLOv7在5 FPS到160 FPS的范围内,速度和精度均超越所有已知的目标检测器,并且在GPU V100上,其精度达到56.8% AP,是所有已知实时目标检测器中精度最高的,这些检测器的帧率均在30 FPS或更高。YOLOv7-E6目标检测器(在V100上达到56 FPS,精度为55.9% AP)在速度上比基于Transformer的检测器SWINL Cascade-Mask R-CNN(在A100上达到9.2 FPS,精度为53.9% AP)快509%,精度高2%;
2025-04-14 19:49:18
1031
原创 【论文#目标检测】YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications
多年来,YOLO 系列一直是高效目标检测的事实上的工业级标准。YOLO 社区蓬勃发展,极大地丰富了其在多种硬件平台和丰富场景中的应用。在本技术报告中,我们努力将其性能推向新的高度,以坚定不移的心态迈向行业应用。考虑到实际环境中对速度和精度的多样化需求,我们广泛考察了来自工业界或学术界的最新目标检测进展。具体而言,我们大量借鉴了最近的网络设计、训练策略、测试技术、量化和优化方法的思想。在此基础上,我们整合了我们的想法和实践,构建了一系列不同规模的部署就绪网络,以适应多样化的使用场景。
2025-04-07 20:14:38
1183
原创 【论文#目标检测】YOLOv4: Optimal Speed and Accuracy of Object Detection
据说有许多特性可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特性的组合进行实际测试,并对结果进行理论论证。有些特性仅适用于某些特定的模型、特定的问题,或者仅适用于小规模数据集;而另一些特性,如批量归一化和残差连接,适用于大多数模型、任务和数据集。我们假设,此类通用特性还包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批量归一化(CmBN)、自对抗训练(SAT)和Mish激活。
2025-04-03 09:43:39
1283
原创 【论文#目标检测】YOLOv3: An Incremental Improvement
我们对YOLO进行了一些更新!我们做了一系列小的设计改动来使其变得更好。我们还训练了一个新的网络,效果相当不错。这个网络比上一次的稍微大一点,但更准确。不过别担心,它仍然很快。在320×320的分辨率下,YOLOv3的运行时间为22毫秒,平均精度均值(mAP)为28.2,与SSD一样准确,但速度是SSD的三倍。当我们查看旧的0.5 IOU平均精度均值(mAP)检测指标时,YOLOv3表现相当出色。
2025-03-26 09:23:22
1116
原创 【论文#目标检测】YOLO9000: Better, Faster, Stronger
我们介绍了YOLO9000,这是一个最先进的实时目标检测系统,能够检测超过9000个目标类别。首先,我们提出了对YOLO检测方法的各种改进,这些改进既包括创新性的,也包括借鉴以往工作的。改进后的模型YOLOv2在标准检测任务(如PASCAL VOC和COCO)上达到了最先进的水平。通过一种新颖的多尺度训练方法,同一个YOLOv2模型可以在不同尺寸下运行,从而在速度和准确性之间提供了一个便捷的权衡。在67帧/秒(FPS)时,YOLOv2在VOC 2007上达到了76.8%的平均精度均值(mAP)。
2025-03-24 16:10:37
1010
原创 【论文#目标检测】You Only Look Once: Unified, Real-Time Object Detection
我们提出了YOLO,这是一种新的目标检测方法。以往的目标检测工作是将分类器重新用于检测任务。而我们则将目标检测定义为一个回归问题,即预测空间上分离的边界框以及相关的类别概率。YOLO使用一个单一的神经网络,直接从完整图像中预测边界框和类别概率,仅需一次评估即可完成。由于整个检测流程是一个单一的网络,因此可以直接针对检测性能进行端到端优化。我们的统一架构极其快速。我们的基础YOLO模型能够以每秒45帧的速度实时处理图像。
2025-03-20 15:53:14
1196
原创 【GStreamer】基于gst和gtk的简单videoplayer
在ubuntu上做了一个简单的video player的demo,参考了很多其他人的代码,修修改改调试了一下,能够从web端或者本地读取视频,按下play video按钮就可以实现播放/暂停的效果,不过工具栏还没有实现。代码主要使用了gtk的UI设置,以及如何与gst的输出链接起来,gst使用了简单的uridecodebin和glimagesink模块,整体比较简单,放在了。两个较为重要的地方,一个是按钮的回调,另一个是glimagesink与gtk widget的连接。
2025-03-05 17:16:44
340
原创 【GStreamer】GstDevice和GstPlugin的简单分析
GstDevice用于设备管理,这些设备可以是物理设备(摄像头,麦克风),也可以是虚拟设备(虚拟音频源),device提供了一种统一的方式来描述和访问这些设备
2025-02-22 08:49:58
324
原创 【GStreamer】GstBus和GstMessage的简单分析
GstBus用于在应用程序和管道pipeline之间传递消息,允许应用程序异步地接收来自管道或元素的通知、错误、警告和状态变化等消息。由元素运行时生成的消息,会被发布到与管道关联的bus中,应用程序可以通过轮询或信号机制从bus中获取消息,这些消息可以是同步的或异步的,之后根据消息类型执行相应的操作
2025-02-20 19:45:36
1015
原创 【GStreamer】GstElement的简单分析
GstElement是GStreamer中最核心的构建块,代表一个功能单元,用于处理多媒体数据流。每个元素都有特定的功能,例如source elements用于生成数据(摄像头读取视频)、filter elements用于处理数据(编解码、格式转换等)、sink elements用于接收数据(视频渲染到屏幕),GStreamer通过组合不同的GstElement来构建复杂的多媒体处理流程
2025-02-17 11:51:45
726
原创 【GStreamer】GstPad的简单分析
GstPad用于在pipeline中连接不同的元素(GstElement),可以将pad理解为一个元素的连接点或者端口,数据通过这些连接点在元素之间流动。pad的核心作用是,数据流动的接口,可以是某一个元素的数据接收端口,也可以是某一个元素的数据发送端口。使用capabilities(Caps)描述pad可以处理的数据类型(如视频、音频、具体的编码格式等),必须确保两个pad的caps可以兼容。
2025-02-11 17:53:20
737
原创 【GStreamer】GstBuffer的简单分析
GstBuffer用于封装和管理多媒体数据(如视频、音频等),提供了一种灵活的方式来存储和操作数据,同时支持多种内存管理机制。GstBuffer的声明和定义位于gstreamer/subprojects/gstreamer/gst/gstbuffer.h和gstreamer/subprojects/gstreamer/gst/gstbuffer.c中。
2025-01-29 11:07:55
1167
原创 【GStreamer】GstMemory的简单分析
GstMemory的主要作用是封装内存分配和管理的相关信息,继承自GstMiniObject,所以GstMemory是一个计数对象。定义位于gstreamer/subprojects/gstreamer/gst/gstmemory.h。对内存进行封装,比较好的地方在于:(a)抽象化无需关心底层使用何种内存类型,上层统一接口调度(b)易于管理GstMemory继承自GstMiniObject,可以进行引用计数,这样在多个组件之间共享时不会被提前释放,避免内存泄漏。此外,GstMemory允许创建内存的
2025-01-26 10:22:02
595
原创 【GStreamer】GstAllocator的简单分析
在GStreamer中,GstAllocator用于管理和分配内存,创建和管理的对象是GstMemory,GstMemory是一个引用计数对象,对一块内存区域进行了封装。GstAllocator实现的功能类似于malloc和free,只是底层调用的是GLib中的内存分配函数g_malloc和g_free
2025-01-25 14:10:08
823
原创 【V4L2】ioctl调用v4l2函数的简单分析(采集、编码)
在Linux中,ioctl(输入/输出控制)是一个系统调用,用于执行设备驱动程序提供的各种设备特定操作,使用ioctl()可以实现V4L2设备的控制
2025-01-18 10:14:55
603
原创 【GStreamer】基于gstreamer实现h264的软编
本文记录如何简单使用gstreamer命令行和代码的方式实现yuv文件编码成为h264格式的文件。
2024-12-28 14:15:06
694
原创 【GStreamer】gstreamer在linux下的简单使用
对于Ubuntu系统,使用如下命令可以下载gstreamer([Installing on Linux](https://gstreamer.freedesktop.org/documentation/installing/on-linux.html?gi-language=c))
2024-12-16 22:34:03
3057
原创 【GStreamer】gst_element_factory_make函数
gst_element_factory_make()主要的功能是创建了一个工厂类型,并且在这个工厂类型中查找一个元素,返回这个元素。这包括了两个步骤:(1)创建工厂类型;(2)在工厂类型中查找属性。实际上,上面2个步骤分别对应着2个独立的函数:(1)创建工厂类型:gst_element_factory_find();(2)在工厂类型中查找属性:gst_element_factory_create();不同的是,在这里需要处理的是批量属性,需要用到va_list。
2024-12-04 17:43:10
1131
原创 【GStreamer】gst_init函数
GStreamer是Linux下最常用的音视频编解码框架,在音视频芯片中应用广泛(如MTK、AML等),也是嵌入式平台(如汽车、无人机、机器人等)音视频技术发展重要的技术。在使用GStreamer过程中,首先需要对GStreamer框架进行初始化,会使用gst_init()函数,下面简单记录这个函数的实现流程。
2024-11-27 10:18:43
1232
原创 【论文#Overview】An Overview of Core Coding Tools in the AV1 Video Codec
AV1是一个新兴的开源且免版税的视频压缩格式,由开放媒体联盟(AOMedia)行业联盟于2018年初共同开发并最终确定。AV1开发的主要目标是在保持实际的解码复杂性和硬件可行性的同时,实现比现有最先进的编解码器更显著的压缩增益。本文提供了AV1中关键编码技术的简要技术概览,以及与VP9和HEVC的初步压缩性能比较。过去十年间,视频应用在互联网上变得无处不在,现代设备推动了高分辨率、高质量内容消费的快速增长。
2024-11-20 19:32:26
806
原创 【WebRTC】视频发送链路中类的简单分析(下)
在前一部分当中,记录视频流已经传输到RTPSender当中的paced_sender_->EnqueuePackets(),这个函数会逐渐向底层深入,发送RTP数据包,下面记录后一部分的传输流程。
2024-11-13 22:52:27
1385
原创 【WebRTC】视频发送链路中类的简单分析(上)
视频流在采集编码之后,需要通过RTP协议进行发送,下面记录与视频流发送相关的一些类的声明,梳理视频流发送过程中,不同类的继承关系。
2024-11-12 10:02:16
1514
原创 【WebRTC】视频编码链路中各个类的简单分析——VideoEncoder
VideoEncoder是执行具体编码任务的上层控制器,这个类可以被其他具体编码器的类,如VP8,VP9,H264和AV1继承。这个类当中主要的功能包括:(1)设置编码器信息(名称,handle,软编或硬编,SVC)(2)初始化编码器,注册编码结束后的回调对象,释放编码器,执行编码(3)根据QP阈值调控质量(4)码控参数(目标码率,码率,FPS)(5)码率调控(分辨率)(6)丢弃提示器(上一帧是否可解,上一帧时间戳等)(7)前向纠错控制(FecControl)(8)编码状态回调(丢包率变化,
2024-11-08 15:43:31
959
原创 【WebRTC】视频编码链路中各个类的简单分析——VideoStreamEncoder
VideoStreamEncoder是编码流程当中至关重要的一个类,它实现的功能包括:(1)开始编码器,暂停编码器,停止编码器(2)设置编码器(根据config)(3)调控编码参数,如码控参数,帧率等等(4)调控前向纠错器(5)视频帧的传输和接收(6)根据网络环境,调控丢帧(7)根据编码情况,调控屯帧(8)根据情况,调控编码质量(因为网络环境,编码器情况,可能会调整编码策略,影响编码质量)(9)对已编码图像进行后处理(10)统计编码信息
2024-11-07 20:22:29
1355
原创 【WebRTC】视频采集模块中各个类的简单分析
WebRTC主体是基于C++实现的框架,有必要分析其中各个类之间的继承关系。视频采集模块的代码在modules/video_capture中,其中有很多个文件,逐一分析。需要说明的是,采集模块与使用的平台强相关,不同的操作系统会使用不同的采集方式,在这里我记录的是Windows平台。因为RTC场景下Android平台和Windows平台使用量比较多,但是Android平台还涉及到JNI这一层,比Windows更复杂一些。
2024-11-06 21:41:46
1414
原创 【WebRTC】视频采集模块流程的简单分析
本文记录在Windows平台下,从摄像头采集信息的主要流程,其中Windows平台使用的是DirectShow框架。
2024-11-06 14:53:38
1267
原创 【论文#码率控制】Rate Control for H.264 Video With Enhanced Rate and Distortion Models
这项工作提出了一种新的H.264视频编码的速率控制方案,该方案增强了速率和失真模型。与现有的H.264速率控制方案相比,我们的方案提供了几个新特性。首先,通过量化参数估计和更新,解决了H.264中速率失真优化(RDO)和速率控制之间的相互依赖性。其次,由于头部信息的比特可能占据总比特预算的较大部分,特别是在低比特率编码时,这一点尤其正确,因此开发了一个用于头部信息的速率模型,以更准确地估计头部比特。头部比特的数量被建模为非零运动向量(MV)元素数量和MV数量的函数。
2024-11-02 09:50:05
1312
原创 【论文#码率控制】A Novel Rate Control Scheme for Low Delay Video Communication of H.264/AVC Standard
本文提出了一种适用于H.264/AVC标准低延迟视频通信的新型速率控制方案。引入了一种切换均值绝对差(MAD)预测方案,以增强传统的时域MAD预测模型,后者不适合预测突变的MAD波动。我们的新模型最多可将MAD预测误差减少69%。此外,还制定了一个准确的线性比特率-量化参数(R-Q)模型,用于描述纹理和非纹理信息的总比特数与量化参数(QP)之间的关系,从而消除了非纹理比特估计不准确带来的负面影响。通过探索峰值信噪比(PSNR)与QP值之间的关系,所提出的线性R-Q模型可以在宏块级别进一步优化QP的计算。
2024-10-26 16:31:13
867
原创 【x264】x264编码器工具性能的简单测试
本文简单记录了x264编码器当中一些工具带来的性能增益,使用了3种不同分辨率的测试序列,并使用x264中默认的量化参数。(1)第一,测试了不同profile之间性能的差异,发现high profile相对于main和baseline而言,有着显著的码率下降和编码质量提升的效果,码率至多下降-26.35%,PSNR至多提升0.435dB,并将此作为后续测试的anchor。
2024-10-24 22:29:04
1285
原创 【论文#快速算法】Region-of-Interest Based Resource Allocation for Conversational Video Communication of H.26
由于H.264/AVC的复杂性,将其应用于设计会话视频通信系统非常具有挑战性。本文通过使用基于感兴趣区域(ROI)的比特分配和计算资源分配方案解决了这一问题。在我们的系统中,首先通过直接帧差和肤色信息检测ROI。随后,根据每个宏块(MB)的相对重要性,自适应调整多个编码参数,包括量化参数、模式决策的候选模式、参考帧的数量、运动矢量的精度以及运动估计的搜索范围。这样,编码器可以根据ROI分配更多的资源,如比特和计算能力。
2024-10-23 11:03:30
1057
原创 【视频编码】BD-BR和BD-PSNR
在视频编码标准中,常使用BD-BR来描述一个算法的优劣性。在评估新的算法时,需要测试4个码率点,获得对应的4个PSNR点,这样能够在R-D平面获取一条R-D曲线。同样地,基于前面4个码率点,在原始编码器中也能够找到4个PSNR点,形成一条原始R-D曲线。两条R-D曲线下方的面积差异就是两个算法优劣的差异程度。
2024-10-22 16:34:45
1108
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人