卫星和航空图像深度学习的开源框架

rastervision的Python项目详细描述


Raster Vision Logo

PypiDocker Repository on QuayJoin the chat at https://gitter.im/azavea/raster-visionLicenseBuild StatuscodecovDocumentation Status

光栅视觉是一个开源的python框架,用于在卫星、空中和其他大型图像集(包括倾斜无人机图像)上构建计算机视觉模型。

  • 它允许用户(不需要成为深入学习的专家!)快速且可重复地配置执行机器学习工作流的实验,包括:分析训练数据、创建训练芯片、训练模型、创建预测、评估模型,以及捆绑模型文件和配置以便于部署。 Overview of Raster Vision workflow
  • 内置了对芯片分类、对象检测和使用tensorflow的语义分割的支持。 Examples of chip classification, object detection and semantic segmentation
  • 实验可以在cpu和gpu上执行,内置支持使用AWS Batch在云中运行。
  • 该框架可扩展到新的数据源、任务(如对象检测)、后端(如tf对象检测api)和云提供商。
  • 有一个QGIS plugin用于在地图上查看实验结果。

有关详细信息,请参见documentation

设置

有几种设置光栅视觉的方法:

  • 要从头构建Docker映像,克隆此repo后,运行docker/build,并使用docker/run运行容器。
  • Docker图片发布到quay.ioraster-vision图像的标记决定它是什么类型的图像:
    • 标签是用来运行cpu容器的。
    • gpu-*标记用于运行gpu容器。
    • 我们在每次合并到master时发布一个新标记,该标记使用提交散列的前7个字符进行标记。要使用最新版本,请拉latest后缀,例如raster-vision:gpu-latest。git标记也被发布,github标记名作为docker标记后缀。
  • 可以使用pip install rastervision直接安装光栅视觉。但是,它的一些依赖项必须手动安装。

有关详细说明,请参见Setup docs

示例

了解光栅视觉功能的最佳方法是查看如何配置和运行实验的示例。使用fluent builder模式配置实验,使配置易于读取、重用和维护。

# tiny_spacenet.pyimportrastervisionasrvclassTinySpacenetExperimentSet(rv.ExperimentSet):defexp_main(self):base_uri=('https://s3.amazonaws.com/azavea-research-public-data/''raster-vision/examples/spacenet')train_image_uri='{}/RGB-PanSharpen_AOI_2_Vegas_img205.tif'.format(base_uri)train_label_uri='{}/buildings_AOI_2_Vegas_img205.geojson'.format(base_uri)val_image_uri='{}/RGB-PanSharpen_AOI_2_Vegas_img25.tif'.format(base_uri)val_label_uri='{}/buildings_AOI_2_Vegas_img25.geojson'.format(base_uri)channel_order=[0,1,2]background_class_id=2# ------------- TASK -------------task=rv.TaskConfig.builder(rv.SEMANTIC_SEGMENTATION) \
                            .with_chip_size(300) \
                            .with_chip_options(chips_per_scene=50) \
                            .with_classes({'building':(1,'red')}) \
                            .build()# ------------- BACKEND -------------backend=rv.BackendConfig.builder(rv.TF_DEEPLAB) \
                                  .with_task(task) \
                                  .with_debug(True) \
                                  .with_batch_size(1) \
                                  .with_num_steps(1) \
                                  .with_model_defaults(rv.MOBILENET_V2)  \
                                  .build()# ------------- TRAINING -------------train_raster_source=rv.RasterSourceConfig.builder(rv.RASTERIO_SOURCE) \
                                                   .with_uri(train_image_uri) \
                                                   .with_channel_order(channel_order) \
                                                   .with_stats_transformer() \
                                                   .build()train_label_raster_source=rv.RasterSourceConfig.builder(rv.RASTERIZED_SOURCE) \
                                                         .with_vector_source(train_label_uri) \
                                                         .with_rasterizer_options(background_class_id) \
                                                         .build()train_label_source=rv.LabelSourceConfig.builder(rv.SEMANTIC_SEGMENTATION) \
                                                 .with_raster_source(train_label_raster_source) \
                                                 .build()train_scene=rv.SceneConfig.builder() \
                                     .with_task(task) \
                                     .with_id('train_scene') \
                                     .with_raster_source(train_raster_source) \
                                     .with_label_source(train_label_source) \
                                     .build()# ------------- VALIDATION -------------val_raster_source=rv.RasterSourceConfig.builder(rv.RASTERIO_SOURCE) \
                                                 .with_uri(val_image_uri) \
                                                 .with_channel_order(channel_order) \
                                                 .with_stats_transformer() \
                                                 .build()val_label_raster_source=rv.RasterSourceConfig.builder(rv.RASTERIZED_SOURCE) \
                                                       .with_vector_source(val_label_uri) \
                                                       .with_rasterizer_options(background_class_id) \
                                                       .build()val_label_source=rv.LabelSourceConfig.builder(rv.SEMANTIC_SEGMENTATION) \
                                               .with_raster_source(val_label_raster_source) \
                                               .build()val_scene=rv.SceneConfig.builder() \
                                  .with_task(task) \
                                  .with_id('val_scene') \
                                  .with_raster_source(val_raster_source) \
                                  .with_label_source(val_label_source) \
                                  .build()# ------------- DATASET -------------dataset=rv.DatasetConfig.builder() \
                                  .with_train_scene(train_scene) \
                                  .with_validation_scene(val_scene) \
                                  .build()# ------------- EXPERIMENT -------------experiment=rv.ExperimentConfig.builder() \
                                        .with_id('tiny-spacenet-experiment') \
                                        .with_root_uri('/opt/data/rv') \
                                        .with_task(task) \
                                        .with_backend(backend) \
                                        .with_dataset(dataset) \
                                        .with_stats_analyzer() \
                                        .build()returnexperimentif__name__=='__main__':rv.main()

光栅视觉使用类似unittest的方法来执行实验。例如,如果以上是在tiny_spacenet.py中定义的,使用正确的设置,您可以使用:

> rastervision run local -p tiny_spacenet.py

有关运行此示例的更完整描述,请参见Quickstart

资源

联系和支持

您可以找到更多信息并与开发人员交谈(让我们知道您在做什么!)时间:

贡献

我们很乐意接受捐款!最好和维修人员联系 关于更大的功能或设计更改在开始工作之前, 因为它将使接受更改的过程更加顺利。

为光栅视觉提供代码的每个人都将被要求在 azavea cla,它基于apache cla。

  1. 下载Raster Vision Individual Contributor License Agreement的副本 或者Raster Vision Corporate Contributor License Agreement

  2. 打印出cla并签名,或者使用允许放置签名图像的pdf软件。

  3. 通过以下方式之一将CLAS发送到Azavea:

  • 扫描文档并通过电子邮件发送到cla@azavea.com
  • 传真副本至+1-215925-2600。
  • 邮寄硬拷贝至: 美国宾夕法尼亚州费城春花园街990号5楼Azavea,邮编19107

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在安卓 studio中使用调用jaxws web服务的jar文件   java双时间模拟时钟不打印两个不同的时间   java Jackson反序列化处理不带字段的生成值   多线程在java同步中读锁的目的是什么   为什么java中有这么多获取日期时间的方法?   java从listview中的TextView获取数据   java是否可以定义如何对枚举进行(反)序列化以在枚举内持久化?   Java:异常处理我的catch()有问题   VMWare java SDK:可用的PerfMetricID何时不报告数据?   exec在Java中执行命令而不重定向输出   java使用SpringXML配置实现观察者模式?   java在竹笔平板电脑中使用JPen