当前位置: 首页 > news >正文

H266/VVC 帧内预测 PDPC 技术

位置决定的帧内预测组合 PDPC

  1. 在 VVC 中,对于帧内预测的 Planar 模式、DC 模式和几种角度模式需要使用 PDPC (position dependent intra prediction combination) 方法进一步处理。 PDPC 用于 DC 模式、Planar 模式、小于等于水平模式(模式 18) 的角度模式、大于等于垂直模式(模式 50)且小于等于模式 80 的角度模式,即对模式 19~49 之间的角度模式不使用 PDPC 技术。如果当前块是 Bdpcm 模式或 MRL 索引大于 0,则不使用 PDPC。

  2. 预测值是由参考像素和预测值再次加权求得;其中wL,wT是它们各自对应的基于水平或竖直距离的权重,如下公式:
    p r e d ( x , , y , ) = C l i p ( 0 , ( 1 < < B i t D e p t h ) − 1 , ( w L . R − 1 , y + w T . R x , − 1 + ( 64 − w L − w T ) . p r e d ( x , , y , ) + 32 ) > > 6 ) pred(x^,,y^,) = Clip(0, (1<<BitDepth)-1, (wL.R_{-1,y} + wT.R_{x,-1} + (64-wL-wT).pred(x^,,y^,)+32)>>6) pred(x,,y,)=Clip(0,(1<<BitDepth)1,(wL.R1,y+wT.Rx,1+(64wLwT).pred(x,,y,)+32)>>6)

  3. 如果 PDPC 用于 Planar、DC、水平、垂直模式则不需要额外的边界滤波。对于 Planar 和 DC 模式的 PDPC 操作是相同的。对于角度模式,如果是 HOR_IDX 或 VER_IDX 则左侧或上方的参考像素不会被使用。PDPC 的权值和缩放因子取决 于预测模式和块尺寸。只有块的宽和高都大于等于 4 时才可以使用 PDPC。

  4. 图 6 是各种预测模式时 PDPC 参考像素定义( Rx,−1 和 R−1,y )。预测值 pred (x’, y’)坐标为 (x’, y’)。对于对角线模式(模式 2 和模式 66),参考像素 Rx,−1 的坐标 x 为 x = x’ + y’ + 1, 参考像素 R−1,y 的坐标 y 为 y = x’ + y’ + 1。对于其他角度模式 Rx,−1 和 R−1,y 可能落地非整数像素位置,此时使用距其最近的整数像素值作为参考。
    在这里插入图片描述

  5. 修正权重wL,wT 的计算根据不同的模式有不同的计算方法,具体可以根据下表查找。这也可以从 VVenC 编码器源码中找到对应的实现,逻辑相对比较简单。
    在这里插入图片描述

    • 偏移量 scale 的计算:
      • 如果角度模式50~66时,scale = Min( 2, Log2( nTbH ) − Floor( Log2( 3 * invAngle − 2 ) ) + 8 )
      • 如果角度模式为2~18时,scale = Min( 2, Log2( nTbW ) − Floor( Log2( 3 * invAngle − 2 ) ) + 8 )
      • 否则,scale = ( ( Log2( nTbW ) + Log2( nTbH ) − 2 ) >> 2 )
  6. VVenC 编码器中是否使用 PDPC 技术在 IntraPrediction.cpp 文件中 initPredIntraParams 函数判断。
    在这里插入图片描述

