skynet-train, 基于卫星图像的SegNet神经网络训练与测试

分享于 

8分钟阅读

GitHub

  繁體 雙語
Training and test the SegNet neural network on satellite imagery
  • 源代码名称:skynet-train
  • 源代码网址:http://www.github.com/developmentseed/skynet-train
  • skynet-train源代码文档
  • skynet-train源代码下载
  • Git URL:
    git://www.github.com/developmentseed/skynet-train.git
    Git Clone代码到本地:
    git clone http://www.github.com/developmentseed/skynet-train
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/developmentseed/skynet-train
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    SegNet培训和测试脚本

    ,scripts SegNet神经网络训练和测试,特别是由 skynet数据生成的OpenStreetMap + 卫星图像训练数据。

    捐赠非常欢迎 !

    快速启动

    developmentseed/skynet-train Docker 映像来使用这些脚本是最快捷最简单的方法,但是请注意,为了使这个工作与GPU--necessary一起工作,需要使用 nvidia-docker 机器设置。 ( 脚本使用 docker-machine 来启动AWS实例,并将它的设置为 nvidia。 脚本执行相同的操作,但创建了一个spot实例,而不是按需运行。

    nvidia-docker run 
     -v/path/to/training/dataset:/data 
     -v/path/to/training/output:/output 
     -e AWS_ACCESS_KEY_ID=... 
     -e AWS_SECRET_ACCESS_KEY=... 
     developmentseed/skynet-train:gpu 
     --sync s3://your-bucket/training/blahbla

    这将启动与给定数据的训练。 每 10000次迭代,模型将被快照并运行在测试数据上,训练"损耗"将被打印出来,所有这些都将被上传到 s3。 ( 省略 --sync 参数和AWS凭证以跳过上载。)

    每批测试结果包括一个 view.html 文件,它显示了一个查看器,可以在地图上浏览结果。 使用它:

    使用以下参数自定义培训:

    
    --model MODEL # segnet or segnet_basic, defaults to segnet
    
    
    --output OUTPUT # directory in which to output training assets
    
    
    --data DATA # training dataset
    
    
    [--fetch-data FETCH_DATA] # s3 uri from which to download training data into DATA
    
    
    [--snapshot SNAPSHOT] # snapshot frequency
    
    
    [--cpu] # sets cpu mode
    
    
    [--gpu [GPU [GPU.. .]]] # set gpu devices to use
    
    
    [--display-frequency DISPLAY_FREQUENCY] # frequency of logging output (affects granularity of plots)
    
    
    [--iterations ITERATIONS] # total number of iterations to run
    
    
    [--crop CROP] # crop trianing images to CROPxCROP pixels
    
    
    [--batch-size BATCH_SIZE] # batch size (adjust this up or down based on GPU size. defaults to 6 for segnet and 16 for segnet_basic)
    
    
    [--sync SYNC]
    
    
    
    

    监视器

    在进行培训的实例上,公开一个简单的监视页面,其中包含:

    docker run --rm -it -v/mnt/training:/output -p 80:8080 developmentseed/skynet-monitor
    详细信息

    先决条件/依赖项:

    • node 和 python
    • 目前,培训SegNet需要构建的Caffe SegNet fork fork。
    • 通过在这里 repo的root 目录中运行 npm install 来安装 node 依赖项。

    建立模型定义

    使用天网数据命令行脚本创建数据集之后,通过运行以下命令设置模型的定义文件:

    
    segnet/setup-model --data/path/to/dataset/--output/path/to/training/workdir
    
    
    
    

    还将 segnet/templates/solver.prototxt 复制到培训工作目录,并将它的编辑到( a ) 点到正确的路径,( b ) 设置了学习"hyperparameters"。

    ( 注意:这很难开始,当我们发布一些预约的模型时,我们还将包括 solver.prototxt的一个副本。

    火车

    http://www.robots.ox.ac.uk/~vgg/research/very_deep/ 下载预先训练的VGG权重 VGG_ILSVRC_16_layers.caffemodel

    从你的培训工作目录中,运行

    
    $CAFFE_ROOT/build/tools/caffe train -gpu 0 -solver solver.txt 
    
    
     -weights VGG_ILSVRC_16_layers.caffemodel 
    
    
     2>&1 | tee train.log
    
    
    
    

    你可以通过以下方式监视培训:

    
    segnet/util/plot_training_log.py train.log --watch
    
    
    
    

    这将生成并持续更新"损耗"( 例如,培训错误)的plot,在训练过程中逐渐减少。

    测试经过训练的网络

    
    segnet/run_test --output/path/for/test/results/--train/path/to/segnet_train.prototxt --weights/path/to/snapshots/segnet_blahblah_iter_XXXXX.caffemodel --classes/path/to/dataset/classes.json
    
    
    
    

    这里脚本主要执行这里列出的说明: http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html

    命令行推理

    经过经过训练和测试的网络后,你经常希望使用它来预测更大的区域。 我们已经包含了在本地或者AWS上运行这里进程的脚本。

    局部推理

    要在本地运行预测,你需要:

    • 光栅图像( 作为GeoTIFF或者 VRT )
    • tile索引的行分隔列表,用于预测( 比如。 49757-74085-17 可以使用 geodex 进行这些操作
    • 天网模型,经过培训的权重和类定义( .prototxt.caffemodel.json )

    要运行:

    docker run -v/path/to/inputs:/inputs -v/path/to/model:/model -v/path/to/output/:/inference 
     developmentseed:/skynet-run:local-gpu/inputs/raster.tif/inputs/tiles.txt 
     --model/model/segnet_deploy.prototxt
     --weights/model/weights.caffemodel
     --classes/model/classes.json
     --output/inference

    如果你在CPU上运行,使用 :local-cpu Docker 映像并将 --cpu-only 添加为 上面 命令的最终标志。

    预测的光栅和矢量geojson输出将位于 /inference ( 以及相应的装入卷) 中

    AWS推理

    TODO: 目前,请参阅 segnet/queue.pysegnet/batch_inference.py 中的命令行 指令

    GPU

    这些脚本最初是为在 AWS g2.2xlarge 实例上使用而开发的。 要支持较新的gpu,可能需要执行以下操作:


    相关文章