欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python創(chuàng)建位置生成器的示例詳解

 更新時(shí)間:2022年06月15日 14:27:40   作者:woshicver  
在這篇文章中,我們將探索如何利用Python在美國各地城市的地圖數(shù)據(jù)和公共電動自行車訂閱源上訓(xùn)練一個快速生成的對抗網(wǎng)絡(luò)(GAN)模型,需要的可以參考一下

介紹

在這篇文章中,我們將探索如何在美國各地城市的地圖數(shù)據(jù)和公共電動自行車訂閱源上訓(xùn)練一個快速生成的對抗網(wǎng)絡(luò)(GAN)模型。

然后,我們可以通過為包括東京在內(nèi)的世界各地城市創(chuàng)建合成數(shù)據(jù)集來測試該模型的學(xué)習(xí)和概括能力。

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

在之前的一篇博客中,我們根據(jù)電子自行車訂閱源中的精確位置數(shù)據(jù)訓(xùn)練了一個基于LSTM的語言模型,并使用該模型為相同地區(qū)(如加利福尼亞州圣莫尼卡)生成合成和隱私增強(qiáng)數(shù)據(jù)集。

通過以不同的方式構(gòu)建問題,并結(jié)合地圖數(shù)據(jù)作為背景,我們可以創(chuàng)建一個模型,生成人類可能訪問世界各地的精確位置。

開始

我們可以通過將電動自行車位置數(shù)據(jù)編碼為像素到圖像中,然后訓(xùn)練類似于CycleGAN、Pix2pix和StyleGAN的圖像翻譯任務(wù)來對此進(jìn)行建模。

在這篇文章中,我們將使用由pix2pix和CycleGAN的作者創(chuàng)建的FastCUT模型,因?yàn)樗膬?nèi)存效率高,訓(xùn)練速度快(適用于更高分辨率的位置)。

使用GitHub上完整的端到端示例,為自己的城市創(chuàng)建合成位置數(shù)據(jù)https://github.com/gretelai/GAN-location-generator.git

步驟

模擬訓(xùn)練步驟

  • 從地圖上精確的電動自行車位置創(chuàng)建DomainA
  • 從相同的地圖創(chuàng)建DomainB,但不包含位置
  • 訓(xùn)練FastCUT 翻譯DomainB->DomainA

合成數(shù)據(jù)生成步驟

  • 對于目標(biāo)地理位置,請下載新地圖(DomainC)
  • 在FastCUT模型上進(jìn)行推理,以預(yù)測車的位置(DomainC->DomainA)
  • 使用CV處理圖像以查找指示器位置并轉(zhuǎn)換為經(jīng)緯度

創(chuàng)建訓(xùn)練數(shù)據(jù)集

安裝依賴項(xiàng)后,運(yùn)行python -m locations.create_training_data,創(chuàng)建一對512x512px地圖圖像,分別添加和不添加位置數(shù)據(jù)。

接下來,在數(shù)據(jù)集上訓(xùn)練我們的模型——本質(zhì)上是訓(xùn)練FastCUT模型,以預(yù)測電動自行車位置將在哪里。

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

FastCUT模型將數(shù)據(jù)記錄到Visdom,讓我們可以監(jiān)控模型訓(xùn)練。

在下面的圖中,我們可以看到模型損失在訓(xùn)練期間減少,還可以看到圖像翻譯任務(wù)的預(yù)覽。

第一個圖像是真實(shí)的DomainA地圖數(shù)據(jù),第二個是帶有預(yù)測的自行車位置(假的)的DomainA圖像的翻譯版本,第三個是真實(shí)的DomainB位置。我們可以看到,即使經(jīng)歷了25個epoch,該模型仍在學(xué)習(xí)預(yù)測合理的滑板車位置,例如街角和道路沿線。

當(dāng)運(yùn)行推薦的200個epoch時(shí),該模型似乎過擬合,預(yù)測的滑板車位置從圖像中消失。在這個例子中,我看到了30個epoch有最好的表現(xiàn)。

創(chuàng)建測試數(shù)據(jù)集

運(yùn)行下面的命令,創(chuàng)建東京市中心的訓(xùn)練數(shù)據(jù)集,或修改緯度和經(jīng)度參數(shù),為任何地理區(qū)域創(chuàng)建合成位置。

請注意,對于FastCUT python代碼的工作方式,我們需要將地圖網(wǎng)格圖像復(fù)制到testA和testB目錄中。

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

現(xiàn)在,我們可以使用我們的模型來處理上面為網(wǎng)格創(chuàng)建的每個圖像,以預(yù)測東京各地的電動自行車位置。

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

查看單個圖像的結(jié)果:

將合成圖像轉(zhuǎn)換回坐標(biāo)

現(xiàn)在我們的任務(wù)是把合成電動自行車從東京拍攝到的圖像轉(zhuǎn)換成真實(shí)世界的坐標(biāo),以建立我們的合成位置數(shù)據(jù)集。

為了提取電動自行車的位置,我們使用OpenCV應(yīng)用了一個圖像遮罩,該遮罩可以搜索圖像中的任何一組洋紅色像素。

創(chuàng)建遮罩后,我們可以計(jì)算遮罩中任何像素與圖像文件名中編碼的中心點(diǎn)緯度和經(jīng)度之間的距離。

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

請注意,根據(jù)城市在世界上的位置,每個緯度或經(jīng)度之間的物理距離可能會發(fā)生顯著變化,在將像素映射到位置時(shí),我們需要使用基于橢球體的模型來計(jì)算精確的偏移量。

幸運(yùn)的是,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函數(shù)預(yù)覽遮罩圖像,然后將其轉(zhuǎn)換回緯度和經(jīng)度坐標(biāo)。

放在一起

我們現(xiàn)在可以處理所有圖像,并將合成的位置縫合到東京所有地方的新數(shù)據(jù)集中。

在東京各地查看數(shù)據(jù)時(shí),存在一些明確的誤報(bào),尤其是在為水道生成位置的情況下。也許需要進(jìn)一步調(diào)整模型,或在訓(xùn)練數(shù)據(jù)(domainA或domainB)中提供更多水道的負(fù)面示例,將減少誤報(bào)。

然而,結(jié)果令人鼓舞(考慮到幾乎沒有模型或數(shù)據(jù)集調(diào)整),該模型似乎能夠模擬電動自行車數(shù)據(jù)集的分布和位置,該數(shù)據(jù)集是使用來自世界不同地區(qū)的地圖進(jìn)行訓(xùn)練的。

結(jié)論

在這篇文章中,我們嘗試了將視覺領(lǐng)域的上下文(例如地圖數(shù)據(jù))與表格數(shù)據(jù)結(jié)合起來,為世界上任何地方創(chuàng)建真實(shí)的位置數(shù)據(jù)。

到此這篇關(guān)于利用Python創(chuàng)建位置生成器的示例詳解的文章就介紹到這了,更多相關(guān)Python位置生成器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論