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

视频质量评价SimpleVQA

目录

  • 一、研究意义
    • 例子
  • 二、介绍
  • 三、文章解读
      • 3.1 论文动机
      • 3.2论文思路
      • 3.3方法
            • 3.3.1网络框架
            • 3.3.2公式解读
            • 3.3.3核心创新
            • 3.3.4理解
    • !!!作者对模型的改进
      • 本人算法框体
      • 视频抽帧
      • 美学特征提取网络:
      • 3.3.5实验细节:
    • 四、代码复现
      • 4.1代码文件简介
      • 4.2数据集下载
      • 4.3环境
      • 4.4.1复现结果


一、研究意义

用户生成内容(UGC)视频的质量评估对于确保终端用户的观看体验具有重要作用。典型的UGC视频如抖音视频、游戏视频等等。人们在观看这些视频的时候都希望有一个清晰的、稳定的视频带来更好的用户体验。

参考文献:https://www.aspiringcode.com?url=https://www.aspiringcode.com

例子

如下图,模糊的视频让人没有观看欲望,但是这个草原的视频会吸引人们的注意甚至想去身临其境。所以,视频质量评价算法模型的意义在于筛选出高质量的视频供人们观看,并且为下游的视频去模糊、视频画质提升任务做上游工作。
在这里插入图片描述

在这里插入图片描述

二、介绍

A Deep Learning based No-reference Quality Assessment Model for UGC Videos是一篇CCF A类会议ACM MM2023年上发表的文章。

源码中给出了LSVQ数据集上的训练的模型,本文补充KoNViD、youtube_ugc数据集上的训练模型
源码中REDME文件中只给出了如何运行代码,本文对代码进行详细解读,解释每一块的作用
本文提供多个数据集的下载连接,方便读者快速下载使用

三、文章解读

3.1 论文动机

对于视频质量评价而言,视频的质量主要取决于视频的内容、视频的稳定性、视频有无失真。所以基于上述内容,本文从空间-时间进行建模以对视频的质量进行整体评价。

3.2论文思路

提出一个时空模型对视频的图像和时间信息进行处理,最终得到视频预测的质量分数。

视频抽帧处理:将视频每一秒抽取一帧关键帧
空间信息处理:使用ImageNet上预训练的ResNet提取视频的空间信息
时间信息处理:使用冻结参数的slowfast网络提取时间信息
时空信息融合:使用concatenate连接时空特征
质量分数回归:使用多层感知机MLP进行质量回归

3.3方法

3.3.1网络框架

在这里插入图片描述
Input video即是数据集中训练数据,将输入视频进行Frame extraction,代码中是每一秒抽取第一帧作为视频的关键帧,并且只使用8秒,不足8秒的视频复制前面的帧。所以,最终一个视频得到的帧数为8
Chunks即代表一个视频的所有帧,2D frames代表抽出来的帧。将Chunks馈送到Motion feature extraction模块,将2D frames馈送到Spatial feature extraction模块,分别进行特征提取
Motion feature extraction模块是参数冻结的,可以直接使用训练好的参数进行特征提取,这个模块其内涵是使用3D CNN,Spatial feature extraction模块是可训练的,这个模块其内涵是预训练的ResNet,预训练的ResNet可以帮助模型提取充分的语义信息,并且将4个stage的特征图进行全局平均值和标准差池化,以满足多尺度视频
使用cat操作进行特征融合,就是很简单的在通道维度进行特征拼接。再到MLP进行质量回归,MLP也是需要训练的

3.3.2公式解读

抽取关键帧:将视频每一秒提取关键帧,对于N秒视频就抽取N帧,得到帧集合。代码中每一个视频都归一化抽取8帧。

import numpy as np
import os
import pandas as pd
import cv2#    /    home/dataset/LSVQLSVQ video_name  LSVQ_image
def extract_frame(videos_dir, video_name, save_folder):filename = os.path.join(videos_dir, video_name + '.mp4')video_capture = cv2.VideoCapture()video_capture.open(filename)cap = cv2.VideoCapture(filename)video_length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))video_frame_rate = int(round(cap.get(cv2.CAP_PROP_FPS)))video_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # the heigh of framesvideo_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # the width of frames# 按短边进行等比例缩放if video_height > video_width:video_width_resize = 520video_height_resize = int(video_width_resize / video_width * video_height)else:video_height_resize = 520video_width_resize = int(video_height_resize / video_height * video_width)dim = (video_width_resize, video_height_resize)video_read_index = 0frame_idx = 0video_length_min = 8for i in range(video_length):has_frames, frame = video_capture.read()if has_frames:# key frameif (video_read_index < video_length) and (frame_idx % video_frame_rate == 0):  # 保存 帧数/帧率个帧,每次保存第一帧read_frame = cv2.resize(frame, dim)exit_folder(os.path.join(save_folder, video_name))cv2.imwrite(os.path.join(save_folder, video_name,'{:03d}'.format(video_read_index) + '.png'), read_frame)video_read_index += 1frame_idx += 1if video_read_index < video_length_min:  # 不足video_length_min个帧,直接复制前面的一帧for i in range(video_read_index, video_length_min):cv2.imwrite(os.path.join(save_folder, video_name,'{:03d}'.format(i) + '.png'), read_frame)returndef exit_folder(folder_name):if not os.path.exists(folder_name):os.makedirs(folder_name)returnif __name__ == "__main__":# train subsetfilename_path = '/data/user/gbb/SimpleVQA-main/data/LSVQ_whole_train.csv'column_names = ['name', 'p1', 'p2', 'p3','height', 'width', 'mos_p1','mos_p2', 'mos_p3', 'mos','frame_number', 'fn_last_frame', 'left_p1','right_p1', 'top_p1', 'bottom_p1','start_p1', 'end_p1', 'left_p2','right_p2', 'top_p2', 'bottom_p2','start_p2', 'end_p2', 'left_p3','right_p3', 'top_p3', 'bottom_p3','start_p3', 'end_p3', 'top_vid','left_vid', 'bottom_vid', 'right_vid','start_vid', 'end_vid', 'is_test', 'is_valid']dataInfo = pd.read_csv(filename_path, header=0, sep=',', names=column_names, index_col=False, encoding="utf-8-sig")video_names = dataInfo['name']n_video = len(video_names)videos_dir = '/data/dataset/LSVQ'save_folder = 'LSVQ_image'for i in range(n_video):video_name = video_names.iloc[i]print('start extract {}th video: {}'.format(i, video_name))extract_frame(videos_dir, video_name, save_folder)

提取时空特征:空间特征提取就是对每一张的图像进行特征提取,时间特征提取就是对整个视频进行处理,提取视频的时间信息。空间特征提取器公式中使用fw.空间特征提取器是在Imgenet上预训练的Resnet50,fwk是提取出的特征图。在这里插入图片描述
时间特征提取器是预训练的Slowfast网络,时间特征提取器论文中公式使用MOTION表示.

3.3.3核心创新

提出了一种有效、高效的基于深度学习的UGC VQA模型,该模型包括特征提取模块、质量回归模块和质量池模块。该模型不仅在五个流行的UGC VQA数据库上取得了显著的性能,而且具有较低的计算复杂度,非常适合实际应用。
特征提取模块提取两种质量感知特征:空间失真的空间特征和运动失真的时空特征,其中空间特征通过端到端的方式从视频帧的原始像素中学习,时空特征通过预训练的动作识别网络来提取。
提出了一种多尺度质量融合策略来解决不同分辨率的质量评价问题,其中多尺度权重是通过考虑观看环境信息从人类视觉系统的对比度敏感度函数中获得的。

3.3.4理解

以下是我自己对这个模型的理解解释图,对输入维度做了一定解释。时间特征流由于多了时间信息会比空间特征流多一个维度特征。所有在进行cat操作的时候需要降维。降维处理:先进行全局平均池化再将帧数维度和通道维度融合成一个维度。

