bm_rasterize_meshes.py 3.27 KB
Newer Older
facebook-github-bot's avatar
facebook-github-bot committed
1
2
3
4
# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.


from itertools import product
5

facebook-github-bot's avatar
facebook-github-bot committed
6
7
8
9
import torch
from fvcore.common.benchmark import benchmark
from test_rasterize_meshes import TestRasterizeMeshes

10

facebook-github-bot's avatar
facebook-github-bot committed
11
12
13
14
15
# ico levels:
# 0: (12 verts, 20 faces)
# 1: (42 verts, 80 faces)
# 3: (642 verts, 1280 faces)
# 4: (2562 verts, 5120 faces)
Nikhila Ravi's avatar
Nikhila Ravi committed
16
17
# 5: (10242 verts, 20480 faces)
# 6: (40962 verts, 81920 faces)
facebook-github-bot's avatar
facebook-github-bot committed
18
19
20
21
22
23
24
25
26


def bm_rasterize_meshes() -> None:
    kwargs_list = [
        {
            "num_meshes": 1,
            "ico_level": 0,
            "image_size": 10,  # very slow with large image size
            "blur_radius": 0.0,
Nikhila Ravi's avatar
Nikhila Ravi committed
27
            "faces_per_pixel": 3,
facebook-github-bot's avatar
facebook-github-bot committed
28
29
30
31
32
33
34
35
36
37
38
39
40
        }
    ]
    benchmark(
        TestRasterizeMeshes.rasterize_meshes_python_with_init,
        "RASTERIZE_MESHES",
        kwargs_list,
        warmup_iters=1,
    )

    kwargs_list = []
    num_meshes = [1]
    ico_level = [1]
    image_size = [64, 128]
Nikhila Ravi's avatar
Nikhila Ravi committed
41
42
43
    blur = [1e-6]
    faces_per_pixel = [3, 50]
    test_cases = product(num_meshes, ico_level, image_size, blur, faces_per_pixel)
facebook-github-bot's avatar
facebook-github-bot committed
44
    for case in test_cases:
Nikhila Ravi's avatar
Nikhila Ravi committed
45
        n, ic, im, b, f = case
facebook-github-bot's avatar
facebook-github-bot committed
46
        kwargs_list.append(
Nikhila Ravi's avatar
Nikhila Ravi committed
47
48
49
50
51
52
53
            {
                "num_meshes": n,
                "ico_level": ic,
                "image_size": im,
                "blur_radius": b,
                "faces_per_pixel": f,
            }
facebook-github-bot's avatar
facebook-github-bot committed
54
55
56
57
58
59
60
61
62
63
        )
    benchmark(
        TestRasterizeMeshes.rasterize_meshes_cpu_with_init,
        "RASTERIZE_MESHES",
        kwargs_list,
        warmup_iters=1,
    )

    if torch.cuda.is_available():
        kwargs_list = []
Nikhila Ravi's avatar
Nikhila Ravi committed
64
65
        num_meshes = [8, 16]
        ico_level = [4, 5, 6]
66
67
        # Square and non square cases
        image_size = [64, 128, 512, (512, 256), (256, 512)]
Nikhila Ravi's avatar
Nikhila Ravi committed
68
        blur = [1e-6]
69
        faces_per_pixel = [40]
Nikhila Ravi's avatar
Nikhila Ravi committed
70
71
        test_cases = product(num_meshes, ico_level, image_size, blur, faces_per_pixel)

facebook-github-bot's avatar
facebook-github-bot committed
72
        for case in test_cases:
Nikhila Ravi's avatar
Nikhila Ravi committed
73
            n, ic, im, b, f = case
facebook-github-bot's avatar
facebook-github-bot committed
74
75
76
77
78
79
            kwargs_list.append(
                {
                    "num_meshes": n,
                    "ico_level": ic,
                    "image_size": im,
                    "blur_radius": b,
Nikhila Ravi's avatar
Nikhila Ravi committed
80
                    "faces_per_pixel": f,
facebook-github-bot's avatar
facebook-github-bot committed
81
82
83
84
85
86
87
88
                }
            )
        benchmark(
            TestRasterizeMeshes.rasterize_meshes_cuda_with_init,
            "RASTERIZE_MESHES_CUDA",
            kwargs_list,
            warmup_iters=1,
        )
Christoph Lassner's avatar
Christoph Lassner committed
89

90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
        # Test a subset of the cases with the
        # image plane intersecting the mesh.
        kwargs_list = []
        num_meshes = [8, 16]
        # Square and non square cases
        image_size = [64, 128, 512, (512, 256), (256, 512)]
        dist = [3, 0.8, 0.5]
        test_cases = product(num_meshes, dist, image_size)

        for case in test_cases:
            n, d, im = case
            kwargs_list.append(
                {
                    "num_meshes": n,
                    "ico_level": 4,
                    "image_size": im,
                    "blur_radius": 1e-6,
                    "faces_per_pixel": 40,
                    "dist": d,
                }
            )

        benchmark(
            TestRasterizeMeshes.bm_rasterize_meshes_with_clipping,
            "RASTERIZE_MESHES_CUDA_CLIPPING",
            kwargs_list,
            warmup_iters=1,
        )

Christoph Lassner's avatar
Christoph Lassner committed
119
120
121

if __name__ == "__main__":
    bm_rasterize_meshes()