1.32、 基于区域卷积神经网络(R-CNN)的停车标志检测(matlab)

1、基于区域卷积神经网络(R-CNN)的停车标志检测原理及流程

基于区域卷积神经网络(R-CNN)的停车标志检测原理及流程如下:

  1. 原理: R-CNN 是一种用于目标检测的深度学习模型,其核心思想是首先在输入图像中提取出候选区域(Region Proposal),然后对提取的候选区域进行卷积神经网络(CNN)特征提取和目标分类。

  2. 流程

    • 候选区域提取:首先使用选择性搜索(Selective Search)等算法从输入图像中提取出多个候选区域,这些候选区域可能包含潜在的目标。
    • 特征提取:对每个候选区域进行裁剪和缩放,然后使用预训练的卷积神经网络(如VGG、ResNet等)提取特征。
    • 目标分类:将提取的特征输入到一个支持向量机(SVM)分类器中,用于判断每个候选区域中是否包含停车标志。
    • 回归框:对被分类为停车标志的候选区域进行回归操作,将其位置优化。
    • 非极大值抑制:对重叠的候选区域进行非极大值抑制,保留得分最高的停车标志框。
  3. 训练: 在训练阶段,需要构建一个包含标注停车标志框的训练数据集。利用这些训练样本,通过监督学习的方式训练R-CNN模型,使其能够准确地检测停车标志。

  4. 评估和调优: 在训练完成后,需要对R-CNN模型进行评估,可以通过精度、召回率等指标评估模型的性能,并根据需要对模型进行调优以提高检测准确率。

R-CNN 基于候选区域的思想,能够准确地定位和识别输入图像中的目标物体。停车标志检测作为目标检测的一个应用场景,使用R-CNN可以有效地检测出图像中的停车标志,有助于自动驾驶、智能交通等领域的应用。

2、基于区域卷积神经网络(R-CNN)的停车标志检测说明

训练用于检测停车标志的 R-CNN 目标检测器

R-CNN 是一个目标检测框架,它使用卷积神经网络 (CNN) 对图像中的图像区域进行分类

R-CNN 检测器不使用滑动窗对每个区域进行分类,而是只处理那些可能包含对象的区域。这大幅降低了运行 CNN 时的计算成本。

使用 CIFAR-10 数据集对一个 CNN 进行预训练,该数据集有 50,000 个训练图像。然后,只使用 41 个训练图像针对停车标志检测对这个预训练的 CNN 进行微调。如果没有预训练 CNN,训练停车标志检测器会需要更多图像。

3、下载 CIFAR-10 图像数据

1)将 CIFAR-10 数据下载到一个临时目录

实现代码

cifar10Data = tempdir;
url = 'https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz';
helperCIFAR10Data.download(url,cifar10Data);

2)加载 CIFAR-10 训练和测试数据

实现代码

[trainingImages,trainingLabels,testImages,testLabels] = helperCIFAR10Data.load(cifar10Data);

3)每个图像参数

实现代码

size(trainingImages)

4)CIFAR-10 有 10 个图像类别

实现代码

numImageCategories = 10;
categories(trainingLabels)

4、创建卷积神经网络 (CNN)

1)创建网络

CNN 由一系列层组成,每层定义一项特定计算

imageInputLayer - 图像输入层

convolution2dLayer - 卷积神经网络的二维卷积层

reluLayer - 修正线性单元 (ReLU) 层

maxPooling2dLayer - 最大池化层

fullyConnectedLayer - 全连接层

softmaxLayer- Softmax 层

classificationLayer - 神经网络的分类输出层

实现代码

[height,width,numChannels, ~] = size(trainingImages);imageSize = [height width numChannels];
inputLayer = imageInputLayer(imageSize)

2)定义网络的中间层

中间层包含多个由卷积层、ReLU(修正线性单元)层和池化层组成的重复模块。

 这三个层构成卷积神经网络的核心构建模块。卷积层定义滤波器权重集,这些权重集在网络训练期间会更新。

ReLU 层在网络中引入非线性,让网络能够逼近非线性函数,这些函数将图像像素映射到图像语义内容。池化层在数据流经网络时对其进行下采样。

 在具有许多层的网络中,应谨慎使用池化层,以避免过早对网络中的数据进行下采样。

实现代码