在这里插入图片描述

!!!作者对模型的改进

举个例子:同样的设备,同一个摄影师,同一个模特,拍照姿势也一样,只有背景不同,保持单一变量的条件下。站在垃圾堆前面拍摄的视频和站在来福士前面拍摄的视频,人们在进行主观评价做数据标注时,肯定会觉得在来福士前面拍摄的更好看。因为背景的美学已经开始影响视频的质量分数了。所以,本人从这个方面对论文模型进行改进。

本人算法框体

在这里插入图片描述

视频抽帧

空间信息提取分为两个分支:第一、美学特征提取网络;第二、技术特征提取网络
时间信息提取
特征融合与质量回归
由于本人改进主要针对图像美学分支,从而在这里重点概述。

美学特征提取网络:

特征提取网络使用Resnet50框架,使用现在图像美学质量评价领域最大的数据集AVA数据集进行预训练。然后加载预训练权重。再使用图像美学数据集AADB进行美学属性回归,从而使网络具有图像美学特征提取能力。保存训练最好的权重。1、2、3、4、5、6个特征分别使AADB数据集中的6种美学客观属性。得到美学特征提取网络后,将视频关键帧馈送到美学特征提取网络中提取美学特征。
注:附件中有美学分支详细代码

3.3.5实验细节:

损失函数:L1RankLoss
优化器:Adam
超参数设置如下:

parser = argparse.ArgumentParser()# input parametersparser.add_argument('--database', type=str, default='LSVQ')  # LSVQparser.add_argument('--model_name', type=str, default='UGC_BVQA_model')  # UGC_BVQA_model# training parametersparser.add_argument('--conv_base_lr', type=float, default=1e-5)parser.add_argument('--decay_ratio', type=float, default=0.9)  # 0.9parser.add_argument('--decay_interval', type=int, default=2)  #多少步长来控制权重衰减parser.add_argument('--n_trial', type=int, default=0)parser.add_argument('--results_path', type=str)parser.add_argument('--exp_version', type=int, default=0)  # 0parser.add_argument('--print_samples', type=int, default=1000)parser.add_argument('--train_batch_size', type=int, default=8) #16parser.add_argument('--num_workers', type=int, default=6)  # 6parser.add_argument('--resize', type=int, default=520)parser.add_argument('--crop_size', type=int, default=448)parser.add_argument('--epochs', type=int, default=20)# miscparser.add_argument('--ckpt_path', type=str, default='ckpts')   #用于存储最好的效果parser.add_argument('--multi_gpu', action='store_true')  # 当命令行中触发multi_gpu参数时,返回为True,没有触发的时候返回Falseparser.add_argument('--gpu_ids', type=list, default=None)parser.add_argument('--loss_type', type=str, default='L1RankLoss')config = parser.parse_args()

四、代码复现

在附件中下载代码文件,先看到对应的代码文件结构,以下是代码文件简介。

4.1代码文件简介

在这里插入图片描述
文件夹Aes存放图像美学代码
文件夹ckpts存放权重
文件夹data存放数据集的csv文件
datasettimages_originalsize存放的图像美学数据集AADB
文件夹model存放模型
data_loader.py数据集加载处理代码
extract_frame_.py抽取各个数据集的帧代码
extract_slowfast_feature_
.py抽取各个数据集的时间特征代码
test_on_pretrained_model.py和test_demo.py分别是美学和视频的测试代码
其他文件都是包文件或者本人该模型的测试代码

4.2数据集下载

数据集文件数据较大,自行下载

视频质量评价目前最大的数据集:LSVQ、Konvid1k
图像美学数据集:AVA、AADB

注:数据集下载链接放在附件README中!

4.3环境

python=3.8.8
torch=1.10.2
torchvision=0.11.3
scipy
4.4测试训练
以抽帧模块为演示。

安装相应的包代码中import部分,可以在终端使用pip install安装(简单方便)
在这里插入图片描述
数据集路径修改,其他代码类似操作,将路径修改到自己对应文件
在这里插入图片描述
在这里插入图片描述

