In [1]:
# import module
import os
import torch
import numpy as np
import tqdm
import imageio
import torch.nn as nn
import torch.nn.functional as F
import matplotlib.pyplot as plt
from skimage import img_as_ubyte
In [2]:
# io utils
from pytorch3d.io import obj_io, load_obj
print(dir(obj_io))

# datastructures
from pytorch3d.structures import Meshes, Textures

# 3D transformations functions
from pytorch3d.transforms import Rotate, Translate

# rendering components
from pytorch3d.renderer import (
    OpenGLPerspectiveCameras,# cameras, generate a batch of projection matrices 
    look_at_view_transform,  # cameras, rotation and translation matrix of world -> view coordinates
    look_at_rotation,        # cameras, rotation matrix of world coordinates -> view coordinates
    RasterizationSettings,   # mesh.rasterizer, image_size, blur_radius, faces_per_pixel, bin_size, max_faces_per_bin, perspective_correct
    MeshRenderer, 
    MeshRasterizer,          # mesh.rasterizer, This class implements methods for rasterizing a batch of heterogenous Meshes.
    BlendParams,             # blending, blending parameters, sigma, gamma, bg_color
    SilhouetteShader,        # Calculate the silhouette by blending the top K faces for each pixel based on the 2d euclidean...
    PhongShader,             # mesh.shader, per pixel phong lighting
    PointLights              # lighting, PointLights
)
['Image', 'List', 'Meshes', 'PathManager', 'Textures', '_Aux', '_Faces', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_format_faces_indices', '_load', '_open_file', '_parse_face', '_read_image', '_save', 'join_meshes', 'load_mtl', 'load_obj', 'load_objs_as_meshes', 'namedtuple', 'np', 'os', 'pathlib', 'save_obj', 'torch', 'warnings']
In [4]:
# Set the cuda device 
device = torch.device("cuda:0")
torch.cuda.set_device(device)

# Load the obj and ignore the textures and materials.
# pytorch3d.io.load_obj(f_obj, load_textures=True)
# Returns 6-element tuple containing, verts(FloatTensor of shape(V, 3), 
#   faces(NamedTuple with fields: verts_idx(F, 3), normals_idx(F, 3), textures_idx(F, 3), materials_idx),
#   aux(NamedTuple with fields: normals(FloatTensor of shape(N, 3)), verts_uvs(FloatTensor of shape(T, 2)), material_colors(dict),
#       texture_images(dict)) 
verts, faces_idx, _ = load_obj("./data/teapot.obj")
faces = faces_idx.verts_idx

print("verts.shape=", verts.shape)
print("faces.shape=", faces.shape)

# Initialize each vertex to be white in color.
# torch.ones_like(input): Returns tensor filled with scalar value 1, with the same size as input.
# 後ろに[None]を付けて1次元拡張
verts_rgb = torch.ones_like(verts)[None]  # (1, V, 3)
# pytorch3d.structures.Textures(): maps(N, H, W, 3), faces_uvs(N, F, 3), verts_uvs(N, V, 2), verts_rgb(N, V, 3)
textures = Textures(verts_rgb=verts_rgb.to(device))

print("None.shape=", torch.ones_like(verts)[None, None, None].shape)
print("verts_rgb.shape=", verts_rgb.shape)
print("textures.verts_rgb.shape=", textures.verts_rgb_list()[0].shape)

# Create a Meshes object for the teapot. Here we have only one mesh in the batch.
# pytorch3d.structures.Meshes(verts, faces, textures)
teapot_mesh = Meshes(
    verts=[verts.to(device)],   
    faces=[faces.to(device)], 
    textures=textures
)
verts.shape= torch.Size([1292, 3])
faces.shape= torch.Size([2464, 3])
None.shape= torch.Size([1, 1, 1, 1292, 3])
verts_rgb.shape= torch.Size([1, 1292, 3])
textures.verts_rgb.shape= torch.Size([1292, 3])
In [5]:
# Initialize an OpenGL perspective camera.
# default: znear=1.0, zfar=100.0, aspect_ratio=1.0, fov=60.0, degrees: bool, set to True if fov is specified in degrees.
#          R: Rotation matrix of shape(N, 3, 3), T: Translation matrix of shape(N, 3), device: torch.device or string
cameras = OpenGLPerspectiveCameras(device=device)

# To blend the 100 faces we set a few parameters which control the opacity and the sharpness of 
# edges. Refer to blending.py for more details. 
# blendのパラメータ設定
blend_params = BlendParams(sigma=1e-4, gamma=1e-4)

# Define the settings for rasterization and shading. Here we set the output image to be of size
# 256x256. To form the blended image we use 100 faces for each pixel. Refer to rasterize_meshes.py
# for an explanation of this parameter. 
# image_size, blur_radius, faces_per_pixel, bin_size, max_faces_per_bin, perspective_correct
raster_settings = RasterizationSettings(
    image_size=256, 
    blur_radius=np.log(1. / 1e-4 - 1.) * blend_params.sigma, 
    faces_per_pixel=100, 
    bin_size=0
)

# Create a silhouette mesh renderer by composing a rasterizer and a shader. 
# シルエットメッシュレンダラの生成(MeshRendererはどこで定義?)
silhouette_renderer = MeshRenderer(
    rasterizer=MeshRasterizer(
        cameras=cameras, 
        raster_settings=raster_settings
    ),
    shader=SilhouetteShader(blend_params=blend_params)
)

# We will also create a phong renderer. This is simpler and only needs to render one face per pixel.
# 別のラスタライズ設定の作成
raster_settings = RasterizationSettings(
    image_size=256, 
    blur_radius=0.0, 
    faces_per_pixel=1, 
    bin_size=0
)

# We can add a point light in front of the object.
# ポイントライトの生成
lights = PointLights(device=device, location=((2.0, 2.0, -2.0),))

# フォンレンダラの生成
phong_renderer = MeshRenderer(
    rasterizer=MeshRasterizer(
        cameras=cameras, 
        raster_settings=raster_settings
    ),
    shader=PhongShader(device=device, lights=lights)
)
In [6]:
# Select the viewpoint using spherical angles  
distance = 3   # distance from camera to the object
elevation = 40.0   # angle of elevation in degrees 上下角
azimuth = 10.0  # angle of azimuth rotation in degrees 方位角

# Get the position of the camera based on the spherical angles
# 指定した球面角から回転行列と平行移動行列を取得
R, T = look_at_view_transform(distance, elevation, azimuth, device=device)

# Render the teapot providing the values of R and T. 
# 取得したカメラの位置姿勢からティーポットをシルエットレンダラで描画
silhouete = silhouette_renderer(meshes_world=teapot_mesh, R=R, T=T)
# 同様に、フォンのレンダラで描画
image_ref = phong_renderer(meshes_world=teapot_mesh, R=R, T=T)

# 結果をCPUに転送してnumpyに変換?
silhouete = silhouete.cpu().numpy()
image_ref = image_ref.cpu().numpy()
print("silhouete.shape=", silhouete.shape)
print("image_ref.shape=", image_ref.shape)

plt.figure(figsize=(10, 10))
plt.subplot(1, 2, 1)
# シルエット画像のαちゃんねるだけ描画(RGBはデータなし?)
plt.imshow(silhouete.squeeze()[..., 3])  # only plot the alpha channel of the RGBA image
plt.grid("off")
plt.subplot(1, 2, 2)
# フォンの画像を表示(頂点カラーは全て白)
plt.imshow(image_ref.squeeze())
plt.grid("off")
silhouete.shape= (1, 256, 256, 4)
image_ref.shape= (1, 256, 256, 4)
In [7]:
# クラス定義
class Model(nn.Module):
    def __init__(self, meshes, renderer, image_ref):
        super().__init__()
        self.meshes = meshes
        self.device = meshes.device
        self.renderer = renderer
        
        # Get the silhouette of the reference RGB image by finding all the non zero values. 
        image_ref = torch.from_numpy((image_ref[..., :3].max(-1) != 0).astype(np.float32))
        print("image_ref.shape=", image_ref.shape)
        # torch.nn.register_buffer: 基本的にはモデルのパラメータと関係ないバッファを登録するために使用
        self.register_buffer('image_ref', image_ref)
        
        # Create an optimizable parameter for the x, y, z position of the camera. 
        # torch.nn.Parameter: モジュールパラメータとみなされるTensorの設定
        self.camera_position = nn.Parameter(
            torch.from_numpy(np.array([3.0,  6.9, -2.5], dtype=np.float32)).to(meshes.device))

    def forward(self):
        
        # Render the image using the updated camera position. Based on the new position of the 
        # camer we calculate the rotation and translation matrices
        # renderer.cameras.look_at_rotation: 'camera_position'を引数にとり、R (N, 3, 3)の回転行列のバッチを返す
        # 返される回転行列は、ワールド座標系をビューイング座標系に変換するもの
        # 元のカメラ座標は[3] (x, y, z)
        print("camera_position.shape=", self.camera_position.shape)
        # バッチ化するために、Noneで1次元増やして、[1, 3]にする
        print("camera_position[None, :].shape=", self.camera_position[None, :].shape)
        # look_at_rotationで回転行列を取得
        R = look_at_rotation(self.camera_position[None, :], device=self.device)  # (1, 3, 3)
        # torch.bmm(input, mat2, out=None)は、3次元テンソルの行列の掛け算?
        # Rは[1, 3, 3], 逆変換のための転置?
        print("R.transpose(1,2).shape=", R.transpose(1,2).shape)
        # バッチ行列の掛け算を行うため、[1, 3, 1]のテンソルに変換
        print("camera_position[None, :, None].shape=", self.camera_position[None, :, None].shape)
        # [1, 3, 3]×[1, 3, 1]の結果で[1, 3, 1]になる
        print("in bmm=", torch.bmm(R.transpose(1, 2), self.camera_position[None, :, None]).shape)
        # 平行移動量だけ欲しいので、0番目のデータだけ取得して[1, 3]となる。逆変換のため-を付ける
        T = -torch.bmm(R.transpose(1, 2), self.camera_position[None, :, None])[:, :, 0]   # (1, 3)
        print("T.shape=", T.shape)
        # 指定したRとTでメッシュのクローンを描画
        image = self.renderer(meshes_world=self.meshes.clone(), R=R, T=T)
        
        # Calculate the silhouette loss
        print("self.image_ref.shape=", self.image_ref.shape)
        # lossの計算(参照画像と、出力画像のAチャンネルとの2乗誤差)
        loss = torch.sum((image[..., 3] - self.image_ref) ** 2)
        return loss, image
In [8]:
# We will save images periodically and compose them into a GIF.
# 結果をGIF画像に出力するための準備
filename_output = "./teapot_optimization_demo.gif"
writer = imageio.get_writer(filename_output, mode='I', duration=0.3)

# Initialize a model using the renderer, mesh and reference image
# モデルクラスを生成し、メッシュ、レンダラ、参照画像を渡してデバイスに転送
model = Model(meshes=teapot_mesh, renderer=silhouette_renderer, image_ref=image_ref).to(device)

# Create an optimizer. Here we are using Adam and we pass in the parameters of the model
# Adamを使って最適化
optimizer = torch.optim.Adam(model.parameters(), lr=0.05)
image_ref.shape= torch.Size([1, 256, 256])
In [9]:
plt.figure(figsize=(10, 10))

# モデルの生成
_, image_init = model()
plt.subplot(1, 2, 1)
# 初期画像を表示
plt.imshow(image_init.detach().squeeze().cpu().numpy()[..., 3])
plt.grid("off")
plt.title("Starting position")

plt.subplot(1, 2, 2)
# 参照画像(シルエット画像)の表示
plt.imshow(model.image_ref.cpu().numpy().squeeze())
plt.grid("off")
plt.title("Reference silhouette")

# 初期画像が参照画像に近づいていくように学習する
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
Out[9]:
Text(0.5, 1.0, 'Reference silhouette')
In [10]:
writer = imageio.get_writer(filename_output, mode='I', duration=0.3)
# pythonでプログレスバーを出したいときに使うものらしい
loop = tqdm.notebook.tqdm(range(200))
# 200回繰り返す
for i in loop:
    # 勾配の初期化
    optimizer.zero_grad()
    # forward処理してlossを計算?
    loss, _ = model()
    # 勾配の計算
    loss.backward()
    # パラメータ(カメラ座標)の更新
    optimizer.step()
    # lossの表示
    loop.set_description('Optimizing (loss %.4f)' % loss.data)
    
    # lossの値が200未満になれば処理を終了?
    if loss.item() < 200:
        break
    
    # Save outputs to create a GIF. 
    # 10フレームに1回gifに書き出す
    if i % 10 == 0:
        # 現在のカメラ座標の回転行列を取得
        R = look_at_rotation(model.camera_position[None, :], device=model.device)
        # 平行移動行列を計算
        T = -torch.bmm(R.transpose(1, 2), model.camera_position[None, :, None])[:, :, 0]   # (1, 3)
        # フォンのレンダラで描画してimageに結果を格納
        image = phong_renderer(meshes_world=model.meshes.clone(), R=R, T=T)
        # 0番目の画像のRGBデータだけ取得してnumpyに変換?
        image = image[0, ..., :3].detach().squeeze().cpu().numpy()
        print("image.shape=", image.shape)
        # 保存するために画像をunsigned byteに変換
        image = img_as_ubyte(image)
        # GIFに画像を追加
        writer.append_data(image)
        # 結果を表示
        plt.figure()
        plt.imshow(image[..., :3])
        plt.title("iter: %d, loss: %0.2f" % (i, loss.data))
        plt.grid("off")
        plt.axis("off")

# GIF画像を閉じる
writer.close()
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
/home/demo/.local/lib/python3.6/site-packages/skimage/util/dtype.py:135: UserWarning: Possible precision loss when converting from float32 to uint8
  .format(dtypeobj_in, dtypeobj_out))
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
image.shape= (256, 256, 3)
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])
camera_position.shape= torch.Size([3])
camera_position[None, :].shape= torch.Size([1, 3])
R.transpose(1,2).shape= torch.Size([1, 3, 3])
camera_position[None, :, None].shape= torch.Size([1, 3, 1])
in bmm= torch.Size([1, 3, 1])
T.shape= torch.Size([1, 3])
self.image_ref.shape= torch.Size([1, 256, 256])

In [ ]: