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

3D Gaussian Splatting代码详解(一):模型训练、数据加载

在这里插入图片描述

1.模型训练

训练流程:train.py中的training函数

在这里插入图片描述
这段代码实现了一个 3D 高斯模型的训练循环,旨在通过逐步优化模型参数,使其能够精确地渲染特定场景。以下是代码的详细解析:

def training(dataset, opt, pipe, testing_iterations, saving_iterations, checkpoint_iterations, checkpoint, debug_from):first_iter = 0# 初始化高斯模型,用于表示场景中的每个点的3D高斯分布gaussians = GaussianModel(dataset.sh_degree)# 初始化场景对象,加载数据集和对应的相机参数scene = Scene(dataset, gaussians)# 为高斯模型参数设置优化器和学习率调度器gaussians.training_setup(opt)# 如果提供了checkpoint,则从checkpoint加载模型参数并恢复训练进度if checkpoint:(model_params, first_iter) = torch.load(checkpoint)gaussians.restore(model_params, opt)# 设置背景颜色,白色或黑色取决于数据集要求bg_color = [1, 1, 1] if dataset.white_background else [0, 0, 0]background = torch.tensor(bg_color, dtype=torch.float32, device="cuda")# 创建CUDA事件用于计时iter_start = torch.cuda.Event(enable_timing=True)iter_end = torch.cuda.Event(enable_timing=True)viewpoint_stack = Noneema_loss_for_log = 0.0# 使用tqdm库创建进度条,追踪训练进度progress_bar = tqdm(range(first_iter, opt.iterations), desc="Training progress")first_iter += 1for iteration in range(first_iter, opt.iterations + 1):# 记录迭代开始时间iter_start.record()# 根据当前迭代次数更新学习率gaussians.update_learning_rate(iteration)# 每1000次迭代,提升球谐函数的次数以改进模型复杂度if iteration % 1000 == 0:gaussians.oneupSHdegree()# 随机选择一个训练用的相机视角if not viewpoint_stack:viewpoint_stack = scene.getTrainCameras().copy()viewpoint_cam = viewpoint_stack.pop(randint(0, len(viewpoint_stack)-1))# 如果达到调试起始点,启用调试模式if (iteration - 1) == debug_from:pipe.debug = True# 根据设置决定是否使用随机背景颜色bg = torch.rand((3), device="cuda") if opt.random_background else background# 渲染当前视角的图像render_pkg = render(viewpoint_cam, gaussians, pipe, bg)image, viewspace_point_tensor, visibility_filter, radii = render_pkg["render"], render_pkg["viewspace_points"], render_pkg["visibility_filter"], render_pkg["radii"]# 计算渲染图像与真实图像之间的损失gt_image = viewpoint_cam.original_image.cuda()Ll1 = l1_loss(image, gt_image)loss = (1.0 - opt.lambda_dssim) * Ll1 + opt.lambda_dssim * (1.0 - ssim(image, gt_image))loss.backward()# 记录迭代结束时间iter_end.record()with torch.no_grad():# 更新进度条和损失显示ema_loss_for_log = 0.4 * loss.item() + 0.6 * ema_loss_for_logif iteration % 10 == 0:progress_bar.set_postfix({"Loss": f"{ema_loss_for_log:.{7}f}"})progress_bar.update(10)if iteration == opt.iterations:progress_bar.close()# 定期记录训练数据并保存模型training_report(tb_writer, iteration, Ll1, loss, l1_loss, iter_start.elapsed_time(iter_end), testing_iterations, scene, render, (pipe, background))if iteration in saving_iterations:print("\n[ITER {}] Saving Gaussians".format(iteration))scene.save(iteration)# 在指定迭代区间内,对3D高斯模型进行增密和修剪if iteration < opt.densify_until_iter:gaussians.max_radii2D[visibility_filter] = torch.max(gaussians.max_radii2D[visibility_filter], radii[visibility_filter])gaussians.add_densification_stats(viewspace_point_tensor, visibility_filter)if iteration > opt.densify_from_iter and iteration % opt.densification_interval == 0:size_threshold = 20 if iteration > opt.opacity_reset_interval else Nonegaussians.densify_and_prune(opt.densify_grad_threshold, 0.005, scene.cameras_extent, size_threshold)if iteration % opt.opacity_reset_interval == 0 or (dataset.white_background and iteration == opt.densify_from_iter):gaussians.reset_opacity()# 执行优化器的一步,并准备下一次迭代if iteration < opt.iterations:gaussians.optimizer.step()gaussians.optimizer.zero_grad(set_to_none=True)# 定期保存checkpointif iteration in checkpoint_iterations:print("\n[ITER {}] Saving Checkpoint".format(iteration))torch.save((gaussians.capture(), iteration), scene.model_path + "/chkpnt" + str(iteration) + ".pth")

