@sambodhi
2018-01-15T17:12:33.000000Z
字数 4935
阅读 4568
作者|Liu Zhiyong
编辑|Debra Chen
AI前线导语:人工智能技术最近炒得很火,一旦将其大规模用于军事领域,那将是改变规则的技术。美国已经开始利用人工智能技术在海量卫星照片中捕猎中国导弹阵地了。据美国《大众机械》网站报道,密苏里大学团队训练了一个深度学习算法,可在TB级数字图像中检测、识别中国的地对空导弹阵地。据称,人工智能程序不仅能够像人一样准确地找到这些阵地,而且远比人类更快。人工智能将被用来补充人类情报专家,帮助他们从数千平方英里的卫星图像中像大海捞针一样找到所需的目标。
那么我们又如何师夷长技以制夷呢?本文就介绍了如何利用Github的Label Maker项目为机器学习生成卫星地图和街景图的数据集。
更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)
OpenStreetMap(开放街道地图,OSM)是由英国人Steve Coast创立的一个开源地图服务项目,其运营模式类似与维基百科,由志愿者们免费提供地图信息。个人、网站以及公司都可以使用它的地图信息。目前,该地图服务由英国非营利组织OpenStreetMap 基金会负责。
OSM已有超过两百万名注册用户。一如维基百科等网站,OSM网站地图页有“编辑”按钮,亦有记录修订历史。经注册的用户可上传GPS路径,及可编辑地图的向量数据,包括使用OSM网站的编辑器或其他自由地理信息系统软件,如JOSM。
OSM的地图由用户根据手持GPS设备、航空摄影照片、卫星视频、其他自由内容以至单靠用户由于对有关区域的熟悉而具有的本地知识绘制。地图的向量数据以开放数据库授权方式授权。
而我们也同样也可以用人工智能来将卫星图片和街景图片生成机器学习数据集,这个工具就是Github上的Label Maker项目[1],该项目利用了OpenStreetMap的QA Tile进行数据集的生成。OpenStreetMap QA Tile包含用于分析OpenStreetMap(QSM)的数据,将它们与Tile Reduce一起使用,将OpenStreetMap与其他数据集合在一起,可检测连接问题等错误,或者监视破坏行为,可以对OpenStreetMap数据执行任何基于分片的分析。
Label Maker项目的工具下载OpenStreetMap QA Tile信息和卫星图像分片,并将其保存为.npz
[2]文件,以用于机器学习培训。
需要注意的是,运行这个库需要tippecanoe
作为“同版本依赖(peer-dependency)”,且在运行该命令之前,应该可从你的命令行获得。
在运行任何命令之前,需创建一个config.json
文件,指定数据准备过程的输入:
country
: OSM QA Tile[3]提取下载。该值应该是一个与label_maker/countries.txt
中找到的值匹配的字符串。bounding_box
: 从中创建图像的边界框。这应该以下面的表格给出:[xmin, ymin, xmax, ymax]
分别为[-180,180]
和[-90,90]
之间的经度和纬度值。值应使用WGS84基准,使用十进制的经度和纬度。zoom
:用于创建图像的缩放级别[4]。这功能是解决问题的一种简单形式。值应该为整数。classes
:一系列机器学习训练课程。每个类都被定义为具有两个必需属性的对象: imagery
: 使用tiled图像服务的模板字符串。注意,您通常需要一个API密钥来获取图像,并可能有相关的成本。上面示例需要一个Mapbox访问令牌[7]。background_ratio
:对于单类分类问题,我们需要下载没有匹配类的图像。我们将下载background_ratio
乘以匹配一个类的图像数量。ml_type
: "classification"
、"object-detection"
或"segmentation"
。对于最终的标签numpy数组(y_train
和y_test
),我们将根据类型生成不同的标签。 "classification"
:与classes
相同长度的数组。每个数组的值可以是1
或0
,这取决于它是否与同一索引中的类相匹配。"object-detection"
:一组表单为[xmin,ymin,width,height,class_index]
的边界框。在这种情况下,这些值不是经度和纬度值,而是从左上角测量的像素值。每个特性都针对每个类进行测试,因此如果一个特性匹配两个或更多类,则会创建相应数量的边界框。"segmentation"
:一个表单(256,256)
的数组,其值与该位置处的class_index标签相匹配。这些类按照config.json
的顺序依次被应用,因此,后面的类将被写在早期的类标签上。label-maker
is most easily used as a command line tool. There are five commands documented below. All commands accept two flags:
label-maker
是最容易使用的命令行工具。下面有五个命令,所有的命令都接受两个标志:
-d
or --dest
: string 目录用于存储输出文件。(缺省:data
)-c
or --config
:config.json文件的string 位置。(缺省:config.json
)示例:
$ label-maker download --dest flood-monitoring-project --config flood.json
下载并解压OSM QA tile:
$ label-maker download
Saving QA tiles to data/ghana.mbtiles
100% 18.6 MiB 1.8 MiB/s 0:00:00 ETA
将OSM数据恢复到所需的缩放级别,创建标签数据(labels.npz
),计算类别统计信息,创建可视标签文件,(根据ml_type
,可以使用GeoJSON或PNG文件)。需要上一步中的OSM QA tile。
$ label-maker labels
Determining labels for each tile
---
Residential: 638 tiles
Total tiles: 1189
Write out labels to data/labels.npz
Downloads example satellite images for each class. Requires the labels.npz
file from the previous step. Accepts an additional flag:
下载每个类的卫星图像的例子。需要上一步的labels.npz
文件。接受一个额外的标志:
-n
or --number
: 为每类创建的实例图像的interger 个数。(缺省:5
)
$ label-maker preview -n 10
Writing example images to data/examples
Downloading 10 tiles for class Residential
下载训练所需的所有图像分片,需要labels
步骤中的labels.npz
文件。
$ label-maker images
Downloading 1189 tiles to data/tiles
捆绑卫星图像和标签以创建最终的data.npz
文件。需要labels
步骤中的labels.npz
文件和images
步骤中下载的图像分片。
$ label-maker package
Saving packaged file to data/data.npz
一旦你有一个封包的data.npz
文件,你可以使用numpy.load
[8]来加载它。作为一个示例,下面是如何将创建的数据提供给Keras[9]模型:
npz = np.load('data.npz')
x_train = npz['x_train']
y_train = npz['y_train']
x_test = npz['x_test']
y_test = npz['y_test']
model = Sequential()
# ...
model.compile(...)
# train
model.fit(x_train, y_train, batch_size=16, epochs=50)
model.evaluate(x_test, y_test, batch_size=16)
要获得更为详细的演练,请查看这个示例页面:Label Maker Examples[10]。
这个库建立在skynet-data[11]的理念之上。如果没有来自OpenStreetMap和Mapbox的出色数据,将无法获得以下许可证:
ref: