【三维目标检测模型】ImVoteNet
【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。
参考书籍:《人工智能点云处理及深度学习算法》
本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“https://blog.csdn.net/suiyingy/article/details/124017716”。配套书籍《人工智能点云处理及深度学习算法》提供更加全面和系统的解析。
ImVoteNet是一种基于VoteNet结构的多模态融合三维目标检测模型,发表在CVPR 2020 《ImVoteNet: Boosting 3D Object Detection in Point Clouds with Image Votes》,论文地址为“https://arxiv.org/abs/2001.10692”。其模型核心在于将图像中的几何结构、语义和RGB纹理信息融合到点云投票特征当中,以此来提高三维目标检测精度。
1 总体结构
ImVoteNet模型结构如下图所示,输入数据包括RGB图像和点云。从模型名称上看,该模型以VoteNet为基础,并且多模态信息融合发生在投票特征提取阶段。RGB图像在预测出目标的二维候选框之后,根据点云种子点的位置关系,计算出二维候选框的投票结果、语义分类和RGB纹理信息,维度为KxF’。模型在点云分支上同样预测了KxF投票特征。这里K表示种子点数量,F和F’表示投票特征维度。
图ImVoteNet模型结构
投票特征提取后,模型分别针对两种单模态特征和一种多模态特征进行VoteNet后续操作,包括候选框聚合、结果预测和损失计算等。这里单模态特征是指图像和激光深度分别提取的投票特征,维度为Kx(3+F’)和Kx(3+F)。多模态特征是指二者拼接融合后的特征,维度为Kx(3+F+F’)。其中,3表示投票点空间坐标。模型总体损失函数包括了这三种计算结果的各自损失,其中单模态损失权重各占0.3,多模态损失权重占0.4。实际上,很多模型改进点会集中在增加对损失函数的约束上来进行,例如增加面或棱的预测损失等。
ImVoteNet总体计算过程如下图所示。
图 ImVoteNet总体计算过程
2 二维候选框预测
ImVoteNet采用了两阶段二维目标检测模型,输入图像数据维度为3x608x832。该两阶段检测结构主要包括主干网络、Neck、RPN Head、ROI Head和NMS等步骤,入口函数为self.extract_bboxes_2d(img, img_metas, bboxes_2d=bboxes_2d, **kwargs)。
主干网络采用残差网络ResNet结构,提取4种不同尺度特征,分别为256x152x208、512x76x104、1024x38x52、2048x19x26。Neck层采用特征金字塔FPN结构,实现特征多尺度特征融合,融合特征通道数量均为256,并输出5种尺度特征,分别为256x152x208、256x76x104、256x38x52、256x19x26、256x10x13。
每个特征图位置会产生三种不同尺寸anchor,并通过RPN Head预测候选框有无目标以及目标位置,并且每种尺度特征图分别进行计算。因此,目标有无得分预测结果rpn_cls_score维度为3x152x208、3x76x104、3x38x52、3x19x26和3x10x13。位置预测结果rpn_bbox_pred维度为12x152x208、12x76x104、12x38x52、12x19x26和12x10x13。根据预测得分和NMS非极大值抑制,最多筛选并保留最多前1000个得分最高的候选框。不同尺度特征图对应的候选框相互间不进行NMS操作,并且删除尺寸过小的候选框。RPN Head返回的候选框维度为1000x5,其中1000为候选框数量。5个特征维度依次为候选框左上角x坐标tl_x、左上角y坐标tl_y、右下角x坐标br_x、右下角y坐标br_y以及目标有无得分conf。RPN配置如下所示。
proposal_list = self.img_rpn_head.simple_test_rpn(x, img_metas)
RPNHead((loss_cls): CrossEntropyLoss(avg_non_ignore=False)(loss_bbox): L1Loss()(rpn_conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(rpn_cls): Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))(rpn_reg): Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))
)
ROI Head对候选框进行ROI Align操作后各个候选框特征图变换到相同尺度(1000x256x7x7),然后进一步进行特征提取,分别完成10个类别目标进行预测,包括二维预测框(tl_x,、tl_y、br_x、br_y,conf)和目标类别预测结果label。ROI关键参数如下所示。其中共享全连接层第一层的输入特征数量为12544,即候选框特征维度(256x7x7)。由于模型需要预测10个类别目标(加上背景工11类),且每个目标位置坐标由4个维度(背景不需要进行预测),因此分类和位置回归的全连接层输出特征数量分别为11和40。
rets = self.img_roi_head.simple_test(x, proposal_list, img_metas, rescale=False)#每个类别目标的预测结果,10xKx5,10个类别,K个目标,tl_x、tl_y、br_x、br_y,conf
rois = bbox2roi(proposals)#[batchid, tl_x, tl_y, br_x, br_y]
cls_score, bbox_pred = self.bbox_head(bbox_feats)#1000x11,1000x40
Shared2FCBBoxHead((loss_cls): CrossEntropyLoss(avg_non_ignore=False)(loss_bbox): L1Loss()(fc_cls): Linear(in_features=1024, out_features=11, bias=True)(fc_reg): Linear(in_features=1024, out_features=40, bias=True)(shared_convs): ModuleList()(shared_fcs): ModuleList((0): Linear(in_features=12544, out_features=1024, bias=True)(1): Linear(in_features=1024, out_features=1024, bias=True))(cls_convs): ModuleList()(cls_fcs): ModuleList()(reg_convs): ModuleList()(reg_fcs): ModuleList()(relu): ReLU(inplace=True)
)
ret = torch.cat([ret, sem_class[:, None]], dim=-1)#Nx6,xyxyconfcls
inds = torch.argsort(ret[:, 4], descending=True)#按照置信度分数排序
ret = ret.index_select(0, inds)#按照置信度分数排序
RO结果再次根据目标预测置信度和NMS操作后最多保留100个预测目标。预测结果即为ImVoteNet模型的二维预测框bboxes_2d,维度为Kx6。其中,K表示预测的二维目标数量,此处6个维度分别是tl_x、tl_y、br_x、br_y、conf和label。
3 点云种子点生成
ImVoteNet点云输入维度为20000x4,即x、y、z、r。与VoteNet中的种子点提取方式相同,该模型仍然通过PointNet2SASSG来提取到1024个种子点及其特征与索引,特征维度为256x1024。种子点提取的入口函数为self.extract_pts_feat(points)。
seeds_3d, seed_3d_features, seed_indices = self.extract_pts_feat(points)#PointNet2SASSG,提取种子点坐标及其特征与索引,1024x3、256x1024、1024。
4 图像投票特征提取
ImVoteNet的图像投票特征提取层为VoteFusion,入口函数为self.fusion_layer(img, bboxes_2d, seeds_3d, img_metas),主要包括几何、语义和纹理特征提取三部分。关键程序如下所示。
xyz_depth = apply_3d_transformation(seed_3d_depth, 'DEPTH', img_meta, reverse=True)#将点云坐标变换到原始数据上去,数据增强反向变换
depth2img = xyz_depth.new_tensor(img_meta['depth2img'])#深度到相机变换矩阵
uvz_origin = points_cam2img(xyz_depth, depth2img, True)#深度到图像坐标
z_cam = uvz_origin[..., 2]#相机坐标系下,Z轴距离
uv_origin = (uvz_origin[..., :2] - 1).round()#原始点云在图像中的坐标
bbox_expanded = bbox_2d_origin.view(1, bbox_num, -1).expand(seed_num, -1, -1)#1024xKx6,每个种子点所对应的原始候选框
seed_2d_in_bbox = seed_2d_in_bbox_x * seed_2d_in_bbox_y#在二维候选框内的种子点,1024xKx1
sem_cue = sem_cue.scatter(-1, bbox_expanded_cls.long(), bbox_expanded_conf)#语义,1024xKx10,候选框对应类别的置信度
delta_u = bbox_expanded_midx - seed_2d_expanded_x#二维候选框中心与2D种子点的距离,cp,1024xKx1
delta_v = bbox_expanded_midy - seed_2d_expanded_y#二维候选框中心与2D种子点的距离,cp,1024xKx1
imvote = torch.cat([delta_u, delta_v, torch.zeros_like(delta_v)], dim=-1).view(-1, 3)
imvote = imvote * z_cam.reshape(-1, 1)#将图像中偏差cp变换到相机坐标系偏差
imvote = imvote @ torch.inverse(depth2img.t())#将偏差反向变换到深度坐标系
imvote = apply_3d_transformation(imvote, 'DEPTH', img_meta, reverse=False)#应用数据增强,与模型输入数据保持一致
ray_angle = seed_3d_expanded + imvote#种子点加上投票偏移,伪3D投票结果,投票的目标中心C'
ray_angle /= torch.sqrt(torch.sum(ray_angle**2, -1) + EPS).unsqueeze(-1)#深度坐标系中与坐标轴的余弦值
xz = ray_angle[:, [0, 2]] / (ray_angle[:, [1]] + EPS) * seed_3d_expanded[:, [1]] - seed_3d_expanded[:, [0, 2]]#伪三维投票偏差
geo_cue = torch.cat([xz, ray_angle], dim=-1).view(seed_num, -1, 5)
two_cues = two_cues * seed_2d_in_bbox.float()#仅针对属于bbox内部的种子点进行特征提取
uv_flatten = uv_rescaled[:, 1].round() * img_shape[1] + uv_rescaled[:, 0].round()#投影坐标
uv_expanded = uv_flatten.unsqueeze(0).expand(3, -1).long()
txt_cue = torch.gather(img_flatten, dim=-1, index=uv_expanded)#为每个点赋予归一化RGB值,相当于点云和图像对齐
txt_cue = txt_cue.unsqueeze(1).expand(-1, self.max_imvote_per_pixel, -1).reshape(3, -1)
img_feature = torch.cat([two_cues, txt_cue], dim=0)
4.1 几何投票特征提取
种子点坐标seeds_3d根据相机内外参数变换矩阵投影到图像平面上,得到种子点的图像坐标uv_origin。2D种子点与各个二维候选框中心的偏差记为delta_u和delta_v,对应下图中向量cp。在二维图像平面上,二维种子点p的投票目标为候选框中心c。在相机坐标系中经过,三维物体中心C与其在像平面的成像位置c的连线经过光心O。在这条连线上的点C’的成像位置均为c。那么,投票点在二维平面上预测了投票位置c,在三维空间对应的是一条直线,直线上的点用C’表示。向量cp反变换到深度坐标系后为向量C’P。C’P加上种子点三维坐标即可得到C’的坐标,进而得到OC’所在直线的角度ray angle。
图C C’
在SUN RGB-D数据集的深度坐标系中,y方向为深度方向,对应相机坐标系的z方向。当C’深度确定时,那么它的位置就可以根据角度ray angle等比例确定,进而得到C的坐标。这里,模型有一个前提假设,即目标中心与种子点相近。这是因为二维投票点必须落在二维目标框内才考虑提取其图像特征。在物体离相机有一定距离的情况下并且深度尺寸有限,近似认为物体中心与其内部种子点的深度相等,即C和P的深度近似相等。C的投票位置与P坐标之差记为图像的伪三维投票偏差xz(2个维度)。其与角度ray angle(3个维度)共同组成图像的几何投票线索特征geo_cue,维度为1024xKx5。其中,K为二维目标预测个数。
4.2 语义投票特征提取
另一方面,每个二维种子点会被赋予语义特征,语义特征与其所在二维预测框的类别预测相关,取值为类别置信度。模型共预测10个类别,每个二维框的预测维度为10,且取值不为0之处对应目标的类别置信度。因此,语义特征预测结果sem_cue维度为1024xKx10。
几何与语义线索特征进行拼接并用二维候选框范围进行约束可得到新的特征two_cues,维度为1024xKx15。同一个种子点最多可预测3个目标,那么K限制为3,two_cues的特征维度为1024x3x15,即15x3072。
4.3 纹理投票特征提取
二维种子点的投票特征为图像坐标系对应的像素特征txt_cue,即归一化RGB取值,维度为3x3072。
图像投票特征img_feature提取最终由上述三部分特征拼接而成,维度为18x3072。程序中进一步为每个种子点仅分配一个预测特征,因此,img_features维度恢复到18x1024,并进一步通过如下MLP实现特征融合,维度为256x1024。该特征记为点云种子点对应的图像特征。
img_features = self.img_mlp(img_features)#256x1024
MLP((mlp): Sequential((layer0): ConvModule((conv): Conv1d(18, 256, kernel_size=(1,), stride=(1,))(bn): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activate): ReLU(inplace=True))(layer1): ConvModule((conv): Conv1d(256, 256, kernel_size=(1,), stride=(1,))(bn): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activate): ReLU(inplace=True))
5 VoteNet结果预测与损失计算
经过上述步骤后,ImVoteNet的种子点特征由三种类型,即点云特征seed_3d_features(256x1024)、图像特征(256x1024)以及两者拼接融合后的特征fused_features(512x1024)。模型针对这三种类型特征分别进行VoteNet预测和损失计算,具体过程可参考前文关于VoteNet的详细介绍。
ImVoteNet损失函数共包含三大部分,分别对应上述三种类型特征,每个部分包括投票损失、目标损失、语义损失、中心损失、方向分类损失、方向回归损失、尺寸分类损失和尺寸回归损失等8种组成。点云特征、图像特征和融合特征对应的权重分别为0.3、0.3、0.6,经过加权求和后得到总的损失combined_losses。
6 模型训练
模型训练命令为“python tools/train.py configs/imvotenet/imvotenet_stage2_16x8_sunrgbd-3d-10class.py”,采用SUN RGB-D作为输入数据集。运行训练命令可得到如图所示训练结果。
7 【python三维深度学习】python三维点云从基础到深度学习_python3d点云从基础到深度学习-CSDN博客
【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。
更多python与C++技巧、三维算法、深度学习算法总结、大模型请关注我的博客,欢迎讨论与交流:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。Python三维领域专业书籍推荐:《人工智能点云处理及深度学习算法》。
本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“https://blog.csdn.net/suiyingy/article/details/124017716”。配套书籍《人工智能点云处理及深度学习算法》提供更加全面和系统的解析。
相关文章:
![](https://i-blog.csdnimg.cn/direct/8f65d30f51b746bba6113ac495044403.png)
【三维目标检测模型】ImVoteNet
【版权声明】本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。 参考书籍:《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“https://blog.csdn.net/suiyin…...
![](https://i-blog.csdnimg.cn/direct/1814d1ee8d3e42a2b8335bd894a16ee5.png)
力扣 | 背包dp | 279. 完全平方数、518. 零钱兑换 II、474. 一和零、377. 组合总和 Ⅳ
文章目录 一、279. 完全平方数二、518. 零钱兑换 II三、474. 一和零四、377. 组合总和 Ⅳ 一、279. 完全平方数 LeetCode:279. 完全平方数 朴素想法: 这个题目最简单的想法是,可以用 O ( n n ) O(n\sqrt{}n) O(n n)的动态规划解决&#x…...
![](https://i-blog.csdnimg.cn/direct/9781dfc70f394fa08d1a8ffc45055b48.gif#pic_center)
【ECMAScript性能优化的技巧与陷阱】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
![](https://www.ngui.cc/images/no-images.jpg)
Swift实时监听判断是否连接有网络WIFI和蜂窝数据
本章节讲解如何使用swift连接网络,实时的监听到网络的状态,在主界面中进行调用,网络包含Wi-Fi 和 蜂窝。 1.封装一个判断是否有网络的类 2.在封装类注册通知 3.主界面接收注册通知,并且调用封装的网络类 4.成功测试,有…...
![](https://www.ngui.cc/images/no-images.jpg)
(三)Flink Source 数据源
Flink 数据源主要分为内置数据源和第三方数据源。其中内置数据源包含文件、Socket 连接、集合类型数据等,不需要引入其它依赖库。第三方数据源定义了 Flink 和外部系统数据交互的逻辑,Flink 提供了非常丰富的数据源连接器,例如 Kafka、Elasticsearch、RabbitMQ、JDBC 等。 …...
![](https://i-blog.csdnimg.cn/direct/bffdf45957c445ea9b798fd64fde5a46.png)
第四届机电一体化、自动化与智能控制国际学术会议(MAIC 2024)
目录 大会官网 会议简介 组织机构 大会主席 程序委员会主席 主讲嘉宾 征稿主题 参会说明 大会官网 http://www.icmaic.org 会议简介 第四届机电一体化、自动化与智能控制国际学术会议(MAIC 2024)将于2024年9月27-29日在中国成都召开。MAIC 20…...
![](https://img-blog.csdnimg.cn/img_convert/49be074f2a38eee9c5e5f0ecdb78fbcd.png)
leetcode 089 打家劫舍
leetcode 089 打家劫舍 题目 一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定…...
![](https://www.ngui.cc/images/no-images.jpg)
等保测评基础知识(六)
《计算机病毒防治管理办法》51号令 第十四条 从事计算机设备或者媒体生产、销售、出租、维修行业的单位和个人,应当对计算机设备或者媒体进行计算机病毒检测、清除工作,并备有检测、清除的记录。 第十九条 计算机信息系统的使用单位有下列行为之一的,由公安机关处以警告…...
![](https://static.oschina.net/uploads/img/202408/16230019_cGVi.jpeg)
作业帮 TiDB 7.5.x 使用经验
作者: 是我的海 原文来源: https://tidb.net/blog/5f9784d3 近期在使用 TiDB 时遇到的一些小问题的梳理总结,大部分版本都在6.5.6和7.5.2 1、limit 导致的扫描量过大的优化 研发定时任务每天需要扫描大量数据,到时机器网卡被…...
![](https://i-blog.csdnimg.cn/direct/d37869226e9d491d94af1d56b4de1f65.png)
c语言练习题1
1.输出Helloword /*输出Helloword*/ #include<stdio.h> int main() {printf("Hello word!");return 0; }2.整型变量的定义与使用 /*整型变量的定义与使用*/ #include <stdio.h> int main() {int a;int b;a 10;b 20;int c a b;int d a - b;printf(…...
![](https://i-blog.csdnimg.cn/direct/e3136d0c16644b2084d2b67c5fe6050a.png)
嵌入式开发就业方向有哪些?前景未来可期!
在科技日新月异的今天,嵌入式系统几乎渗透到了我们生活的各个角落。从简单的家用电器到复杂的工业自动化设备,再到我们手中的智能手机,无一不体现出嵌入式技术的魅力。因此,嵌入式领域的就业前景广阔,为众多求职者提供…...
![](https://i-blog.csdnimg.cn/direct/81df37d1872d4e5d90d6f7495cb1b3fd.png)
系列:水果甜度个人手持设备检测-github等开源库和方案
系列:水果甜度个人手持设备检测 -- github等开源库和方案 概述 通常来说,年纪轻轻的我们一般都喜欢走捷径,对于智能设备和算法软件领域来说,GitHub应该算为数不多的的捷径之一。就算因为效果不好/知识产权/方向不同等原因不用,…...
![](https://www.ngui.cc/images/no-images.jpg)
Visual Studio中 生成版本号
Visual Stuodio WPF项目 自动生成版本号 生成递增版本号 软件版本号主要标识了软件的版本,通过其可以了解软件、类库文件的当前版本,使得软件版本控制有所依据。 我们也可以在项目属性上可以看到相关设置的界面,对应的英文名称分别为&#…...
![](https://img-blog.csdnimg.cn/img_convert/bf18a9571a57d4b8e90c28b5cab1756a.webp?x-oss-process=image/format,png#pic_center)
AI入门指南(四):分类问题、回归问题、监督、半监督、无监督学习是什么?
文章目录 一、前言二、分类问题、回归问题是什么?分类问题概念常见算法分类问题的实际应用:银行贷款审批案例 回归问题概念常见算法回归问题实际应用:线性回归模型预测房价 小结 三、监督、半监督、非监督学习是什么?监督学习非监…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux下本地端口转发
在Linux下进行本地端口转发处理,可以进行如下操作: 1.确认NetFilter相关驱动编译到内核,并且CONFIG_IP_NF_TARGET_REDIRECTy; 2.开启转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward; 3.设置转发规…...
![](https://img-blog.csdnimg.cn/img_convert/27238c5f4db2edb48cd40a6b9b3c6a5c.png)
RPC 和 HTTP 理解
网上充斥着各类类似于这样的文章:rpc 比 http 快了多少倍?既然有了 http,为什么还要用 rpc 调用等等。遇到这类文章,说明对 http 和 rpc 是由理解误区的。 这里再次重复强调一遍,通信协议不是 rpc 最重要的部分&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
Visual Studio 2022 v17.11 发布
Visual Studio 2022 版本 17.11 正式发布 (GA),此版本主要是基于用户反馈的各项改进。 “每项增强、每项修复和每项新功能均根据你的反馈而制定。无论你是在构建 Web、桌面、云还是游戏应用程序,Visual Studio 2022 v17.11 都旨在让你的开发体验更流畅、…...
![](https://i-blog.csdnimg.cn/direct/47cf0af00aa54a4da56407cb8f14a380.png)
通讯专题-RS232
1 概述 RS-232是一种点对点通信协议,这意味着每个数据信号沿一根导线传输(差分信号使用两根导线传输一个数据信号),RS-232为全双工方式运行(总线可同时发送和接收数据)。 根据新修订的标准为容性负载为2500…...
![](https://i-blog.csdnimg.cn/direct/7b84d35abb2f4700bcb91d5876136844.png)
桥接模式详解
桥接模式 概念: 将抽象部分和实现部分分离, 使他们都可以独立的变化 概念很抽象, 难以理解, 我们举个例子 例子 设想三种不同品牌的汽车 大车 中车 小车 三种不同类型的引擎 纯电引擎 混动引擎 燃油引擎 如果我们把他们两两组合, 都继承同一个类的话,就会有9个类, 并且如果后…...
![](https://i-blog.csdnimg.cn/direct/22c192584e43482382b3a6065a8accf9.png)
使用一致性哈希解决哈希分片负载均衡的扩展性问题
声明:本文的图全部源于:小林coding 上来咱先说,一致性哈希是应对分布式系统的算法 假设有一个负载均衡问题,也就是大批流量来请求,那怎么分配这些流量? 随机?还是挨个轮询? 这都…...
![](https://i-blog.csdnimg.cn/direct/1e491801c7c34aad928315e8f4fd0565.jpeg)
探索 Resolume Arena 7 - 引领 VJ 音视频创作的卓越软件
Resolume Arena 7 是一款专为 Mac 和 Windows 系统设计的强大 VJ 音视频软件,为创意专业人士和爱好者提供了丰富而出色的功能。 这款软件拥有直观且用户友好的界面,即使对于初学者来说,也能快速上手并开始创作。其强大的媒体管理功能&#x…...
![](https://img-blog.csdnimg.cn/img_convert/6b02179ed58b2fab79fdf965f11751d4.jpeg)
三勾点餐系统|支持多端发布,方便二次开发
版本号1.7更新日志 新增:腾讯地图key设置(更新后请设置key) 新增:支付宝小程序登录和支付 新增:前端点餐时选择门店 新增:前端点餐页面优惠活动显示 新增:H5修改手机号 新增:H…...
![](https://www.ngui.cc/images/no-images.jpg)
深入理解AES加密算法:原理与Python实现
目录 深入理解AES加密算法:原理与Python实现1. AES算法简介2. AES加密解密流程3. Python实现AES加密解密4. 结论 深入理解AES加密算法:原理与Python实现 AES (Advanced Encryption Standard) 是目前最广泛使用的对称加密算法之一。它具有高效、安全和灵…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis中List数据类型常用命令
目录 1. 基本操作 (1)在列表的头部插入一个元素 (2)在列表的尾部插入一个元素 (3)获取列表的长度 (4)获取列表中的元素 2. 读取和修改 (1)获取列表的范围&…...
![](https://www.ngui.cc/images/no-images.jpg)
借助Aapose.Cells 使用 C# 在 Excel 中读取、添加和编辑线程注释
Excel 中的线程注释是协作工作的重要功能。它允许多个用户在共享文档中添加、编辑和查看对话线程。在某些情况下,我们可能需要以编程方式管理这些线程注释。在这篇博文中,我们将学习如何使用 C# 在 Excel 中读取、添加和编辑线程注释。 Aspose.Cells 是…...
![](https://i-blog.csdnimg.cn/direct/5f6946b19eb04cbe91fe9302b52f1979.png)
关于c++ grpc 和 c# grpc 通信的问题 以及 grpc 认证问题
一、c 和 c# 通信 c# 端服务器 如果域名 输入的是 https ,则 c 端需要匹配使用,也就是c 端需要进行安全认证。如果是http 则c 端不需要认证(基于c#的grpc 未 通信成功) 参考如下网址可以写一个简单的 .net grpc服务器 (…...
![](https://img-blog.csdnimg.cn/img_convert/6a4f1aa3f9bab6daec2048f0f8371c30.png)
C++进阶(14)类型转换、IO流
文章目录 一、类型转换C语言隐式类型转换强制类型转换 C类型转换的情况类型转换的函数(4个) 二、IO流1、缓冲区2、提高输入输出效率3、文件操作文件权限写操作 --- ofstream文本方式写入二进制方式写入 读操作 --- ifstream文本方式读取二进制方式读取 其…...
![](https://i-blog.csdnimg.cn/direct/cca47ba17fc7436faff258c34d8e1d99.png)
配置oss cdn加速静态资源访问 阿里云
效果对比 配置cdn下载速度对比 步骤 1: 登录阿里云控制台控制台主页,找到并点击“对象存储 OSS” 创建存储空间(Bucket) 设置权限 步骤 2: 获取外网访问地址 步骤 3 在 CDN 中使用该地址 复制该外网访问地址 打开全站加速 DCDN/域名管理 添…...
![](https://i-blog.csdnimg.cn/direct/17cba61e089f4e3daea7d4bfe4d6923c.png)
实现 前端框架 SPA 路由功能:Hash 模式与 History 模式的手动实现
前言 在前端框架(如 Vue.js、React 等)中,路由管理通常会配置一个 router 对象来定义 URL 路径与组件的映射关系。 路径(path): 这是浏览器 URL 的一部分,比如 /home 或 /about。组件(compone…...
![](https://i-blog.csdnimg.cn/direct/ce38d9cec52a46519261400b17229745.png)
去中心化的新时代:Web3技术的全球影响
随着技术的不断演进,Web3正引领互联网的去中心化新时代。相较于传统的Web1和Web2,Web3通过去中心化、区块链和智能合约等技术,正在重塑网络的运作方式。这一变革不仅提升了网络的安全性和透明度,也对全球经济、社会和文化产生了深…...
![](/images/no-images.jpg)
合肥做公司网站一般多少钱/怎么推广公司网站
虚拟存储需求背景: 虚拟存储是在这个非连续存储内存分配的基础上,可以把一部分内容放在外村里的做法 理想的存储器: 容量更大,速度更快,价格更便宜的非易失性存储器 交换技术: 增加正在运行或者需要运…...
![](https://img2018.cnblogs.com/blog/1222443/201901/1222443-20190119112123130-1744326230.png)
有什么网站做任务换q币吗/游戏推广赚佣金
此教程是博主亲自帮朋友管理服务器所操作的完整步骤,当然此步骤适合所有的linux-centos系统,不管centos怎么变,linux怎么变,它的这些命令可以说是基本不变的;先说一下博主此教程所用的服务器的环境: 操作系…...
![](https://img-blog.csdnimg.cn/0cd42a7f98984e4ca9f9a6353be581e8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQm9vbGFu5Y2a6KeI,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
网站相似度检测 站长/网站优化包括
9月24-25日,由Boolan主办的2021全球产品经理大会在北京金茂万丽饭店盛大召开!本次大会不仅有硅谷产品教父、产品圣经《启示录》作者Marty Cagan发表主题演讲,同时还有来自腾讯、阿里、网易、快手、字节、百度、京东等多个领域的近40位产品专家…...
![](/images/no-images.jpg)
丽水市城市建设投资有限责任公司网站/百度搜索引擎下载免费
我有个习惯,从来不叫教自动化技术的帮人为“学生”,而是叫“同学”。学生的话表示我跟他们不是同一个level的,而同学的话表示咱们都是一个level的。当然,这不是纯粹套近乎,也不是我故意放低姿态,而是&#…...
![](https://static.oschina.net/uploads/user/1124/2248293_100.jpg?t=1416124120000)
南平住房和城乡建设部网站/新品牌推广策划方案
ASP.NET MVC 中 WebGrid 的 6 个重要技巧 https://www.oschina.net/translate/webgrid-in-asp-net-mvc-important-tips 介绍 当一个 Webform 开发者转做 MVC 开发的时候, 他会发现, 许多自己喜欢的东东不见了. 没有代码隐藏模型(behind code), 没有 view state, 没有页面生命周…...
![](https://img-blog.csdnimg.cn/0532741d6fa147bea4d11c965f554e05.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3RvbmVfdGlnZXJMSQ==,size_19,color_FFFFFF,t_70,g_se,x_16)
公司网站备案 问我借身份证 怎么拒绝/seo优化技术培训
1、安装N卡驱动 首先添加源 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update然后检查可以安装的驱动版本号 nvidia-msi选择适合自己的驱动,这里需要注意不同版本的cuda需要的驱动版本号也不一样,参考表链接点这里 Ubuntu 18.04安…...