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

用PointNet++训练自己的数据集(语义分割模型semseg)

(1)训练部件分割(partseg)模型和检测自己点云并将结果保存txt,请看博主上两篇文章
(2)本文背景是将pipe点云上的缺陷和本体检测出来,即1种语义场景(pipe),2种类别(body和quexian)。请记住这两个数字。

一、标注数据集:

step1:数据集预处理

参考:Windows11和Ubuntu用PointNet++训练自己的数据集(部件分割模型)的第一部分即“一、标注数据集”部分即可。得到分类好的n行4列的txt文件。如果是部件分割(partseg)就结束了,但这里是语义分割(semseg)标注很麻烦,还没完成!我这里操作完后得到了m个txt文件,即原本有m个pipe的点云txt文本。

step1结果:
在这里插入图片描述
在这里插入图片描述

step2:学习语义分割数据集的格式

参考:S3DIS场景点云数据集,仔细阅读
这里用Stanford3dDataset_v1.2_Aligned_Version模式。格式是x y z r g b格式 即n行6列

step3:制作语义分割txt格式数据集(可以问deepseek,见step3末尾)

思路:用matlab依次遍历step1中每个txt点云文件,在进行操作:将标签为0的点,去掉0并将后三位替换为某个rgb值,再将标签为1的点后三位替换为另外某个rgb值。(因为我只有两个类别,所以我就只有0和1。)。

注意:最后要符合语义分割数据集的格式,即每个场景(即step1得到的每个txt文件)单独一个文件夹名字叫做pipe_i(i从1到m),文件夹下存着step1结果中第m个点云(n行6列)pipe_i.txt还有一个Annotations文件夹。Annotations文件夹下有2个txt文件(本文的2种类别),分别是body_i.txt和quexian_i.txt,即两种类别的n行6列的文本文件。逻辑是:body_i.txt + quexian_i.txt=pipe_i.txt

step3结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

deepseek实现step3

我的某个文件夹里有42个txt文件,名字分别是1.txt~42.txt.每个txt文件有n行4列,中间用空格隔开,即每个文件有n个空间点 前三列是xyz后一列是标签,这42个文件里的每个点只有两个标签即0和1可能是浮点型。你也知道上面这种格式是做pointnet++部件分割的,现在我要改成语义分割,需要把标签变成rgb。所以现在要你遍历每个txt文件(可以用for数字遍历,因为名字有规律),把每个文件里的0标签的点换为rgb为[0 0 1],1标签是换为[1 0 0]即n行6列xyzrgb 每列用空格隔开。但是要求每个txt要单独建立一个文件夹叫做pipe_i,i是和i.txt的i相对应。pipe_i文件夹下有个pipe_i.txt放着i.txt的变换好的文件,pipe_i文件夹下的Annotations文件夹下有单独的按照标签的txt,之前为0标签的点标签变换rgb后就放到命名为body_i.txt,之前为1标签的点标签变换rgb后就放到命名为quexian_i.txt。即完全符合语义分割的数据格式。matlab实现
在这里插入图片描述
Matlab代码如下:运行时间会很长!!其中的rgb的值都是0~1可以自己改。

