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

蝸牛 互聯網技術資訊 2022-06-15 98 0

本篇內容主要講解“如何利用Python創建位置生成器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何利用Python創建位置生成器”吧!

介紹

我們可以通過為包括東京在內的世界各地城市創建合成數據集來測試該模型的學習和概括能力。

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

通過以不同的方式構建問題,并結合地圖數據作為背景,我們可以創建一個模型,生成人類可能訪問世界各地的精確位置。

如何利用Python創建位置生成器  python 第1張

開始

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

步驟

模擬訓練步驟

  • 從地圖上精確的電動自行車位置創建DomainA

  • 從相同的地圖創建DomainB,但不包含位置

  • 訓練FastCUT 翻譯DomainB->DomainA

合成數據生成步驟

  • 對于目標地理位置,請下載新地圖(DomainC)

  • 在FastCUT模型上進行推理,以預測車的位置(DomainC->DomainA)

  • 使用CV處理圖像以查找指示器位置并轉換為經緯度

創建訓練數據集

安裝依賴項后,運行python -m locations.create_training_data,創建一對512x512px地圖圖像,分別添加和不添加位置數據。

如何利用Python創建位置生成器  python 第2張

接下來,在數據集上訓練我們的模型——本質上是訓練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創建位置生成器  python 第3張

當運行推薦的200個epoch時,該模型似乎過擬合,預測的滑板車位置從圖像中消失。在這個例子中,我看到了30個epoch有最好的表現。

如何利用Python創建位置生成器  python 第4張

創建測試數據集

運行下面的命令,創建東京市中心的訓練數據集,或修改緯度和經度參數,為任何地理區域創建合成位置。

請注意,對于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創建位置生成器  python 第5張

將合成圖像轉換回坐標

現在我們的任務是把合成電動自行車從東京拍攝到的圖像轉換成真實世界的坐標,以建立我們的合成位置數據集。

為了提取電動自行車的位置,我們使用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函數預覽遮罩圖像,然后將其轉換回緯度和經度坐標。

如何利用Python創建位置生成器  python 第6張

放在一起

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

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

如何利用Python創建位置生成器  python 第7張

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

如何利用Python創建位置生成器  python 第8張

到此,相信大家對“如何利用Python創建位置生成器”有了更深的了解,不妨來實際操作一番吧!這里是蝸牛博客網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:niceseo99@gmail.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

評論

日本韩欧美一级A片在线观看