filterSize = [5 5];
numFilters = 32;middleLayers = [
convolution2dLayer(filterSize,numFilters,'Padding',2)
reluLayer()
maxPooling2dLayer(3,'Stride',2)
convolution2dLayer(filterSize,numFilters,'Padding',2)
reluLayer()
maxPooling2dLayer(3, 'Stride',2)convolution2dLayer(filterSize,2 * numFilters,'Padding',2)
reluLayer()
maxPooling2dLayer(3,'Stride',2)
]

3)CNN 的最终层

CNN 的最终层通常包括全连接层和 softmax 损失层。

实现代码

finalLayers = [fullyConnectedLayer(64)reluLayer
fullyConnectedLayer(numImageCategories)softmaxLayer
classificationLayer
]

4)对输入层、中间层和最终层进行合并

实现代码

layers = [inputLayermiddleLayersfinalLayers]

5)初始化权重

使用标准差为 0.0001 的正态分布随机数初始化第一个卷积层的权重。这有助于改善训练的收敛性。

实现代码

layers(2).Weights = 0.0001 * randn([filterSize numChannels numFilters]);

5、训练CNN

1)使用 trainingOptions 函数设置网络训练算法

网络训练算法使用具有动量的随机梯度下降 (SGDM),初始学习率为 0.001。

在训练期间,初始学习率每 8 轮降低一次(1 轮定义为对整个训练数据集进行一次完整遍历)。训练算法运行 40 轮。

实现代码

opts = trainingOptions('sgdm', ...'Momentum', 0.9, ...'InitialLearnRate', 0.001, ...'LearnRateSchedule', 'piecewise', ...'LearnRateDropFactor', 0.1, ...'LearnRateDropPeriod', 8, ...'L2Regularization', 0.004, ...'MaxEpochs', 40, ...'MiniBatchSize', 128, ...'Verbose', true);

2) 使用 trainNetwork 函数训练网络

实现代码

doTraining = false;if doTraining    % Train a network.cifar10Net = trainNetwork(trainingImages, trainingLabels, layers, opts);
else% Load pre-trained detector for the example.load('rcnnStopSigns.mat','cifar10Net')       
end

6、验证 CIFAR-10 网络训练

1)可视化第一个卷积层

快速可视化第一个卷积层的滤波器权重有助于识别训练中的任何直接问题

实现代码

w = cifar10Net.Layers(2).Weights;
% rescale the weights to the range [0, 1] for better visualization
w = rescale(w);
figure
montage(w)

2)使用 CIFAR-10 测试数据来测量网络的分类准确度

实现代码

YTest = classify(cifar10Net, testImages);% Calculate the accuracy.
accuracy = sum(YTest == testLabels)/numel(testLabels)

 视图效果

7、加载训练数据

1)加载停车标志的真实值数据

实现代码

% Load the ground truth data
data = load('stopSignsAndCars.mat', 'stopSignsAndCars');
stopSignsAndCars = data.stopSignsAndCars;% Update the path to the image files to match the local file system
visiondata = fullfile(toolboxdir('vision'),'visiondata');
stopSignsAndCars.imageFilename = fullfile(visiondata, stopSignsAndCars.imageFilename);% Display a summary of the ground truth data
summary(stopSignsAndCars)

2)数据标签

实现代码

stopSigns = stopSignsAndCars(:, {'imageFilename','stopSign'});% Display one training image and the ground truth bounding boxes
I = imread(stopSigns.imageFilename{1});
I = insertObjectAnnotation(I,'Rectangle',stopSigns.stopSign{1},'stop sign','LineWidth',8);figure
imshow(I)

视图效果

 

8、训练 R-CNN 停车标志检测器

实现代码

doTraining = false;if doTraining% Set training optionsoptions = trainingOptions('sgdm', ...'MiniBatchSize', 128, ...'InitialLearnRate', 1e-3, ...'LearnRateSchedule', 'piecewise', ...'LearnRateDropFactor', 0.1, ...'LearnRateDropPeriod', 100, ...'MaxEpochs', 100, ...'Verbose', true);% Train an R-CNN object detector. This will take several minutes.    rcnn = trainRCNNObjectDetector(stopSigns, cifar10Net, options, ...'NegativeOverlapRange', [0 0.3], 'PositiveOverlapRange',[0.5 1])
else% Load pre-trained network for the example.load('rcnnStopSigns.mat','rcnn')       
end

9、测试 R-CNN 停车标志检测器

