You need to enable JavaScript to run this app. Colab内存不足无法打开3GB大GeoTIFF文件运行崩溃求解决方案
优惠活动
大模型
产品
解决方案
定价
更多

Colab内存不足无法打开3GB大GeoTIFF文件运行崩溃求解决方案

3GB GeoTIFF在Colab读取时内存不足的解决方法

核心问题原因:当前代码直接将整幅栅格的单通道全量读入numpy数组,3GB的未压缩数组直接加载会占满Colab免费版的可用RAM,触发程序崩溃。以下是可落地的解决方法:

  • 方法1:分块读取计算统计值,避免全量加载
    利用rasterio的窗口读取能力,逐块遍历栅格计算均值,不需要把整个数组加载进内存,内存占用仅和单块大小挂钩,完全不会爆内存。
    示例代码:
import numpy as np
import rasterio
from rasterio.plot import show
import os
import matplotlib.pyplot as plt
import gc
%matplotlib inline

fp = "/content/drive/MyDrive/LINEasia/test2.tif"
sum_total = 0
count_total = 0

with rasterio.open(fp) as raster:
    # 按rasterio默认的块大小遍历
    for ij, window in raster.block_windows(1):
        # 只读取当前窗口内的nir波段数据
        nir_block = raster.read(1, window=window)
        sum_total += nir_block.sum()
        count_total += nir_block.size
        # 及时释放块内存
        del nir_block
        gc.collect()
    # 计算全图均值
    nir_mean = sum_total / count_total
    print(nir_mean)
    print(type(raster))
  • 方法2:降采样后读取用于可视化
    可视化不需要用到全分辨率的栅格,你可以指定输出尺寸降采样后读取,仅需要几MB到几十MB的内存即可完成可视化:
with rasterio.open(fp) as raster:
    # 降采样到宽度1000像素,高度按比例计算
    out_shape = (int(raster.height / (raster.width / 1000)), 1000)
    # 降采样读取nir波段,使用双线性重采样保证显示效果
    nir_downsampled = raster.read(1, out_shape=out_shape, resampling=rasterio.enums.Resampling.bilinear)
    show(nir_downsampled, cmap='terrain')
  • 方法3:可选的运行时优化
    你可以切换Colab的高RAM运行时:点击菜单栏「代码执行程序」-「更改运行时类型」,在弹出的窗口中勾选「高RAM」(免费用户配额足够时可使用,内存可提升到25GB左右),运行代码前可先重启运行时释放之前占用的内存。

另外你原代码里os.path.join(data_dir, "/content/drive/MyDrive/LINEasia/test2.tif")的写法存在问题,第二个参数为绝对路径时前面的data_dir参数会被直接忽略,可以删掉冗余的data_dir变量。

内容的提问来源于stack exchange,提问作者supun nayake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 15:06:02