4.4.1复现结果

本人挂在后台运行。实验结果如下

在这里插入图片描述

参考文献:https://www.aspiringcode.com?url=https://www.aspiringcode.com


相关文章:

视频质量评价SimpleVQA

目录 一、研究意义例子 二、介绍三、文章解读3.1 论文动机3.2论文思路3.3方法3.3.1网络框架3.3.2公式解读3.3.3核心创新3.3.4理解 &#xff01;&#xff01;&#xff01;作者对模型的改进本人算法框体视频抽帧美学特征提取网络&#xff1a;3.3.5实验细节&#xff1a; 四、代码复…...

浏览器插件基于nativeMessaging通信

上一篇文章介绍了基于nativeMessaging启动本地程序&#xff0c;使用官方demo是支持双向通信&#xff0c;demo启动的程序是python写的&#xff0c;现在基于Qt程序进行说明。 消息传递协议 Chrome 会在单独的进程中启动每个原生消息传递主机&#xff0c;并使用标准输入 (stdin)…...

解决 MySQL 8.x 身份验证问题的最佳实践20241126

MySQL 8.x 身份验证问题的深入解析与实践解决方案 &#x1f3af; 引言 &#x1f58b;️ MySQL 是全球最受欢迎的开源数据库之一&#xff0c;随着 MySQL 8.x 的发布&#xff0c;引入了更安全的身份验证插件 caching_sha2_password&#xff0c;显著提升了数据库的安全性和性能。…...

对于GC方面,在使用Elasticsearch时要注意什么?

大家好&#xff0c;我是锋哥。今天分享关于【对于GC方面&#xff0c;在使用Elasticsearch时要注意什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; 对于GC方面&#xff0c;在使用Elasticsearch时要注意什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java…...

各种排序算法

前置知识 排序: 按照递增或者递减的顺序把数据排列好 稳定性: 值相等的元素在排序之后前后顺序是否发生了改变 内部排序: 数据放在内存上 外部排序: 数据放在磁盘上 内部排序 基于比较的排序 几大排序算法 1. 堆排序 特点: 思想: 1. 创建大根堆,把所有元素放在大根堆里…...

前端-Git

一.基本概念 Git版本控制系统时一个分布式系统&#xff0c;是用来保存工程源代码历史状态的命令行工具 简单来说Git的作用就是版本管理工具。 Git的应用场景&#xff1a;多人开发管理代码&#xff1b;异地开发&#xff0c;版本管理&#xff0c;版本回滚。 Git 的三个区域&a…...

用nextjs开发时遇到的问题

这几天已经基本把node后端的接口全部写完了&#xff0c;在前端开发时考虑时博客视频类型&#xff0c;考虑了ssr&#xff0c;于是选用了nextJs&#xff0c;用的是nextUi,tailwincss,目前碰到两个比较难受的事情。 1.nextUI个别组件无法在服务器段渲染 目前简单的解决方法&…...

Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

yum install 报错: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 CentOS7的SCL源在2024年6月30日停止维护了。 当scl源里面默认使用了centos官方的地址&#xff0c;无法连接&#xff0c;需要替换为阿里云。 cd /etc/yum.repos.d/ 找到 CentOS-SCLo-scl.repo 和…...

HCIA笔记3--TCP-UDP-交换机工作原理

1. tcp协议 可靠的连接 1.1 报文格式 1.2 三次握手 1.3 四次挥手 为什么TIME_WAIT需要2MSL的等待时间&#xff1f; &#xff08;a&#xff09; 为了实现可靠的关闭 &#xff08;b&#xff09;为了让过期的报文在网络上消失 对于(a), 假设host发给server的last ack丢了。 ser…...

RabbitMQ原理架构解析:消息传递的核心机制

文章目录 一、RabbitMQ简介1.1、概述1.2、特性 二、RabbitMQ原理架构三、RabbitMQ应用场景3.1、简单模式3.2、工作模式3.3、发布订阅3.4、路由模式3.5 主题订阅模式 四、同类中间件对比五、RabbitMQ部署5.1、单机部署5.2、集群部署&#xff08;镜像模式&#xff09;5.3、K8s部署…...