// Function for initialization of intra prediction parameters
void IntraPrediction::initPredIntraParams(const CodingUnit& cu, const CompArea area, const SPS& sps)
{const ComponentID compId = area.compID;const ChannelType chType = toChannelType(compId);const bool        useISP = NOT_INTRA_SUBPARTITIONS != cu.ispMode && isLuma( chType );const Size   cuSize    = Size( cu.blocks[compId].width, cu.blocks[compId].height );const Size   puSize    = Size( area.width, area.height );const Size&  blockSize = useISP ? cuSize : puSize;const int      dirMode = CU::getFinalIntraMode(cu, chType);const int     predMode = getWideAngle( blockSize.width, blockSize.height, dirMode );m_ipaParam.isModeVer            = predMode >= DIA_IDX;m_ipaParam.multiRefIndex        = isLuma (chType) ? cu.multiRefIdx : 0 ;m_ipaParam.refFilterFlag        = false;m_ipaParam.interpolationFlag    = false;m_ipaParam.applyPDPC            = (puSize.width >= MIN_TB_SIZEY && puSize.height >= MIN_TB_SIZEY) && m_ipaParam.multiRefIndex == 0;const int    intraPredAngleMode = (m_ipaParam.isModeVer) ? predMode - VER_IDX : -(predMode - HOR_IDX);int absAng = 0;if (dirMode > DC_IDX && dirMode < NUM_LUMA_MODE) // intraPredAngle for directional modes{static const int angTable[32]    = { 0,    1,    2,    3,    4,    6,     8,   10,   12,   14,   16,   18,   20,   23,   26,   29,   32,   35,   39,  45,  51,  57,  64,  73,  86, 102, 128, 171, 256, 341, 512, 1024 };static const int invAngTable[32] = {0,   16384, 8192, 5461, 4096, 2731, 2048, 1638, 1365, 1170, 1024, 910, 819, 712, 630, 565,512, 468,   420,  364,  321,  287,  256,  224,  191,  161,  128,  96,  64,  48,  32,  16};   // (512 * 32) / Angleconst int     absAngMode         = abs(intraPredAngleMode);const int     signAng            = intraPredAngleMode < 0 ? -1 : 1;absAng             = angTable  [absAngMode];m_ipaParam.absInvAngle           = invAngTable[absAngMode];m_ipaParam.intraPredAngle        = signAng * absAng;if (intraPredAngleMode < 0){m_ipaParam.applyPDPC = false;}else if (intraPredAngleMode > 0){const int sideSize = m_ipaParam.isModeVer ? puSize.height : puSize.width;const int maxScale = 2;m_ipaParam.angularScale = std::min(maxScale, floorLog2(sideSize) - (floorLog2(3 * m_ipaParam.absInvAngle - 2) - 8));m_ipaParam.applyPDPC &= m_ipaParam.angularScale >= 0;}}// high level conditions and DC intra predictionif( !isLuma( chType )|| useISP|| CU::isMIP( cu, chType ) //th remove this|| m_ipaParam.multiRefIndex|| DC_IDX == dirMode){}else if (cu.bdpcmM[chType]){m_ipaParam.refFilterFlag = false;}else if (dirMode == PLANAR_IDX) // Planar intra prediction{m_ipaParam.refFilterFlag = puSize.width * puSize.height > 32 ? true : false;}else if (!useISP)// HOR, VER and angular modes (MDIS){bool filterFlag = false;{const int diff = std::min<int>( abs( predMode - HOR_IDX ), abs( predMode - VER_IDX ) );const int log2Size = (Log2(puSize.width * puSize.height) >> 1);CHECK( log2Size >= MAX_INTRA_FILTER_DEPTHS, "Size not supported" );filterFlag = (diff > m_aucIntraFilter[log2Size]);}// Selelection of either ([1 2 1] / 4 ) refrence filter OR Gaussian 4-tap interpolation filterif (filterFlag){const bool isRefFilter       =  isIntegerSlope(absAng);CHECK( puSize.width * puSize.height <= 32, "DCT-IF interpolation filter is always used for 4x4, 4x8, and 8x4 luma CB" );m_ipaParam.refFilterFlag     =  isRefFilter;m_ipaParam.interpolationFlag = !isRefFilter;}}
}
  1. DC、Planar 模式的 PDPC 处理在 IntraPrediction.cpp 文件中 IntraPredSampleFilter_Core函数中完成。
    在这里插入图片描述
