Initial import: World-UAV prepro
Add dataloaders (v1/v2), analysis scripts, and documentation for working with UAV-GeoLoc (World-UAV). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
40
GeoLoc-UAV-main/models/aggregators/LPN.py
Normal file
40
GeoLoc-UAV-main/models/aggregators/LPN.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
import math
|
||||
from torch.nn import functional as F
|
||||
|
||||
def get_part_pool(x, block=4, no_overlap=True):
|
||||
result = []
|
||||
H, W = x.size(2), x.size(3)
|
||||
c_h, c_w = int(H/2), int(W/2)
|
||||
per_h, per_w = H/(2*block),W/(2*block)
|
||||
if per_h < 1 and per_w < 1:
|
||||
new_H, new_W = H+(block-c_h)*2, W+(block-c_w)*2
|
||||
x = nn.functional.interpolate(x, size=[new_H,new_W], mode='bilinear', align_corners=True)
|
||||
H, W = x.size(2), x.size(3)
|
||||
c_h, c_w = int(H/2), int(W/2)
|
||||
per_h, per_w = H/(2*block),W/(2*block)
|
||||
per_h, per_w = math.floor(per_h), math.floor(per_w)
|
||||
for i in range(block):
|
||||
i = i + 1
|
||||
if i < block:
|
||||
x_curr = x[:,:,(c_h-i*per_h):(c_h+i*per_h),(c_w-i*per_w):(c_w+i*per_w)]
|
||||
if no_overlap and i > 1:
|
||||
x_pre = x[:,:,(c_h-(i-1)*per_h):(c_h+(i-1)*per_h),(c_w-(i-1)*per_w):(c_w+(i-1)*per_w)]
|
||||
x_pad = F.pad(x_pre,(per_h,per_h,per_w,per_w),"constant",0)
|
||||
x_curr = x_curr - x_pad
|
||||
result.append(x_curr)
|
||||
else:
|
||||
if no_overlap and i > 1:
|
||||
x_pre = x[:,:,(c_h-(i-1)*per_h):(c_h+(i-1)*per_h),(c_w-(i-1)*per_w):(c_w+(i-1)*per_w)]
|
||||
pad_h = c_h-(i-1)*per_h
|
||||
pad_w = c_w-(i-1)*per_w
|
||||
# x_pad = F.pad(x_pre,(pad_h,pad_h,pad_w,pad_w),"constant",0)
|
||||
if x_pre.size(2)+2*pad_h == H:
|
||||
x_pad = F.pad(x_pre,(pad_h,pad_h,pad_w,pad_w),"constant",0)
|
||||
else:
|
||||
ep = H - (x_pre.size(2)+2*pad_h)
|
||||
x_pad = F.pad(x_pre,(pad_h+ep,pad_h,pad_w+ep,pad_w),"constant",0)
|
||||
x = x - x_pad
|
||||
result.append(x_curr)
|
||||
return result
|
||||
Reference in New Issue
Block a user