C语言指针作业

//8-29 第八章作业 //3.输入10个整数,将其中最小的数第一个数对换,把最大的数与最后一个数对换 //写3个函数:①输人10个数;②进行处理;③输出10个数。 //①输人10个数&#xff0c; //方法一&#xff1a;数组索引 void main() {int arr[10];int *p arr;//printf("请输入…...

区块链:比特币-Binance

写在前面&#xff1a;相对于Tran和BNB而言&#xff0c;Binance不支持智能合约&#xff1b;大约每 10分钟 生成一个新区块 一、认识Binance 官方网站&#xff1a;Blockchain Explorer - Bitcoin Tracker & More | Blockchain.com 官方文档&#xff1a;Authentication – I…...

数据工程流程

** 数据工程流程图** #mermaid-svg-ArT55xCISSfZImy3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ArT55xCISSfZImy3 .error-icon{fill:#552222;}#mermaid-svg-ArT55xCISSfZImy3 .error-text{fill:#552222;stroke…...

使用Python和Pybind11调用C++程序(CMake编译)

目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补&#xff0c;本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境&#xff1a; Linux gnuPython3.10…...

基于springboot的县市级土地使用监控系统的设计与实现

文末获取本系统&#xff08;程序源码数据库调试部署开发环境&#xff09;文末可获取&#xff0c;系统界面在最后面。 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的…...

Hot100 - 最大子数组和

Hot100 - 最大子数组和 最佳思路&#xff1a;动态规划 时间复杂度&#xff1a;O(n) 代码&#xff1a; class Solution {public int maxSubArray(int[] nums) {int sum 0;int ans Integer.MIN_VALUE;for (int i 0; i < nums.length; i) {// 如果 sum > 0&#xff0c…...

Matlab 深度学习 PINN测试与学习

PINN 与传统神经网络的区别 与传统神经网络的不同之处在于&#xff0c;PINN 能够以微分方程形式纳入有关问题的先验专业知识。这些附加信息使 PINN 能够在给定的测量数据之外作出更准确的预测。此外&#xff0c;额外的物理知识还能在存在含噪测量数据的情况下对预测解进行正则…...

[STM32]从零开始的STM32 FreeRTOS移植教程

一、前言 如果能看到这个教程的话&#xff0c;说明大家已经学习嵌入式有一段时间了。还记得嵌入式在大多数时候指的是什么吗&#xff1f;是的&#xff0c;我们所说的学习嵌入式大部分时候都是在学习嵌入式操作系统。从简单的一些任务状态机再到复杂一些的RTOS&#xff0c;再到最…...

软件团队的共担责任

问责制被认为是个人与其社会系统之间的纽带&#xff0c;它创造了一种将个人与其行为和绩效联系起来的身份关系。在入门系列的第一篇文章《超越工具和流程&#xff1a;成功软件开发团队的策略》中&#xff0c;我们介绍了问责制的概念&#xff0c;并提出了以下定义&#xff1a; …...

代码美学:MATLAB制作渐变色

输入颜色个数n&#xff0c;颜色类型&#xff1a; n 2; % 输入颜色个数 colors {[1, 0, 0], [0, 0, 1]}; createGradientHeatmap(n, colors); 调用函数&#xff1a; function createGradientHeatmap(n, colors)% 输入检查if length(colors) ~ nerror(输入的颜色数量与n不一…...

Perforce SAST专家详解:自动驾驶汽车的安全与技术挑战,Klocwork、Helix QAC等静态代码分析成必备合规性工具

自动驾驶汽车安全吗&#xff1f;现代汽车的软件包含1亿多行代码&#xff0c;支持许多不同的功能&#xff0c;如巡航控制、速度辅助和泊车摄像头。而且&#xff0c;这些嵌入式系统中的代码只会越来越复杂。 随着未来汽车的互联程度越来越高&#xff0c;这一趋势还将继续。汽车越…...

