MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / TEST_F

Function TEST_F

dnn/test/naive/warp_perspective.cpp:58–179  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

56} // namespace
57
58TEST_F(NAIVE, WARP_PERSPECTIVE_MULTI_SRC) {
59 using Param = WarpPerspective::Param;
60
61 WarpPerspective::Param param;
62 auto extra_impl = [&param, this](const TensorNDArray& tensors) {
63 //! split src
64 TensorND src = tensors[0]; // n h w c
65 size_t n = src.layout[0];
66 TensorNDArray srcs; // n 个 1 h w c
67 TensorLayoutArray srcs_layouts;
68 for (size_t i = 0; i < n; i++) {
69 TensorLayout ly;
70 ly = TensorLayout{
71 {1, src.layout[1], src.layout[2], src.layout[3]}, src.layout.dtype};
72 srcs.emplace_back(malloc(ly.span().dist_byte()), ly);
73 srcs_layouts.emplace_back(ly);
74 }
75
76 auto split = handle()->create_operator<SplitForward>();
77 split->param().axis = 0;
78 auto split_ws_size = split->get_workspace_in_bytes(src.layout, srcs_layouts);
79 dt_byte* split_ws_ptr = static_cast<dt_byte*>(malloc(split_ws_size));
80 Workspace split_ws{split_ws_ptr, split_ws_size};
81 split->exec(src, srcs, split_ws);
82
83 auto warp_perspective = handle()->create_operator<WarpPerspective>();
84 warp_perspective->param() = param;
85 auto warp_ws_size = warp_perspective->get_workspace_in_bytes(
86 srcs_layouts, tensors[1].layout, tensors[2].layout);
87 dt_byte* warp_ws_ptr = static_cast<dt_byte*>(malloc(warp_ws_size));
88 Workspace warp_ws{warp_ws_ptr, warp_ws_size};
89 warp_perspective->exec(srcs, tensors[1], tensors[2], warp_ws);
90
91 free(split_ws_ptr);
92 free(warp_ws_ptr);
93 for (auto&& s : srcs) {
94 free(s.raw_ptr());
95 }
96 };
97
98 {
99 // Float32
100 Checker<WarpPerspectiveForward> checker(handle());
101 WarpPerspectiveMatRNG rng;
102 checker.set_rng(1, &rng);
103 checker.set_extra_opr_impl(extra_impl);
104 // NHWC
105 for (auto bmode :
106 {WarpPerspective::BorderMode::WRAP, WarpPerspective::BorderMode::REFLECT,
107 WarpPerspective::BorderMode::REPLICATE,
108 WarpPerspective::BorderMode::CONSTANT}) {
109 param.border_val = 0.3f;
110 param.bmode = bmode;
111 param.imode = Param::InterpolationMode::LINEAR;
112
113 param.format = Param::Format::NHWC;
114 checker.set_param(param);
115 checker.execs({{1, 2, 2, 4}, {1, 3, 3}, {1, 2, 2, 4}});

Callers

nothing calls this directly

Calls 15

freeFunction · 0.85
TensorValueFunction · 0.85
TensorValueLowbit4Function · 0.85
emplace_backMethod · 0.80
dist_byteMethod · 0.80
spanMethod · 0.80
set_dtypeMethod · 0.80
dimshuffleMethod · 0.80
exectMethod · 0.80
categoryMethod · 0.80
benchmark_implFunction · 0.70
makeFunction · 0.50

Tested by

no test coverage detected