可复制的微规划人工智能,为fAIr维护的分支
项目描述
可复制的微规划人工智能(ramp)
我们团队致力于将数据价值链的控制权交给人道主义者。可复制的微规划人工智能(ramp)项目正在开发一个开源的深度学习模型,使用卫星图像准确数字化低收入和中等收入国家的建筑,并使国内用户能够为其感兴趣的地区构建自己的深度学习模型。
此代码库提供基于Tensorflow和Python地理空间工具集的Python机器学习和数据处理工具,用于使用深度学习从高分辨率卫星图像预测建筑模型。
ramp在线文档网站包含我们使命、ramp项目、代码库和相关(非常大的)开源图像芯片和标签geojson文件数据集的完整文档。
以下截图展示了ramp项目组使用此代码库生成的预测建筑多边形和真实多边形的示例,包括真实多边形(红色多边形为预测,绿色多边形为人工标注员提供的训练标签)。
圣文森特AOI
缅甸AOI
加纳AOI
ramp才刚刚开始。
关于代码库
您可能想使用此代码库做的事情包括
- 运行脚本,包括生产脚本和数据准备工具。
- 使用Jupyter笔记本。
- 使用广泛的ramp开源标注数据集。
- 使用您的数据训练模型。
- 修改底层代码以满足您的需求。
梯形代码库使用了众多标准使用的Python库,一些专门用于图像和地理空间处理的库,以及Tensorflow库用于训练和运行深度神经网络。在创建一个所有这些库都已安装并能良好协同工作的计算环境时,可能会非常困难。
因此,我们还提供了构建Docker镜像的说明(基于具有GPU功能的Tensorflow 2.8 Docker镜像和Jupyter笔记本),该镜像包含ramp的所有库和依赖项。上述所有四个任务都可以在基于此镜像的Docker容器中执行。
对于最后三个任务,我们推荐使用微软的开放源代码代码编辑器vscode。此代码编辑器可以轻松连接到正在运行的ramp Docker容器,并可以运行Jupyter笔记本,包括用于训练ramp模型的笔记本。
项目结构
请注意,ramp项目目前包含了一个名为Solaris项目的分支,该项目目前没有在积极开发。在这个分支中包含了一些错误修复和修改,而一些对Solaris代码的更广泛修改已被移入ramp库。
ramp-staging
├── colab
│ └── README.md
│ └── jupyter_lab_on_colab.ipynb
│ └── train_ramp_model_on_colab.ipynb
├── data
├── docker
│ └── pipped-requirements.txt
├── Dockerfile
├── Dockerfile.dev
├── docs
│ ├── How_I_set_up_my_training_data.md
│ ├── how_to_debug_ramp_in_vscode.md
│ ├── How_to_run_production_and_evaluation.md
│ ├── list-of-ramp-scripts.md
│ └── using_the_ramp_training_configuration_file.md
| └── images
├── experiments
│ ├── dhaka_nw
│ ├── ghana
│ ├── gimmosss
│ ├── himmosss
├── notebooks
│ ├── augmentation_demo.ipynb
│ ├── Data_generator_demo.ipynb
│ ├── Duplicate_image_check.ipynb
│ ├── Independent_labelers_comparison_test.ipynb
│ ├── Train_ramp_model.ipynb
│ ├── Truncated_signed_distance_transform_example.ipynb
│ └── View_predictions.ipynb
│ ├── images
│ ├── sample-data
├── ramp
│ ├── __init__.py
│ ├── data_mgmt
│ │ ├── chip_label_pairs.py
│ │ ├── clr_callback.py
│ │ ├── data_generator.py
│ │ ├── display_data.py
│ │ ├── __init__.py
│ ├── models
│ │ ├── effunet_1.py
│ │ ├── __init__.py
│ │ ├── model_1_chollet_unet.py
│ ├── training
│ │ ├── augmentation_constructors.py
│ │ ├── callback_constructors.py
│ │ ├── __init__.py
│ │ ├── loss_constructors.py
│ │ ├── metric_constructors.py
│ │ ├── model_constructors.py
│ │ ├── optimizer_constructors.py
│ └── utils
│ ├── chip_utils.py
│ ├── eval_utils.py
│ ├── file_utils.py
│ ├── geo_utils.py
│ ├── imgproc_utils.py
│ ├── img_utils.py
│ ├── __init__.py
│ ├── label_utils.py
│ ├── log_fields.py
│ ├── lrfinder.py
│ ├── mask_to_vec_utils.py
│ ├── misc_ramp_utils.py
│ ├── model_utils.py
│ ├── multimask_utils.py
│ ├── ramp_exceptions.py
│ └── sdt_mask_utils.py
├── README.md
├── scripts
│ ├── add_area_to_labels.py
│ ├── binary_masks_from_polygons.py
│ ├── calculate_accuracy_iou.py
│ ├── find_learningrate.py
│ ├── get_chip_statistics.py
│ ├── get_dataset_loss_statistics.py
│ ├── get_labels_from_masks.py
│ ├── get_model_predictions.py
│ ├── make_train_val_split_lists.py
│ ├── move_chips_from_csv.py
│ ├── multi_masks_from_polygons.py
│ ├── polygonize_masks.py
│ ├── polygonize_multimasks.py
│ ├── remove_slivers.py
│ ├── sdt_masks_from_polygons.py
│ ├── tile_datasets.py
│ └── train_ramp.py
├── setup.py
├── shell-scripts
│ ├── create_aggregate_trainingset.bash
│ ├── create_masks_for_datasets.bash
│ ├── create_test_split_for_datasets.bash
│ ├── create_trainval_split_for_datasets.bash
│ ├── get_iou_metrics_for_datasets.bash
│ ├── get_iou_metrics_for_models.bash
│ ├── nvidia-check.sh
│ ├── run_production_on_datasets.bash
│ ├── run_production_on_single_dataset.bash
│ ├── write_predicted_masks_for_datasets.bash
│ └── write_truth_labels_for_datasets.bash
└── solaris
如何在Google Colab上运行ramp环境
有关在Colab上开始使用ramp的说明位于此代码库中的colab/README.md文件。
请注意,在Google Colab的免费层上运行可能会非常缓慢且痛苦。如果您经常在Google Colab上运行,我建议升级到Google Pro。如果您将Google Colab用作运行大型ramp训练作业的计算平台,我建议考虑Google Pro Plus。
如何在具有GPU支持的Ubuntu 20.04本地服务器上运行RAMP环境
高级概述
- 您需要在具有至少一个启用CUDA的NVIDIA GPU的机器上运行Ubuntu 20.04 Linux。您绝对需要在上面有sudo(root用户)权限。
- 安装目前推荐的NVIDIA驱动程序:请参阅此处说明。(情况可能会更糟:幸运的是,您不需要安装CUDA库,因为如果不使用Docker,您就需要安装这些库)。
- 安装docker CE,以及NVIDIA容器工具包(请参阅此处说明)。
- 创建'docker'组并将自己添加到其中,这样您就可以在不使用sudo的情况下运行docker(请参阅此处说明)。
- 根据以下说明使用docker构建ramp基础镜像,rampbase
# run from the ramp-code directory
docker build --tag rampbase .
重要说明:您需要在修改ramp模块代码库(位于ramp-code/ramp)后重新构建rampbase,以确保更改被安装在容器中。运行脚本或笔记本时不是这种情况。
- 基于rampbase启动docker容器,并在其中运行bash shell,如下所示
docker run -it --rm --gpus=all -v /home/carolyn/ramp-staging:/tf/ramp-staging -v /home/carolyn/ramp-data:/tf/ramp-data -p 8888:8888 rampbase bash
如果您想运行一个脚本:在bash shell中运行,使用默认的python解释器,该解释器将加载ramp的所有组件。
请注意,ramp容器中安装了一个Jupyter笔记本服务器,'docker run'命令中的-p 8888:8888部分启用端口转发,这样您就可以在主机机器的浏览器中运行Jupyter笔记本。
如果您想在浏览器或Jupyterlab中运行Jupyter笔记本,使用不带'bash'结尾的相同命令启动您的docker容器。您将在命令输出中获得运行中的Jupyter笔记本服务器链接。
docker run -it --rm --gpus=all -v /home/carolyn/ramp-staging:/tf/ramp-staging -v /home/carolyn/ramp-data:/tf/ramp-data -p 8888:8888 rampbase
如果您希望在Jupyter笔记本容器中运行bash shell,以便您可以运行脚本以及Jupyter笔记本,您可以使用以下命令将bash shell连接到同一个容器。
首先,运行
docker ps
这将列出您机器上运行的所有Docker容器,类似于Unix ps命令的输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
209755699cea rampdev "bash" 3 hours ago Up 3 hours 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp condescending_cerf
您可以使用容器ID或容器名称来使用以下命令连接到它
docker exec -it condescending_cerf bash
这将为您提供运行Jupyter笔记本的同一容器中的bash shell。
有关如何在VScode的桌面版中调试ramp代码、运行Jupyter笔记本的说明,请参阅如何在VScode中调试ramp。
关于以您自己的用户身份运行ramp,与以root用户身份运行的区别
请注意,默认情况下,Docker以root用户身份运行容器。如果您想使用VScode连接到容器,您需要以root用户身份运行容器,因为VScode需要在容器中安装其服务器,需要root权限。
这意味着您在Docker会话期间创建的任何文件都将具有root用户所有权。从安全角度来看,这是不希望的,并且当您稍后需要更改或删除在本地机器上创建的文件时,会带来麻烦。(注意,要解决这个问题,请运行以下Linux命令:find . -user root | xargs sudo chown your-username。)
如果您只是要与bash shell交互(例如,运行生产代码或脚本),我建议您以自己的用户身份运行容器,而不是root用户。要做到这一点,添加以下所示的--user 1000:1000开关。
# run from anywhere as yourself (as the non-root user)
docker run -it --rm --gpus=all --user 1000:1000 -v /home/carolyn/ramp-staging:/tf/ramp-staging -v /home/carolyn/ramp-data:/tf/ramp-data -p 8888:8888 rampbase
许可协议
此软件已在Apache 2.0软件许可协议下授权。
项目详情
ramp-fair-0.1.2.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | e7673dd7f253dc65c26d6927bd3ac3735e73852b32ba8a837a2c34453041d976 |
|
MD5 | 42368054e551c92d99e9301afddd1776 |
|
BLAKE2b-256 | 4c19340b6311cc488750153265eeb7fc48f992942a689843dd53421ec6594b45 |