您好,登錄后才能下訂單哦!
本篇內容主要講解“如何利用Python創建位置生成器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何利用Python創建位置生成器”吧!
我們可以通過為包括東京在內的世界各地城市創建合成數據集來測試該模型的學習和概括能力。
git clone https://github.com/gretelai/GAN-location-generator.git
通過以不同的方式構建問題,并結合地圖數據作為背景,我們可以創建一個模型,生成人類可能訪問世界各地的精確位置。
我們可以通過將電動自行車位置數據編碼為像素到圖像中,然后訓練類似于CycleGAN、Pix2pix和StyleGAN的圖像翻譯任務來對此進行建模。
模擬訓練步驟
從地圖上精確的電動自行車位置創建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創建位置生成器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。