Fields of The World (FTW) 是一个面向农业田地边界实例分割的基准数据集,旨在推动机器学习模型的发展,满足全球农业监测对高精度、可扩展的田地边界数据的需求。该数据集由@kerner-lab提供,于2024年8月28日发布,主要特征包括:
-
广泛的地理覆盖:跨越欧洲、非洲、亚洲和南美洲的24个国家,覆盖多样化的农业景观,有助于模型泛化至不同农业实践和田地类型。
-
大规模数据集:包含约160万田块边界及7万多个样本,每个样本包含实例和语义分割掩膜,搭配多时间、多光谱的Sentinel-2卫星图像,支持详细的时间和光谱分析。
-
多类别分割:提供实例分割掩膜(识别单个田地)和语义分割掩膜,包括背景、多边形(田地)、边界等类别。
-
光谱和时间丰富性:数据集包含红、绿、蓝和近红外光谱波段,并提供多时间图像,捕捉生长期的不同阶段,图像日期通过USDA作物日历和云量筛选确定。
-
完善的数据集划分:数据集按训练、验证和测试集划分,使用块状随机分割策略避免空间自相关,确保模型评估的准确性。
-
详尽的元数据与文档:提供关于国家、作物类型、季节、收集年份、网格结构等关键信息,帮助用户有效使用数据集。
下载链接:https://source.coop/repositories/kerner-lab/fields-of-the-world/description
数据可以直接Download下载,也可以通过AWS 批量下载。
下载之后的影像是tif格式,但边界是parquet格式。提供一个转为shapefile格式的代码,亲测适用于这个数据。
import pandas as pd
import geopandas as gpd
from shapely import wkbdef read_parquet_with_fallback(parquet_path):try:# 尝试使用 pyarrow 读取 Parquet 文件df = pd.read_parquet(parquet_path, engine="pyarrow")print("成功使用 pyarrow 读取文件。")except Exception as e:print(f"使用 pyarrow 读取失败: {e}")# 如果 pyarrow 读取失败,尝试使用 fastparquettry:df = pd.read_parquet(parquet_path, engine="fastparquet")print("成功使用 fastparquet 读取文件。")except Exception as e:print(f"使用 fastparquet 读取失败: {e}")return Nonereturn dfdef convert_to_shapefile(parquet_path, shapefile_path, input_crs="EPSG:4326", output_crs="EPSG:4326"):# 1. 尝试读取 Parquet 文件df = read_parquet_with_fallback(parquet_path)if df is None:print("无法读取 Parquet 文件。请检查文件是否损坏。")return# 2. 将 Int32 和 Float32 类型列转换为兼容的类型for col in df.select_dtypes(include=["Int32", "Float32"]).columns:df[col] = df[col].astype("float64")# 3. 将所有 datetime 类型列转换为字符串,确保兼容 Shapefile 格式datetime_cols = df.select_dtypes(include=["datetime64[ns]", "datetime64[ms, UTC]", "datetime64"]).columnsfor col in datetime_cols:df[col] = df[col].astype(str)# 检查数据类型,确保没有 datetime 或 Int32/Float32 类型print("转换后数据类型检查:\n", df.dtypes)# 4. 检查 geometry 列并转换为有效的几何对象if 'geometry' in df.columns:# 将字节字符串格式的几何数据转换为 shapely 几何对象df['geometry'] = df['geometry'].apply(wkb.loads)# 将 DataFrame 转换为 GeoDataFrame,并设置输入坐标系gdf = gpd.GeoDataFrame(df, geometry='geometry', crs=input_crs)# 如果输入坐标系和输出坐标系不同,进行投影转换if input_crs != output_crs:gdf = gdf.to_crs(output_crs)else:print("文件缺少几何信息(geometry 列)。请确保数据包含有效的几何列。")return# 5. 保存为 Shapefiletry:gdf.to_file(shapefile_path, driver="ESRI Shapefile", encoding="utf-8")print("Shapefile 已成功保存。")except Exception as e:print(f"Shapefile 保存失败: {e}")# 示例使用
convert_to_shapefile(parquet_path=r"D:\***.parquet",shapefile_path=r"D:\***.shp",input_crs="EPSG:4326", # 输入坐标系output_crs="EPSG:4326" # 输出坐标系
)
使用ArcGIS自带底图:
使用FTW数据集中的影像作为底图: