Package: cropnet
CropNetCropNet is an open, large-scale, and deep learning-ready dataset, specifically targeting climate change-aware crop yield predictions for the contiguous United States (U.S.) continent at the county level. It is composed of three modalities of data, i.e., Sentinel-2 Imagery, WRF-HRRR Computed Dataset, and USDA Crop Dataset, aligned in both the spatial and temporal domains, for over 2200 U.S. counties spanning 6 years (2017-2022). It is expected to facilitate researchers in developing deep learning models for timely and precisely predicting crop yields at the county level, by accounting for the effects of both short-term growing season weather variations and long-term climate change on crop yields. Although our initial goal of crafting the CropNet dataset is for precise crop yield prediction, we believe its future applicability is broad and can benefit the deep learning, agriculture, and meteorology communities, for exploring more interesting and critical climate change-related applications, by using one or more modalities of data.OverviewThe CropNet dataset is composed of three modalities of data, i.e., Sentinel-2 Imagery, WRF-HRRR Computed Dataset, and USDA Crop Dataset, spanning from 2017 to 2022 (i.e., 6 years) across 2291 U.S. counties.The dataset is available atGoogle DriveThe tutorials for each modality of data are availbale atGithubSentinel-2 ImageryThe Sentinel-2 Imagery, obtained from theSentinel-2 mission, provides high-resolution satellite images for monitoring crop growth on the ground. It contains two types of 224x224 RGB satellite images, agriculture imagery (AG) and normalized difference vegetation index (NDVI), both with a spatial resolution of 9x9 km, and a revisit frequency of 14 days.WRF-HRRR Computed DatasetThe WRF-HRRR Computed Dataset, sourced from theWRF-HRRR model, contains daily and monthly meteorological parameters, with the former and the latter designed for capturing the direct effects of short-term growing season weather variations on crop growth, and for learning the indirect impacts of long-term climate change on crop yields, respectively. It contains 9 meteorological parameters gridded at 9 km in a one-day (and one-month) interval.USDA Crop DatasetThe USDA Crop Dataset, collected from theUSDA Quick Statistic website, offers valuable crop information, such as production, yield, etc., for crops grown at each available county. It offers crop information for four types of crops, i.e., corn, cotton, soybeans, and winter wheat, at a county-level basis, with a temporal resolution of one year.PipelineThis repository includes three types of APIs for facilitating researchers in downloading the CropNet data based on the time and region of interest, and flexibly building their deep learning models for accurate crop yield predictions, with their details listed below:DataDownloader: This API allows users to download the CropNet data over the time/region of interest on the fly.DataRetriever: With this API, users can conveniently obtain the CropNet data stored in the local machine (e.g., if you have downloaded our curated CropNet from Google Drive) over the time/region of interest.DataLoader: This API is designed to facilitate researchers in developing their DNNs for accurate crop yield predictions. Specifically, the code in this API ( 1) combines all three modalities of data to create $(\mathbf{x}, \mathbf{y_{s}}, \mathbf{y_{l}}, \mathbf{z})$ tuples, with $\mathbf{x}, \mathbf{y_{s}}, \mathbf{y_{l}}, \text{and}~ \mathbf{z}$, respectively representing satellite images, short-term daily whether parameters, long-term monthly meteorological parameters, and ground-truth crop yield (or production) information, and then (2) exposes those tuples via aDatasetobject after appropriate data pre-processing techniques.InstallationResearchers and practitioners can install the latest version of CropNet with the following commands:# Create and activate a conda environmentcondacreate-ncropnet_apipython=3.10condaactivatecropnet_api# Install the latest version of CropNetpipinstallcropnet# Slove the ecCodes library dependency issuepipinstallecmwflibsCropNet API ExamplesExample 1: A DataDownloader Example for Downloading the Up-to-date CropNet DataGiven the time and region (i.e., the FIPS codes for two U.S. counties) of interest, the following code presents how to utilize theDataDownloaderto download the up-to-date CropNet data:fromcropnet.data_downloaderimportDataDownloader# Use the "target_dir" to specify where the data should be downloaded todownloader=DataDownloader(target_dir="./data")# Download 2022 USDA Soybean data# Note that most of the 2023 USDA data are not yet availabledownloader.download_USDA("Soybean",fips_codes=["10003","22007"],years=["2022"])# Download the 2023 (the 1st and 2nd quarters) Sentinel-2 Imagerydownloader.download_Sentinel2(fips_codes=["10003","22007"],years=["2023"],image_type="AG")downloader.download_Sentinel2(fips_codes=["10003","22007"],years=["2023"],image_type="NDVI")# Download the 2023 (January to July) WRF-HRRR datadownloader.download_HRRR(fips_codes=["10003","22007"],years=["2023"])Example 2: A DataRetriever Example for Obtaining Our Curated CropNet DataGiven the time and region of interest, the following code shows how to use theDataRetrieverto obtain the CropNet data stored in the local machine in a user-friendly format:# Use the "base_fir" to specify where the CropNet data is storedretriever=DataRetriever(base_dir="/mnt/data/CropNet")# Retrieve the 2022 USDA Soybean datausda_data=retriever.retrieve_USDA(crop_type="Soybean",fips_codes=["10003","22007"],years=["2022"])# Retrieve the 2022 Sentinel-2 Imagery datasentinel2_data=retriever.retrieve_Sentinel2(fips_codes=["10003","22007"],years=["2022"],image_type="AG")sentinel2_data=retriever.retrieve_Sentinel2(fips_codes=["10003","22007"],years=["2022"],image_type="NDVI")# Retrieve the 2022 WRF-HRRR datahrrr_data=retriever.retrieve_HRRR(fips_codes=["10003","22007"],years=["2022"])Example 3: A PyTorch Example for Using the DataLoader API for Training DNNsThe following code presents a PyTorch example of training a deep learning model (i.e., MMST-ViT) for climate change-aware crop yield predictions, by utilizing the DataLoader  APIs:importtorchfromtorch.utils.dataimportDataLoaderfrommodels_mmst_vitimportMMST_ViTfromcropnet.dataset.hrrr_computed_datasetimportHRRRComputedDatasetfromcropnet.dataset.sentinel2_imageryimportSentinel2Imageryfromcropnet.dataset.usda_crop_datasetimportUSDACropDataset# The base directory for the CropNet datasetbase_dir="/mnt/data/CropNet"# The JSON configuration fileconfig_file="data/soybeans_train.json"# The dataloaders for each modality of datasentinel2_loader=DataLoader(Sentinel2Imagery(base_dir,config_file),batch_size=1)hrrr_loader=DataLoader(HRRRComputedDataset(base_dir,config_file),batch_size=1)usda_loader=DataLoader(USDACropDataset(base_dir,config_file),batch_size=1)# The model, the optimizer, and the loss functionmodel=MMST_ViT()optimizer=torch.optim.AdamW(model.parameters(),lr=1e-3,betas=(0.9,0.999))criterion=torch.nn.MSELoss()# Traning the model for one epochfors,h,uinzip(sentinel2_loader,hrrr_loader,usda_loader):# x: satellite images# ys (or yl): short-term daily (or long-term monthly) weather parameters# z: ground-truth crop yield (or production) informationx,ys,yl,z,=s[0],h[0],h[1],u[0]optimizer.zero_grad()z_hat=model(x,ys,yl)loss=criterion(z,z_hat)loss.backward()optimizer.step()LicenseCropNet has aCreative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)license.