void  IntraPredSampleFilter_Core(PelBuf& dstBuf, const CPelBuf& pSrc)
{const int iWidth  = dstBuf.width;const int iHeight = dstBuf.height;const int scale = ((Log2(iWidth*iHeight) - 2) >> 2);CHECK(scale < 0 || scale > 31, "PDPC: scale < 0 || scale > 31");for (int y = 0; y < iHeight; y++){const int wT   = 32 >> std::min(31, ((y << 1) >> scale));const Pel left = pSrc.at(y + 1, 1);for (int x = 0; x < iWidth; x++){const int wL    = 32 >> std::min(31, ((x << 1) >> scale));const Pel top   = pSrc.at(x + 1, 0);const Pel val   = dstBuf.at(x, y);dstBuf.at(x, y) = val + ((wL * (left - val) + wT * (top - val) + 32) >> 6);}}
}
  1. 水平、垂直模式的 PDPC 处理在 IntraPrediction.cpp 文件中 IntraHorVerPDPC_Core函数中完成。
    在这里插入图片描述
void IntraHorVerPDPC_Core(Pel* pDsty,const int dstStride,Pel* refSide,const int width,const int height,int scale,const Pel* refMain, const ClpRng& clpRng)
{const Pel topLeft = refMain[0];for( int y = 0; y < height; y++ ){memcpy(pDsty,&refMain[1],width*sizeof(Pel));const Pel left    = refSide[1 + y];for (int x = 0; x < std::min(3 << scale, width); x++){const int wL  = 32 >> (2 * x >> scale);const Pel val = pDsty[x];pDsty[x]      = ClipPel(val + ((wL * (left - topLeft) + 32) >> 6), clpRng);}pDsty += dstStride;}
}
  1. 其他角度模式(2~17、51~66)的 PDPC 处理在 IntraPrediction.cpp 文件中 IntraAnglePDPC_Core函数中完成。
    在这里插入图片描述
void IntraAnglePDPC_Core(Pel* pDsty,const int dstStride,Pel* refSide,const int width,const int height,int scale,int invAngle)
{for (int y = 0; y<height; y++, pDsty += dstStride){int       invAngleSum = 256;for (int x = 0; x < std::min(3 << scale, width); x++){invAngleSum += invAngle;int wL   = 32 >> (2 * x >> scale);Pel left = refSide[y + (invAngleSum >> 9) + 1];pDsty[x] = pDsty[x] + ((wL * (left - pDsty[x]) + 32) >> 6);}}
}

相关文章:

H266/VVC 帧内预测 PDPC 技术

位置决定的帧内预测组合 PDPC 在 VVC 中&#xff0c;对于帧内预测的 Planar 模式、DC 模式和几种角度模式需要使用 PDPC (position dependent intra prediction combination) 方法进一步处理。 PDPC 用于 DC 模式、Planar 模式、小于等于水平模式(模式 18) 的角度模式、大于等于…...

微信小程序mp3音频播放组件,仅需传入url即可

// index.js // packageChat/components/audio-player/index.js Component({/*** 组件的属性列表*/properties: {/*** MP3 文件的 URL*/src: {type: String,value: ,observer(newVal, oldVal) {if (newVal ! oldVal && newVal) {// 如果 InnerAudioContext 已存在&…...

Hadoop3.x 万字解析,从入门到剖析源码

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...

mysql的一些函数及其用法

mysql 1-来自于leetcode1517的题目 表: Users------------------------ | Column Name | Type | ------------------------ | user_id | int | | name | varchar | | mail | varchar | ------------------------已知一个表&#xff0c;它的…...

[java基础]LinkedList源码粗析

LinkedList 的数据结构 实现List、Deque 接口&#xff0c;基于 双向链表实现的列表。与基于数组的 ArrayList 不同&#xff0c;基于链表的LinkedList 允许在列表的任何位置快速地插入和删除元素。 Java中LinkedList实现了Deque&#xff0c;它提供了 add, offer, remove, poll, …...

基于Spring Boot的海滨体育馆管理系统的设计与实现

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 宠物医院…...

易支付二次元网站源码及部署教程

易支付二次元网站源码及部署教程 引言 在当今数字化时代&#xff0c;二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求&#xff0c;搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程&#xf…...

