TB级倾斜模型加载速度慢?一个动作让模型加载速度提升百倍

一、上百GB倾斜摄影模型合并根节点前后加载效果对比
话不多说,先上对比图:


二、加载速度差异那么大的原因?
软件对于模型的加载实则是以tile瓦片为单位进行扫描显示的,所以tile文件夹过多,会导致每次加载时对于瓦片的扫描时间也过长,内存占用也较多,导致加载和浏览时明显卡顿。
合并根节点后只有一个根节点,所以可以秒出!


1.为什么倾斜摄影模型分块会产生这么多根节点呢?
在CC(Smart3D)中,对于体积量大的数据建模时都需要对模型进行分块。分块大小的依据是内存,内存大分块大,瓦片数量少;反之,内存小的分块就小,瓦片数就会很多。受内存限制(一般128G,256G是比较大的了),航测范围大,模型体积变大,瓦片数量变多。

2.CC能否合并根节点呢?
CC软件本身是可以直接对根节点进行合并操作的,但是其操作较为繁琐。
存在的问题:瓦片数量过多,软件容易崩溃。

3.如何解决这个问题
A.直接从本源入手,建模时提升计算机内存减少分块瓦片数。受限于内存
B.CC直接合并根节点。崩溃率高
C.已生产好的osgb数据,基于原片重新生产,或者图新地球(LSV)一键解决

三、1分钟处理这个让人头疼的问题
新版本的图新地球4(LocaSpaceViewer,简称LSV)支持对于大模型的根节点进行高速合并:

我们只需要选择原先在图新地球中加载模型时生成的lfp索引即可进行进行根节点合并操作的:

同时,我们可以根据需求对面片数、纹理高宽进行设置,在设置好后点击确定即可进行根节点的光速合并:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用Python实现的西瓜书id3决策树模型的代码: ```python import math import pandas as pd class Node: ''' 决策树节点类 ''' def __init__(self, col=-1, value=None, results=None, tb=None, fb=None): self.col = col # 待检验的判断条件所对应的列索引值 self.value = value # 为了使结果为True,当前列必须匹配的值 self.results = results # 存储叶节点上的结果,是一个字典形式,键为类别,值为次数 self.tb = tb # 左子树 self.fb = fb # 右子树 def load_data(): ''' 加载西瓜数据集,返回特征数据和标签 ''' data = pd.read_csv('watermelon.csv') return data.iloc[:, 1:-1], data.iloc[:, -1] def calc_entropy(labels): ''' 计算数据集的熵 ''' total = len(labels) counts = {} for label in labels: if label not in counts: counts[label] = 0 counts[label] += 1 entropy = 0.0 for key in counts: p = counts[key] / total entropy -= p * math.log2(p) return entropy def split_data(data, labels, col, value): ''' 据给定特征划分数据集 ''' tb_rows, fb_rows = [], [] for i in range(len(data)): row = list(data.iloc[i]) if row[col] == value: tb_rows.append(row + [labels[i]]) else: fb_rows.append(row + [labels[i]]) return pd.DataFrame(tb_rows, columns=data.columns.tolist() + ['label']), pd.DataFrame(fb_rows, columns=data.columns.tolist() + ['label']) def build_tree(data, labels): ''' 构建决策树 ''' if len(labels) == 0: return Node() current_entropy = calc_entropy(labels) best_gain = 0.0 best_criteria = None best_sets = None feature_num = len(data.columns) for col in range(feature_num): column_values = set(data.iloc[:, col]) for value in column_values: tb_data, fb_data = split_data(data, labels, col, value) p = len(tb_data) / len(data) gain = current_entropy - p * calc_entropy(tb_data['label']) - (1 - p) * calc_entropy(fb_data['label']) if gain > best_gain and len(tb_data) > 0 and len(fb_data) > 0: best_gain = gain best_criteria = (col, value) best_sets = (tb_data, fb_data) if best_gain > 0: tb = build_tree(best_sets[0], best_sets[0]['label']) fb = build_tree(best_sets[1], best_sets[1]['label']) return Node(col=best_criteria[0], value=best_criteria[1], tb=tb, fb=fb) else: return Node(results={label: len([label for label in labels if label == '是']), '否': len([label for label in labels if label == '否'])}) def classify(sample, tree): ''' 使用决策树对单个样本进行分类 ''' if tree.results is not None: return tree.results else: v = sample[tree.col] branch = None if v == tree.value: branch = tree.tb else: branch = tree.fb return classify(sample, branch) def predict(data, tree): ''' 对数据集进行分类 ''' return [classify(list(data.iloc[i]), tree) for i in range(len(data))] data, labels = load_data() tree = build_tree(data, labels) print(predict(data, tree)) ``` 这里使用了pandas库来读取数据集,需要将数据集放在与代码文件相同的目录下,并命名为watermelon.csv。函数load_data返回的是特征数据和标签,分别是DataFrame类型和Series类型。函数build_tree实现了id3算法,返回构建好的决策树。函数classify用于对单个样本进行分类,函数predict用于对整个数据集进行分类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值