利用Python创建位置生成器的示例详解

目录
  • 介绍
  • 开始
  • 步骤
  • 创建训练数据集
  • 创建测试数据集
  • 将合成图像转换回坐标
  • 放在一起
  • 结论

介绍

在这篇文章中,我们将探索如何在美国各地城市的地图数据和公共电动自行车订阅源上训练一个快速生成的对抗网络(GAN)模型。

然后,我们可以通过为包括东京在内的世界各地城市创建合成数据集来测试该模型的学习和概括能力。

git clone https://github.com/gretelai/GAN-location-generator.git

在之前的一篇博客中,我们根据电子自行车订阅源中的精确位置数据训练了一个基于LSTM的语言模型,并使用该模型为相同地区(如加利福尼亚州圣莫尼卡)生成合成和隐私增强数据集。

通过以不同的方式构建问题,并结合地图数据作为背景,我们可以创建一个模型,生成人类可能访问世界各地的精确位置。

开始

我们可以通过将电动自行车位置数据编码为像素到图像中,然后训练类似于CycleGAN、Pix2pix和StyleGAN的图像翻译任务来对此进行建模。

在这篇文章中,我们将使用由pix2pix和CycleGAN的作者创建的FastCUT模型,因为它的内存效率高,训练速度快(适用于更高分辨率的位置)。

使用GitHub上完整的端到端示例,为自己的城市创建合成位置数据https://github.com/gretelai/GAN-location-generator.git

步骤

模拟训练步骤

  • 从地图上精确的电动自行车位置创建DomainA
  • 从相同的地图创建DomainB,但不包含位置
  • 训练FastCUT 翻译DomainB->DomainA

合成数据生成步骤

  • 对于目标地理位置,请下载新地图(DomainC)
  • 在FastCUT模型上进行推理,以预测车的位置(DomainC->DomainA)
  • 使用CV处理图像以查找指示器位置并转换为经纬度

创建训练数据集

安装依赖项后,运行python -m locations.create_training_data,创建一对512x512px地图图像,分别添加和不添加位置数据。

接下来,在数据集上训练我们的模型——本质上是训练FastCUT模型,以预测电动自行车位置将在哪里。

CUDA_VISIBLE_DEVICES=0 python train.py
--gpu_ids 0 --dataroot ./datasets/ebike_data
--name locations_FastCUT --CUT_mode FastCUT --n_epochs 30

FastCUT模型将数据记录到Visdom,让我们可以监控模型训练。

在下面的图中,我们可以看到模型损失在训练期间减少,还可以看到图像翻译任务的预览。

第一个图像是真实的DomainA地图数据,第二个是带有预测的自行车位置(假的)的DomainA图像的翻译版本,第三个是真实的DomainB位置。我们可以看到,即使经历了25个epoch,该模型仍在学习预测合理的滑板车位置,例如街角和道路沿线。

当运行推荐的200个epoch时,该模型似乎过拟合,预测的滑板车位置从图像中消失。在这个例子中,我看到了30个epoch有最好的表现。

创建测试数据集

运行下面的命令,创建东京市中心的训练数据集,或修改纬度和经度参数,为任何地理区域创建合成位置。

请注意,对于FastCUT python代码的工作方式,我们需要将地图网格图像复制到testA和testB目录中。

python -m location_utils.create_test_dataset --lat 35.652832 --lon 139.839478 --name Tokyo

现在,我们可以使用我们的模型来处理上面为网格创建的每个图像,以预测东京各地的电动自行车位置。

CUDA_VISIBLE_DEVICES=0 python test.py --gpu_ids 0
--dataroot ./datasets/ebike_data
--name locations_FastCUT
--CUT_mode FastCUT --phase train --epoch 30 --num_test 225
--preprocess scale_width --load_size 256

查看单个图像的结果:

将合成图像转换回坐标

现在我们的任务是把合成电动自行车从东京拍摄到的图像转换成真实世界的坐标,以建立我们的合成位置数据集。

为了提取电动自行车的位置,我们使用OpenCV应用了一个图像遮罩,该遮罩可以搜索图像中的任何一组洋红色像素。

创建遮罩后,我们可以计算遮罩中任何像素与图像文件名中编码的中心点纬度和经度之间的距离。

import cv2 as cv
import numpy as np

def find_points(img_path: str) -> list:

    """ Return the pixel offsets of magenta-colored pixels in image """

    image = cv.imread(img_path)

    lower = np.array([225, 0, 225])

    upper = np.array([255, 5, 255])

    shape_mask = cv.inRange(image, lower, upper)

    pixel_x, pixel_y = np.where(shape_mask > 0)

    return pixel_x, pixel_y

请注意,根据城市在世界上的位置,每个纬度或经度之间的物理距离可能会发生显著变化,在将像素映射到位置时,我们需要使用基于椭球体的模型来计算精确的偏移量。

幸运的是,geopy Python库使这变得很容易。

import geopy.distance