json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?

在使用 Python 的 json 模块进行序列化时&#xff0c;默认情况下会将中文转换为 Unicode 编码。如果你希望在序列化时保留中文&#xff0c;可以通过设置 ensure_asciiFalse 来实现。 以下是示例代码&#xff1a; import jsondata {"name": "李浩瑞", &q…...

Perl语言的循环实现

Perl语言的循环实现 引言 Perl是一种强大的脚本语言&#xff0c;以其灵活的语法和强大的文本处理能力著称。无论是在系统管理、网络编程&#xff0c;还是在Web应用开发中&#xff0c;Perl都广泛应用于各种领域。循环是编程语言中一个极其重要的概念&#xff0c;它允许程序重复…...

IOMMU PT

什么是 IOMMU PT IOMMU PT&#xff08;Input/Output Memory Management Unit - Pass-Through&#xff09;是一种技术&#xff0c;主要用于虚拟化环境中&#xff0c;特别是在使用直接设备分配&#xff08;也称为设备直通&#xff09;的情况下。这项技术允许虚拟机直接访问物理硬…...

DNS协议漏洞利用实验_hust计算机网络安全实验

文章目录 计算机网络安全实验 DNS协议漏洞利用实验 docker使用 建立实验环境docker常用指令 一些注意事项设置本地 DNS 服务器 配置用户计算机设置本地DNS服务器在本地 DNS 服务器中建一个区域 修改主机文件&#xff08;可略&#xff09;netwox实施DNS的用户响应欺骗攻击netwo…...

深度学习中的卷积和反卷积(二)——反卷积的介绍

1 简介 反卷积&#xff08;deconvolution&#xff09;又称转置卷积&#xff0c;是卷积的拟操作&#xff0c;常用于GAN等模型中。反卷积是上采样的一种&#xff0c;上采样是指将特征图维度恢复到原始图的维度&#xff0c;这种增大维度的过程被称为上采样。上采样可以用插值或反…...

PyCharm 引用其他路径下的文件报错 ModuleNotFound 或报红

PyCharm 中引用其他路径下的文件提示 ModuleNotFound&#xff0c;将被引用目录添加到系统路径&#xff1a; # # 获取当前目录 dir_path os.path.dirname(os.path.realpath(__file__)) # # 获取上级目录 parent_dir_path os.path.abspath(os.path.join(dir_path, os.pardir))…...

【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)

​​​​​​​ 目录 一、引言 二、自动语音识别&#xff08;automatic-speech-recognition&#xff09; 2.1 概述 2.2 技术原理 2.2.1 whisper模型 2.2.2 Wav2vec 2.0模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数​​​​​​​ 2.3.2 pipeline对象使用参数…...

Linux 工作队列

系列文章目录 Linux内核学习 Linux 知识&#xff08;1&#xff09; Linux 知识&#xff08;2&#xff09; Linux 工作队列 Linux 内核源代码情景分析&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; 文章目录 系列文章目录综述工作&#xff08;work_…...

程序血缘分析技术在工商银行软件工程中的应用

当前,随着软件领域技术更新换代速度的日益加快,市场需求也变得更加多样化和个性化,业界普遍通过加速产品迭代来满足客户需求,但在此过程中也暴露出一些研发管理痛点问题,如服务和程序类资产信息分散于各个不同的应用和系统中,信息归集费时费力;设计、开发和测试人员无法…...

纯手工(不基于maven的pom.xml、Web容器)连接MySQL数据库的详细过程(Java Web学习笔记)

1 引言 最近读一些Java Web开发类的书籍时&#xff0c;发现书中的连接数据库的过程缺少了一些关键性的过程&#xff0c;这对初学者非常不友好。为此&#xff0c;本文将给出详细的连接MySQL数据库的过程&#xff0c;并且是纯手工&#xff0c;不依赖于pom.xml和Web容器&#xff…...

node-sass@4.14.1报错的最终解决方案分享