函数解析
training(dataset, opt, pipe, testing_iterations, saving_iterations, checkpoint_iterations, checkpoint, debug_from)

该函数的作用是加载数据、设置场景和高斯模型的初始化参数,通过迭代训练模型,调整模型参数,以减小渲染图像与真实图像之间的误差。

  • 参数
    • dataset: 数据集对象,包含图像和相机参数。
    • opt: 配置对象,包含训练过程的超参数,如学习率和迭代次数。
    • pipe: 渲染管道,用于生成渲染图像。
    • testing_iterations: 在这些迭代次数中进行测试。
    • saving_iterations: 在这些迭代次数中保存高斯模型。
    • checkpoint_iterations: 在这些迭代次数中保存 checkpoint。
    • checkpoint: 如果提供了 checkpoint 文件,则从中恢复模型状态。
    • debug_from: 设定调试起始点,达到该迭代后启用调试模式。

整个函数旨在通过高斯模型增密、学习率调整、定期保存 checkpoint 和渲染优化,训练一个能够表示 3D 场景的高斯模型。

2.数据加载

scene/__init__.py中的Scene类的__init__函数
在这里插入图片描述

2.1Class Scene:

这段代码定义了 Scene 类,用于管理和加载 3D 场景的参数、模型和相机信息,并支持不同分辨率的相机数据。Scene 类结合了高斯模型和数据集处理逻辑,尤其适用于从 COLMAP 或 Blender 数据集中加载相机和场景信息,以便进行 3D 表示和训练。

class Scene:"""Scene 类用于管理场景的3D模型,包括相机参数、点云数据和高斯模型的初始化和加载"""def __init__(self, args: ModelParams, gaussians: GaussianModel, load_iteration=None, shuffle=True, resolution_scales=[1.0]):"""初始化场景对象:param args: 包含模型路径和源路径等模型参数:param gaussians: 高斯模型对象,用于场景点的3D表示:param load_iteration: 指定加载模型的迭代次数,如果为-1,则自动寻找最大迭代次数:param shuffle: 是否在训练前打乱相机列表:param resolution_scales: 分辨率比例列表,用于处理不同分辨率的相机"""self.model_path = args.model_path  # 模型文件保存路径self.loaded_iter = None  # 已加载的迭代次数self.gaussians = gaussians  # 高斯模型对象# 检查并加载已有的训练模型if load_iteration:if load_iteration == -1:self.loaded_iter = searchForMaxIteration(os.path.join(self.model_path, "point_cloud"))else:self.loaded_iter = load_iterationprint(f"Loading trained model at iteration {self.loaded_iter}")self.train_cameras = {}  # 用于训练的相机参数self.test_cameras = {}  # 用于测试的相机参数# 根据数据集类型(COLMAP或Blender)加载场景信息if os.path.exists(os.path.join(args.source_path, "sparse")):scene_info = sceneLoadTypeCallbacks["Colmap"](args.source_path, args.images, args.eval)elif os.path.exists(os.path.join(args.source_path, "transforms_train.json")):print("Found transforms_train.json file, assuming Blender data set!")scene_info = sceneLoadTypeCallbacks["Blender"](args.source_path, args.white_background, args.eval)else:assert False, "Could not recognize scene type!"# 如果是初次训练,初始化3D高斯模型;否则,加载已有模型if self.loaded_iter:self.gaussians.load_ply(os.path.join(self.model_path, "point_cloud", "iteration_" + str(self.loaded_iter), "point_cloud.ply"))else:self.gaussians.create_from_pcd(scene_info.point_cloud, self.cameras_extent)# 根据resolution_scales加载不同分辨率的训练和测试位姿for resolution_scale in resolution_scales:print("Loading Training Cameras")self.train_cameras[resolution_scale] = cameraList_from_camInfos(scene_info.train_cameras, resolution_scale, args)print("Loading Test Cameras")self.test_cameras[resolution_scale] = cameraList_from_camInfos(scene_info.test_cameras, resolution_scale, args)def save(self, iteration):"""保存当前迭代下的3D高斯模型点云。:param iteration: 当前的迭代次数。"""point_cloud_path = os.path.join(self.model_path, f"point_cloud/iteration_{iteration}")self.gaussians.save_ply(os.path.join(point_cloud_path, "point_cloud.ply"))def getTrainCameras(self, scale=1.0):"""获取指定分辨率比例的训练相机列表:param scale: 分辨率比例:return: 指定分辨率比例的训练相机列表"""return self.train_cameras[scale]sceneLoadTypeCallbacks = {"Colmap": readColmapSceneInfo,"Blender" : readNerfSyntheticInfo
}