1)对测试图像试用该检测器

实现代码

% Read test image
testImage = imread('stopSignTest.jpg');% Detect stop signs
[bboxes,score,label] = detect(rcnn,testImage,'MiniBatchSize',128)

2)R-CNN 对象 detect (Computer Vision Toolbox) 方法返回每个检测的对象边界框、检测分数和类标签

实现代码

[score, idx] = max(score);bbox = bboxes(idx, :);
annotation = sprintf('%s: (Confidence = %f)', label(idx), score);outputImage = insertObjectAnnotation(testImage, 'rectangle', bbox, annotation);figure
imshow(outputImage)

视图效果 

10、总结

基于区域卷积神经网络(R-CNN)的停车标志检测在 MATLAB 中实现的总结如下:

  1. 数据准备

    • 准备包含停车标志和其对应标注框的训练数据集和测试数据集。
    • 可以使用 MATLAB 的图像标注工具进行标注,并将标注信息保存为MATLAB数据格式。
  2. 模型构建

    • 使用MATLAB内置的卷积神经网络工具箱构建R-CNN模型,包括候选区域提取、特征提取、目标分类和位置回归等模块。
    • 在模型中集成先前训练好的卷积神经网络作为特征提取器。
  3. 训练模型

    • 利用训练数据集对R-CNN模型进行训练,包括特征提取、目标分类和位置回归这几个阶段。
    • 可以使用MATLAB深度学习工具箱提供的训练接口和函数来进行模型的训练。
  4. 评估模型

    • 使用测试数据集对训练好的R-CNN模型进行评估,评估指标包括准确率、召回率、F1分数等。
    • 可以通过混淆矩阵等方式分析模型的性能。
  5. 应用模型

    • 在实际应用中,使用训练好的R-CNN模型对输入图像进行停车标志检测。
    • 可以将检测到的停车标志框标注在图像上,或者输出检测结果的位置和类别信息。

总体而言,利用 MATLAB 中的深度学习工具箱和图像处理工具箱,可以比较方便地实现基于R-CNN的停车标志检测。通过合理的数据准备、模型构建、训练和评估流程,可以开发出准确、高效的停车标志检测系统。

11、源代码

代码