输入npm i全安装文件所需的依赖的时候&#xff0c;博主是使用sass去书写的&#xff0c;使用的是node-sass4.14.1和sass-loader7.3.1的版本的&#xff0c;安装的时候老是出现错误&#xff0c; node-sass4.14.1版本不再被支持的原因 node-sass 是一个基于 LibSass 的 Node.js 绑…...

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代&#xff0c;智能聊天助手已然化身成为提升用户体验的关键利器&#xff0c;全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮&#xff0c;我毅然投身于极具挑战性…...

【Linux系列】如何使用 nohup 命令在后台运行脚本

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Web渗透测试之XSS跨站脚本攻击 跨域是什么?同源机制又是什么? cors以及Jsonp是什么 一篇文章给你说明白

目录 Cookie的Httponly属性和逃过方式 浏览器同源机制 cors跨域和jsonp跨域和跨域标签 Cors跨域 - 跨源 Jsonp 跨域 jsonp跨域原理&#xff1a; 说明: Cookie的Httponly属性和逃过方式 Xss攻击手段 最常用的目的获取cookie Cookie中设置了 httponlyTrue 方式js操作获…...

K-Means 聚类算法:用生活场景讲解机器学习的“分组”方法

一、K-Means 算法概述 K-Means 是一种经典的无监督学习聚类算法&#xff0c;目的是将数据集中 n 个样本划分成 K 个簇&#xff08;cluster&#xff09;&#xff0c;每个样本根据其特征被归入与之最接近的簇。简单来说&#xff0c;这就像在超市购物时&#xff0c;顾客会被根据购…...

C语言与ASCII码应用之简单加密

加密是什么&#xff1f;什么是加密通话&#xff1f;用人话说就是一句有含义的话&#xff0c;经过一定的特殊规则把里面的每个字按照这个规则进行改变&#xff0c;但是这个规则只有你和你想让知道这条信息的人知道 今天我们来用ASCII码编写一个简单加密与解密的程序&#xff0c…...