类属性和方法解析

1. __init__(self, args: ModelParams, gaussians: GaussianModel, load_iteration=None, shuffle=True, resolution_scales=[1.0])

构造函数 __init__ 用于初始化 Scene 对象,加载数据集和初始化 3D 高斯模型,并为训练和测试分辨率管理相机参数。

  • 参数

    • args:包含模型路径和源路径等配置参数。
    • gaussians:高斯模型对象,用于管理场景中的 3D 高斯分布。
    • load_iteration:指定加载的迭代次数,若为 -1,自动搜索最后保存的模型。
    • shuffle:是否对相机列表进行随机排序。
    • resolution_scales:用于管理不同分辨率下的相机数据。
  • 主要步骤

    1. 加载已有模型:如果 load_iteration 不为 None,加载指定迭代次数的模型;若 load_iteration == -1,加载最新迭代的模型。
    2. 场景信息加载:通过回调函数 sceneLoadTypeCallbacks,从 COLMAPBlender 数据集中加载场景信息。
    3. 初始化高斯模型:如果没有加载已有的模型,调用 create_from_pcd 方法,使用从数据集中加载的点云初始化高斯模型。
    4. 分辨率管理:根据 resolution_scales 参数加载不同分辨率的训练和测试相机列表,分别存储在 self.train_camerasself.test_cameras 字典中。
2. save(self, iteration)

该方法用于在指定的 iteration 下保存当前 3D 高斯模型的点云数据。

  • 参数

    • iteration:当前的迭代次数。
  • 实现

    • 根据 iteration 创建路径,并调用 self.gaussians.save_ply 保存点云数据。
3. getTrainCameras(self, scale=1.0)

该方法用于获取指定分辨率比例的训练相机列表。

  • 参数

    • scale:分辨率比例(默认为 1.0),用来返回该分辨率对应的训练相机列表。
  • 返回值

    • scale 为键从 self.train_cameras 中获取对应的相机列表。
4. sceneLoadTypeCallbacks

sceneLoadTypeCallbacks 是一个字典,用于匹配和回调不同数据集的加载函数:

  • 如果数据集是 COLMAP 类型,调用 readColmapSceneInfo
  • 如果是 Blender 数据集,调用 readNerfSyntheticInfo
示例流程
  1. 初始化

    • Scene 类根据数据集路径自动检测数据类型,并调用合适的回调函数加载相机和场景信息。
  2. 分辨率和相机管理

    • 支持不同分辨率的训练和测试相机列表。用户可以通过 getTrainCameras(scale) 获取指定分辨率下的训练相机。
  3. 保存

    • 在指定的迭代次数 iteration 下,调用 save() 将 3D 高斯模型点云数据保存为 .ply 文件。
