mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-12-23 15:50:39 +08:00
a formula for bin size for images over 64x64 (#90)
Summary: Signed-off-by: Michele Sanna <sanna@arrival.com> fixes the bin_size calculation with a formula for any image_size > 64. Matches the values chosen so far. simple test: ``` import numpy as np import matplotlib.pyplot as plt image_size = np.arange(64, 2048) bin_size = np.where(image_size <= 64, 8, (2 ** np.maximum(np.ceil(np.log2(image_size)) - 4, 4)).astype(int)) print(image_size) print(bin_size) for ims, bins in zip(image_size, bin_size): if ims <= 64: assert bins == 8 elif ims <= 256: assert bins == 16 elif ims <= 512: assert bins == 32 elif ims <= 1024: assert bins == 64 elif ims <= 2048: assert bins == 128 assert (ims + bins - 1) // bins < 22 plt.plot(image_size, bin_size) plt.grid() plt.show() ```  Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/90 Reviewed By: jcjohnson Differential Revision: D21160372 Pulled By: nikhilaravi fbshipit-source-id: 660cf5832f4ca5be243c435a6bed969596fc0188
This commit is contained in:
committed by
Facebook GitHub Bot
parent
c3d636dc8c
commit
f8acecb6b3
@@ -7,6 +7,11 @@ from pytorch3d import _C
|
||||
from pytorch3d.renderer.mesh.rasterize_meshes import pix_to_ndc
|
||||
|
||||
|
||||
# Maxinum number of faces per bins for
|
||||
# coarse-to-fine rasterization
|
||||
kMaxPointsPerBin = 22
|
||||
|
||||
|
||||
# TODO(jcjohns): Support non-square images
|
||||
def rasterize_points(
|
||||
pointclouds,
|
||||
@@ -82,6 +87,15 @@ def rasterize_points(
|
||||
elif image_size <= 1024:
|
||||
bin_size = 64
|
||||
|
||||
if bin_size != 0:
|
||||
# There is a limit on the number of points per bin in the cuda kernel.
|
||||
points_per_bin = 1 + (image_size - 1) // bin_size
|
||||
if points_per_bin >= kMaxPointsPerBin:
|
||||
raise ValueError(
|
||||
"bin_size too small, number of points per bin must be less than %d; got %d"
|
||||
% (kMaxPointsPerBin, points_per_bin)
|
||||
)
|
||||
|
||||
if max_points_per_bin is None:
|
||||
max_points_per_bin = int(max(10000, points_packed.shape[0] / 5))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user