%%
%设置pointnet++语义分割数据集
% 设置输入路径和输出路径
input_path = 'D:\YinParker\Desktop\管道数据集4\biaozhu';  % 输入文件路径
output_root = 'D:\YinParker\Desktop\管道数据集4\semseg';  % 输出根目录% 创建输出根目录(如果不存在)
if ~exist(output_root, 'dir')mkdir(output_root);
end% 遍历1.txt到42.txt
for i = 1:42% 输入文件名input_filename = fullfile(input_path, sprintf('%d.txt', i));% 检查文件是否存在if ~exist(input_filename, 'file')fprintf('文件不存在: %s\n', input_filename);continue;end% 读取数据data = load(input_filename);xyz = data(:, 1:3);labels = data(:, 4);% 创建对应的输出目录结构pipe_dir = fullfile(output_root, sprintf('pipe_%d', i));annotations_dir = fullfile(pipe_dir, 'Annotations');if ~exist(pipe_dir, 'dir')mkdir(pipe_dir);endif ~exist(annotations_dir, 'dir')mkdir(annotations_dir);end% 准备转换后的数据(xyzrgb)rgb_data = zeros(size(data, 1), 6);rgb_data(:, 1:3) = xyz;% 分离不同标签的点(带RGB)body_points = [];quexian_points = [];for j = 1:size(data, 1)if abs(labels(j)) < 0.5  % 处理浮点型标签% 标签0 -> 蓝色 [0 0 1]rgb_data(j, 4:6) = [0 0 1];body_points = [body_points; xyz(j, :), 0, 0, 1];  % 添加RGBelse% 标签1 -> 红色 [1 0 0]rgb_data(j, 4:6) = [1 0 0];quexian_points = [quexian_points; xyz(j, :), 1, 0, 0];  % 添加RGBendend% 保存转换后的主文件(pipe_i.txt)output_main_file = fullfile(pipe_dir, sprintf('pipe_%d.txt', i));dlmwrite(output_main_file, rgb_data, 'delimiter', ' ');% 保存带RGB的标签文件(Annotations/body_i.txt和quexian_i.txt)if ~isempty(body_points)body_file = fullfile(annotations_dir, sprintf('body_%d.txt', i));dlmwrite(body_file, body_points, 'delimiter', ' ');endif ~isempty(quexian_points)quexian_file = fullfile(annotations_dir, sprintf('quexian_%d.txt', i));dlmwrite(quexian_file, quexian_points, 'delimiter', ' ');endfprintf('已处理文件: %s\n', input_filename);
endfprintf('所有文件处理完成!结果保存在: %s\n', output_root);

step4:txt格式数据集变为npy

语义分割需要.npy格式的数据集,这也是麻烦的地方。
在PointNet++工程文件夹下的data文件夹建立s3dis文件夹,再在s3dis里面建立Stanford3dDataset_v1.2_Aligned_Version文件夹,里面有Area_1和Area_2两个文件夹。后面会在程序参数设置中让Area_2里的数据为测试集。再从step3中的pipe_i文件夹里找点文件复制进去,当做训练集(Area1)和测试集(Area2)。结构图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再在data文件夹下建立stanford_indoor3d用于存储npy格式的文件。
在这里插入图片描述

再修改anno_paths.txt和class_names.txt ,anno_paths.txt写所有Area的Annotations的路径,class_names.txt写类别,和之前的step3中得到的Annotions里的相对应。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用collect_indoor3d_data.py和indoor3d_util.py将txt样本变为npy样本 。参考:【PointNet++】基于自建数据训练PointNet++场景语义分割网络
在这里插入图片描述
(1)collect_indoor3d_data.py修改:

1/1 加一行代码:out_filename=os.path.basename(os.path.join(output_folder, out_filename)),不然生成的npy文件路径不对,还得自己复制到data/stanford_indoor3d文件夹下
在这里插入图片描述

(2)indoor3d_util.py修改: 改方框的两处地方:
在这里插入图片描述

运行collect_indoor3d_data.py在 data/stanford_indoor3d文件夹下生成npy文件,且前面有Area_1和2的前缀。
在这里插入图片描述

二、修改训练和测试代码以及S3DISDataLoader.py

参考:
【PointNet++】基于自建数据训练PointNet++场景语义分割网络
【PointNet++】PointNet++复现(PyTorch版本)

1、训练代码修改:train_semseg.py

(1)类别:
在这里插入图片描述
(2)改参数:其中最后一个参数指定哪个Area是测试集,剩下参数都根据实际调整
在这里插入图片描述
(3)类别数:
在这里插入图片描述
(4)(5)numpy版本问题
在这里插入图片描述

2、测试代码修改:test_semseg.py

测试的参数batch_size、num_point等参数根据自己实际调整

(1)类别:
在这里插入图片描述
(2)类别数量:
在这里插入图片描述

3、S3DISDataLoader.py修改

参考文献中老哥少改了一个
(1)数字:
在这里插入图片描述
(2)数字:得+1
在这里插入图片描述
(3)数字:
在这里插入图片描述

训练以及训练中报错:

运行train_semseg.py即可开启训练。

报错1:

