📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

GeoAI Made Easy: Learn the Python Package Step-by-Step (Beginner Friendly)

Open Geospatial Solutions45:46

Transcription

你好。在本视频中,我将一步一步地向你展示如何使用 Jio Python 包。无论你是 JOAI 的新手,还是已经使用过其他一些 JAI 的 Python 包,呃,你对这些包的复杂性感到沮丧,这个视频将对你非常有帮助。所以,我将一步一步地向你展示如何安装这个包以及如何非常轻松地开始。你可以 um 使用这个 Python 包来 um 轻松地 um 从卫星图像中检测出任何你想要的物体,使用你自己的数据,或者你可以使用预训练的 um 预训练模型,超级简单。所以,这就是 um 它看起来的样子。呃,想象一下你可能有一些卫星图像或航空影像,你有一些像建筑物的足迹,或者它可以是任何物体。所以,这真的不重要。它基本上是你想要检测的任何物体。只要你有数据,有标签,我们就可以轻松做到。所以,呃,这将是输入 um 到我们的模型。你可以看到这只是建筑物的足迹,我们可以用它来检测一些新建的建筑物,或者一些由于例如自然灾害而改变的建筑物,我们可以轻松地应用它来 um 检测新建的建筑物或缺失的建筑物。所以,这就是最终的,例如,输出看起来的样子。所以,我们可以轻松地检测我们自己的建筑物,将 um 技术应用于新的区域。这就是结果的样子。当然,这并不完美。我只训练了几轮,但你可以训练模型更长时间以获得更好的结果。但是,呃,这只是用了几分钟,不到 5 分钟,你就可以为你的数据获得这样的结果。你当然可以运行这个。我们将在这里的视频中展示我将要展示的结果。但正如我所说,你可以改编这个来做任何物体检测。它可以是建筑物,可以是树木,可以是游泳池或太阳能电池板,或者任何类似的东西。我们还将向你展示如何评估模型的性能。呃,非常非常容易上手。所以,呃,为了跟上这个教程,我们需要 um 下载示例。所以,你可以去 open gioai.org 网站。所以,这是我几个月前创建的一个新的 Python 包,我添加了很多功能,还提供了很多教程。呃,你可以去网站,你可以在这里看到很多例子,你可能会被这么多例子压垮。所以,这个视频只是为了让你开始。我将向你展示 um 通用的工作流程,一旦你熟悉了工作流程,你就可以 um 尝试其他教程。所以,我们将要利用的是 um 这里这个训练分割模型。所以,只需点击这个,它就会在网页上打开 notebook。你有两种方式可以运行 um goi 或运行 um python。你可以在云端运行,也可以在本地运行。在云端,我建议使用 um Google Colab,因为它免费。它还有 GPU,所以是 16 GB。所以,如果你没有电脑上的 GPU,你可以在此之前进行测试。但如果你电脑上有 GPU,那么我建议你安装这个包。所以我将向你展示两种方法。呃,最简单的方法是右键单击,然后在新标签页中打开。所以,你在 Google Colab 中打开这个,就这样。你需要注意的一件事是,你需要确保你切换到 GPU 运行时。否则,当你运行模型时,它会非常慢。所以,你需要做的是转到运行时,然后从这里点击更改 um 运行时类型,然后切换到 T4 GPU,然后点击保存。就这样。所以,现在我们 um 可以访问 GPU 运行时了。所以,你所要做的就是转到第一个代码块来安装 GOAI Python 包。呃,你可以按键盘上的 Control + SL 来删除井号,或者你可以来到这里手动删除它。所以,呃,如果有一个井号,这意味着它是注释,它不会被执行。所以,一旦你删除了它,我就可以点击这个运行 um 运行,然后你就可以运行并安装这些包了。所以,这需要几分钟,因为你要安装很多依赖项。还要安装 coola 和 Nvidia GPU。所以,这可能需要几分钟。请耐心等待。呃,一旦安装完成,你就可以运行代码块了。嗯,然后一个接一个地,我稍后将在 Jupiter lab 中向你展示。所以,这是在 Google Colab 中安装包的方法。但如果你有 GPU 并想在本地计算机或一些 um 高性能计算机上尝试,那么你可以安装这个到你正在工作的环境中,你可以点击安装页面上的链接,然后在这里你想展示说明,推荐的方法是使用 cond 或使用 mamba 进行安装,因为 um 包已经预编译好了,所以你不太可能遇到 um 安装问题。但如果你没有,你可以使用 um UV 或 pip 进行安装。所以,对于这个教程,我将向你展示如何使用 cond 来使用 cond 或 anaconda 进行安装。如果你不知道,你可以在 Google 上搜索 miniconda,然后复制并粘贴到浏览器中。然后你应该能够找到 cond 的网站。然后从这里你可以点击链接 um 来安装,例如,这里的快速安装页面,你想找到不同操作系统的说明,Windows、Mac 或 Linux。你只需要 um 复制这个命令行,然后粘贴到你的电脑终端。然后你就可以安装这个包了。所以,这是一种非常标准的安装 um 包的过程,一旦你安装了 Micond,你就可以使用 cond 命令了。如果你在 Windows 上,你可以去开始菜单,然后去 Anaconda 菜单,然后会打开 Anaconda Prompt,因为我在 Linux 上,所以我没有菜单 um 来展示,但如果你使用的是 Mac,它应该差不多。所以,你只需要打开你的终端,然后你可以输入 cond 命令,如果你能看到 cond 的 um 输出,那就意味着你的 cond 已经成功安装了。一旦你有了它,你就可以 cond create um,让我放大一下 um cond,让我先清除输出,好的,所以 cond oops cond create this end,然后你可以给你的 cond 环境起一个名字。我可以说,也许是 goi,然后 python,任何我支持的 python 版本,从 3.10 到 3.13,为了安全起见,我通常建议比最新版本低一个版本,所以现在最新版本是 3.13,我将安装 um 3.12,就这样 um,我已经有一个了,也许我试试另一个,所以也许我可以这样说,不,我可以更改名字,所以也许只是 um AI。好的,如果你没有 um 名称冲突,你可以使用任何你想要的。好的,所以 um,它会问你是否要安装所有包,你只需要 um 点击是,或者你可以直接按回车键。为什么,然后它会安装所有包。这可能需要几分钟,取决于你的网络,因为我已经安装了一些包,它在我的电脑上有缓存,所以它不会重新下载它们。所以,这就是为什么它很快。然后只是 cond activate DI。所以,你将激活这个 cond 环境,一旦你有了它,你就可以使用 cond 来安装 goi 包。所以,你需要做的是,如果你不知道,你可以再次去 um goi 网站,链接在下面的视频描述中。所以,你只需要复制这行 cond install um d,它表示通道。所以,我将从 cond for 通道安装 goi。所以,你只需要 Ctrl C,然后回到这里。Ctrl + V,按回车键,就这样。这需要 um 几分钟,因为它将基本上找出它需要安装的所有依赖项,并确保没有依赖项冲突。一旦安装完成,你就可以启动 Zuplet,然后你就可以 um 开始使用它了。所以,例如,这里现在它还没有 um,它还在运行。所以,为了节省时间,我将使用我 um 以前的环境。所以,cond activate zo。好的。所以,一旦你激活了 cond 环境,你就可以输入 jupyter lab。好的,然后直接按回车键。你可以在浏览器中打开 jupyter lab。然后你就可以开始编码了。你可以开始导入 um ze,诸如此类。所以,这是本地安装包的简单过程。正如我所说,如果你没有 GPU, um 更好的简单方法是使用 Google Colab。所以,这个我在这里展示,我们已经完成了安装。没有错误或其他任何东西。所以,这很棒。我将清除选定的输出。一旦你 um 清除了输出,然后我就可以开始点击这个导入。如果你没有收到任何错误消息,那么这是一个好兆头。所以,然后你可以一步一步地进行。只需逐个运行代码块,你就会很快得到结果。但是,嗯,总的来说,Google Colab 的 um 性能有点 um 慢。与你本地计算机上的同一 GPU 相比,它会有点慢,因为它是在共享资源,但它是免费的。所以,如果它至少是备用的,如果你没有 um GPU 资源。好的。所以,嗯,在那之后,我将基本上 um 从我使用本地 zupita lab 开始,因为它会快得多。好的,我已经加载了我的本地 zupita lab 的 notebook。接下来我将一步一步地向你展示如何使用 goi 包进行深度学习。所以,嗯,一旦你在左侧打开,这里有一个导航栏。所以,你可以看到目录。这是一个 um 包含多个部分的文档。所以,你可以 um 导航到不同的部分。所以,你需要做的第一步是导入包。假设你已经在本地计算机上安装了它,或者你已经使用 um Google 安装了它。所以,只需 um 按 Control Enter。它将执行这个。或者你可以按 Shift Enter。它将执行然后转到下一个代码块。或者你可以按 Alt Enter。然后它将执行然后生成一个新的代码块。所以,如果你经常使用 Jupiter notebook 环境,这三个键盘快捷键你可能需要熟悉。一旦你导入了库,下一步就是 um 下载一些示例数据。我的建议是运行这个 notebook 示例,使用我提供的示例数据,因为我已经测试过了。它确保它能正常工作,一旦你弄清楚了工作流程,你就可以将其定制为你自己的数据。这很简单。所以,我们有 um 三个数据集。我有一个栅格数据集,基本上是 um 用于训练的卫星图像,我还有一个矢量数据 um,基本上是建筑物多边形。我还有另一个关于栅格的数据集,就是这样。你有三个数据集,一个用于训练,一个用于 um 标签,然后一个用于测试。一旦你有了它,你就可以运行这个代码块。它将指向托管在 um hugging face 上的示例文件。然后你可以使用 goi download file 函数一次性下载所有三个文件。我已经提前下载过了,所以它很快。但对你来说,可能需要 um 几秒钟来下载文件,这取决于你的网速。一旦你下载了文件,我们就可以 um 打印出一些示例数据信息。所以,我可以使用 get raster info 函数来获取所有栅格。所以,正如你从这里看到的,这是一个三波段 RGB 图像,实际上是来自 USDA 的图像。国家农业影像计划 um,我认为是 60 厘米分辨率。所以,你可以从这里看到 6 um,所以你也可以从这里的分辨率看到 6,这意味着它是 60 厘米 um 60 厘米分辨率,非常高,你还可以看到边界框,平均值、最大值、平均值、标准差等等。所以,如果你有时只想获取图像的基本信息,你可以用桌面 GIS 打开它,或者你可以使用 GI 来获取栅格信息函数来快速获取元数据信息 um,你不必这样做,你可以直接去 JI,但我只是向你展示一些实用函数,如果你想查看一些元数据 um,这可能会有帮助,所以 get raster info um,你也可以使用 view vector interactive,这个允许你将矢量数据叠加在栅格之上。所以,运行这个,应该很快。好的,现在我们有了这个 um 数据集,你可以放大它,它应该能够加载栅格文件。它 um,它没有加载。让我看看。有趣。呃,再次,或者我认为现在 raster URL 可能我之前将其更改为 um raster path。好的,它出现了。所以,基本上背景可以是你的本地栅格,也可以是指向可通过 HTTP URL 访问的云优化数据。所以,这就是我们拥有的输入数据。它是 um 60 厘米区域图像,以及我从我们的地图下载的建筑物多边形。它都是免费开放访问的。所以,这是我们拥有的两个数据集。然后我们需要做的是实际创建训练数据,你也可以构建栅格图像。所以,这个基本上 um,我认为我的 noble 有点问题。不过没关系,你可以运行它,或者它只是用于 um 可视化。一旦你有了数据,我们就可以创建训练 um 图像块。所以,对于深度学习,我们不直接将整个卫星图像馈送给模型,因为有时图像可能很大。所以,你基本上想将图像分成更小的块,然后将一批块馈送给模型,一次一个,直到你完成所有块,因为你不想一次性馈送千兆字节的数据。你的 GPU 将无法处理。所以,这就是为什么我们需要指定输出文件夹。然后调用这个函数 export geotive tiles。然后,输入将是 um,我们将输出的卫星图像,以及类内数据,这意味着它可以是栅格或矢量。所以,它非常灵活,取决于输入数据。所以,如果只是一个栅格掩码,你也可以指向 zeot,那也没问题。还有瓦片大小,就像图像瓦片,你想要图像有多大。所以,这是 512 x 512,还有条纹。条纹基本上意味着重叠,对吧?所以,它会从左向右移动。所以,512,然后你移动 256 像素。这意味着它基本上是 50% 的重叠。所以,嗯,我们需要重叠,有重叠,否则当你进行检测时,边缘会 um 产生伪影。所以,你有重叠,然后当你检测特征时,你可以合并它们。所以,你会 um 效果更好。最后一个是关于 um 半径。对于建筑物,我们不需要 um 缓冲或半径。但如果你试图检测线性特征,例如,道路或墙壁或类似的东西。如果你的矢量数据只是一条线,那么你需要设置一个半径,否则它将只有一像素。所以,有时像素线可能会断开,看起来不太好。但正如我所说,这取决于你的用例。对于这个,对于建筑物,我们真的不需要。所以,这就是为什么我们将这个设置为零。正如你所看到的,它实际上会将图像细分成不同的图像块。所以,这里你可以看到总共有 36 个图像块。所以,基本上是从左到右,从上到下,你有 50% 的重叠,移动窗口。所以,总共有 36 个,因为,基本上,它所做的是图像宽度除以大小,图像高度除以大小。所以,你基本上计算有多少个,它还会显示例如 um,好的,这是尺寸,例如 um,除以 52,你得到差不多多少行多少列,对吧?36 x 36 um,总共 36 个。所以,你可以制作水平方向的六个瓦片,然后垂直方向的六个瓦片。所以,总共有 36 个,如果你愿意,你可以在左侧打开。所以,建筑物。所以,这基本上是图像保存的地方。所以,你有图像目录,这些都是生成的图像瓦片。你会看到相应的标签。所以,在底层,矢量多边形建筑物多边形已被转换为栅格,基本上是矢量到栅格,然后匹配栅格和 um 卫星图像,然后你基本上会细分它们。所以,你有一个一对一的关系,每个卫星图像像素都有一个掩码,一个二进制掩码,一个为 1,一个为 0。所以,你不需要担心这一点。一切都是自动化的。所以,这非常 um 直接。所以,就是这样。所以,基本上是指定你的输入数据,然后创建图像块,然后我们就可以开始训练模型了。所以,这是你如果观看其他教程有时会遇到的事情,它可能变得相当复杂,因为有很多技术术语,但我已经简化了这个包,使其非常容易 um 使用和理解。所以,基本上你需要做的是弄清楚 um 一些输入数据,然后你可以指定一些你想要使用的模型。嗯,如果你想了解更多,你可以查看这个 um 链接,它会带你去分割 pytor 分割模型。所以,这里有很多模型 um 可用,还有预训练的权重。所以,这样我们就不用从头开始训练了,因为它已经在很多流行的数据集上训练过了,它有很多模型架构,还有预训练的权重。如果你是新手,比如你不太清楚确切的 um 架构是什么。所以,你可以把架构想象成从输入到输出。所以,中间有很多步骤,架构就是 um 检测 um um 设计整个过程中的所有步骤,还有一个叫做编码器。所以,编码器本质上是从输入开始,它会将你的输入变成某种数字 um 数值,因为模型,计算机,模型真的不理解 um 0 和 1,它只理解 0 和 1,然后,所以每个深度学习模型最终都会将 um,无论是图像、视频、文本,还是任何东西,都变成数字 0 和 1。所以,编码器基本上会 um,你可以看到它变成数字并提取核心特征 um 从数据中。所以,我们将 um 抽象数据。所以,你可以认为编码器将提供输入。架构中的一个关键步骤是从输入到输出,我们将 um,但输出你将有一个解码器,基本上意味着模型通过数据后,它将生成一些数字。所以,你将把数字变成某种澄清。例如,它是建筑物,将有一个 0 和 1。所以,你不需要理解,你不需要担心所有技术术语。别担心,你可以想,好吧,我有一些数据,我想做深度学习,甚至模型。所以,模型可以是某些预训练模型,或者你可以从头开始训练模型,模型可以是,有不同的选项,就像你可以使用 sex,你可以使用 gemini,你可以使用 um um grow,有很多模型。所以,如果你的任务是找到一些答案,你并不真正关心哪个模型,当然,有一些差异,性能可能不同,但你可以试试这个。工作流程应该差不多。所以,我们要做的是尝试 um 两个不同的分割模型。一个是 unit,另一个是 SE former。函数非常简单直接。所以,去 train segmentation models。就是这样,你不需要担心如何自己构建模型架构。你可以更多地关注数据。所以,图像是我们之前已经 um 生成的图像块。所以,这基本上是图像文件夹,我们有建筑物,对吧?然后图像目录是我们拥有所有图像块以及相应标签的地方。所以,你所要做的就是指定这个输入,然后你还可以指定你想要保存 unit 模型的位置。嗯,还有其他三个关键参数是架构。正如我所提到的,这里有不同类型的图像检测架构。你可以简单地使用 unit,或者你可以尝试不同的 um 架构。所以,只需替换名称,然后对于编码器,它是那个 um 用于将你的 um 图像转换为数字,然后提取 um 特征 um 从图像中。所以,对于编码器,这里也有不同的标题选项,如果你想看到更多选项,欢迎你去标题分割网站,然后从这里点击可用的编码器,看看这里有一些选项可用,你可以阅读以了解更多信息,还有一个表格显示了所有编码器以及预训练的权重,例如 ImageNet 是一个非常流行的,这意味着编码器已经在该数据集上进行了训练。它们不一定是地理空间数据。它可以只是照片或其他东西。但是 um,它已经在模型上进行了训练。所以,你学习了一些 um 图像的模式,例如。然后我们可以使用这个 um 作为预训练权重。然后你可以微调模型,使用我们的地理空间数据。所以,这就是使用预训练权重的全部意义,因为它将收敛得更快。好的。所以,嗯,除此之外,你还可以指定通道数,对吧?所以,你有一个图像 um,现在我们使用的是 RGB,但你可以用你的输入数据替换为卫星图像,例如,任何东西,甚至是高光谱,对吧?取决于你的数据有多少个光谱,你想改变这个通道数为你想要的数字,对吧?你可以有 RGB,或者你可以有四波段,带近红外波段或其他东西。所以,你改变这个。所以,不仅仅是 RGB,它可以是三,可以是五或十,取决于输入数据,以及类的数量,是你 um 要检测的类的数量。我们只有建筑物,然后没有建筑物。所以,嗯,背景和前景。所以,类将是两个。但如果你有更多类,那么你可以 um 将类的数量更改为你想要 um 检测的任何类的数量。批次大小基本上是我们之前已经设置的 512 x 512。所以,批次大小是 um,一次你想将多少图像馈送给模型。所以,这取决于 GPU 大小。如果你有一个更大的 GPU,你可以容纳更多,使批次大小更大。你可以容纳更多图像或一次,但它会有点慢。所以,你可以尝试四、六、八,对吧?你可以尝试任何数字。所以,取决于 GPU。所以,八,你可以试试。以及 epoch 的数量,让我运行这个,因为它需要几分钟。所以,epoch 的数量是因为你有 36 个图像块,对吧?所以,每次,想想这里,批次大小是 8,36 除以 8 大约是 4.5。所以,这意味着需要五个批次来完成一个 epoch,一个 epoch 意味着你遍历了所有图像,所有输入数据中的所有图像块。所以,正如我所说,我们有 36 个。所以,这意味着它将是 4.5 次,将完成,这被称为一个 epoch。epoch 的数量意味着你想要遍历它们多少次,对吧?20 个 epoch 意味着你将运行 20 次,20 次,嗯,通常越多越好,但你不需要太多,因为有时,比如 10 到 20 个 epoch 后,模型已经收敛了,你已经获得了很高的准确率,然后你不需要训练太多 epoch,但总的来说,作为经验法则,你至少需要 10、20 或 50 个,但你可以评估性能指标,我稍后会向你展示,如果你已经获得了很高的准确率,那么你不需要训练太多。学习率,学习率基本上是,当模型正在训练时,你需要调整所有参数。所以,参数就是学习率。你想学得更快吗?有时你可能会学得太快,或者你想学得非常慢,但可能需要永远才能完成。所以,这通常设置为 0.01 或 0.01 或类似的东西。你可以使用默认设置。你真的不需要担心。以及 V 阀分割,这意味着验证分割。所以,0.2 意味着我们将 80% 用于训练,20% 用于验证。所以,这是一种规范,通常我们这样做,因为,如果我们没有验证,你的模型将过拟合,这意味着当你将其应用于真实数据时,它可能不会表现得很好。所以,你总是需要留一些数据用于验证,这就是全部。最后一个 vos 等于 2 是你是否想打印出一些输出。所以,这就是模型 um 的样子。我将经历整个过程。我将向你展示。好的,我将使用 CUDA 来训练模型,然后总共有多少张图像,28 张 um 用于训练,然后 um 8 张用于验证,然后大小也一样,因为我有两个 GPU,所以我们将使用两个 GPU 进行训练,我们将使用 unit 架构,race 34,就是这样,这个模型有 2400 万个参数,然后将开始进入每个 epoch,对吧?所以,epoch 1,我们总共有 20 个,所以批次大小 1 到 4,对吧?所以,我们将向你展示,正如我之前提到的,所以我们将至少有,我认为是五个 epoch,所以 1 到 5,还将向你展示训练损失和验证损失。所以,这是你想要关注的。所以,整体 um 趋势是你希望看到 IOU 应该增加,损失应该减少,IOU 和骰子分数,基本上 F1 分数应该增加。如果你看这里的数字,它看起来相当不错,对吧?所以,在 28 个 epoch 后,我们已经有了 91%,基本上 91% 的 IOU。所以,这非常高。验证分数 um,骰子分数,基本上 F1 是 0.95,甚至更高。所以,这是一个好迹象,意味着模型表现相当好。当然,你可以尝试不同的模型。其他一切都保持不变,除了现在我们正在使用 um,um,um,sack former,以及 renate 1 152,这意味着 um,这是一个不同的模型。所以,模型架构不同,这个模型有 5900 万个参数,这意味着它是一个更大的模型。它需要一点点 um,因为它更大,所以会慢一点。所以,如果你没有更大的 GPU,有时这个会很慢。所以,通常你想先尝试较小的模型,然后如果你有 GPU 来运行它,可以慢慢换成较大的模型。所以,与 unit 模型类似,这个模型也表现得相当好,对吧?只需要两到三个 epoch,准确率 um 就从 50% 增加到 um 74%。一开始得到 50% 的原因是 um 预训练权重。所以,因为我们使用了 ImageNet 预训练权重,否则它需要更长的时间来收敛,因为你没有预训练权重。它将是随机的。所以,我们将找出 um 哪个权重 um 适合 um 模型,就是这样。所以,正如你所看到的,我只需要几秒钟就可以训练模型,一旦模型训练完成,你就会找到输出。所以,你可以看到我们有两个目录 um,unit models 和 sec for models。所以,里面你会找到几个文件。Base model 基本上是准确率最高的那个,基本上是最高的 IOU,以及最终模型是最后一个。所以,正如你从这里看到的,有时最后一个模型不一定是基础模型,因为当它调整参数时,它是随机的。所以,有时结果可能会变差。所以,通常你想要使用基础模型,还有训练历史,我们可以用它来绘制 um,进行验证。所以我这里有一个代码块,你可以去底部的这个,你可以先看看。所以,我们可以运行这个,我将向你展示,对吧?这是损失,这是 IOU。所以,总的来说,你希望看到 IOU 和 F1 分数都在增加。所以,这正是我们期望的。如果值在下降或波动,意味着你的模型实际上表现不佳,那么你可能需要尝试其他东西。看看你的数据,看看是否有任何数据质量 um 问题。好的。所以,这就是如何训练模型和 um 性能。正如我所提到的,只有几个步骤,指定输入数据,创建图像块,然后训练模型,然后评估,对吧?所以,四个步骤,最后一个步骤是实际运行推理。所以,运行推理意味着我们将我们的训练模型应用于新的卫星图像。所以,我们将 um 运行这个。所以,我们将结果保存在这里。所以,只需运行这个代码块,然后调用这个函数 semantic segmentation。然后你可以提供输入。好的。所以,这是我将要测试的图像,这是输出的位置,以及模型路径,我们使用的是基础模型,正如我所提到的。你也可以尝试最终模型,如果你愿意,但使用基础模型将给你最好的结果。最后,这是你想做的。嗯,因为如果你的模型是在 unit 上训练的,你也想使用 unit um 架构进行分割。编码器我们也使用了 rest4。所以,基本上所有参数都应该与你用来训练模型的参数相同。现在我可以运行这个,然后看看。它只需要 1 秒钟,它将基本上将你的图像细分成小块,然后运行推理,之后,你将合并所有结果,这是一个单一的栅格。所以,它将为你节省大量时间。你不需要担心如何将它们全部放在一起,或者如何像其他包那样切割成块。有很多步骤,但对我们来说,这只是一个步骤,一个函数,然后我们就完成了。嗯,一旦你完成了,你就可以可视化它。所以,对于这个图像,它实际上只是一个二进制图像。所以,如果你想看到它 um,你可以让我在这里运行它。我可以只说 view goi dot view roster。好的,然后你只需要提供图像。所以,嗯,我们使用的图像,我们在这里看到 um,它将是这个掩码路径。好的。所以,这是我们生成输出的图像,然后,对于底图,你可以提供 um 测试 um 栅格路径。糟糕。所以,现在,让我看看这里,后端。所以,我的 notebook 有点问题。所以我将使用,也许是 volume,这样你就可以显示地图,如果你不使用 colab,它应该没问题。所以,看看。所以,现在我们有了这个。所以,我们有了 um 检测结果。它还不错。我们只训练了几轮。所以,你可以看到结果。所以,这是二进制图像,黑白。如果你愿意,你可以将黑色变成零。所以,我们需要做的是基本上 um shift tab 这里,然后指定 no data 为零,我相信。所以,no data 等于零。让我们再试一次。好的。所以,没有太大改善。所以,现在我们有了 um 使用这个图像检测到的建筑物。所以,白色代表建筑物检测 um 结果。你可以打开和关闭它。就像我说的,它并不完美,只是一个演示,只是一个例子,因为我只训练了 20 个 epoch,而且我只使用了一个小的 um 卫星图像。实际上,通常你需要训练多个图像。所以,它涵盖了各种 um 用例或不同的形状,不同的几何形状,建筑物,否则你只会擅长建筑物,这种类似的结构。但至少,我们只花了很短的时间,我们只得到了建筑物,就这样。所以,这是一个二进制掩码,但有时你可能想看看概率,这在深度学习中很常见,因为 um,你想调整开关,这样你就可以看到模型对检测有多自信。如果是这种情况,如果你想要这个,你可以指定一个叫做 probability path 的参数。所以,这个是可选的。不是必需的。如果你不指定它,它只会输出一个单一的栅格。所以,正如你所看到的,我们可以 um 输出 um 概率,然后我们可以做同样的事情。我们可以可视化它。所以,类似地,因为我有一些 IP lift 的问题,我将使用 volume,如果我运行它,然后,所以现在这个你应该看到 um,一种渐变。所以,这不仅仅是二进制的。所以,你可以看到从白色到 um 淡白色的过渡。所以,它不是完全白色的,尤其是在一些位置。所以,你可以清楚地看到,如果模型不是超级自信,你将 um 得到较低的概率,这就是 um,你没有看到 um 超级明亮,因为它概率低。所以,这是可选的输出,有时如果你想看看模型有多自信,你可以指定它来 um 获取概率,然后你可以自己进行调整,而不是 um 立即导出二进制数据。好的,最后,如果你想指定一个阈值,就像我说的,这张图像会给你一个从 0 到 1 的概率图,但如果你也想设置一个,例如,任何大于 0.3 或 0.5 的,你想将其设置为建筑物,那么你可以指定这个概率阈值。所以,对我来说,我只是说三,但你可以调整它。这样它就不会使用模型,比如 um um,所以,um,最大概率,因为有时你可能会错过很多建筑物。如果是这种情况,那么你可以将这个阈值更改为一个小得多的值,这样你就可以检测到更多的建筑物,但你可能会得到很多假阳性数据。所以,这就是关于推理。所以,从训练模型到运行推理,但我们得到的结果基本上只是一个栅格图像。所以,如果你正在做物体检测或分割,最后你可能想要矢量化输出,矢量化,因为你可能想计算有多少建筑物,你想计算有多少游泳池,有多少太阳能电池板,对吧?所以,栅格本身并没有给你单个物体。所以,你可以做的是调用 um,将其转换为矢量。所以,有一个函数叫做 oonalize。这是一个可以帮助你 um 将建筑物矩形化的函数,这样它看起来更好。所以,输入将只是栅格掩码。基本上是我们的 um 深度学习模型输出,你可以将其转换为 um 矢量,以及 um epsilon,基本上是 um,平滑度,你希望你的建筑物多边形有多平滑。数字越大,越平滑,数字越小,有时如果你不想要任何平滑,那么你将 um epsilon 设置为零,那么它就不会平滑结果。所以,对我们来说,它将基本上计算有多少图像区域,然后将其转换为建筑物。所以,总共有 1289 个建筑物,就是这样。它将从栅格转换为矢量。然后你还可以调用这个函数 add geometry properties。这意味着你想 um 计算矢量数据的一些几何属性。这样你就可以看到这些建筑物有多大。所以,让我快速运行这个。完成了。然后最后一步是我们可以可视化 um,栅格和矢量在一起。再次,我将使用 volume,因为 iPad 存在问题。所以,这里你应该能够看到栅格。所以,这是掩码。嗯,白色是我们检测到的。它并不完美。就像我说的,我们只训练了一个图像,形状,D 看起来确实很不一样,因为在训练数据中,我们没有真正的大型建筑物。所以,它在这里表现不是很好。嗯,这就是我们期望的。可以改进。你可以纳入更多训练数据。所以,一旦你有了这个二进制掩码,然后我们也可以叠加矢量数据 um,或者只是可视化矢量数据。所以,看看,这就是我们拥有的。我们还创建了 um,价格图。蓝色代表 um 小型建筑物,黄色代表大型建筑物。所以,你可以看到,对吧?所以,一旦你将建筑物矩形化,它看起来相当不错。当然,你会有一些 um 小小的建筑物。就像我说的,你可以做一些后处理。嗯,你可以移除一些小的物体。如果你已经知道这些建筑物有多大,比如常见的尺寸,那么你可以移除其中一些。但是 um,这看起来相当不错。嗯,就像我们只花了很短的时间来训练和运行。而且,对于一些较大的建筑物,这些实际上并没有出现在我们的训练数据中,但模型仍然能够实际检测到这些建筑物,如果你有鼠标,你可以看到所有属性,对吧?你可以看到 um 大小,长度,周长边界框,还有方向,偏心率等等。所以,这些是使用 geometric properties 函数计算的一些几何属性。这相当 um 直接且易于 um 使用。好的。所以,正如我所提到的,如果你需要清理,对吧?所以,这里有一些小的,它们不是真正的建筑物,你可能想清理一下。所以,你可以设置,例如,大小大于 50 平方米,因为你有很多假阳性,那么你可以运行这个,它将得到更干净的结果。所以,我们可以再次可视化 um,结果。嗯,这样我们就只得到相对较大的建筑物,但你也可能错过一些建筑物。就像我说的,训练模型更多 epoch,然后应用 um um um 数据到你的 um 数据,看看 um 它的表现如何。所以,这是过滤后的结果。嗯,最后一步是创建一个分割图来比较结果。嗯,看这里,我有一个底图,后端 jackable。所以,让我看看,对吧?它可能不起作用。嗯,我的 notebook 有点问题。是的。总之,它不起作用。所以我不能真的给你看。也许我可以重启 um 内核,然后我给你看这个 um,这个 speedy map。好的,我已经重启了 notebook。所以,现在它起作用了。你可以看到我有了这个分割图。你可以比较 um,提取的建筑物足迹和 um 卫星图像。它相当不错。嗯,但我们没有花很多时间。所以,你可以看到建筑物足迹有多干净。嗯,有一些繁忙的建筑物,就像正常的,你需要训练 um 模型 um,多几个 epoch,那么它应该会好得多,而且你还可以看到所有形状的几何形状,以及所有 um 大小,方向,一切都已计算。所以,输出 gojson 包含所有地理信息 um,对于每个建筑物。所以,它很容易使用,这就是全部。嗯,就像我说的,如果你想将其定制为你自己的数据,你所要做的基本上就是在这里。所以,如果你有来自 um 互联网的数据,你可以指定这个,然后下载数据。如果你没有,那么你只需要替换这三个 um 变量。所以,栅格路径指向你本地计算机上的数据。嗯,矢量 um 路径。所以,这个可以是矢量,也可以是栅格。基本上是 um 掩码或标签,以及你想测试的数据。就是这样。嗯,然后其他一切都保持不变。但它可以用来检测建筑物、树木或任何东西,只要你想做一些图像分割。你有一个二进制类。这就是工作流程,对吧?所以,再次,让我从这里重新开始,然后我可以向你展示 um 步骤,对吧?所以,导入库,然后 um,下载一些示例数据或使用你自己的数据,然后它将是训练模型。所以,只需要一个步骤,或者你需要创建训练数据和图像,然后训练模型,运行推理。可选地,你可以有一个概率底图,然后你可以做一些后处理,然后可视化结果。所以,希望 um,这是一个更容易的工作流程。你可以开始。所以,如果你是新手,或者你有任何问题,遇到任何问题,请随时在下方留下评论。我一定会回答每一个问题,每一个评论,你有的。我希望 um,这能帮助你开始。我还有很多教程 um,向你展示更多 um 用例。我认为已经有 40 或 50 个教程了。如果你想了解更多,也欢迎你查看我的 YouTube 频道。所以,这里我还有一个研讨会,大约 2 小时,涵盖了许多常见用例,或者你也可以去 um YouTube 频道。所以,我有一个一个的教程,向你展示如何 um 使用它。如果你是 Python 新手,想学习如何使用 Python,那么我建议你查看我的书,链接也在下面的视频描述中,向你展示如何开始使用 Python 和开源包。它在 um Amazon 上有售,也有 PDF 版本,可在链接上找到。所以,再次,查看视频描述中的链接,并留下任何评论。如果你有任何问题,或者你想要任何功能或任何视频教程,我将尽力 um 为你录制视频。好的,就是这样。非常感谢。下次再见。