代码优点
  • 模块化和扩展性:支持多种数据集格式,并允许通过回调函数轻松扩展至其他格式。
  • 分辨率管理:灵活加载和管理不同分辨率的相机列表,以便在训练和测试中使用不同精度的相机数据

 

2.2 readColmapSceneInfo 和 readColmapCameras

这段代码提供了两个主要函数 readColmapSceneInfo 和 readColmapCameras,用于读取和处理 COLMAP 生成的相机参数和场景信息,并将其格式化为易于使用的数据结构。这些函数为后续 3D 重建和 NeRF 训练准备相机参数、点云数据及其他场景归一化信息。

def readColmapSceneInfo(path, images, eval, llffhold=8):# 尝试读取COLMAP处理结果中的二进制相机外参和内参文件try:cameras_extrinsic_file = os.path.join(path, "sparse/0", "images.bin")cameras_intrinsic_file = os.path.join(path, "sparse/0", "cameras.bin")cam_extrinsics = read_extrinsics_binary(cameras_extrinsic_file)cam_intrinsics = read_intrinsics_binary(cameras_intrinsic_file)except:# 如果二进制文件读取失败,尝试读取文本格式的相机外参和内参文件cameras_extrinsic_file = os.path.join(path, "sparse/0", "images.txt")cameras_intrinsic_file = os.path.join(path, "sparse/0", "cameras.txt")cam_extrinsics = read_extrinsics_text(cameras_extrinsic_file)cam_intrinsics = read_intrinsics_text(cameras_intrinsic_file)# 定义存放图片的目录,如果未指定则默认为"images"reading_dir = "images" if images is None else images# 读取并处理相机参数,转换为内部使用的格式cam_infos_unsorted = readColmapCameras(cam_extrinsics=cam_extrinsics, cam_intrinsics=cam_intrinsics, images_folder=os.path.join(path, reading_dir))# 根据图片名称对相机信息进行排序,以保证顺序一致性cam_infos = sorted(cam_infos_unsorted.copy(), key=lambda x: x.image_name)# 根据是否为评估模式(eval),将相机分为训练集和测试集# 如果为评估模式,根据llffhold参数(通常用于LLFF数据集)间隔选择测试相机if eval:train_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold != 0]test_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold == 0]else:# 如果不是评估模式,所有相机均为训练相机,测试相机列表为空train_cam_infos = cam_infostest_cam_infos = []# 计算场景归一化参数,这是为了处理不同尺寸和位置的场景,使模型训练更稳定nerf_normalization = getNerfppNorm(train_cam_infos)# 尝试读取点云数据,优先从PLY文件读取,如果不存在,则尝试从BIN或TXT文件转换并保存为PLY格式ply_path = os.path.join(path, "sparse/0/points3D.ply")bin_path = os.path.join(path, "sparse/0/points3D.bin")txt_path = os.path.join(path, "sparse/0/points3D.txt")if not os.path.exists(ply_path):print("Converting point3d.bin to .ply, will happen only the first time you open the scene.")try:xyz, rgb, _ = read_points3D_binary(bin_path)except:xyz, rgb, _ = read_points3D_text(txt_path)storePly(ply_path, xyz, rgb)try:pcd = fetchPly(ply_path)except:pcd = None# 组装场景信息,包括点云、训练用相机、测试用相机、场景归一化参数和点云文件路径scene_info = SceneInfo(point_cloud=pcd,train_cameras=train_cam_infos,test_cameras=test_cam_infos,nerf_normalization=nerf_normalization,ply_path=ply_path)return scene_infodef readColmapCameras(cam_extrinsics, cam_intrinsics, images_folder):cam_infos = []  # 初始化用于存储相机信息的列表# 遍历所有相机的外参for idx, key in enumerate(cam_extrinsics):# 动态显示读取相机信息的进度sys.stdout.write('\r')sys.stdout.write("Reading camera {}/{}".format(idx+1, len(cam_extrinsics)))sys.stdout.flush()# 获取当前相机的外参和内参extr = cam_extrinsics[key]  # 当前相机的外参intr = cam_intrinsics[extr.camera_id]  # 根据外参中的camera_id找到对应的内参height = intr.height  # 相机图片的高度width = intr.width  # 相机图片的宽度uid = intr.id  # 相机的唯一标识符# 将四元数表示的旋转转换为旋转矩阵RR = np.transpose(qvec2rotmat(extr.qvec))# 外参中的平移向量T = np.array(extr.tvec)# 根据相机内参模型计算视场角(FoV)if intr.model == "SIMPLE_PINHOLE":# 如果是简单针孔模型,只有一个焦距参数focal_length_x = intr.params[0]FovY = focal2fov(focal_length_x, height)  # 计算垂直方向的视场角FovX = focal2fov(focal_length_x, width)  # 计算水平方向的视场角elif intr.model == "PINHOLE":# 如果是针孔模型,有两个焦距参数focal_length_x = intr.params[0]focal_length_y = intr.params[1]FovY = focal2fov(focal_length_y, height)  # 使用y方向的焦距计算垂直视场角FovX = focal2fov(focal_length_x, width)  # 使用x方向的焦距计算水平视场角else:# 如果不是以上两种模型,抛出错误assert False, "Colmap camera model not handled: only undistorted datasets (PINHOLE or SIMPLE_PINHOLE cameras) supported!"# 构建图片的完整路径image_path = os.path.join(images_folder, os.path.basename(extr.name))image_name = os.path.basename(image_path).split(".")[0]  # 提取图片名称,不包含扩展名# 使用PIL库打开图片文件image = Image.open(image_path)# 创建并存储相机信息cam_info = CameraInfo(uid=uid, R=R, T=T, FovY=FovY, FovX=FovX, image=image,image_path=image_path, image_name=image_name, width=width, height=height)cam_infos.append(cam_info)# 在读取完所有相机信息后换行sys.stdout.write('\n')# 返回整理好的相机信息列表return cam_infos