%% 基于区域卷积神经网络(R-CNN)的停车标志检测
%训练用于检测停车标志的 R-CNN 目标检测器
%R-CNN 是一个目标检测框架,它使用卷积神经网络 (CNN) 对图像中的图像区域进行分类
%R-CNN 检测器不使用滑动窗对每个区域进行分类,而是只处理那些可能包含对象的区域。这大幅降低了运行 CNN 时的计算成本。
%使用 CIFAR-10 数据集对一个 CNN 进行预训练,该数据集有 50,000 个训练图像。然后,只使用 41 个训练图像针对停车标志检测对这个预训练的 CNN 进行微调。如果没有预训练 CNN,训练停车标志检测器会需要更多图像。
%% 下载 CIFAR-10 图像数据
%将 CIFAR-10 数据下载到一个临时目录
cifar10Data = tempdir;
url = 'https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz';
helperCIFAR10Data.download(url,cifar10Data);
%加载 CIFAR-10 训练和测试数据
[trainingImages,trainingLabels,testImages,testLabels] = helperCIFAR10Data.load(cifar10Data);
%每个图像是一个 32×32 RGB 图像,共有 50,000 个训练样本
size(trainingImages)
%CIFAR-10 有 10 个图像类别
numImageCategories = 10;
categories(trainingLabels)
%% 创建卷积神经网络 (CNN)
%CNN 由一系列层组成,每层定义一项特定计算
%imageInputLayer - 图像输入层
%convolution2dLayer - 卷积神经网络的二维卷积层
%reluLayer - 修正线性单元 (ReLU) 层
%maxPooling2dLayer - 最大池化层
%fullyConnectedLayer - 全连接层
%softmaxLayer- Softmax 层
%classificationLayer - 神经网络的分类输出层
[height,width,numChannels, ~] = size(trainingImages);imageSize = [height width numChannels];
inputLayer = imageInputLayer(imageSize)
%定义网络的中间层。
%中间层包含多个由卷积层、ReLU(修正线性单元)层和池化层组成的重复模块。
% 这三个层构成卷积神经网络的核心构建模块。卷积层定义滤波器权重集,这些权重集在网络训练期间会更新。
% ReLU 层在网络中引入非线性,让网络能够逼近非线性函数,这些函数将图像像素映射到图像语义内容。池化层在数据流经网络时对其进行下采样。
% 在具有许多层的网络中,应谨慎使用池化层,以避免过早对网络中的数据进行下采样。
filterSize = [5 5];
numFilters = 32;middleLayers = [
convolution2dLayer(filterSize,numFilters,'Padding',2)
reluLayer()
maxPooling2dLayer(3,'Stride',2)
convolution2dLayer(filterSize,numFilters,'Padding',2)
reluLayer()
maxPooling2dLayer(3, 'Stride',2)convolution2dLayer(filterSize,2 * numFilters,'Padding',2)
reluLayer()
maxPooling2dLayer(3,'Stride',2)
]%CNN 的最终层通常包括全连接层和 softmax 损失层。
finalLayers = [fullyConnectedLayer(64)reluLayer
fullyConnectedLayer(numImageCategories)softmaxLayer
classificationLayer
]
%对输入层、中间层和最终层进行合并
layers = [inputLayermiddleLayersfinalLayers]
%初始化第一个卷积层的权重
%使用标准差为 0.0001 的正态分布随机数初始化第一个卷积层的权重。这有助于改善训练的收敛性。
layers(2).Weights = 0.0001 * randn([filterSize numChannels numFilters]);
%% 训练CNN
%使用 trainingOptions 函数设置网络训练算法
%网络训练算法使用具有动量的随机梯度下降 (SGDM),初始学习率为 0.001。
% 在训练期间,初始学习率每 8 轮降低一次(1 轮定义为对整个训练数据集进行一次完整遍历)。训练算法运行 40 轮。
opts = trainingOptions('sgdm', ...'Momentum', 0.9, ...'InitialLearnRate', 0.001, ...'LearnRateSchedule', 'piecewise', ...'LearnRateDropFactor', 0.1, ...'LearnRateDropPeriod', 8, ...'L2Regularization', 0.004, ...'MaxEpochs', 40, ...'MiniBatchSize', 128, ...'Verbose', true);
%使用 trainNetwork 函数训练网络
doTraining = false;if doTraining    % Train a network.cifar10Net = trainNetwork(trainingImages, trainingLabels, layers, opts);
else% Load pre-trained detector for the example.load('rcnnStopSigns.mat','cifar10Net')       
end
%% 验证 CIFAR-10 网络训练
%可视化第一个卷积层
%快速可视化第一个卷积层的滤波器权重有助于识别训练中的任何直接问题
w = cifar10Net.Layers(2).Weights;% rescale the weights to the range [0, 1] for better visualization
w = rescale(w);figure
montage(w)%使用 CIFAR-10 测试数据来测量网络的分类准确度
YTest = classify(cifar10Net, testImages);% Calculate the accuracy.
accuracy = sum(YTest == testLabels)/numel(testLabels)
%% 加载训练数据
%加载停车标志的真实值数据
% Load the ground truth data
data = load('stopSignsAndCars.mat', 'stopSignsAndCars');
stopSignsAndCars = data.stopSignsAndCars;% Update the path to the image files to match the local file system
visiondata = fullfile(toolboxdir('vision'),'visiondata');
stopSignsAndCars.imageFilename = fullfile(visiondata, stopSignsAndCars.imageFilename);% Display a summary of the ground truth data
summary(stopSignsAndCars)
% 数据标签
stopSigns = stopSignsAndCars(:, {'imageFilename','stopSign'});% Display one training image and the ground truth bounding boxes
I = imread(stopSigns.imageFilename{1});
I = insertObjectAnnotation(I,'Rectangle',stopSigns.stopSign{1},'stop sign','LineWidth',8);figure
imshow(I)
%% 训练 R-CNN 停车标志检测器
%使用 trainRCNNObjectDetector (Computer Vision Toolbox) 训练 R-CNN 目标检测器
doTraining = false;if doTraining% Set training optionsoptions = trainingOptions('sgdm', ...'MiniBatchSize', 128, ...'InitialLearnRate', 1e-3, ...'LearnRateSchedule', 'piecewise', ...'LearnRateDropFactor', 0.1, ...'LearnRateDropPeriod', 100, ...'MaxEpochs', 100, ...'Verbose', true);% Train an R-CNN object detector. This will take several minutes.    rcnn = trainRCNNObjectDetector(stopSigns, cifar10Net, options, ...'NegativeOverlapRange', [0 0.3], 'PositiveOverlapRange',[0.5 1])
else% Load pre-trained network for the example.load('rcnnStopSigns.mat','rcnn')       
end
%% 测试 R-CNN 停车标志检测器
%对测试图像试用该检测器
% Read test image
testImage = imread('stopSignTest.jpg');% Detect stop signs
[bboxes,score,label] = detect(rcnn,testImage,'MiniBatchSize',128)
%R-CNN 对象 detect (Computer Vision Toolbox) 方法返回每个检测的对象边界框、检测分数和类标签
[score, idx] = max(score);bbox = bboxes(idx, :);
annotation = sprintf('%s: (Confidence = %f)', label(idx), score);outputImage = insertObjectAnnotation(testImage, 'rectangle', bbox, annotation);figure
imshow(outputImage)