Traceback (most recent call last):File "D:\YinParker\Desktop\AllFileFolder\A_Other_projects_in_laboratory\pointNet2\Pointnet_Pointnet2_pytorch-master\train_semseg.py", line 302, in <module>main(args)File "D:\YinParker\Desktop\AllFileFolder\A_Other_projects_in_laboratory\pointNet2\Pointnet_Pointnet2_pytorch-master\train_semseg.py", line 186, in mainfor i, (points, target) in tqdm(enumerate(trainDataLoader), total=len(trainDataLoader), smoothing=0.9):File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\site-packages\torch\utils\data\dataloader.py", line 438, in __iter__return self._get_iterator()File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\site-packages\torch\utils\data\dataloader.py", line 386, in _get_iteratorreturn _MultiProcessingDataLoaderIter(self)File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\site-packages\torch\utils\data\dataloader.py", line 1039, in __init__w.start()File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\multiprocessing\process.py", line 121, in startself._popen = self._Popen(self)File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\multiprocessing\context.py", line 224, in _Popenreturn _default_context.get_context().Process._Popen(process_obj)File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\multiprocessing\context.py", line 336, in _Popenreturn Popen(process_obj)File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__reduction.dump(process_obj, to_child)File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\multiprocessing\reduction.py", line 60, in dumpForkingPickler(file, protocol).dump(obj)
AttributeError: Can't pickle local object 'main.<locals>.<lambda>'
Traceback (most recent call last):File "<string>", line 1, in <module>File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\multiprocessing\spawn.py", line 116, in spawn_mainexitcode = _main(fd, parent_sentinel)File "E:\ProfessionSoftware2\anaconda\anaconda3202303\envs\yolov8Python310\lib\multiprocessing\spawn.py", line 126, in _mainself = reduction.pickle.load(from_parent)
EOFError: Ran out of input

在这里插入图片描述
在这里插入图片描述
原因:gpt说是train_semseg.py有两处lambda表达式在window不行

法一:改lanbda表达式(推荐法二)

(1)改:参考行号
在这里插入图片描述

在这里插入图片描述
(2)得import functools
在这里插入图片描述
法二:
如何使用PointNet++复现自己的点云语义分割数据集?
如果你是windows系统,那你应该还要注意num_workers设置为0,否则会报错的。 仅需改两处
在这里插入图片描述

报错2:

也不是报错,就是训练代码运行后一直卡住,
在这里插入图片描述
原因:S3DISDataLoader.py里有个一直循环,点数没有达到1024个
在这里插入图片描述
因为1*1平方米内自己点太少了,达不到训练时设置的参数--npoint(超参数)在这里插入图片描述
解决方法:train_semseg.py里把参数1调大也行 或者 将上图S3DISDataLoader.py里把1024调小
在这里插入图片描述

如果对你有帮助,可以点赞、收藏支持一波

相关文章:

用PointNet++训练自己的数据集(语义分割模型semseg)

&#xff08;1&#xff09;训练部件分割&#xff08;partseg&#xff09;模型和检测自己点云并将结果保存txt&#xff0c;请看博主上两篇文章 &#xff08;2&#xff09;本文背景是将pipe点云上的缺陷和本体检测出来&#xff0c;即1种语义场景&#xff08;pipe&#xff09;&…...

Java反射机制深度解析:方法、实战与底层机制

大家好&#xff0c;我是钢板兽&#xff01; 反射作为Java的特性&#xff0c;它不仅是Spring三大特性Ioc、DI、AOP的基础&#xff0c;而且MyBatis、Jackson序列化、rpc远程调用接口都用到了反射机制。 本文将带你系统性地掌握 Java 反射的使用&#xff0c;通过 JSON 反序列化的…...

查看wifi密码

netsh wlan show profile nameCMCC-Rkt_Wi-Fi5 keyclear CMCC-Rkt_Wi-Fi5是无线网名称...

RPC 发展史

RPC 发展史 RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用&#xff0c;随着微服务的兴起&#xff0c;每个服务都拥有自己的数据库&#xff0c;负责各自的模块&#xff0c;例如 keystone&#xff08;认证服务&#xff09;负责用户信息、权限认证的内容&…...

蓝桥杯基础算法-递归

代码简洁&#xff0c;但涉及到的运算&#xff0c;会随着递归层数的增加成指数级增长 路分析&#xff1a;第20行20列位于45度这条线上 这条线上的数字是1 5 13 25 41...两数之差:4 8 12 16 --->每一个都是在前面的基础上4&#xff0c;可以用递归或者循环 public class dem…...

山东大学离散数学第七章习题解析

参考教材&#xff1a;离散数学教程&#xff0c;徐秋亮 / 栾俊峰 / 卢雷 / 王慧 / 赵合计 编著&#xff0c;山东大学计算机科学与技术学院 注&#xff1a;该解析为个人所写&#xff0c;涵盖了 2022-2023-2 学期赵合计老师所布置的所有课本习题&#xff1b;由于学识、认识及经验…...