函数解析

  1. readColmapSceneInfo(path, images, eval, llffhold=8)

该函数负责读取和解析 COLMAP 数据集的场景信息,包括相机参数、点云和归一化参数等。主要步骤如下:

  • 相机参数文件读取

    • 首先尝试读取二进制格式的相机外参 (images.bin) 和内参 (cameras.bin) 文件,若读取失败则尝试加载文本格式的文件(images.txtcameras.txt)。
    • 外参和内参分别通过 read_extrinsics_binaryread_intrinsics_binary 等函数加载。
  • 相机信息解析

    • 调用 readColmapCameras 函数解析外参和内参文件中的相机数据,并返回相机列表 cam_infos
  • 训练和测试集划分

    • 根据 eval 参数决定是否将数据集划分为训练集和测试集。
    • 如果为评估模式 (eval=True),会根据 llffhold 参数(通常用于 LLFF 数据集)进行间隔划分,得到 train_cam_infostest_cam_infos
  • 场景归一化参数计算

    • 调用 getNerfppNorm 函数,对训练集中的相机位姿进行归一化,确保不同场景的尺度和位置对齐,以便更稳定的训练。
  • 点云文件读取与转换

    • 点云文件优先从 points3D.ply 文件中读取;若不存在则尝试从二进制或文本格式的 points3D 文件中读取,并转换为 .ply 文件存储。
    • 最终通过 fetchPly 函数读取 .ply 格式的点云数据。
  • 返回值

    • SceneInfo 对象返回,其中包含点云数据、训练相机、测试相机、归一化参数和点云文件路径。
  1. readColmapCameras(cam_extrinsics, cam_intrinsics, images_folder)

该函数用于将 cam_extrinsicscam_intrinsics 中的相机数据解析成 CameraInfo 对象的列表,并处理每个相机的旋转、平移、视场角等信息。

  • 主要步骤

    1. 迭代解析相机外参:遍历 cam_extrinsics 字典中的每个相机,获取旋转矩阵 R 和平移向量 T
    2. 视场角计算:根据相机模型(SIMPLE_PINHOLEPINHOLE)计算垂直和水平方向的视场角。
    3. 图像路径与信息:结合图像文件夹路径 images_folder,生成图像路径和图像名称,并打开图像文件。
    4. 创建并存储相机信息:将解析到的相机信息存储在 CameraInfo 对象中,并添加到 cam_infos 列表。
  • 返回值

    • 返回 cam_infos,包含所有解析过的相机信息列表。