大模型中常见的微调方法有哪些?

我整理了1000道算法面试题&#xff1a; 获取 这里说的微调主要是指参数微调&#xff0c;参数微调的方法主要有以下几种&#xff1a; - Adapter 在预训练模型每一层(或某些层)中添加Adapter模块(如上图左侧结构所示)&#xff0c;微调时冻结预训练模型主体&#xff0c;由Ada…...

MATLAB支持的距离度量

距离度量是用于量化两个点或样本之间差异的一种方法。在不同的领域和应用场景中&#xff0c;距离度量的选择可能会有所不同。 欧几里得距离&#xff08;Euclidean Distance&#xff09;&#xff1a;这是最直观的距离定义&#xff0c;适用于n维空间中的两点。对于二维空间中的点…...

c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享

在嵌入式系统中&#xff0c;有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器&#xff0c;通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片&#xff0c;驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…...

LSA详情与特殊区域

LSA是构成LSDB的重要原材料&#xff0c;在OSPF中发挥很大作用。 报文 通用头部 LS age&#xff1a;LSA寿命&#xff0c;0-3600s Options&#xff1a;可选项 LS type&#xff1a;LSA类型&#xff0c;三要素之一 Link State ID&#xff1a;LSAID 三要素之一 Advertising Ro…...

Leecode刷题C语言之交替组①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; int numberOfAlternatingGroups(int* colors, int colorsSize) {int res 0;for (size_t i 0; i < colorsSize; i) {if (colors[i] ! colors[(i - 1 colorsSize) % colorsSize] && col…...

深入解析 Django 中数据删除的最佳实践:以动态管理镜像版本为例

文章目录 引言场景与模型设计场景描述 删除操作详解1. 删除单个 Tag2. 批量删除 Tags3. 删除前确认4. 日志记录 高阶优化与问题分析1. 外键约束与误删保护2. 并发删除的冲突处理3. 使用软删除 结合 Django Admin 的实现总结与实践思考 引言 在现代应用开发中&#xff0c;服务和…...

4457数字示波器 2Gpts的深度存储

4457数字示波器 2Gpts的深度存储 256级灰度等级及四种波形色彩显示 4457M系列数字示波器&#xff0c;带宽从1GHz到4GHz&#xff0c;采样率10GSa/s、20GSa/s&#xff0c;垂直分辨率12bit&#xff0c;存储深度1Gpts&#xff0c;最快波形捕获率70万个波形/秒&#xff0c;独创的…...

【笔记】轻型民用无人驾驶航空器安全操控

《轻型民用无人驾驶航空器安全操控》 理论考试培训材料 法规部分 【民用无人驾驶航空器的分类】 1、如何定义微型、轻型无人驾驶航空器&#xff1f; 微型无人驾驶航空器&#xff0c;是指空机重量小于0.25千克&#xff0c;最大平飞速度不超过40千米/小时&#xff0c;无线电发…...

【leetcode】动态规划

31. 873. 最长的斐波那契子序列的长度 题目&#xff1a; 如果序列 X_1, X_2, ..., X_n 满足下列条件&#xff0c;就说它是 斐波那契式 的&#xff1a; n > 3对于所有 i 2 < n&#xff0c;都有 X_i X_{i1} X_{i2} 给定一个严格递增的正整数数组形成序列 arr &#xff0…...

嵌入式linux系统中图像处理基本方法

目录 2.1 BMP图像处理 2.1.1 BMP文件格式解析 2.1.2 代码实现:将BMP文件解析为RGB格式,在LCD上显示 2.2 JPEG图像处理 2.2.1 JPEG文件格式和libjpeg编译 2.2.2 libjpeg接口函数的解析和使用 2.2.3 使用libjpeg把JPEG文件解析为RGB格式,在LCD上显示 …...

Qt SQL模块概述

Qt SQL支持的数据库 要在项目中使用 Qt SQL 模块&#xff0c;需要在项目配置文件中添加下面一条设置语句&#xff1a; Qt sql在头文件或源文件中使用 Qt SQL 模块中的类&#xff0c;可以使用包含语句&#xff1a; #include <QtSql>这样会将某个 Qt SQL 模块中的所有类…...

PVE相关名词通俗表述方式———多处细节实验(方便理解)

PVE设置初期&#xff0c;对CIDR、 网关、 LinuxBridge、VLAN等很有困惑的朋友一定很需要一篇能够全面通俗易懂的方式去理解PVE 中Linux网桥的工作方式&#xff0c;就像操作一个英雄&#xff0c;多个技能&#xff0c;还是需要一点点去学习理解的&#xff0c;如果你上来就对着别人…...

C语言实现冒泡排序:从基础到优化全解析

一、什么是冒泡排序&#xff1f; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种经典的排序算法&#xff0c;其工作原理非常直观&#xff1a;通过多次比较和交换相邻元素&#xff0c;将较大的元素“冒泡”到数组的末尾。经过多轮迭代&#xff0c;整个数组会变得有序。 二…...

ReentrantLock(可重入锁) Semaphore(信号量) CountDownLatch

目录 ReentrantLock(可重入锁) &Semaphore(信号量)&CountDownLatchReentrantLock(可重入锁)既然有了synchronized&#xff0c;为啥还要有ReentrantLock?Semaphore(信号量)如何确保线程安全呢&#xff1f;CountDownLatch ReentrantLock(可重入锁) &Semaphore(信号量…...

Zookeeper选举算法与提案处理概览

共识算法(Consensus Algorithm) 共识算法即在分布式系统中节点达成共识的算法&#xff0c;提高系统在分布式环境下的容错性。 依据系统对故障组件的容错能力可分为&#xff1a; 崩溃容错协议(Crash Fault Tolerant, CFT) : 无恶意行为&#xff0c;如进程崩溃&#xff0c;只要…...

Jmeter中的断言

7&#xff09;断言 1--响应断言 功能特点 数据验证&#xff1a;验证响应数据是否包含或不包含特定的字符串、模式或值。多种匹配类型&#xff1a;支持多种匹配类型&#xff0c;如文本、正则表达式、文档等。灵活配置&#xff1a;可以设置多个断言条件&#xff0c;满足复杂的测…...

【通俗理解】隐变量的变分分布探索——从公式到应用

【通俗理解】隐变量的变分分布探索——从公式到应用 关键词提炼 #隐变量 #变分分布 #概率模型 #公式推导 #期望最大化 #机器学习 #变分贝叶斯 #隐马尔可夫模型 第一节&#xff1a;隐变量的变分分布的类比与核心概念【尽可能通俗】 隐变量的变分分布就像是一场“捉迷藏”游戏…...

Vivado程序固化到Flash

在上板调试FPGA时&#xff0c;通常使用JTAG接口下载程序到FPGA芯片中&#xff0c;FPGA本身是基于RAM工艺的器件&#xff0c;因此掉电后会丢失芯片内的程序&#xff0c;需要重新烧写程序。但是当程序需要投入使用时不能每一次都使用JTAG接口下载程序&#xff0c;一般FPGA的外围会…...

铲屎官进,2024年宠物空气净化器十大排行,看看哪款吸毛最佳?

不知道最近换毛季&#xff0c;铲屎官们还承受的住吗&#xff1f;我家猫咪每天都在表演“天女散花”&#xff0c;家里没有一块干净的地方&#xff0c;空气中也都是堆积的浮毛&#xff0c;幸好有宠物空气净化器这种清理好物。宠物空气净化器针对宠物浮毛设计&#xff0c;可以有效…...

SpringBoot 项目中使用 spring-boot-starter-amqp 依赖实现 RabbitMQ

文章目录 前言1、application.yml2、RabbitMqConfig3、MqMessage4、MqMessageItem5、DirectMode6、StateConsumer&#xff1a;消费者7、InfoConsumer&#xff1a;消费者 前言 本文是工作之余的随手记&#xff0c;记录在工作期间使用 RabbitMQ 的笔记。 1、application.yml 使…...

嵌入式硬件实战提升篇(二)PCB高速板设计 FPGA核心板带DDR3 PCB设计DDR全面解析

引言&#xff1a;设计一款高速板&#xff0c;供读者学习&#xff0c;FPGA核心板&#xff0c;带一颗DDR3内存&#xff0c;FPGA型号&#xff1a;XC6SLX16-2FTG256C。 随着嵌入式硬件技术的快速发展&#xff0c;高速板设计逐渐成为嵌入式系统设计中的核心技术之一。高速板的设计要…...

2044:【例5.12】回文字串

【题目描述】 输入一串字符,字符个数不超过100,且以“.”结束。 判断它们是否构成回文。 【输入】 一行字符串。 【输出】 是否为回文串。是输出“Yes”&#xff0c;否输出“No。” 【输入样例】 abccb 【输出样例】 No 代码实现 #include <stdio.h> /*2044&#x…...

Sui 链游戏开发实战:用 Move 写一个链上剪刀石头布游戏!

系列文章目录 Task1&#xff1a;hello move&#x1f6aa; Task2&#xff1a;move coin&#x1f6aa; Task3&#xff1a;move nft&#x1f6aa; Task4&#xff1a;move game&#x1f6aa; 更多精彩内容&#xff0c;敬请期待&#xff01;✌️ 文章目录 系列文章目录前言什么是 …...

Prometheus告警带图完美解决方案

需求背景 告警分析处理流程 通常我们收到 Prometheus 告警事件通知后&#xff0c;往往都需要登录 Alertmanager 页面查看当前激活的告警&#xff0c;如果需要分析告警历史数据信息&#xff0c;还需要登录 Prometheus 页面的在 Alerts 中查询告警 promQL 表达式&#xff0c;然…...

深度学习模型:循环神经网络(RNN)

一、引言 在深度学习的浩瀚海洋里&#xff0c;循环神经网络&#xff08;RNN&#xff09;宛如一颗独特的明珠&#xff0c;专门用于剖析序列数据&#xff0c;如文本、语音、时间序列等。无论是预测股票走势&#xff0c;还是理解自然语言&#xff0c;RNN 都发挥着举足轻重的作用。…...

分布式在线评测系统

OnlineJudge 前言所用技术开发环境 1. 需求分析2. 项目宏观结构3. compile_server服务设计3.1 compiler服务设计3.2 runner服务设计3.3 compile_run3.4 compile_server.cpp 4. oj_server服务设计4.1 model设计4.2 view设计4.3 control设计4.3.1 获取题目列表功能4.3.2 获取单个…...

Unity中动态生成贴图并保存成png图片实现

实现原理&#xff1a; 要生成长x宽y的贴图&#xff0c;就是生成x*y个像素填充到贴图中&#xff0c;如下图&#xff1a; 如果要改变局部颜色&#xff0c;就是从x1到x2(x1<x2),y1到y2(y1<y2)这个范围做处理&#xff0c; 或者要想做圆形就是计算距某个点&#xff08;x1,y1&…...

鸿蒙多线程开发——sendable共享容器

1、异步锁机制 在介绍共享容器之前&#xff0c;先介绍异步锁机制。 为了解决多线程并发任务间的数据竞争问题&#xff0c;ArkTS引入了异步锁能力。异步锁可能会被类对象持有&#xff0c;因此为了更方便地在并发实例间获取同一个异步锁对象&#xff0c;AsyncLock对象支持跨线程…...

五天SpringCloud计划——DAY1之mybatis-plus的使用

一、引言 咱也不知道为啥SpringCloud课程会先教mybatis-plus的使用&#xff0c;但是教都教了&#xff0c;就学了吧&#xff0c;学完之后觉得mybatis-plus中的一些方法还是很好用了&#xff0c;本文作为我学习mybatis-plus的总结提升&#xff0c;希望大家看完之后也可以熟悉myba…...