首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在神经网络框架中有前向映射/翘曲的实现吗?

在神经网络框架中有前向映射/翘曲的实现吗?
EN

Stack Overflow用户
提问于 2019-08-30 20:12:30
回答 1查看 569关注 0票数 1

引言

我想训练一个神经网络,并需要一个可区分的前向映射实现,以将源图像扭曲为目标图像,请参见例如https://www.cs.princeton.edu/courses/archive/fall00/cs426/lectures/warp/warp.pdf

我已经发现的是通过pytorch (grid_sample)的向后映射,其中目标图像中的每个像素都只与源图像中的一个特定像素(+邻居)有一个连接。

代码

代码语言:javascript
运行
复制
import torch
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt

# create artificial image
im = np.zeros((9,9)) 
im[4,4] = 1

# warping images
u = np.zeros((9,9))
v = np.zeros((9,9))

u[4,3] += 1


# shift to pytorch
h,w = np.shape(im)

im_t = torch.from_numpy(im).float().view((1,1,h,w)).cpu()
u_t = torch.from_numpy(u).float().view((1,h,w,1)).cpu()
v_t = torch.from_numpy(v).float().view((1,h,w,1)).cpu()


n, _, h, w = im_t.size()
batchSize, _, _, nmbSamples = im_t.size()

# warp source image
U = torch.arange(start=0, end=w).expand(h, w).float().view((n, h, w, 1)).cpu()
V = torch.arange(start=0, end=h).expand(w, h).t().float().view((n, h, w, 1)).cpu()

U_u = (U + u_t) / ((w-1) / 2) - 1
V_v = (V + v_t) / ((h-1) / 2) - 1

grid = torch.cat((U_u, V_v), dim=3).float().cpu()

warped_t = F.grid_sample(im_t, grid)

# plot routine
plt.figure()
plt.subplot(121)
plt.imshow(im_t.data.cpu().numpy()[0,0,:,:])
plt.grid()

plt.subplot(122)
plt.imshow(warped_t.data.cpu().numpy()[0,0,:,:])
plt.grid()

plt.show(block=False)
plt.draw()

问题

我需要的是从源图像中不同的、非相邻的像素渲染目标图像。

感谢你的帮助。问候

EN

回答 1

Stack Overflow用户

发布于 2021-01-08 02:05:41

我不认为在PyTorch中有一个现有的正向变形方法。正向翘曲不可避免地带来了多对一对应和零对应等问题。这些问题需要根据问题设置来解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57726538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档