工程文件

https://download.csdn.net/download/XU157303764/89538510

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化调试体验:让PyCharm的调试过程飞起来

优化调试体验:让PyCharm的调试过程飞起来 PyCharm是一款功能强大的Python集成开发环境(IDE),它提供了许多便利的调试工具来帮助开发者快速定位和解决问题。然而,在某些情况下,用户可能会遇到调试过程缓慢的…

请结合一个问题bug,帮忙梳理一下DecorView和Window之间的关系

在Android开发中,DecorView 和 Window 是两个核心概念,它们在用户界面显示和布局管理中扮演着重要角色。为了更好地理解它们之间的关系,并通过一个假设的bug场景来梳理它们,我们可以从以下几个方面进行阐述。 1. Window 的概念 …

Typescript Vue3中的defineProps接收参数,并withDefaults设置默认值

1. defineProps&#xff1a;接收父组件传递的参数 2. withDefaults&#xff1a;接收时设置默认值 这两个api都不需要引入&#xff0c;可直接在setup中使用 1. person.vue接收参数 <script setup lang"ts">import type {Persons} from /types// 接收list 可不…

springboot3 web

springboot web配置 springboot web的配置有&#xff1a; SpringMvc配置的前缀为&#xff1a;spring.mvcweb场景的通用配置为&#xff1a;spring.web文件上传的配置为&#xff1a;spring.servlet.multipart服务器相关配置为&#xff1a;server 接管SpringMVC 的三种方式 方…

【算法】无重复字符的最长子串

难度&#xff1a;中等 题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 示例&#xff1a; 示例1&#xff1a; 输入&#xff1a;s “abcabcbb” 输出&#xff1a;3 解释&#xff1a;因为无重复字符的最长子串是 “abc”&#xff0c;所以…

1.26、基于概率神经网络(PNN)的分类(matlab)

1、基于概率神经网络(PNN)的分类简介 PNN(Probabilistic Neural Network,概率神经网络)是一种基于概率论的神经网络模型,主要用于解决分类问题。PNN最早由马科夫斯基和马西金在1993年提出,是一种非常有效的分类算法。 PNN的原理可以简单概括为以下几个步骤: 数据输入层…

对LinkedList和链表的理解

一.ArrayList的缺陷 二.链表 三.链表部分相关oj面试题 四.LinkedList的模拟实现 五.LinkedList的使用 六.ArrayList和LinkedList的区别 一.ArrayList的缺陷: 1. ArrayList底层使用 数组 来存储元素&#xff0c;如果不熟悉可以来再看看&#xff1a; ArrayList与顺序表-CSDN…

2024年7月13日全国青少年信息素养大赛Python复赛小学高年级组真题

第一题 题目描述 握情况。他决定让每个人输入一个正整数 N (0≤N≤1000)&#xff0c;然后计算并输出(5*N)的值。请用 在一个神秘的王国里&#xff0c;国王希望通过一个简单的测试来评估他的子民对基 础数学运算的掌 Python 编写程序&#xff0c;程序执行后要求用户输入一个正…

Hash表(C++)

本篇将会开始介绍有关于 unordered_map 和 unordered_set 的底层原理&#xff0c;其中底层实现其实就是我们的 Hash 表&#xff0c;本篇将会讲解两种 Hash 表&#xff0c;其中一种为开放定址法&#xff0c;另一种为 hash 桶&#xff0c;在unordered_map 和 unordered_set 的底层…

