创建位置生成器-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
在这篇文章中,我们将探索如何根据美国各地城市的地图数据和公共电动自行车馈送来训练快速生成的对手网络(GAN)模型。
然后,我们可以通过为世界各地的城市(包括东京)创建复合数据集来测试模型的学习和泛化能力。
git克隆https://github.com/gretelai/GAN-location-generator.git
在上一篇博客中,我们基于电动自行车馈送中的精确位置数据,训练了一个基于LSTM的语言模型,并使用该模型为同一地区(如加利福尼亚州圣莫尼卡)生成了复合和增强隐私的数据集。
通过以不同的方式构建问题并结合地图数据作为背景,我们可以创建一个模型来生成人类可能访问世界的精确位置。
开始
我们可以通过将电动自行车的位置数据编码为图像像素,然后训练类似于CycleGAN.Pixpix和StyleGAN的图像翻译任务来对此进行建模。
在本文中,我们将使用由pix2pix和CycleGAN的作者创建的FastCUT模型,因为它具有较高的存储效率和快速的训练速度(适用于较高分辨率的位置)。
使用GitHub上的完整端到端示例为您的城市创建复合位置数据https://github.com/gretelai/GAN位置生成器。吉特
步骤模拟训练步骤
从地图上电动自行车的确切位置创建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_id 0--dataroot./dataset/ebike_data--name locations_FastCUT--CUT_mode FastCUT--n_epochs 30
FastCUT模型将数据记录到Visdom,以便我们可以监控模型训练。
在下图中,我们可以看到训练过程中模型丢失减少,我们还可以看到图像翻译任务的预览。
第一幅图像是真实的DomainA地图数据,第二幅是带有预测自行车位置(false)的DomainB图像的翻译版本,第三幅是真实的DomainB位置。我们可以看到,即使经历了25个世纪,该模型仍在学习如何预测合理的滑板车位置,例如街角和道路沿线。
当运行推荐的200个时期时,模型似乎过于拟合,预测的滑板车位置从图像中消失。在这个例子中,我看到30个时代的表现最好。
创建测试数据集
运行以下命令以在东京市中心创建训练数据集,或修改纬度和经度参数以创建任何地理区域的复合位置。
请注意,对于FastCUT python代码的工作方式,我们需要将地图网格图像复制到testA和testB目录。
python-m location_utils.create_test_dataset-lat 35.652832-lon 139.839478-name东京
现在我们可以使用我们的模型来处理上面为网格创建的每个图像,以预测东京各地电动自行车的位置。
CUDA_VISIBLE_DEVICES=0 python test.py-gpu_id 0--dataroot./dataset/ebike_data--name locations_FastCUT--CUT_mode FastCUT--phase train--epoch 30--num_test 225-preprocess scale_width-load_size 256
要查看单个图像的结果,请执行以下操作:
将合成图像转换回坐标
现在我们的任务是转换ima
创建遮罩后,我们可以计算遮罩中任何像素与图像文件名中编码的中心点的纬度和经度之间的距离。
import cv2 as cvimport numpy as npdef find_points(img_path:str)->list:””返回图像中品红涩像素的像素偏移量””image=cv.imread(img_path)lower=np.array(〔225,0,225〕)upper=np.aarray(〔255,5,255〕)shape_mask=cv.inRange(image,lower,upper)pixel_x像素_y=np.其中(形状_mask>0)返回像素_x,像素_y
请注意,每个纬度或经度之间的物理距离可能会因城市在世界上的位置而有很大差异。当将像素映射到位置时,我们需要使用基于椭球体的模型来计算精确的偏移。
幸运的是,geopy Python库使这变得容易。
import geopy.distancedef point_to_geo(center_lat:float,center_lon:float.point_x:float,point_y:float)->list:”””将像素偏移量和中心点转换为lat/lon坐标”””#当前lat/lon点周围的中心地图d=geopy.distance.distance(km=np.sqrt(方框_边_公里**2+方框_侧_公里**2))ne=d目的地(点=地理坐标点(中心_纬度,中心_经度),方位角=315)象素_到_公里=方框_边线_公里*2/图像_象素lat_d=地理坐标距离距离(公里=象素_到_km*点_x)(公里=象素_到_公里*点_y)点_纬度=纬度_目的地(点=ne,方位=180)。纬度点_lon=lon_d。目的地(地点=ne,方向=90)。经度返回〔点_lat,点_隆〕
下图使用cv2.imshow函数预览蒙版图像,然后将其转换回纬度和经度坐标。
把它放在一起
我们现在可以处理所有图像,并将合成图像的位置缝合到东京各地的新数据集中。
在查看东京各地的数据时,尤其是在生成水道位置时,存在明显的误报。可能需要进一步调整模型,或在训练数据中提供更多水道的负面示例(domainA或domainB),这将减少误报。
然而,结果令人鼓舞(考虑到很少有模型或数据集调整)。该模型似乎能够模拟电动自行车数据集的分布和位置,该数据集使用来自世界不同地区的地图进行训练。
结论
600学习网 » 创建位置生成器-600学习网