代码优点

  • 自动文件读取和兼容性:自动适配二进制和文本格式的文件读取,使得代码更加兼容不同格式的 COLMAP 输出。
  • 训练/测试集划分灵活:支持按一定间隔划分训练和测试集,适合用于评估模式的数据集处理。
  • 相机视场角处理:根据相机模型选择不同的视场角计算方式,适应多种相机模型。
    代码潜在改进
  • 异常处理:在图像加载和文件读取时增加更多异常处理,以应对图像丢失或格式不匹配的情况。
  • 多线程优化:如果相机数量较多,可使用多线程或并行处理以加快相机参数的读取速度。

相关文章:

3D Gaussian Splatting代码详解(一):模型训练、数据加载

1.模型训练 训练流程:train.py中的training函数 这段代码实现了一个 3D 高斯模型的训练循环,旨在通过逐步优化模型参数,使其能够精确地渲染特定场景。以下是代码的详细解析: def training(dataset, opt, pipe, testing_iteratio…...

docker部署RustDesk自建服务器

客户端: Releases rustdesk/rustdesk GitHub 服务端: 项目官方地址:GitHub - rustdesk/rustdesk-server: RustDesk Server Program 1、拉取RustDesk库 docker pull rustdesk/rustdesk-server:latest 阿里云库: docker pu…...

工作实战总结与实现-mybatis-plus更新策略部分字段不更新问题

文章目录 案例场景存在问题解决方案一解决方案二继续延伸 案例场景 很简单的工作场景,需要将数据库某个表的字段设置为null或者空字符串,使用mybatis-plus的update语句,如下: order.setPassCode(null);reservationOrderManger.up…...

MFC扩展库BCGControlBar Pro v36.0新版亮点:黑色主题中的自动反转图标

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v36.0已全新发布了,这个版本在黑暗主题中添加自动图标反转、新增一个全新的S…...

Midjourney Describe API 的对接和使用

Midjourney Describe API 的对接和使用 Midjourney Describe API 的主要功能是通过上传图片,获取对图片的描述。使用该 API,只需要传递图片文件地址,API 会返回图片的详细描述。无需繁琐的参数设置,即可获得高质量的图片描述。 …...

《单片机原理及接口技术》(C51编程)(第三版)------张毅刚主编

1.整体框架:1-22题(17-20为编程题分别源自数中的P98,P162,P177页) 2.简答题部分: 3.计算题...

Qt入门9——绘图

基本概念 虽然Qt已经内置了很多的控件,但是不能保证现有控件就可以应对所有场景. 很多时候我们需要更强的"DIY"能力; Qt 提供了画图相关的API,可以允许我们在窗口上绘制任意的图形形状,来完成更复杂的界面设计。 绘图api核心类: 类说明QPaint…...

FreeRTOS之ARM CR5栈结构操作示意图

FreeRTOS之ARM CR5栈结构操作示意图 1 FreeRTOS源码下载地址2 ARM CR5栈结构操作宏和接口2.1 portSAVE_CONTEXT宏2.1.1 portSAVE_CONTEXT源码2.1.2 portSAVE_CONTEXT宏操作栈结构变化示意图 2.2 portRESTORE_CONTEXT宏2.2.1 portRESTORE_CONTEXT源码2.2.2 portRESTORE_CONTEXT宏…...

Java线程的interrupt中断、wait-notify/all(源码级分析)

实例方法: interrupt()方法是设置结束阻塞(sleep、),并且设置中断标记true isInterrupted()判断当前是否中断 静态方法: Thread.interrupted():调用这个方法的线程中断标记位还原为false 那么好,既然上面的方法作用是清晰的&…...

计网408考点讲解

IPv4...

当linux可执行文件缺少或者不兼容so库时候,如何查看版本以及缺少那些库

解决方法: ldd 命令来验证程序是否加载了正确的库: 如检查linear_elasticity可执行文件缺少的库,用下面命令: ldd linear_elasticity 可以发现下面not found就是缺少的库,还有对应的库的位置已经版本 $ ldd lin…...

文件下载的几种方式

1、使用window.open方法 url: 可以为文件存放的地址 function downloadFile(url) {window.open(url); }2、使用<a>标签进行文件下载 <a href"/多因素登录说明文档.pdf" class"link-text">说明文档</a> 3、使用fetch和Blob对象 这种…...

车联网安全学习之TBOX

Telematics BOX&#xff0c;简称 T-BOX&#xff0c;也称远程信息处理控制单元&#xff08;Telematics Control Unit, TCU&#xff09;&#xff0c;集成GPS、外部通信接口、电子处理单元、微控制器、移动通信单元和存储器等功能模块。 TBOX 提供的功能有网络接入、OTA、远程控制…...

访问http网页强制跳转到了https的解决办法

目录 解决浏览器自动从 HTTP 重定向到 HTTPS 的问题问题原因&#xff1a;HSTS&#xff08;HTTP Strict Transport Security&#xff09;什么是 HSTS&#xff1f;HSTS 的工作原理 如何解决&#xff1f;1. 清除浏览器的 HSTS 信息在 Chrome 中清除 HSTS 信息&#xff1a;在 Firef…...

3D 生成重建016-SA3D从nerf中分割一切

3D 生成重建016-SA3D从nerf中分割一切 文章目录 0 论文工作1 方法介绍2 实验结果 0 论文工作 1 SAM的背景和目标&#xff1a; SAM 是一种强大的二维视觉基础模型&#xff0c;能够在 2D 图像中进行任意物体的分割。传统上&#xff0c;SAM 在二维空间表现出色&#xff0c;但其无…...

阿里云整理(二)

阿里云整理 1. 访问网站2. 专业名词2.1 域名2.2 域名备案2.3 云解析DNS2.4 CDN2.5 WAF 1. 访问网站 用户使用浏览器访问网站大体分为几个过程&#xff1a; 用户在浏览器输入域名URL&#xff0c;例如www.baidu.com。 不过&#xff0c;浏览器并不知道为该域名提供服务的服务器具…...

qt基本部分控件用法(一)

前言: 以前 windows下做工具主要是MFC&#xff0c;趁有点空时间&#xff0c;研究了QT&#xff0c;感觉跟MFC 差不多&#xff0c;VS 比 QT CREATOR 还是强大&#xff0c;不过QT可以跨平台&#xff0c;功能更强大&#xff0c;MFC 只能在win平台下.&#xff1b; 1&#xff1a;环境…...

【Linux】环境ChatGLM-4-9B 模型之 openai API 服务

一、摘要 最近看到 Function Call 比较感兴趣,它的核心是赋予大模型能够调用外部API的能力,能够解决大模型功能扩展性问题,允许模型调用外部数据库或API,提供特定领域的详细信息;解决信息实时性问题,模型可以实时获取最新数据;解决数据局限性问题,大模型训练数据虽多但…...

Too many open files 问题处理

某个简单的 python 服务&#xff0c;运行一段时间就崩溃。查看日志后发现有一个系统错误 OSError: Errno24 Too many open files要理解这个问题&#xff0c;首先要理解什么是文件描述符&#xff0c;可以参考我的另一篇文章(Linux 系统文件描述符&#xff08;File Descriptor&a…...

CentOS 7 环境下常见的操作和配置

目录 1. CentOS 7 中的 vsftpd 配置与使用 安装与启动 vsftpd 配置 vsftpd&#xff08;/etc/vsftpd/vsftpd.conf&#xff09; 常见命令 2. 使用 yum 包管理器 3. 安全性与防火墙配置 开放端口 4. 使用 systemd 管理服务 5. SELinux 配置 查看 SELinux 状态 临时禁用…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...