智驭未来:人工智能与目标检测的深度交融

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;如同一股不可阻挡的浪潮&#xff0c;正以前所未有的速度重塑着我们的世界。在众多AI应用领域中&#xff0c;目标检测以其独特的魅力和广泛的应用前景&#xff0c;成为了连接现实与智能世界的桥梁。本文旨在…

20240715 每日AI必读资讯

&#x1f310; 代号“ 草莓 ”&#xff0c;OpenAI 被曝研发新项目&#xff1a;将 AI 推理能力提至新高度 - OpenAI 公司被曝正在研发代号为“ 草莓 ”的全新项目&#xff0c;进一步延伸去年 11 月宣布的 Q* 项目&#xff0c;不断提高 AI 推理能力&#xff0c;让其更接近人类的…

基于Java的休闲娱乐代理售票系统

你好&#xff0c;我是专注于Java开发的码农小野&#xff01;如果你对系统开发感兴趣&#xff0c;欢迎私信交流。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术、SpringBoot框架、B/S架构 工具&#xff1a;Eclipse IDE、MySQL数据库管理工具…

牛客小白月赛98 (个人题解)(补全)

前言&#xff1a; 昨天晚上自己一个人打的小白月赛&#xff08;因为准备数学期末已经写烦了&#xff09;&#xff0c;题目难度感觉越来越简单了&#xff08;不在像以前一样根本写不了一点&#xff0c;现在看题解已经能看懂一点了&#xff09;&#xff0c;能感受到自己在不断进步…

2024年是不是闰年?

闰年的由来 闰年的概念最早可以追溯到古罗马时期的朱利叶斯凯撒。当时的罗马历法是根据太阳年来制定的&#xff0c;每年大约有365.25天。为了使日历与季节保持同步&#xff0c;人们需要定期插入一个额外的日子。朱利叶斯凯撒在公元前46年颁布了一项法令&#xff0c;规定每四年增…

SAP PP学习笔记26 - User Status(用户状态)的实例,订单分割中的重要概念 成本收集器,Confirmation(报工)的概述

上面两章讲了生产订单的创建以及生产订单的相关内容。 SAP PP学习笔记24 - 生产订单&#xff08;制造指图&#xff09;的创建_sap 工程外注-CSDN博客 SAP PP学习笔记25 - 生产订单的状态管理(System Status(系统状态)/User Status(用户状态)),物料的可用性检查&#xff0c;生…

最长下降序列

如何理解这个题目呢,我们可以每个人的分数放到排名上&#xff0c;然后求解最长下降序列即可 #include<bits/stdc.h> using namespace std;int n; const int N (int)1e5 5; int a[N]; int b[N]; int d[N]; int dp[N]; int t;int main() {cin >> t;while (t--) {…

Java中Set集合

Set集合类似于数学中集合的概念&#xff0c;具有和数学中集合一样的唯一性&#xff08;就是说Set集合中的元素不能重复&#xff09;&#xff0c;在Java中我们最长使用的集合有HashSet、LinkedHashSet和TreeSet&#xff0c;这里最常使用的就是HashSet。 一、HashSet 1.HashSet的…

Apache Hadoop之历史服务器日志聚集配置

上篇介绍绍了Apache Hadoop的分布式集群环境搭建&#xff0c;并测试了MapReduce分布式计算案例。但集群历史做了哪些任务&#xff0c;任务执行日志等信息还需要配置历史服务器和日志聚集才能更好的查看。 配置历史服务器 在Yarn中运行的任务产生的日志数据不能查看&#xff0…

2024-07-13 Qt6.5版本后视频渲染

文章目录 前言一、先上代码1.将yuv/nv12等解码后的视频数据放入QVideoSink内2.将AVFrame数据保存进QVideoSink3.在qml中的显示4.同理,在widget中也可显示 二、QVideoFarme支持的格式三、说说渲染效率问题 前言 Qt 6版本中&#xff0c;视频播放能力得到了质的飞越&#xff0c;相…

【JavaScript】 变量提升和函数提升

变量提升 1. 允许在变量声明之前即被访问。 2. 在代码执行之前&#xff0c;把当前作用域中var声明的变量全部提到当前作用域的最前面。 3. 只提升声明&#xff0c;不提升赋值。 function fn(){console.log(num)var num 10 } 相当于以下代码&#xff1a; function fn(){…