基于Matlab实现深度学习(RCNN)的汽车目标检测的以及代码解释
基于Matlab的深度学习的汽车目标检测
目前大部分的深度学习或者主流的深度学习算法大部分都是基于python所做的“前端”所实现的,python的语言足够简洁,社区相对成熟(框架多,类库多,教程丰富),从目前的来看,scala等后起之秀在短时间内代替不了Python。
但是在这一篇小Q想用matlab自带的深度学习做一回汽车的目标检测,抛砖引玉,用另外一种思维。也是给自己回忆一下,毕竟一年多没有经手过深度学习的项目了,之后我会复现一些ECCV2020一些热门论文的project,当然啦,在以后的文章里面。
这次我们是用的是已标记的小汽车样本数据训练RCNN(Reigions with Convolutional Neural Networks, RCNN)神经网络得到检测器模型,并采用测试样本队训练好的检测器模型进行评测,实现汽车目标检测的效果。
这是一个比较基础的实战项目,对于新手友好。
理论基础
虽然很千万遍了,但是我还要讲一讲CNN卷积网络的一些理论结构 ,给新手回顾一下。但是不是零基础理解深度学习的入门。网上有很多大神写的深度学习入门篇,就不献丑。
基本架构
卷积神经网络基本架构包括特征提取器和分类器。特征提取器通常由若干个卷积层和池化层叠加组成,卷经济和池化过程不断将特征图缩小,同食会导致特征图数量的怎繁多。特征提取器后面一般连接分类器,同城有一个多层感知机组成。特别的,在最后一个特征抽取其后面,将所有的特征图展开并排列成一个向量,这个就是特征向量,作为后分类器的输入。
接下来说说卷积层和池化层layer。
卷积层
卷积层的基本操作是将卷积核与图像的对应区域进行卷积得到一个值,通过在图像上不断移动卷积核和来计算倦极至,进而完成对整幅图像的卷积运算。在神经网络中,卷积层不仅涉及一般的图像卷积,还设计深度和步长的概念。深度对应于同一个区域内的神经元数就是有几个卷积在对同一块区域进行卷积运算;步长是对应于卷积和移动多少个像素,也就是前后距离的远近程度。
上图就是一次卷积运算的简单示例,我们通过输入的图像元素用一个卷积核映射到上面的区域上的单元进行卷积运算,然后将卷积计算的结果映射到新的卷积层,之后卷积核向右或者向下移动一个步长,进行下一次运算。直到用步长走完整个输入图像。
但是,一般情况下来说,图像的像素数量级是非常大的,仅仅举个例子,1000 * 1000已经是非常小的图像,它可以被表示为一个长度为1*10^6的向量。如果设置隐含层与输入层的数目相同,则输入层到隐含层的参数个数就会为 10^12,就会带来大量的参数,无法进行训练。所以,应用卷积层来训练图像数据,必须注意减少参数来保证计算速度。一般来说,卷积神经网络减低参数数量的放大有两种,局部感知和参数共享。
局部感知
人对外界的认知一般可以归纳为从局部到全局的过程,而图像的像素空间联系也是局部间的相关性强,远距离的弱。所以在卷积神经网络的每一个神经元实际上只需关注图像局部的感知,对于全局图像的感知可通过更高层综合局部信息来获得,这也说明了卷积神经网络部分联通的思想。类似于生物学中的视觉系统结构,视觉皮层的神禁苑用于拒不接受信息,及这些神经元只影响默写特定区域的刺激,呈现出部分联通的特点。
就像上面我们看到的例子,一个卷积核就是3*3的像素值就是一个神经元的链接,假设我们每个神经元和
10 *10大小的像素值连接。以10^6个神经元看,单层卷积计算之后有的输出只剩下了100 *10^6个参数。明显减少。
参数共享
局部感知过程假设每个神经元都对应100个参数,共10^6神经元,则参数一共有100* 106个,依然会是一个非常庞大的数字。如果这106个神经元100个参数相等,那么参数的个数就会变为100,及每个神经元用同样的卷积核执行卷积操作,大大降低计算量。
用具体的人脸识别的例子来说,到高层时,CNN将这些浅层基础特征组成成更高级的特征,比如人的眼睛、鼻子等,直到全连接层将这种两个眼睛一个鼻子的组合识别为人脸。因此,即使对图像进行平移、缩放、旋转,在浅层依旧能提取出点、线、边缘等基础特征,到高层就能将它们组合成眼睛鼻子,从而最终依旧能被识别为人脸。(一个说法是,平移旋转后的图像到高层对应的特征图一定程度上也是平移旋转后的。过多的平移旋转,最终可能影响到图像的识别,因此更鼓励用data augmentation来实现对旋转的鲁棒。)
多核卷积
如果10 * 10维度的卷积核都是一样的,那么只能提取出来图像的一种特征,局限性太大。所以我们可以增加卷积核来提高,比如使用32个不同的卷积核用于学习32种不同特性的。用不同卷积图得到的图像的不同特征可以称之为特征图(Feature map)。这时候卷积层包含了10* 10* 32个参数。
池化层
从理论上来看,经过卷积层得到的特征集合,可直接用于训练分类器(例如经典的Softmax分类器),但是这往往会带来巨大的计算量。试想一下,一个1000 * 1000的图像,卷积层神经元有1000 * 1000个,卷积核有32个,所以卷积特征向量的长度会达到32 * 1000 * 1000 .这不仅是一个海量的运算量,也会出现过拟合的现象.在对此问题的实际处理过程中,可以对通过不同位置的特征进行聚合统计等处理来降低数据规模,提高运行速度。;哦如,通过计算图像局部区域上的某些特定的平均值或者最大值等来计算该要统计特征。这些概要统计特征相对于卷积层计算得到的特征图,不仅达到了将为目的,同时还会提高训练效率,这种特征聚合的操作叫做池化(Pooling),根据统计方式的不同也可以叫做平均池化或者最大池化。下图为最大池化的一个例子:在输入的图层像素中我们以一个22的像素图为一个filter单位,求这个单位的最大值,下图中红色部分为6,所以过滤后22的像素就变成了一个像素,像素的值为原来的2*2像素图当中最大的值:6,以此类推,从而使得输入数据量的线性下降。
平均池化的方法类似,只不过从求最大值变成了求平均。
添加链接描述
程序讲解
下面我用一个简单的例子讲一讲在matlab上面的CNN实现,在运行程序之前,确保本机上面已经安装了对应的CUDA和CUDNN版本。不会装请看下面的链接文章:
Windows 安装 CUDA/cuDNN
和必要的tensorflow。
Matlab加载数据
我们这里加载的是matlab自带的数据集,一共295张图像,每幅图像当中标记了1~2辆汽车。但是在实际应用场景中,将需要更多的训练数据来提高CNN鲁棒性。数据加载的核心代码如下所示
%% 加载数据
% vehicleDataset是一个dataset数据类型,第一列是图片的相对路径,第二列是图片中小汽车的位置
data = load('fasterRCNNVehicleTrainingData.mat');
% 提取训练集
vehicleDataset = data.vehicleTrainingData;
% 提取图片路径
dataDir = fullfile(toolboxdir('vision'),'visiondata');
vehicleDataset.imageFilename = fullfile(dataDir, vehicleDataset.imageFilename);
接下来读取了这295张照片的前12张
% 展示前9幅图片
k = 12;
I=zeros(128,228,3,k);
for i = 1 : k% 读取图片tmp = imread(vehicleDataset.imageFilename{i});% 添加标识框tmp = insertShape(tmp, 'Rectangle', vehicleDataset.vehicle{i});I(:,:,:,i) = mat2gray(tmp);
end
% 显示
Is = I;
hfig = figure; montage(Is);
set(hfig, 'Units', 'Normalized', 'Position', [0, 0, 1, 1]);
pause(1);
当程序运行到这里的时候,训练的数据已经加载,并显示了前12张添加了矩形标记的图像,如下图所示:
构建CNN网络
CNN网络是进行CNN目标识别的基础,MATLAB神经网络工具箱提供了构建CNN网络的基本函数,主要是有网络的输入层,中间层和输出层组成。
首先,定义网络输入层。通过imageInputLayer
函数定义CNN网络的类型和维度。根据应用场景的不同,输入的维度也会有差别。其中,目标检测应用的输入维度一般等于检测目标的最小尺寸;图像分类的输入维度一般等于训练图像的尺寸。这次我们是进行目标检测,并且训练数据中最小汽车区域的像素约为32 * 32,所以设置为32 * 32。核心代码如下面所示:
%% 构建CNN网络
% 输入层,最小检测对象约32*32
inputLayer = imageInputLayer([32 32 3]);
接下来我们需要定义网络中间层。他是卷积卷积神经网络的核心内容,一般会有卷积函数,激活函数和池化函数构成。中间层可以多次重复使用卷积函数但是为了避免对图像过度采样导致图像细节丢失,建议尽量使用最小数量池化层。
% 中间层
% 定义卷基层参数
filterSize = [3 3];
% 一个卷积核3*3大小
numFilters = 32;
middleLayers = [
% 第一轮,只包含CNN和ReLU
% padding的用途:保持边界信息,如果没有加padding的话,输入图片最边缘的像素点信息只会被卷积核操作一次
% 但是图像中间的像素点会被扫描到很多遍,那么就会在一定程度上降低边界信息的参考程度,但是在加入padding后,在实际处理过程中就会从新的边界进行操作,就从一定程度上解决了这个问题。
% 在卷积神经网络的卷积层加入Padding,可以使得卷积层的输入维度和输出维度一致。convolution2dLayer(filterSize, numFilters, 'Padding', 1)reluLayer()% 第二轮,包含CNN、ReLU和Poolingconvolution2dLayer(filterSize, numFilters, 'Padding', 1)reluLayer()maxPooling2dLayer(3, 'Stride',2) % 步长为2的最大池化层];
之后就是定义网络输出层。输出层一般由经典的全连接层和分类层构成,用于结果的输出。
% 组合所有层
layers = [inputLayermiddleLayersfinalLayers];
训练CNN网络
为了利用数据,在训练之前将数据分为训练和测试两个部分。为此,按数据标号,前60%用于训练,后40%用于测试。
%% 训练CNN网络
% 将数据划分两部分
% 前60%的数据用于训练,后面40%用于测试
ind = round(size(vehicleDataset,1) * 0.6);
trainData = vehicleDataset(1 : ind, :);
testData = vehicleDataset(ind+1 : end, :);
在Matlab里面的神经网络工具箱提供了trainFasterRCNNObjectDetector来进行CNN网络的训练,整个训练的过程包含了四步,每一步都可以制定不同的训练参数,也可以用相同的参数。在这个例子里面,设置前两部的学习速率为1e-5 后两步的学习速率为1e-6.
什么是学习速率我就不解释了,毕竟算是最基础知识,不知道的同学请点下面链接:
神经网络中的学习速率如何理解
为什么我们会使用两种不同的学习速率?
学习率过大,在前期会加速学习,使得模型更容易接近局部或全局最优解。但是在后期会有较大波动,甚至出现损失函数的值围绕最小值徘徊,波动很大,始终难以达到最优。所以引入学习率衰减的概念,直白点说,就是在模型训练初期,会使用较大的学习率进行模型优化,随着迭代次数增加,学习率会逐渐进行减小,保证模型在训练后期不会有太大的波动,从而更加接近最优解。而这里,我们在前期使用较大的学习速率,后两部采用较小的学习速率,期望得到一个稳定的模型。这两个数据可以大家修改看看,调出自己的最优解。
代码如下:
options = [% 第1步,Training a Region Proposal Network (RPN)trainingOptions('sgdm', 'MaxEpochs', 10,'InitialLearnRate', 1e-5,'CheckpointPath', tempdir)% 第2步,Training a Fast R-CNN Network using the RPN from step 1trainingOptions('sgdm', 'MaxEpochs', 10,'InitialLearnRate', 1e-5,'CheckpointPath', tempdir)% 第3步,Re-training RPN using weight sharing with Fast R-CNNtrainingOptions('sgdm', 'MaxEpochs', 10,'InitialLearnRate', 1e-6,'CheckpointPath', tempdir)% 第4步,Re-training Fast R-CNN using updated RPNtrainingOptions('sgdm', 'MaxEpochs', 10,'InitialLearnRate', 1e-6,'CheckpointPath', tempdir)];% 设置模型的本地存储
doTrainingAndEval = 1;
if doTrainingAndEval % 训练 R-CNN 神经网络,其实神经网络工具箱提供了3个函数% (1)trainRCNNObjectDetector,训练快检测慢,允许指定proposalFcn% (2)trainFastRCNNObjectDetector,速度较快,允许指定proposalFcn% (3)trainFasterRCNNObjectDetector,优化运行性能,不需要指定proposalFcndetector = trainFasterRCNNObjectDetector(trainData, layers, options, ...'NegativeOverlapRange', [0 0.3], ...'PositiveOverlapRange', [0.6 1], ...'BoxPyramidScale', 1.2);
else% 加载已经训练好的神经网络detector = data.detector;end
上述代码中 “sgdm”是优化方法:SGD with momentum 的简称,Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。
当然,除了sgdm还有很多期的优化方法:如下图所示:
epochs被定义为向前和向后传播中所有批次的单次训练迭代。这意味着1个epoch是整个输入数据的单次向前和向后传递。简单说,epochs指的就是训练过程中数据将被“轮到”多少次。 亦即应当完整遍历数据集多少次(一次为一个epoch)。
如果epoch数量太少,网络有可能发生欠拟合;如果epoch数量太多,则有可能发生过拟合。
举个例子来说,训练集有10000个样本,batchsize=10,那么,训练完整个样本集可以需要100次iteration,10次epoch。
接下的代码里面训练模型时提到的三个系数:
‘PositiveOverlapRange’ - 一个双元素向量,指定0和1之间的边界框重叠比例范围,与指定范围内(即之前做图片标注画出的框)的边界框重叠的区域提案被用作正训练样本。Default: [0.5 1]
‘NegativeOverlapRange’ - 一个双元素向量,指定0和1之间的边界框重叠比例范围,与指定范围内(即之前做图片标注画出的框)的边界框重叠的区域提案被用作负训练样本。Default: [0.1 0.5]
经过一定时间的训练之后,得到了CNN网络模型。为了测试,我们选择了highway.png进行输入,结果表明此CNN可以检测到目标车辆并各处位置。
代码如下:
I = imread('highway.png');
% 运行检测器,输出目标位置和得分
[bboxes, scores] = detect(detector, I);
% 在图像上标记处识别的小汽车
I = insertObjectAnnotation(I, 'rectangle', bboxes, scores);
figure; imshow(I)
训练CNN网络
为了验证CNN的训练效果,必须进行大规模测试,。Matlab计算机视觉工具箱提供了平均精确度evaluateDetectionPrecision来评估,并计算召回率和精确率指标来作为评估标准。一般来说,针对单目标的检测问题,存在下面四种概率。
包含 | 不包含 |
---|---|
TP(True Positive) | FP(False Positive) |
FN(False Negative) | TN(True Negative) |
定义精确率P = TP/(TP+FP)就是检测到目标的图像中真正包含目标的比例。
定义召回率R = TP/(TP+FN)就是包含目标的图像被成功检测出来的比例。
核心代码如下:
% 评估训练效果
if doTrainingAndEvalresults = struct;for i = 1:size(testData,1)% 读取测试图片I = imread(testData.imageFilename{i});% 运行CNN检测器[bboxes, scores, labels] = detect(detector, I);% 结果保存到结构体results(i).Boxes = bboxes;results(i).Scores = scores;results(i).Labels = labels;end% 将结构体转换为table数据类型results = struct2table(results);
else% 加载之前评估好的数据results = data.results;
end
% 从测试数据中提取期望的小车位置
expectedResults = testData(:, 2:end);
%采用平均精确度评估检测效果
[ap, recall, precision] = evaluateDetectionPrecision(results, expectedResults);
% 绘制召回率-精确率曲线
figure;
plot(recall, precision);
xlabel('Recall');
ylabel('Precision')
grid on;
title(sprintf('Average Precision = %.2f', ap));
这时候会出现一个代表精确度走向的图标,这个图我就不放了,每个人训练出来的精度不一样,图标显示也就不一样。
一般训练出来的精确度较低,就说明本文的CNN网络层数显然是不够的,需要在增加网络层数来改善精确度,大家可以按照上面的例子尝试增加layer,再次训练,已达到高精确率要求。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Java SE系列笔记——HashMap
HashMap HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。 HashMap 是无序的&…...
2024/4/18 9:01:20 - 字典的练习
chars[‘a’,‘c’,‘x’,‘d’,‘p’,‘m’,‘q’,‘t’,‘c’,‘a’,‘c’] #如何把字符和次数组成一个字典 char_count{} for char in chars: if char in char_count: char_count[char]1 else: char_count[char]1 print(char_count)...
2024/5/7 7:24:16 - 多线线程梨视频下载
要用多线程的方法下载梨视频,但是由于一直梨视频视频的数据对应的url一直拿不到,开始的时候还直接访问了某个视频的ajax返回的url,是个没用的,后来基本上完全参考了一篇博客,才踉踉跄跄的把这个小视频下载完成。 转载博…...
2024/4/27 18:29:35 - 二叉树简介
一、满二叉树 一棵二叉树的结点要么是叶子结点,要么它有两个子结点(如果一个二叉树的层数为K,且结点总数是(2^k) -1,则它就是满二叉树。) 二、完全二叉树 若设二叉树的深度为k,除第 k 层外,其…...
2024/5/7 10:04:17 - 01.源码分析-Integer
方法parseInt()valueOf()parseInt() 源码: /**s: 表示传入的字符串redix: 表示传入的基数(进制,比如二进制、十进制,如果不传默认10进制) **/ public static int parseInt(String s, int radix)throws NumberFormatE…...
2024/4/14 3:25:13 - 打卡web-高级-baby_web
先看题目 它告诉我们想想初始页面时什么,所以找这个 的flag时,就要往初始页面想,我们 把1.php删除掉再加载一次,打开web控制台,如图调整查看的内容就能找到flag...
2024/5/7 8:44:58 - Linux常用代码(20201013_21)
Linux常用代码 服务器小白,第一次正式接触服务器知识 1. /为根目录,cd /直接移动到根目录 ./ 为当前路径 ../ 和 .. 为上级目录 2. cd 和 cd ~ 都是到home目录下 其中默认 . 开头的文件为默认隐藏文件,其实每个目录下都有 . 和 .. 两个隐…...
2024/5/7 9:26:13 - C++——C++11新特性
C——C11新特性Z、c11的相关特性z1、初始化——大括号初始化器z2、char16_t / char32_t / size_tz3、range-based for循环Z、c11的相关特性 z1、初始化——大括号初始化器 c11使用大括号初始器作为一种通用的初始化方法,以此代替不同变量的不同初始化方式…...
2024/4/6 7:30:06 - 蒟蒻的LeetCode刷题记录81~90
81. 搜索旋转排序数组 II 和第33题类似的思路,依旧是二分,但是即便是二分,时间复杂度依旧是O(n)O(n)O(n),所以不如直接线性扫描一遍,具体的题解。 class Solution { public:bool search(vector<int>& nums, int target…...
2024/4/19 12:33:45 - 收新邮件
收新邮件 一、选项设置 1.1、开启接收 勾选 允许自动接收邮件 :务必勾选,否则客户端将不自动收取邮件。 每隔多少分钟收一次邮件 :建议设置5分钟以上,收信频繁将导致服务器拒绝服务(不停要求输入密码)。 以…...
2024/5/5 13:28:01 - 上海网站建设优秀企业汇总
上海网站建设,了解到的比较好的有下面几家。 上海速强信息技术有限公司 公司成立于2005年,IT行业领先的综合服务提供商,在高端定制、人力现场、行业方案上拥有15年的经验和积累。 优势 高端定制。UI设计 / 高端网站定制 / APP定制 / 软件系…...
2024/4/6 7:30:04 - jQuery函数的使用
一.Jquery函数的使用 作为一般函数调用:$(param) (1)参数为函数:当DOM加载完成后,执行此回调函数 (2)参数为选择器字符串:查找所有匹配的标签,并将他们封装成jquery对象 (3)参数为DOM对象:将do…...
2024/4/6 7:30:03 - P2714-四元组统计【数论,容斥】
正题 题目链接:https://www.luogu.com.cn/problem/P2714 题目大意 给出nnn个数,求有多少个(i,j,k,l)(i,j,k,l)(i,j,k,l)使得gcd(ai,aj,ak,al)1gcd(a_i,a_j,a_k,a_l)1gcd(ai,aj,ak,al)1。 解题思路 我们设fif_ifi表示gcdgcdgcd和为iii的方案数。FiF_iFi…...
2024/5/2 17:55:58 - 外卡pos机哪里有
外卡pos机哪里有(正规办理)【薇:waibi3688】手输离线预授权,绝非市场上骗子卖的假机器!紧密结合法院工作实际,努力在推动非诉讼纠纷解决机制发展、促进矛盾纠纷多元化解方面发挥更大作用。具体来说,应做到五…...
2024/5/7 1:20:09 - 02 设计模式七大原则--接口隔离原则
文章目录1 概念2 引入3 改进1 概念 客户端不应该依赖他不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 2 引入 package study.wyy.design.principle.segregation; /*** author by wyaoyao* Description* Date 2020/10/13 8:30 下午*/ public clas…...
2024/5/7 9:14:52 - Hive中自定义函数
Hive中自定义函数 一、概述 --1. 在hive中有三种自定义函数: 1. UDF :一进一出 --一行变一行 2. UDTF : 一进多出 -- 一行变多行 3. UDAF :多进一出 -- 多行变一行-- 2. 实现步骤:a、进入函数的是什么参数b、希望得到什么结果…...
2024/5/7 4:24:03 - acm-后缀树组学习笔记
引言 本文主要介绍后缀数组的原理和一些典型例题 后缀数组的实现 基本原理 后缀数组主要是考虑用一个数组存放字符串s的所有后缀,然后再给这些后缀排个序。然后利用这个数组我们可以解决许多奇妙的问题。 首先是后缀的存放方式,显然不能真正地为每一个…...
2024/5/7 10:54:43 - Mybatis延迟查询
Mybatis延迟查询一对一延迟查询原Mybatis查询pojo配置文件业务代码一对一延迟查询修改OrdersMapper.xml配置分情况查询一对多查询原Mybatis查询pojo配置文件业务代码多对多延迟查询修改UserMapper.xml的配置(最下方一对多的配置)业务代码一对一延迟查询 …...
2024/5/6 22:22:54 - Java入门阶段(个人笔记)
一、变量 1.局部变量(local variable) 1)方法或语句块内部定义的变量; 2)生命周期:从声明开始到方法或语句块执行完毕为止; 3)局部变量在使用前必须先声明、初始化(赋值)后再使用&am…...
2024/4/15 7:49:21 - RHEL8学习-新手必须掌握的命令1
新手必须掌握的Linux类型 一个完整命令行组成:命令名称 参数 对象三部分组成; 格式:命令***空格***参数***空格***对象 命令:具体要什么?干什么事情? 参数的作用是使linux系统命令能够更贴合用户的实际需求…...
2024/4/6 7:29:58
最新文章
- 执行信息网小工具_大幅度提升工作效率
本人开发了一个执行信息网的数据查询工具, 需求是我老婆公司提出来的,正好有闲暇时间就开发了,提升了她们公司工作效率90% 查询人必须依法使用查询信息,不得用于非法目的和不正当用途。非法使用本网站信息给他人造成损害的&#…...
2024/5/7 10:59:16 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 单片机学习day4
1. 嵌入式驱动 嵌入式驱动(Embedded Driver)是一种软件模块,用于控制和管理嵌入式系统中的外部设备或组件。 2. 嵌入式驱动程序功能 2.1 设备初始化 2.2 数据传输 2.3 错误处理 2.4 资源管理 2.5 接口适配 3. 中断系统 3.1 定义 中断…...
2024/5/4 2:44:29 - ROS2高效学习第十章 -- ros2 高级组件之大型项目中的 launch 其二
ros2 高级组件之大型项目中的 launch 1 前言和资料2 正文2.1 启动 turtlesim,生成一个 turtle ,设置背景色2.2 使用 event handler 重写上节的样例2.3 turtle_tf_mimic_rviz_launch 样例 3 总结 1 前言和资料 早在ROS2高效学习第四章 – ros2 topic 编程…...
2024/5/7 4:57:36 - Python语法总结:not(常出现错误)
0、not是什么 在python中not是逻辑判断词,用于布尔型True和False之前 a not Ture # a False b not False # b True1、not的用法 (1)判断语句 if not a:# 如果a是False,执行的语句(2)判断元素是否在…...
2024/5/2 5:16:56 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/5/6 18:23:10 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/5/6 18:40:38 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/5/6 23:37:19 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/5/6 7:24:07 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/5/7 0:32:52 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/5/6 6:01:13 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/5/6 7:24:06 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/5/7 1:54:46 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/5/6 20:04:22 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/5/7 0:32:51 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/5/6 7:24:04 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/5/6 7:24:04 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/5/6 19:38:16 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/5/6 7:24:03 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/5/7 0:32:49 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/5/6 21:25:34 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/5/6 7:24:02 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/5/7 7:26:29 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/5/7 0:32:47 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/5/6 16:50:57 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57