关于使用python 安装 flask-openapi3扩展,使用docker 环境的完整复盘

在某个时刻 需要运行python 3 flask-openapi3扩展 当前因为服务器为国产化服务器&#xff0c;操作系统版本为麒麟&#xff0c;python 版本为3.7 因为要安装flask-openapi3 包 又因为flask 版本小于2.0 from flask_openapi3 import OpenAPI,Info,Tag目前安装的是 …...

MybatisPlus的一些基本操作

mybatisplus分页 Testvoid testpage(){IPage<User> page new Page<>(1,3); ​userDao.selectPage(page,null);System.out.println("当前页码值&#xff1a;"page.getCurrent());System.out.println("每页显示数&#xff1a;"page.getSize());S…...

debian12安装mysql5.7.42(deb)

安装 官方文档 https://dev.mysql.com/doc/mysql-installation-excerpt/8.0/en/linux-installation-debian.html 上面是8.0的教程&#xff0c;服了我说怎么那么奇怪 5.7官方教程 https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/linux-installation-debian.html …...

基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南

基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南 一、背景与价值 在流计算生产环境中&#xff0c;Flink on YARN的部署方式凭借其资源管理优势被广泛采用。Savepoint作为Flink任务状态的一致性快照&#xff0c;承载着故障恢复、版本升级、作业暂停等重要场景…...

Winform入门进阶企业级开发示例:http接口数据清洗转换、断线续传、mqtt数据传输实例详解(附代码资源下载)

场景 C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享: C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享_winform 强化学习-CSDN博客 如何将以上相关理论知识学以致用。下面针对Winform…...

PHP开发效率提升利器:通义灵码在VSCode中的应用与技巧

引言 在 PHP 开发领域&#xff0c;提高编码效率和质量是每位开发者追求的目标。通义灵码&#xff0c;作为一款由阿里云技术团队开发的智能编码助手&#xff0c;能够通过其强大的 AI 能力&#xff0c;为 PHP 开发者提供包括代码自动补全、智能注释、代码优化等多方面的支持。本…...

WHAT - React 错误边界处理 - react-error-boundary

目录 安装使用方式常用 Props使用场景 react-error-boundary 是一个由 Brian Vaughn 开发的 React 组件库&#xff0c;用于更方便地处理组件树中的错误&#xff08;错误边界&#xff09;。 阅读参考&#xff1a; React Error Boundariesreact-error-boundary 安装 npm inst…...

数据模型评估的四维黄金法则:从技术验证到业务价值证明

引言&#xff1a;为什么你的数据模型总被质疑&#xff1f; 在滴滴出行的一次核心业务会议上&#xff0c;数据团队与业务部门爆发了激烈争论&#xff1a;新上线的订单预测模型是否真的优于旧系统&#xff1f;数据工程师认为查询速度提升40%已是巨大成功&#xff0c;业务方却质疑…...

vscode ctrl+鼠标左键不能跳转

笔者使用的vscode版本是1.85.2&#xff08;一周前从1.99降下来的&#xff0c;因为版本过高连不上服务器&#xff09;。 使用python时突然发现代码看起来有些别扭&#xff0c;细看之下发现是import xxx语句中的包的颜色从之前的青色变成了现在的白色。再用ctrl左键点击包名试图…...

换动态IP对电脑有什么影响:全面解析与实用指南

在当今数字化时代&#xff0c;IP地址作为网络世界的"身份证"&#xff0c;对我们的网络体验有着重要影响。许多用户出于某些原因&#xff0c;会考虑更换动态IP地址。那么&#xff0c;这种操作究竟会对我们的电脑产生哪些影响&#xff1f;是利大于弊还是弊大于利&#…...

Go语言从零构建SQL数据库(6) - sql解析器(番外)- *号的处理

番外&#xff1a;处理SQL通配符查询 在SQL中&#xff0c;SELECT * FROM table是最基础的查询之一&#xff0c;星号&#xff08;*&#xff09;是一个通配符&#xff0c;表示"选择所有列"。虽然通配符查询看起来简单&#xff0c;但在解析器中需要特殊处理。下面详细介…...

大模型推理引擎选型与应用场景分析:SGLang、Ollama、VLLM 和 LLaMA.cpp

在当下的大模型技术生态中&#xff0c;SGLang、Ollama、VLLM 和 LLaMA.cpp 各具特色&#xff0c;适用于不同的应用场景和用户需求。以下是它们的核心特点及适用场景的深度剖析&#xff1a; 1. SGLang&#xff1a;高性能企业级推理引擎 核心优势&#xff1a; 零开销批处理&…...

参考平面跨分割情况下的信号回流

前言&#xff1a;弄清楚信号的回流路径&#xff0c;是学习EMC和高速的第一步&#xff01; 如果我们不管信号的回流路径&#xff0c;会造成什么后果&#xff1f;1、信号完整性问题&#xff0c;信号的回流路径不连续会导致信号反射、衰减和失真。2、信号衰减和噪声干扰&#xff…...

Vue2下载二进制文件

后端&#xff1a; controller: GetMapping(value "/get-import-template")public void problemTemplate(HttpServletRequest request, HttpServletResponse response) throws Exception {iUserService.problemTemplate(request, response);} service: void probl…...

AnimateCC基础教学:随机抽取花名册,不能重复

一.核心代码: this.btnStartObj.addEventListener("click", switchBtn); this.btnOkObj.addEventListener("click", oKBtn); createjs.Ticker.addEventListener("tick", updateRandom); var _this this; var nameArr ["张三", &quo…...

windows+cmake+vscode+NDK远程调试安卓端C++项目

windowscmakevscodeNDK远程调试安卓端C项目 windowscmakevscodeNDK远程调试安卓端C项目 windowscmakevscodeNDK远程调试安卓端C项目 使用C开发安卓端算法库时&#xff0c;需要使用NDK进行交叉编译。使用NDK编译代码时&#xff0c;需要编写.mk脚本进行代码的编译和链接&#xf…...

大语言模型(LLM)全解析:从原理到实战应用

在人工智能飞速发展的今天&#xff0c;大语言模型(LLM)已成为改变我们工作生活的重要技术。无论是ChatGPT的对话能力&#xff0c;还是DeepSeek的文本处理&#xff0c;背后都离不开LLM的强大支持。本文将用通俗易懂的语言&#xff0c;带您全面了解LLM的工作原理、训练方法、优化…...

Qt 入门 4 之标准对话框

Qt 入门 4 之标准对话框 Qt提供了一些常用的对话框类型,它们全部继承自QDialog类,并增加了自己的特色功能,比如获取颜色、显示特定信息等。下面简单讲解这些对话框,可以在帮助索引中查看Standard Dialogs关键字,也可以直接索引相关类的类名。 本文将以一个新的项目为主介绍不…...

PyTorch DataLoader 参数详解

在使用 PyTorch 的 DataLoader 时&#xff0c;有许多参数可以调整&#xff0c;这些参数能够帮助我们平衡数据加载效率、内存使用和训练过程的稳定性。下面介绍几个常用参数&#xff0c;并讲解它们的作用&#xff1a; dataset 含义&#xff1a; 数据集对象&#xff0c;必须实现 …...

PowerBI 计算时间用EDATE

我在原表基础上&#xff0c;根据日期字段&#xff0c;计算去年时间 CONCATENATEX(DISTINCT(SELECTCOLUMNS(VALUES(日期表),"去年", FORMAT(DATEADD([日期], -1, YEAR), "yyyyMM"))), [YearMonth],",") 我发现很奇怪的现象&#xff0c;假如某个日…...

GRBL运动控制算法(四)加减速运算

前言 在数控系统和运动控制领域&#xff0c;GRBL 作为一款高效、轻量化的开源固件&#xff0c;因其卓越的性能和简洁的架构被广泛应用于各类嵌入式运动控制场景。GRBL加减速算法的实现尤为关键——它直接决定了运动控制的精度、效率与设备稳定性。 本文深入解析加减速运算的核…...

CSS 学习提升网站或者项目

有几个不错的开源项目可以帮助你练习和提升CSS技能&#xff1a; CSS-Tricks CSS-Tricks 提供了很多关于CSS的技巧和教程&#xff0c;可以通过实践它们来提高CSS技能。你可以在CSS-Tricks上找到很多有趣的项目和代码示例。 Frontend Mentor Frontend Mentor 是一个非常适合练习…...

PolarDB 读已提交事务隔离级别 select ... for update, where条件未用索引,查不到数据的时候不会锁表

由于没有给字段设置唯一性&#xff0c;所以改为通过查询语句加锁确保唯一性&#xff0c;但是发现select count(*) 为0时&#xff0c;不会加锁&#xff0c;所以在insert方法后面需要加锁二次查询确保唯一性。 在 PolarDB 的读已提交事务隔离级别下&#xff0c;SELECT ... FOR UP…...

Python基础——Matplotlib库

绘图基础 Matplotlib 库太大&#xff0c;画图通常仅仅使用其中的核心模块 matplotlib.pyplot&#xff0c;并给其一个别名 plt&#xff0c;即 import matplotlib.pyplot as plt。为了使图形在展示时能很好的嵌入到 Jupyter 的 Out[ ] 中&#xff0c;需要使用%matplotlib inline…...

群晖Hyper Backup备份的东西怎么还原?

一、背景 前面写了一篇文章关于群晖NAS中最简单的备份方案&#xff0c;Hyper Backup 方案 群晖NAS最简单的备份教程&#xff08;只备份需要的目录到不同的硬盘&#xff09;&#xff0c;留了个尾&#xff0c;即怎么还原备份的东西&#xff0c;这里完结一下。 二、还原方案 2.…...

记录IBM服务器检测到备份GPT损坏警告排查解决过程

服务器设备&#xff1a;IBM x3550 M4 Server IMM默认IP地址&#xff1a;192.168.70.125 用户名&#xff1a;USERID 密码&#xff1a;PASSW0RD&#xff08;注意是零0&#xff09; 操作系统&#xff1a;Windows Hyper-V Server 2016 IMM Web System Status Warning&#xff1…...

蓝桥杯嵌入式十五届模拟二(串口DMA,占空比的另一种测量方式)

一.LED 先配置LED的八个引脚为GPIO_OutPut&#xff0c;锁存器PD2也是&#xff0c;然后都设置为起始高电平&#xff0c;生成代码时还要去解决引脚冲突问题 二.按键 按键配置&#xff0c;由原理图按键所对引脚要GPIO_Input 生成代码&#xff0c;在文件夹中添加code文件夹&#…...

22 | 如何继续提升 Go 开发技术?

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课&#xff1b;欢迎加入 云原生 AI 实战营 星球&#xff0c;12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力&#xff08;聚焦于 Go、云原生、AI Infra&#xff09;。 「Go 项目开发极速…...

一文详解OpenCV环境搭建:Windows使用CLion配置OpenCV开发环境

在计算机视觉和图像处理领域&#xff0c;OpenCV 是一个不可或缺的工具。其为开发者提供了一系列广泛的算法和实用工具&#xff0c;支持多种编程语言&#xff0c;并且可以在多个平台上运行。对于希望在其项目中集成先进视觉功能的开发者来说&#xff0c;掌握如何配置和使用OpenC…...

云原生周刊:深入探索 kube-scheduler-simulator

开源项目推荐 mcp-server-kubernetes mcp-server-kubernetes 是一个实现了模型上下文协议&#xff08;MCP&#xff09;的服务器&#xff0c;旨在通过自然语言与 K8s 集群进行交互。它支持连接到 K8s 集群&#xff0c;列出所有 Pod、服务、部署和节点&#xff0c;创建、描述、…...

总结一下常见的EasyExcel面试题

说一下你了解的POI和EasyExcel POI&#xff08;Poor Obfuscation Implementation&#xff09;&#xff1a;它是 Apache 软件基金会的一个开源项目&#xff0c;为 Java 程序提供了读写 Microsoft Office 格式文件的功能&#xff0c;支持如 Excel、Word、PowerPoint 等多种文件格…...

【Java设计模式】第2章 UML急速入门

2-1 本章导航 UML类图与时序图入门 UML定义 统一建模语言(Unified Modeling Language):第三代非专利建模语言。特点:开放方法,支持可视化构建面向对象系统,涵盖模型、流程、代码等。UML分类(2.2版本) 结构式图形:系统静态建模(类图、对象图、包图)。行为式图形:事…...

Excel处理控件Spire.XLS系列教程:C# 设置 Excel 中的数字格式

在 Excel 工作表中&#xff0c;原始数据通常显示为缺乏直观性的普通数字。通过设置数字格式&#xff0c;可以将这些数字转换成更容易理解的形式。例如&#xff0c;将销售额数据设置为货币格式&#xff0c;即添加货币符号和千位分隔符&#xff0c;可使所代表的金额一目了然。将市…...

脚本启动 Java 程序

如果你想在后台启动一个 Java 程序&#xff0c;并在终端窗口中显示一个自定义的名字&#xff0c;可以通过编写一个简单的脚本来实现。以下是一个基于 Linux/macOS 的解决方案&#xff0c;使用 Bash 脚本启动 Java 程序&#xff0c;并在终端窗口中显示自定义标题。 示例脚本 创建…...

UniappX动态引入在线字体图标,不兼容css时可用。

优缺点 优点&#xff1a;不需要占用本地存储&#xff0c;可直接在线同步库图标&#xff0c;不用再手动引入ttf文件&#xff0c;不用手动添加键值对对应表。 缺点&#xff1a;受网速影响&#xff0c;字体库cdn路径可能会更改&#xff0c;ios端首次加载&#xff0c;可能会无图标…...

机器学习 | 强化学习基本原理 | MDP | TD | PG | TRPO

文章目录 📚什么是强化学习🐇监督学习 vs 强化学习🐇马尔科夫决策过程(MDP)📚基本算法(value-based & policy-based)🐇时序差分算法(TD)🐇SARSA和Q-learning🐇策略梯度算法(PG)🐇REINFORCE和Actor-Critic🐇信任区域策略优化算法(TRPO)学习视频…...

k8s之Service类型详解

1.ClusterIP 类型 2.NodePort 类型 3.LoadBalancer 类型 4.ExternalName 类型 类型为 ExternalName 的 Service 将 Service 映射到 DNS 名称&#xff0c;而不是典型的选择算符&#xff0c; 例如 my-service 或者 cassandra。你可以使用 spec.externalName 参数指定这些服务…...

AI平台如何实现推理?数算岛是一个开源的AI平台(主要用于管理和调度分布式AI训练和推理任务。)

数算岛是一个开源的AI平台&#xff0c;主要用于管理和调度分布式AI训练和推理任务。它基于Kubernetes构建&#xff0c;支持多种深度学习框架&#xff08;如TensorFlow、PyTorch等&#xff09;。以下是数算岛实现模型推理的核心原理、架构及具体实现步骤&#xff1a; 一、数算岛…...

linux开发环境

1.虚拟机环境搭建 在 Ubuntu 系统中&#xff0c;打开&#xff08;如图中显示的窗口 &#xff09;常见快捷键有&#xff1a; Ctrl Alt T&#xff1a;这是最常用的打开终端的快捷键组合 &#xff0c;按下后会快速弹出一个新的终端窗口。 在 VMware 虚拟机环境中&#xff0c;若…...

OSPF复习

OSPF OSPF---开放最短路径优先协议 动态路由判定依据&#xff1a;选路&#xff0c;收敛速度&#xff0c;占用资源 OSPFV2和RIPV2的相同点&#xff1a; 1.都是无类别的路由协议&#xff1b; 2.都是通过组播来传播信息的&#xff1b;&#xff08;RIP&#xff1a;224.0.0.9&am…...

AWS S3深度剖析:云存储的瑞士军刀

1. 引言 在当今数据驱动的世界中,高效、可靠、安全的数据存储解决方案至关重要。Amazon Simple Storage Service (S3)作为AWS生态系统中的核心服务之一,为企业和开发者提供了一个强大而灵活的对象存储平台。本文将全面解析S3的核心特性,帮助读者深入理解如何充分利用这一&q…...

pyTorch中 tensorboard的使用

目录 01.导包、 transforms数据转化、torchvision数据集、创建dataloaders、展示图片的封装函数 02定义模型 03定义损失函数与优化器 1.tensorboard的安装 2.tensorboard的使用 2.1添加图片 2.2 添加模型结构图 2.3 添加损失的变化 #pyTorch中的tensorboard 与 tens…...

Android audio(2)-audioservice

AudioService是Android的系统服务&#xff08;systemservice&#xff09;&#xff0c;由SystemServer负责启动。提供Android APK 所需的非数据通路&#xff08;playback/capture&#xff09;相关的audio 功能实现&#xff0c;是binder通信中的server端&#xff0c;与之对应的 C…...

星城幻境:科技与千年文脉的交响诗-长沙

故事背景 故事发生在中国湖南长沙&#xff0c;通过六个充满未来感的城市景观&#xff0c;展现人工智能修复古建筑、生态摩天楼、全息水幕许愿等场景&#xff0c;描绘科技赋能下历史文脉与未来城市的共生图景。 故事内容 从岳麓书院清晨的智能修复到湘江夜空的数字烟花&#xff…...