python无需验证码免登录12306抢票 --selenium(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 就在刚刚我抢的票&#xff1a;2025年1月8日…...

[论文阅读]Corpus Poisoning via Approximate Greedy Gradient Descent

Corpus Poisoning via Approximate Greedy Gradient Descent [2406.05087] Corpus Poisoning via Approximate Greedy Gradient Descent 基于近似贪婪梯度下降的语料库投毒 面向检索器的攻击 AGGD 通过从所有符元位置中选择排名最高的符元&#xff0c;而不是从单个随机采样…...

C++—9、如何在Microsoft Visual Studio中调试C++

本文通过实例操作来介绍 Visual Studio 调试器的功能。调试器在运行过程中可提供许多方法让你查看代码的情况。 你可以逐步浏览代码、查看变量中存储的值、设置对变量的监视以查看值何时改变、检查代码的执行路径、查看代码分支是否正在运行等等。本实例主要是设置断点及查看内…...

《深度剖析:开源与闭源模型,AI舞台上的不同角色》

在人工智能蓬勃发展的当下&#xff0c;模型的选择如同为一场战役挑选合适的武器&#xff0c;至关重要。开源模型与闭源模型作为AI领域的两大阵营&#xff0c;在性能和应用场景上展现出显著差异&#xff0c;深刻影响着开发者、企业以及整个行业的走向。 性能差异&#xff1a;实…...

开源 vGPU 方案 HAMi 解析

开源 vGPU 方案 HAMi 一、k8s 环境下 GPU 资源管理的现状与问题 &#xff08;一&#xff09;资源感知与绑定 在 k8s 中&#xff0c;资源与节点紧密绑定。对于 GPU 资源&#xff0c;我们依赖 NVIDIA 提供的 device-plugin 来进行感知&#xff0c;并将其上报到 kube-apiserver…...

Unity 大地图功能 离线瓦片地图

不使用第二个摄像机实现类似开放世界的大地图功能。 功能如下&#xff1a; 按下M键打开/关闭大地图功能 打开大地图时&#xff0c;默认玩家位置居中 大地图支持拖拽&#xff0c;可调节拖拽速度&#xff0c;支持XY轴翻转 支持大地图设置边缘偏移量 可设置是否启动拖拽边界 …...

【计算机网络】什么是网关(Gateway)?

网上冲浪多了&#xff0c;你可以听到过网关&#xff08;Gateway&#xff09;这个词&#xff0c;但是却不太清楚网关&#xff08;Gateway&#xff09;到底是干什么的、负责网络当中的什么任务&#xff0c;本篇文字将会为你介绍网关&#xff08;Gateway&#xff09;的作用&#x…...

AIOps 平台

AIOps&#xff08;Artificial Intelligence for IT Operations&#xff09;平台是一种结合人工智能&#xff08;AI&#xff09;技术和IT运营管理的解决方案&#xff0c;旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…...

使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备

一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB&#xff0c;这里会将创建数据库的代码放到了&#xff0c;将文件复制到data/sql目录中&#xff0c;然后在终端中的项目文件夹中执行&#xff1a; pip install sqlite3现在创建一个名为sqldb的数据库&a…...

TCP与UDP协议

一、主要区别 ① 连接的建立和断开&#xff1a; TCP&#xff08;Transform Control Protocol&#xff09;通过三次握手来建立一个可靠的连接。这个过程确保了双方都能发送和接收数据。连接建立后&#xff0c;TCP提供稳定的数据传输服务。当通信结束时&#xff0c;TCP通过四次…...

【MySQL】MVCC详解, 图文并茂简单易懂

欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...

Cisco认证是Cisco公司建立的网络技术证书体系

思科认证体系是由Cisco公司建立的分为3个层次的网络技术证书体系&#xff0c;随着Cisco产品线的扩大和市场份额的不断提升&#xff0c;Cisco产品从当初仅有的 Cisco路由器和Cisco交换机发展到现在的6大方向&#xff1a;路由交换&#xff0c;网络设计&#xff0c;网络安全&#…...

Clojure语言的面向对象编程

Clojure语言的面向对象编程 引言 Clojure是一种现代的Lisp方言&#xff0c;它特别强调函数式编程&#xff0c;Immutable数据结构和强大的并发能力。然而&#xff0c;很多人可能会问&#xff1a;Clojure支持面向对象编程吗&#xff1f;虽然Clojure没有像Java或C那样的传统类和…...

React快速上手到项目实战总篇

React核心价值与前置知识 时刻保持对知识的渴望 家人们 开学!!! 核心价值 组件化&#xff08;易开发易维护&#xff09; 数据驱动视图 &#xff1a;定义好数据和ui的显示规则 即UIf(state) 只关注业务数据修改&#xff0c;不在操作DOM 增加开发效率 使用vite创建Recat项目 …...

Dart语言的语法

Dart语言的魅力与应用 引言 随着互联网的发展和移动设备的普及&#xff0c;编程语言层出不穷&#xff0c;各种语言如雨后春笋般被创造出来。其中&#xff0c;Dart语言作为一种现代编程语言&#xff0c;凭借其简洁的语法、强大的功能以及良好的性能&#xff0c;受到了越来越多…...

C++——多态

目录 前言 1. 多态的概念 2. 多态的定义及其实现 2.1 多态的构成条件 2.1.1 实现多态的两个重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 多态场景的⼀个选择题 2.1.5 虚函数重写的⼀些其他问题 2.1.5.1 协变&#xff08;了解&#xff09; 2.1.5.2 析构函…...

什么是Transformer模型中的KV缓存:上下文新增那之前计算的KV还可用,在原有基础上对新增的进行计算就行

什么是Transformer模型中的KV缓存? 在Transformer模型中,KV缓存(Key-Value Cache)具有重要作用,以下是关于它的详细介绍: 概念含义 KV缓存主要是用于存储在模型推理过程中已经计算过的键(Key)和值(Value)信息。在Transformer架构里,比如在自注意力机制等计算环节…...

12.C语言中的struct详解:定义、赋值、指针、嵌套与位字段

目录 1.简介2.struct 的复制3.struct 指针4.struct 的嵌套5.位字段6.弹性数组成员 1.简介 本篇原文为&#xff1a;C语言中的struct详解&#xff1a;定义、赋值、指针、嵌套与位字段。 更多C进阶、rust、python、逆向等等教程&#xff0c;可点击此链接查看&#xff1a;酷程网 …...

洛谷 P3000 [USACO10DEC] Cow Calisthenics G

思路 题目要求断若干条边后形成的连通块中&#xff0c;最大的直径最小&#xff0c;很明显的二分。关键就在于如何写 c h e c k check check 函数了。 可以用 d f s dfs dfs 来判断要断哪条边。 一、 d [ u ] d[u] d[u] 定义 设 d [ u ] d[u] d[u] 为从 u u u 出发到子树…...

前端拿到zip中所有文件并下载为新的zip文件

问题原因&#xff1a;后端返回了一个zip格式文件供前端下载&#xff0c;然后下载后&#xff0c;形成了zip套zip的形式&#xff0c;当后端不愿处理时&#xff0c;前端不能坐以待毙 PS&#xff1a;当压缩包文件量过大&#xff0c;前端可能会出问题&#xff08;脑测&#xff0c;未…...

JVM调优

jvm调优步骤&#xff1a;1发现问题、2。定位问题、3.解决问题 jdk自带的命令行调优工具&#xff1a; 1. jps 查看正在运行的 Java 进程 jps -v 查看进程启动时的JVM参数 options 参数&#xff1a; -q&#xff1a;仅仅显示 LVMID&#xff08;local virtual machine id&#x…...

【前端】【HTML】入门基础知识

参考视频&#xff1a;【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>&#xff1a;一级标题&#xff0c;通常用于页面的主标题&#xff0c;字体较大且醒目。 <h2>&#xff1a;二级标题&#xff0c;用于副标题或主要章节标…...

Ubuntu桌面管理环境: GDM3,KDM,LightDM

介绍 Ubuntu是一个广受欢迎的Linux操作系统&#xff0c;拥有强大而多样化的桌面管理环境。其中三个常用的桌面管理环境是GDM3&#xff0c;KDM和LightDM。本篇博客将介绍这三个桌面管理环境的特点和功能。 GDM3 (GNOME Display Manager) GDM3是默认的桌面管理环境&#xff0c…...

每天你好20250110(距离春节19天!!!)

亲爱的朋友们&#xff0c;大家早上好&#xff01; &#x1f31e; 今晨乃 2025 年 1 月 10 日&#xff0c;星期五&#xff0c;农历乙巳[蛇]年十一月二十一日。祥蛇逸彩送祥&#xff0c;金乌喷薄耀世&#xff0c;晨晖破雾而来&#xff0c;恰似“赤日初升&#xff0c;其道大光”&…...

iOS 本地新项目上传git仓库,并使用sourceTree管理

此文记录的场景描述&#xff1a; iOS前期开发时&#xff0c;在本地创建项目&#xff0c;直至开发一段时间&#xff0c;初期编码及框架已完善后&#xff0c;才拿到git仓库的地址。此时需要将本地代码上传到git仓库。 上传至git仓库&#xff0c;可以使用终端&#xff0c;键入命令…...

计算机网络之---计算机网络的性能评估

计算机网络的性能评估是指通过各种标准和指标来衡量网络的工作效率和质量&#xff0c;进而对网络进行优化和改进的过程。评估的目标是确保网络能够满足预期的服务质量&#xff08;QoS&#xff09;和性能需求。常见的计算机网络性能评估指标包括带宽、延迟、吞吐量、丢包率等。 …...

对话|企业如何构建更完善的容器供应链安全防护体系

对话&#xff5c;企业如何构建更完善的容器供应链安全防护体系 云布道师 随着云计算和 DevOps 的兴起&#xff0c;容器技术和自动化成为软件开发中的必要手段&#xff0c;软件供应链也进入了自动化及 CI/CD 阶段。然而&#xff0c;容器技术和自动化虽然提升了软件的更新速度&…...