def point_to_geo(center_lat: float, center_lon: float, point_x: float, point_y: float) -> list:
    """ Convert pixel offset and center points to lat/lon coordinates"""

    # Center map around current lat / lon points

    d = geopy.distance.distance(kilometers=np.sqrt(box_side_km ** 2 + box_side_km ** 2))

    ne = d.destination(point=geopy.Point(center_lat, center_lon), bearing=315)

    pixel_to_km = box_side_km * 2 / image_pixels

    lat_d = geopy.distance.distance(kilometers=pixel_to_km * point_x)

    lon_d = geopy.distance.distance(kilometers=pixel_to_km * point_y)

    point_lat = lat_d.destination(point=ne, bearing=180).latitude

    point_lon = lon_d.destination(point=ne, bearing=90).longitude

    return [point_lat, point_lon]

下图使用cv2.imshow函数预览遮罩图像,然后将其转换回纬度和经度坐标。

放在一起

我们现在可以处理所有图像,并将合成的位置缝合到东京所有地方的新数据集中。

在东京各地查看数据时,存在一些明确的误报,尤其是在为水道生成位置的情况下。也许需要进一步调整模型,或在训练数据(domainA或domainB)中提供更多水道的负面示例,将减少误报。

然而,结果令人鼓舞(考虑到几乎没有模型或数据集调整),该模型似乎能够模拟电动自行车数据集的分布和位置,该数据集是使用来自世界不同地区的地图进行训练的。

结论

在这篇文章中,我们尝试了将视觉领域的上下文(例如地图数据)与表格数据结合起来,为世界上任何地方创建真实的位置数据。

