广告
返回顶部
首页 > 资讯 > 后端开发 > Python >利用Python创建位置生成器的示例详解
  • 765
分享到

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

2024-04-02 19:04:59 765人浏览 泡泡鱼

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位置生成器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用Python创建位置生成器的示例详解

本文链接: https://www.lsjlt.com/news/118720.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用Python创建位置生成器的示例详解
    目录介绍开始步骤创建训练数据集创建测试数据集将合成图像转换回坐标放在一起结论介绍 在这篇文章中,我们将探索如何在美国各地城市的地图数据和公共电动自行车订阅源上训练一个快速生成的对抗网...
    99+
    2022-11-11
  • 如何利用Python创建位置生成器
    本篇内容主要讲解“如何利用Python创建位置生成器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何利用Python创建位置生成器”吧!介绍我们可以通过为包括东京在内的世界各地城市创建合成数据...
    99+
    2023-07-02
  • 利用Python自动生成PPT的示例详解
    在日常工作中,PPT制作是常见的工作,如果制作创意类PPT,则无法通过自动化的形式生成,因为创意本身具有随机性,而自动化解决的是重复性工作,两者有所冲突。 python-pptx是p...
    99+
    2022-11-11
  • Python随机生成8位密码的示例详解
    目录代码示例1(8位)代码示例2(任意)知识补充代码示例1(8位) import random import string total = string.ascii_letter...
    99+
    2023-02-14
    Python随机生成密码 Python生成密码 Python密码
  • python列表生成器常用迭代器示例详解
    目录列表生成式基础语法1. 使用列表生成式,一行解决for循环2. 双层循环3. 加判断语句,条件过滤4. 加入函数5. 常见几种迭代器:range、 zip 、 enumerate...
    99+
    2022-11-13
  • 使用Python和scikit-learn创建混淆矩阵的示例详解
    目录一、混淆矩阵概述1、示例12、示例2二、使用Scikit-learn 创建混淆矩阵1、相应软件包2、生成示例数据集3、训练一个SVM4、生成混淆矩阵5、可视化边界一、混淆矩阵概述...
    99+
    2022-11-11
  • python利用线程生成不同尺寸的缩略图实例详解
    利用线程生成缩略图;读取当前路径下的png文件,在当前路径下生成6464,128128和32*32的缩略图。 """ 利用线程生成缩略图 读取当前路径下的png文件,在当前路径下生成...
    99+
    2022-11-11
  • Python 装饰器常用的创建方式及源码示例解析
    目录装饰器简介基础通用装饰器源码示例执行结果带参数装饰器源码示例源码结果源码解析多装饰器执行顺序源码示例执行结果解析类装饰器源码示例执行结果解析装饰器简介 装饰器(decorator...
    99+
    2022-11-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作