文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何利用Python创建位置生成器

2023-07-02 10:27

关注

本篇内容主要讲解“如何利用Python创建位置生成器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何利用Python创建位置生成器”吧!

介绍

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

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

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

如何利用Python创建位置生成器

开始

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

步骤

模拟训练步骤

合成数据生成步骤

创建训练数据集

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

如何利用Python创建位置生成器

接下来,在数据集上训练我们的模型——本质上是训练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,该模型仍在学习预测合理的滑板车位置,例如街角和道路沿线。

如何利用Python创建位置生成器

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

如何利用Python创建位置生成器

创建测试数据集

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

请注意,对于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

查看单个图像的结果:

如何利用Python创建位置生成器

将合成图像转换回坐标

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

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

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

import cv2 as cvimport 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函数预览遮罩图像,然后将其转换回纬度和经度坐标。

如何利用Python创建位置生成器

放在一起

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

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

如何利用Python创建位置生成器

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

如何利用Python创建位置生成器

到此,相信大家对“如何利用Python创建位置生成器”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