到此这篇关于利用Python创建位置生成器的示例详解的文章就介绍到这了,更多相关Python位置生成器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Python获取照片的GPS位置信息

    这篇文章主要介绍了基于Python获取照片的GPS位置信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 昨天听人说,用手机拍照会带着GPS信息,原来没注意过这个,因此查看下并使用代码获取照片里的GPS信息 查看图片文件属性 说明: 一般手机拍照时默认会打开地理位置开关 经过压缩后,通常会将GPS信息压缩掉 EXIF 可交换图像文件常被简称为EXIF(Exchangeable image file format),是专门为数码相机的照片设定的,

  • python实现获取当前设备的地点位置

    目录 一.环境介绍 1.搜索“高德地图API”,进入官网,注册自己账号 2.进入控制台,创建相关应用 3.进入web服务API界面 二.代码 一.环境介绍 Python版本 : Python3.8开发工具 : Pycharm 21第三方库 : requests 还会用到的是 Python 自带的 json 库.因为调用 API 返回的结果是 JSON 或者 XML 形式的报文,目前,除少数传统公司使用XML传输信息,大多数互联网公司会使用json库传输信息. 1. 搜索 “高德地图API” ,进

  • 如何利用Python获取鼠标的实时位置

    目录 安装 pyautogui鼠标操作样例 Python获取鼠标实时位置具体实现 结果展示 总结 使用Python的第三方库pyautogui,PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux). 安装 pip install pyautogui pyautogui鼠标操作样例 import pyautogui # 获取当前屏幕分辨率 screenWidth, screenHeight = pya

  • python根据照片获取地理位置及泄露防御

    首先,说明一下python确实可以根据照片获取地理位置,但是也是有一定的限制条件的. 获取照片地理位置的实现思路是这样的: 通过提取照片中的经纬度信息. 然后通过经纬度信息找到具体的地理位置信息. 安装可以读取经纬度信息的python非标准库exifread pip install exifread 将该模块导入到当前代码块中. import exifread as ex 编写照片信息读取函数,获取照片中的经纬度信息. def read_image(): ''' 经纬度信息读取函数 :retur

  • 利用Python创建位置生成器的示例详解

    目录 介绍 开始 步骤 创建训练数据集 创建测试数据集 将合成图像转换回坐标 放在一起 结论 介绍 在这篇文章中,我们将探索如何在美国各地城市的地图数据和公共电动自行车订阅源上训练一个快速生成的对抗网络(GAN)模型. 然后,我们可以通过为包括东京在内的世界各地城市创建合成数据集来测试该模型的学习和概括能力. git clone https://github.com/gretelai/GAN-location-generator.git 在之前的一篇博客中,我们根据电子自行车订阅源中的精确位置数

  • 利用Python自动生成PPT的示例详解

    在日常工作中,PPT制作是常见的工作,如果制作创意类PPT,则无法通过自动化的形式生成,因为创意本身具有随机性,而自动化解决的是重复性工作,两者有所冲突. python-pptx是python处理PPT的一个库,注重的是读和写,无法导出,没有渲染功能. 废话不多说,第一步,安装python-pptx库: pip3 install -i https://pypi.doubanio.com/simple/ python-pptx ppt里面处理的主要对象一般为文本框,表格,图片. 每一页的ppt为一

  • 利用Python实现智能合约的示例详解

    目录 智能合约 1. 是什么 2. 使用场景 用Python如何实现 1. 设计智能合约 2. 编写智能合约源代码 3. 编译智能合约 4. 部署智能合约 5. 调用智能合约方法 6. 监控智能合约事件 7. 升级智能合约 智能合约 1. 是什么 智能合约是一种由计算机程序编写的自动化合约,它可以在没有第三方干预的情况下执行交易和契约条款.智能合约使用区块链技术实现,可以实现不同的功能,例如交易.投票.代币发放和数据存储等.智能合约的执行是基于其代码的逻辑,并且在既定条件满足时自动执行.智能合约

  • 利用Python如何生成hash值示例详解

    一.介绍 如果在Python中需要对用户输入的密码或者其他内容进行加密,首选的方法是生成hash值. 在Python中可以利用二个模块来进行: - crypt - hashlib 二.crypt (一)crypt的主要方法和常量 名称 描述 md5(-) 利用md5算法加密 sha1(-) 利用sha1算法加密 sha224(-) 利用sha224算法加密 sha256(-) 利用sha256算法加密 sha384(-) 利用sha384算法加密 sha512(-) 利用sha512算法加密 (

  • Python线性点运算数字图像处理示例详解

    目录 点运算 定义 分类 线性点运算 分段线性点运算 非线性点运算 对数变换 幂次变换 点运算 定义 分类 线性点运算 例子: 分段线性点运算 非线性点运算 对数变换 幂次变换 1. 点运算是否会改变图像内像素点之间的空间位置关系? 点运算是一种像素的逐点运算,它与相邻的像素之间没有运算关系,点运算不会改变图像内像素点之间的空间位置关系. 2. 对图像灰度的拉伸,非线性拉伸与分段线性拉伸的区别? 非线性拉伸不是通过在不同灰度值区间选择不同的线性方程来实现对不同灰度值区间的扩展与压缩,而是在整个灰

  • python模块shutil函数应用示例详解教程

    目录 本文大纲 知识串讲 1)模块导入 2)复制文件 3)复制文件夹 4)移动文件或文件夹 5)删除文件夹(慎用) 6)创建和解压压缩包 本文大纲 os模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作.而Python另外一个标准库--shutil库,它作为os模块的补充,提供了复制.移动.删除.压缩.解压等操作,这些 os 模块中一般是没有提供的.但是需要注意的是:shutil 模块对压缩包的处理是调用 ZipFile 和 TarFile这两个模块来进行的. 知识串

  • Python学习之模块化程序设计示例详解

    目录 关于模块化程序设计 水果仓库功能简介 主功能实现与程序入口 实现添加功能 实现列出所有信息功能 实现查询信息功能 实现删除信息功能 完整程序如下 关于模块化程序设计 什么是模块化程序设计? 程序设计的模块化指的是在进行程序设计时,把一个大的程序功能划分为若干个小的程序模块.每一个小程序模块实现一个确定的功能,并且在这些小程序模块实现的功能之间建立必要的联系,通过各个小模块之间的互相协作完成整个大功能实现的方法. 模块化设计程序的方法? 一般在针对实现比较复杂程序的情况下,采用的是自上而下的

  • 利用Pygame制作简单动画的示例详解

    目录 前言 计时器 绘制精灵 加载精灵 完整代码 前言 实现一个帧动画,使用的一个图,根据不同的时间显示不同的图. 使用的就是如下所示的一张图,宽度780 * 300 ,使用加载图片 260 * 150来实现. pygame.init() screen = pygame.display.set_mode((400, 300), 0, 32) pygame.display.set_caption("动画") while True: for event in pygame.event.ge

  • Python常见文件操作的示例详解

    目录 从文件中读取数据 为什么要提供文件路径 逐行读取 创建一个包含文件各行内容的列表 使用文件中的内容 包含千位以上的大型文件 圆周率中包含你的生日吗 写入文件 附加到文件 从文件中读取数据 1:读取整个文件 首先创建一个文件,它包含一些文本信息,注意:如果该文件为.py文件,则再进行操作的时候可以不写路径,如果不是.py文件,则必须标明路径. 现在我们创建一个python文件,名为text.py,给他写入如下文本信息: 下面的程序打开并读取这个文件,再将其内容显示到屏幕上: with ope

  • Python 异步之推导式示例详解

    目录 引言 1. 什么是异步推导式 2. 推导式 3. 异步推导式 4. Await 推导式 引言 当我们想到“pythonic”时,理解,如列表和字典理解是 Python 的一个特性. 这是我们执行循环的一种方式,与许多其他语言不同. Asyncio 允许我们使用异步推导式. 我们可以通过“async for”表达式使用异步推导式来遍历异步生成器和异步迭代器. 1. 什么是异步推导式 异步推导式是经典推导式的异步版本.Asyncio 支持两种类型的异步推导式,它们是“async for”推导式

随机推荐