vkgs-sim / docs /presentation /new_blocks.py
kimjunhan's picture
Add files using upload-large-folder tool
ceea884 verified
Raw History Blame Contribute Delete
17 kB
# ================================================================== โ…ก. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜
divider(slides[6], "์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜", "Vulkan ๊ธฐ๋ฐ˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์—”์ง„์˜ ์ „์ฒด ๊ตฌ์กฐ, ํ•œ ํ”„๋ ˆ์ž„์˜ ๋ Œ๋” ๊ทธ๋ž˜ํ”„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฃจํ”„, Python ๊ณผ์˜ ๋ฐ์ดํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.")
def module(sl, x, y, w, h, title, desc, fill=WHITE, line=LIGHT, tcolor=NAVY, dcolor=GRAY, size=10):
box(sl, x, y, w, h, "", fill=fill, line=line)
tb(sl, x + 0.06, y + 0.04, w - 0.12, 0.26, title, size=size + 1, bold=True, color=tcolor)
tb(sl, x + 0.06, y + 0.3, w - 0.12, h - 0.32, desc, size=size, color=dcolor)
def figure(sl, path, y, w=11.8, h=4.4, x=0.85):
im = Image.open(path)
s_ = min(w / im.width, h / im.height)
ww, hh = im.width * s_, im.height * s_
return sl.shapes.add_picture(path, Inches(x + (w - ww) / 2), Inches(y), Inches(ww), Inches(hh))
def down_arrow(sl, x, y, w=0.26, h=0.26, color=BLUE):
s_ = sl.shapes.add_shape(MSO_SHAPE.DOWN_ARROW, Inches(x), Inches(y), Inches(w), Inches(h))
s_.fill.solid()
s_.fill.fore_color.rgb = color
s_.line.fill.background()
s_.shadow.inherit = False
# ------------------------------------------------------------------ 8 ์—”์ง„ ์ „์ฒด ๊ตฌ์กฐ๋„
s = slides[7]
y = body(s, "์—”์ง„ ๊ตฌ์กฐ", "์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์—”์ง„ ์ „์ฒด ๊ตฌ์กฐ๋„", [
"(a) CPU ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฃจํ”„๊ฐ€ ๋งค ํ”„๋ ˆ์ž„ ์ œ์–ด ยท ์ž์ฐจ ๋™์—ญํ•™ ยท ์ถฉ๋Œ ยท ๊ตฌ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ยท ์„ผ์„œ ยท ๊ธฐ๋ก์„ ์ฒ˜๋ฆฌํ•˜๊ณ , (b) GPU ๋ Œ๋” ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ฐ€์šฐ์‹œ์•ˆ โ†’ ์ •๋ ฌ โ†’ ๋ž˜์Šคํ„ฐ โ†’ ํ›„์ฒ˜๋ฆฌ๋กœ ์˜์ƒ์„ ๋งŒ๋“ฆ (๊ทธ๋ฆผ์˜ ๊ฐ ๋‹จ๊ณ„๋Š” scene-0402 ์‹ค์ œ ๋ฐ์ดํ„ฐ)",
])
figure(s, "/home/mm/Downloads/vkgs-sim/docs/presentation/figures/out/fig_engine_pipeline.png", y + 0.02, h=6.98 - (y + 0.02))
notes(s, "์ฐธ๊ณ ํ•œ ๋„์‹ ํ˜•์‹: 3DGS (Kerbl 2023) ์ตœ์ ํ™” ํŒŒ์ดํ”„๋ผ์ธ, HUGSIM ยท OmniRe ๊ฐœ์š”๋„ โ€” ๋‹จ๊ณ„๋งˆ๋‹ค ์‹ค์ œ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ ์ค€๋‹ค. (a) ์˜ ์žฅ์• ๋ฌผ ์ง€๋„ ยท ๊ตฌ๊ฐ„ ยท ๋ผ์ด๋‹ค ยท ์†๋„ ๊ธฐ๋ก, (b) ์˜ ๊ฐ€์šฐ์‹œ์•ˆ ยท ํ™”๋ฉด ํƒ€์› ยท ์ •๋ ฌ ์ˆœ์„œ ยท ํ•˜๋Š˜ ยท ์ƒ‰ ยท ๊ฑฐ๋ฆฌ๋Š” ๋ชจ๋‘ scene-0402 ๊ตฌ๊ฐ„ 1 ๋ชจ๋ธ๊ณผ ์‹ค์ œ ์ฃผํ–‰ ๋กœ๊ทธ์—์„œ ๋งŒ๋“  ๊ทธ๋ฆผ์ด๋‹ค. ์—”์ง„์€ ํ•˜๋‚˜์˜ ์‹คํ–‰ ํŒŒ์ผ(vkgs_viewer)์ด๊ณ , ์ฐฝ ๋ชจ๋“œ(์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ)์™€ ์˜คํ”„์Šคํฌ๋ฆฐ ๋ชจ๋“œ(๋ฐ์ดํ„ฐ ๋ Œ๋” ยท ์ฆ๊ฐ•)๊ฐ€ ๊ฐ™์€ ๋ Œ๋”๋Ÿฌ๋ฅผ ์“ด๋‹ค.")
# ------------------------------------------------------------------ 9 ๋ Œ๋” ๊ทธ๋ž˜ํ”„ ํŒŒ์ดํ”„๋ผ์ธ
s = slides[8]
y = body(s, "์—”์ง„ ๊ตฌ์กฐ", "๋ Œ๋” ๊ทธ๋ž˜ํ”„ โ€” ํ•œ ํ”„๋ ˆ์ž„์˜ ํŒจ์Šค ํŒŒ์ดํ”„๋ผ์ธ", [
"ํ”„๋ ˆ์ž„ ๊ตฌ์„ฑ์€ configs/render_graph.json ์ด ์ •ํ•จ โ€” ํŒจ์Šค๋งˆ๋‹ค ์“ฐ๋Š” ์ž์›๊ณผ ์šฉ๋„ (uses) ๋ฅผ ์„ ์–ธํ•˜๋ฉด ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ฐฐ๋ฆฌ์–ด ยท ๋ ˆ์ด์•„์›ƒ ์ „ํ™˜์„ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•จ",
"๊ฐ€์šฐ์‹œ์•ˆ SSBO โ†’ preprocess (ํˆฌ์˜ ยท SH ยท ๋ณด์ด๋Š” ๊ฒƒ๋งŒ ์••์ถ•) โ†’ GPU radix ์ •๋ ฌ โ†’ ํ•˜๋Š˜ ๋ฐฐ๊ฒฝ โ†’ ์Šคํ”Œ๋žซ ๋ž˜์Šคํ„ฐ (RGBA16F ์ƒ‰ + r32f ๊ฑฐ๋ฆฌ) โ†’ ํ›„์ฒ˜๋ฆฌ โ€” 800ร—450 ์žฅ๋‹น ์•ฝ 6.8 ms",
])
figure(s, "/home/mm/Downloads/vkgs-sim/docs/presentation/figures/out/fig_engine_pipeline_b.png", y + 0.1, h=6.95 - (y + 0.1))
notes(s, "์‹ค์ œ ํŒจ์Šค ์ˆœ์„œ: clear_draw_args โ†’ preprocess โ†’ sort โ†’ readback_count โ†’ background โ†’ scene โ†’ precip โ†’ weather โ†’ fxaa โ†’ fxaa_resolve โ†’ to_present (camera_isp ๊บผ์ง). ์ธก์ •(800ร—450): preprocess 2.02 ms, sort 0.44 ms (์ด์ „ bitonic 31~35 ms ๋Œ€๋น„ 13๋ฐฐ), scene 4.38 ms. preprocess ๊ฐ€ 200๋งŒ ๊ฐœ ์ค‘ ๋ณด์ด๋Š” ์•ฝ 25~46๋งŒ ๊ฐœ๋งŒ ์••์ถ•ํ•ด ์ •๋ ฌ ๋Œ€์ƒ์„ ์ค„์ธ๋‹ค. RGBA16F ๋ธ”๋ Œ๋”ฉ์€ 32๋น„ํŠธ ๋Œ€๋น„ 64 dB, ๊ฑฐ๋ฆฌ ๋ˆ„์ ์€ ์„ผ์„œ ยท ๋‚ ์”จ ยท ๋ฐ˜์‚ฌ์— ์“ด๋‹ค.")
# ------------------------------------------------------------------ 10 ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฃจํ”„
s = slides[9]
y = body(s, "์—”์ง„ ๊ตฌ์กฐ", "์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฃจํ”„ โ€” ํ•œ ํ”„๋ ˆ์ž„์— ์ผ์–ด๋‚˜๋Š” ์ผ", [
"์ œ์–ด ์ž…๋ ฅ โ†’ ์ž์ฐจ ์ ๋ถ„ ยท ์ถฉ๋Œ โ†’ ๊ตฌ๊ฐ„ ์„ ํƒ โ†’ ์„ผ์„œ โ†’ ๋ Œ๋” โ†’ ๊ธฐ๋ก์˜ ์ˆœ์„œ๋กœ ๋งค ํ”„๋ ˆ์ž„์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์Šคํฌ๋ฆฝํŠธ ์ œ์–ด๋Š” 50 ms ๊ณ ์ • ์Šคํ…์ด๋ผ ์žฌํ˜„ ๊ฐ€๋Šฅํ•จ",
"VLA ๋ชจ๋ธ์€ '์ œ์–ด ์ž…๋ ฅ' ์ž๋ฆฌ์— ๋“ค์–ด์™€ 6์บ  (+ ์„ผ์„œ) ๊ด€์ธก์„ ๋ฐ›๊ณ  ์กฐํ–ฅ ยท ๊ฐ€์†์„ ๋Œ๋ ค์ฃผ๋Š” ๊ตฌ์กฐ โ€” ๊ธฐ๋ก๋œ ์ œ์–ด๋Š” drive_log.csv ๋กœ ๋‚จ์Œ (์˜ค๋ฅธ์ชฝ: ์‹ค์ œ ์‹œํ—˜ ์ฃผํ–‰์˜ ์†๋„)",
])
pic = figure(s, "/home/mm/Downloads/vkgs-sim/docs/presentation/figures/out/fig_engine_pipeline_a.png", y + 0.05, h=2.75)
yy = y + 0.2 + pic.height / 914400
table(s, 0.85, yy, 11.8, [["๋‹จ๊ณ„", "ํ•ต์‹ฌ ์ฒ˜๋ฆฌ"],
["โ‘ข ์ถฉ๋Œ", "์ฐจ์ฒด ์ƒ˜ํ”Œ 0.1 m ๊ฒฉ์ž ยท ๊นŠ์ด = ๋‹ฟ์€ ์  โˆ’ ์Šค์นจ (2) ยท ๊ฐ™์€ ๋ฐฉํ–ฅ 0.3 m ์•ž์ด ๋” ๊นŠ์ง€ ์•Š์œผ๋ฉด ํ—ˆ์šฉ (๊ฐ‡ํž˜ ๋ฐฉ์ง€)"],
["โ‘ฃ ๊ตฌ๊ฐ„", "๋‹ด๋‹น ๊ถค์ ์ด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ตฌ๊ฐ„ ยท 3 m ํžˆ์Šคํ…Œ๋ฆฌ์‹œ์Šค ยท ๊ฐ€๊นŒ์šด 3๊ตฌ๊ฐ„ ๋น„๋™๊ธฐ ๋กœ๋“œ ยท ๊ต์ฒด 0.19์ดˆ"],
["โ‘ค ์„ผ์„œ", "๋„ค ๋ฐ”ํ€ด ์ž๋ฆฌ ์ง€๋ฉด ๋†’์ด๋กœ z ยท pitch ยท roll โ†’ ๋ผ์ด๋‹ค 32 ร— 1,091 ๊ด‘์„  DDA 4 ms ยท ๋ ˆ์ด๋” 5๋Œ€ ๋„ํ”Œ๋Ÿฌ"]],
[0.1, 0.9], size=10, rowh=0.29)
notes(s, "โ‘ข ์žฅ์• ๋ฌผ ์ง€๋„์˜ ์™ธํ†จ์ด ์นธ์ด๋‚˜ ํ™”๋‹จ ๊ฐ€์žฅ์ž๋ฆฌ ํ•œ ์นธ์— ์ฐจ์ฒด ์˜†์ด ์Šค์น˜๊ธฐ๋งŒ ํ•ด๋„ ๋ง‰ํ˜€ ๊ฐ‡ํžˆ๋˜ ๋ฌธ์ œ๋ฅผ ์Šค์นจ ํ—ˆ์šฉ๊ณผ ํƒˆ์ถœ ํŒ์ •์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค. โ‘ค ๊ธฐ์šธ์–ด์ง„ ๊ธธ์„ ๋ฌด์‹œํ•˜๋ฉด ๋‚ฎ์€ ๋น”์˜ ๋…ธ๋ฉด ๊ฑฐ๋ฆฌ๊ฐ€ 20% ๋„˜๊ฒŒ ์งง์•„์ ธ ๋…ธ๋ฉด์— ์•‰ํžŒ๋‹ค.")
# ------------------------------------------------------------------ 11 ๋ฐ์ดํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค
s = slides[10]
y = body(s, "์—”์ง„ ๊ตฌ์กฐ", "Python โ†” ์—”์ง„ ๋ฐ์ดํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค", [
"์—”์ง„๊ณผ Python ์€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋กœ๋งŒ ์—ฐ๊ฒฐ๋จ โ€” ๊ฐ ํŒŒ์ผ์€ ๋ฌด์—‡์œผ๋กœ ๋งŒ๋“ค์—ˆ๋Š”์ง€ export.json ์— ๋‚จ๊ธฐ๊ณ , ๋ชจ๋ธ ยท ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฐ”๋€Œ๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“ฆ",
])
table(s, 0.85, y + 0.15, 11.8, [
["ํŒŒ์ผ", "๋งŒ๋“œ๋Š” ๊ณณ (Python)", "๋‚ด์šฉ", "์—”์ง„์—์„œ ์“ฐ๋Š” ๊ณณ"],
["point_cloud.ply (๊ตฌ๊ฐ„๋งˆ๋‹ค)", "recon train", "๊ฐ€์šฐ์‹œ์•ˆ + ์›์  ์ฃผ์„ (nusim_origin)", "๋ Œ๋”๋Ÿฌ ยท SegmentStreamer"],
["segments.txt", "render/segmap.py", "๊ตฌ๊ฐ„ ์›์  ์ฐจ ยท ๋‹ด๋‹น ๊ถค์  ์ ", "SegmentMap (๊ตฌ๊ฐ„ ์„ ํƒ)"],
["rig.txt", "render/export.py", "ํ”„๋ ˆ์ž„๋ณ„ 6์บ  w2c ยท ์ž์ฐจ ํฌ์ฆˆ ยท ๊ฐ์ฒด ๋ฐ•์Šค", "์žฌ์ƒ ยท ์šด์ „ ์นด๋ฉ”๋ผ ยท ์ฆ๊ฐ•"],
["map.txt ยท drivable.txt", "render/export.py", "๋งต ์„  ยท ์ฃผํ–‰๊ฐ€๋Šฅ์˜์—ญ ํด๋ฆฌ๊ณค", "์˜ค๋ฒ„๋ ˆ์ด ยท ์—ฐ์„ ํŒ์ •"],
["obstacles.pgm", "sim/obstacles.py", "0.2 m ์žฅ์• ๋ฌผ ๊ฒฉ์ž (์ •์  ๋ผ์ด๋‹ค)", "์ถฉ๋Œ ํŒ์ •"],
["world.vox", "sim/voxels.py + vkgs_voxcarve", "0.2 m ๋ณต์…€ + 0.5 m ์ง€๋ฉด ๋†’์ด ์ง€๋„", "๋ผ์ด๋‹ค ยท ๋ ˆ์ด๋” ยท ๋…ธ๋ฉด ์ •์ฐฉ"],
["sky.ktx2 ยท IBL", "recon/sky.py ยท render/ibl.py", "ํ•™์Šต ํ•˜๋Š˜ ํ๋ธŒ๋งต ยท ํ™˜๊ฒฝ๊ด‘ (BC6H)", "background ยท glTF ์กฐ๋ช…"],
["sim.json ยท render_graph.json", "configs/", "๋‚ ์”จ ยท ์„ผ์„œ ยท ์ถฉ๋Œ ยท ์นด๋ฉ”๋ผ ยท ํŒจ์Šค ๊ตฌ์„ฑ", "์—”์ง„ ์ „์ฒด ์„ค์ •"],
], [0.22, 0.24, 0.32, 0.22], size=10, rowh=0.42)
notes(s, "ํ•˜๋“œ์ฝ”๋”ฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์กฐ์ •๊ฐ’์€ ๋ชจ๋‘ configs/ ์— ์žˆ๋‹ค. ์ขŒํ‘œ๊ณ„๋Š” nusim/data/rig.py ์˜ docstring ์ด ์œ ์ผํ•œ ์ถœ์ฒ˜๋‹ค. ๋ชจ๋“  ํŒŒ์ผ์€ ๊ทธ ๋ชจ๋ธ์˜ ์›์  ๊ธฐ์ค€ ์ขŒํ‘œ๋ฅผ ์“ด๋‹ค.")
# ================================================================== โ…ข. ๋ฉ€ํ‹ฐ๋ทฐ ์‹œ์  ๋ณ€ํ™˜ ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜
divider(slides[12], "๋ฉ€ํ‹ฐ๋ทฐ ์‹œ์  ๋ณ€ํ™˜ ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜", "6์บ  ๋ฉ€ํ‹ฐ๋ทฐ ์˜์ƒ์„ ์ƒˆ๋กœ์šด ์นด๋ฉ”๋ผ ๋ฐฐ์น˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ชจ๋ธ โ€” ๊ตฌ๊ฐ„๋ณ„ 3DGS ์žฌ๊ตฌ์„ฑ ๋ชจ๋ธ์˜ ๊ตฌ์กฐ, ๋ชจ๋“ˆ, ์†์‹ค ํ•จ์ˆ˜, ๋ฆฌ๊ทธ ๋ณ€ํ™˜์„ ์„ค๋ช…ํ•œ๋‹ค.")
# ------------------------------------------------------------------ 14 ๋ชจ๋ธ ์ „์ฒด ๊ตฌ์กฐ๋„
s = slides[13]
y = body(s, "๋ชจ๋ธ ๊ตฌ์กฐ", "๋ฉ€ํ‹ฐ๋ทฐ ์‹œ์  ๋ณ€ํ™˜ ๋ชจ๋ธ ์ „์ฒด ๊ตฌ์กฐ๋„", [
"๊ตฌ๊ฐ„๋งˆ๋‹ค ๋ฉ€ํ‹ฐ๋ทฐ ์‚ฌ์ง„ ยท ๋ผ์ด๋‹ค๋กœ 3DGS ์žฅ๋ฉด์„ ํ•™์Šต: ๋ผ์ด๋‹ค ์ดˆ๊ธฐํ™” โ†’ 3D ๊ฐ€์šฐ์‹œ์•ˆ โ†’ ๋ฏธ๋ถ„ ๋ž˜์Šคํ„ฐ๋ผ์ด์ € โ†’ ๋ Œ๋” (์ƒ‰ ยท ๊นŠ์ด) โ†’ ์‚ฌ์ง„ ยท ๋ผ์ด๋‹ค ยท ๋งˆ์Šคํฌ ๊ฐ๋… โ†’ ์—ญ์ „ํŒŒ",
"ํ•™์Šต๋œ ์žฅ๋ฉด์„ ๋ฆฌ๊ทธ ๋ณ€ํ˜• T ๋ฅผ ์ค€ 6์บ ์œผ๋กœ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ด ์ƒˆ ์‹œ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ (๊ทธ๋ฆผ์˜ ๊ฐ ๋‹จ๊ณ„๋Š” scene-0402 ์‹ค์ œ ๋ฐ์ดํ„ฐ)",
])
figure(s, "/home/mm/Downloads/vkgs-sim/docs/presentation/figures/out/fig_viewpoint_model_a.png", y + 0.15, h=6.9 - (y + 0.15))
notes(s, "์ฐธ๊ณ ํ•œ ๋„์‹ ํ˜•์‹: 3DGS (Kerbl 2023) Fig. 2 ์ตœ์ ํ™” ํŒŒ์ดํ”„๋ผ์ธ โ€” ์ดˆ๊ธฐ ์  โ†’ 3D ๊ฐ€์šฐ์‹œ์•ˆ โ†’ ํˆฌ์˜ ยท ํƒ€์ผ ๋ž˜์Šคํ„ฐ โ†’ ์ด๋ฏธ์ง€, ๊ทธ๋ฆฌ๊ณ  gradient ๋˜๋Œ๋ฆผ. ์—ฌ๊ธฐ์„œ๋Š” SfM ์  ๋Œ€์‹  ๋ผ์ด๋‹ค ๋ˆ„์ ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์‚ฌ์ง„ ์†์‹ค์— ๋ผ์ด๋‹ค ๊นŠ์ด ยท ํ•˜๋Š˜ ยท ์ •๊ทœํ™”๋ฅผ ๋”ํ–ˆ๋‹ค. (b) ๋Š” ์‹œ์  ๋ณ€ํ™˜์ด ํ•™์Šต์ด ์•„๋‹ˆ๋ผ '์ƒˆ ์นด๋ฉ”๋ผ ๋ฐฐ์น˜๋กœ ๋‹ค์‹œ ์ฐ๊ธฐ' ์ž„์„ ๋ณด์ธ๋‹ค. ์˜ค๋ฅธ์ชฝ 9์žฅ์€ ๊ฐ™์€ ์ˆœ๊ฐ„์˜ ์•ž ์นด๋ฉ”๋ผ ๋ณ€ํ˜• 9์ข…์ด๋‹ค.")
# ------------------------------------------------------------------ 15 ์žฅ๋ฉด ํ‘œํ˜„ ยท ๋ฏธ๋ถ„ ๋ Œ๋”๋Ÿฌ
s = slides[14]
y = body(s, "๋ชจ๋ธ ๊ตฌ์กฐ", "๋ชจ๋“ˆ โ‘  ์žฅ๋ฉด ํ‘œํ˜„ ๋ฐ ๋ฏธ๋ถ„ ๋ž˜์Šคํ„ฐ๋ผ์ด์ €", [
"์žฅ๋ฉด ๋ชจ๋ธ์€ ์‹ ๊ฒฝ๋ง์ด ์•„๋‹Œ ๋ช…์‹œ์  ๊ฐ€์šฐ์‹œ์•ˆ ์ง‘ํ•ฉ์ด๋ฉฐ, ๋ผ์ด๋‹ค๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  3DGS-MCMC ๋กœ ๊ฐœ์ˆ˜ (์ตœ๋Œ€ 200๋งŒ) ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์œ„์น˜๋ฅผ ์žฌ๋ฐฐ์น˜ํ•จ",
"๋ฏธ๋ถ„ ๋ž˜์Šคํ„ฐ๋ผ์ด์ € (gsplat 1.4.0) ๊ฐ€ ์ƒ‰ ยท ๋ถˆํˆฌ๋ช…๋„ ยท ๊นŠ์ด๋ฅผ ํ•จ๊ป˜ ๋ Œ๋”๋งํ•˜๊ณ , ๊ทธ gradient ๋กœ ๋ชจ๋“  ๊ฐ€์šฐ์‹œ์•ˆ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•จ",
])
box(s, 0.85, y + 0.15, 5.75, 3.55, "", fill=PALE, line=BLUE)
tb(s, 0.95, y + 0.2, 5.5, 0.3, "๊ฐ€์šฐ์‹œ์•ˆ ์žฅ๋ฉด G", size=13, bold=True, color=NAVY)
table(s, 1.0, y + 0.58, 5.45, [["ํ•ญ๋ชฉ", "์„ค์ •"], ["์ดˆ๊ธฐํ™”", "์ •์  ๋ผ์ด๋‹ค ๋ˆ„์  (์•ฝ 400 sweep) โ†’ ๋ณต์…€ โ†’ ์‚ฌ์ง„ ํˆฌ์˜ ์ƒ‰"],
["ํŒŒ๋ผ๋ฏธํ„ฐ", "ฮผ ยท ์Šค์ผ€์ผ ยท ์ฟผํ„ฐ๋‹ˆ์–ธ ยท ฮฑ ยท SH (3์ฐจ, 1,000 ์Šคํ…๋งˆ๋‹ค ์ฐจ์ˆ˜ ์ฆ๊ฐ€)"],
["๋ฐ€๋„ ์ œ์–ด", "MCMC: ์ƒํ•œ 200๋งŒ, ๋‚ฎ์€ ฮฑ ์žฌ๋ฐฐ์น˜, ์œ„์น˜ ์žก์Œ (lr 5e5)"],
["์ •๊ทœํ™”", "๋ถˆํˆฌ๋ช…๋„ ยท ์Šค์ผ€์ผ ํ‰๊ท  ๊ฐ 0.01 (๋ณด์ด๋Š” ๊ฒƒ๋งŒ ์˜ต์…˜)"],
["๊ฐ€๋ฆผ", "์ฐจ๋Ÿ‰ ยท ์‚ฌ๋žŒ 3D ๋ฐ•์Šค โ†’ ์‚ฌ์ง„ ยท ๋ผ์ด๋‹ค์—์„œ ์ œ์™ธ"]], [0.25, 0.75], size=10, rowh=0.44)
box(s, 6.9, y + 0.15, 5.75, 3.55, "", fill=PALE, line=BLUE)
tb(s, 7.0, y + 0.2, 5.5, 0.3, "๋ฏธ๋ถ„ ๋ž˜์Šคํ„ฐ๋ผ์ด์ € (gsplat)", size=13, bold=True, color=NAVY)
rs = [("ํˆฌ์˜", "ฮฃโ€ฒ = J W ฮฃ Wแต€ Jแต€, ๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ SH ์ƒ‰ ๊ณ„์‚ฐ"), ("ํƒ€์ผ ์ •๋ ฌ", "16ร—16 ํƒ€์ผ๋งˆ๋‹ค ๊ฒน์น˜๋Š” ๊ฐ€์šฐ์‹œ์•ˆ์„ ๊นŠ์ด์ˆœ ์ •๋ ฌ"),
("์•ŒํŒŒ ๋ธ”๋ Œ๋”ฉ", "C = ฮฃ cแตข ฮฑแตข ฮ (1 โˆ’ ฮฑโฑผ), ฮฑ ๋ˆ„์  ยท ๊ธฐ๋Œ€ ๊นŠ์ด D"), ("์—ญ์ „ํŒŒ", "ฮผ ยท ฮฃ ยท ฮฑ ยท SH ๋กœ gradient (packed ๋ชจ๋“œ)"),
("์นด๋ฉ”๋ผ ํ–‰๋ ฌ", "view gradient ๋” (2.2๋ฐฐ ๋А๋ ค์ง) โ†’ ฮ” ๋Š” ๋ณ„๋„ ๋ชจ๋“ˆ")]
for k, (t, d) in enumerate(rs):
box(s, 7.05, y + 0.6 + k * 0.6, 1.5, 0.5, t, fill=NAVY, color=WHITE, size=10, bold=True)
tb(s, 8.62, y + 0.62 + k * 0.6, 3.95, 0.48, d, size=10, color=GRAY, anchor=MSO_ANCHOR.MIDDLE)
notes(s, "Vulkan ๋ Œ๋”๋Ÿฌ๋Š” ์ด ๋ž˜์Šคํ„ฐ๋ผ์ด์ €์™€ ๊ฐ™์€ ์ˆ˜์‹(gs_common.glsl)์„ ์“ฐ๊ณ , ํ•™์Šต๊ธฐ ๋ Œ๋”์™€ PSNR 56 dB ๋กœ ์ผ์น˜ํ•œ๋‹ค. ํ•™์Šต์€ 2๋ฐฐ ๋‹ค์šด์Šค์ผ€์ผ(800ร—450)์—์„œ ํ•œ๋‹ค.")
# ------------------------------------------------------------------ 16 ๋ณด์ • ยท ํ•˜๋Š˜
s = slides[15]
y = body(s, "๋ชจ๋ธ ๊ตฌ์กฐ", "๋ชจ๋“ˆ โ‘ก ์นด๋ฉ”๋ผ ๋ณด์ • ๋ฐ ํ•˜๋Š˜ ๋ชจ๋ธ", [
"6๋Œ€ ์นด๋ฉ”๋ผ์˜ ์ƒ‰ ยท ์žฅ์ฐฉ ์˜ค์ฐจ์™€ ํ•˜๋Š˜์„ ๋ณ„๋„ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ, ๊ฐ€์šฐ์‹œ์•ˆ์ด ์นด๋ฉ”๋ผ ์ฐจ์ด๋‚˜ ํ•˜๋Š˜์„ ํก์ˆ˜ํ•ด ์ƒ๊ธฐ๋Š” floater ๋ฅผ ๋ง‰์Œ",
])
cards = [("์ƒ‰ ๋ณด์ • (ColorCorrection)", "์นด๋ฉ”๋ผ๋ณ„ 3ร—4 ์•„ํ•€ + ํ”„๋ ˆ์ž„๋ณ„ RGB log ๊ฒŒ์ธ\n\naffine_c = [I|0] + d_c โˆ’ mean(d)\nlog_gain_v = g_v โˆ’ mean(g)\n\n์ค‘์‹ฌํ™” โ†’ ๋ณด์ • ์—†์ด ๊ทธ๋ฆฐ ply ๊ฐ€ ๊ณง\nํ‰๊ท  ์นด๋ฉ”๋ผ ์ƒ‰ (์ฆ๊ฐ• ์˜์ƒ์˜ ์ƒ‰ ๊ธฐ์ค€)"),
("์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ • (CameraAdjust)", "์นด๋ฉ”๋ผ๋ณ„ SE(3) ฮ” (ํšŒ์ „๋ฒกํ„ฐ 3 + ์ด๋™ 3)\n\nw2cโ€ฒ = ฮ” ยท w2c\ncamโ†’egoโ€ฒ = camโ†’ego ยท ฮ”โปยน\n\nlr 1e-4, 4 ์Šคํ…๋งˆ๋‹ค, 3๋งŒ ์Šคํ…๊นŒ์ง€\n์‚ฌ์ „ ์ •๊ทœํ™” 5e-4\n๊ฒฐ๊ณผ: ํšŒ์ „ 0.1~0.4ยฐ, ์ด๋™ ์•ฝ 1 cm"),
("ํ•˜๋Š˜ ๋ชจ๋ธ (SkyCube)", "ํ•™์Šต ํ๋ธŒ๋งต 256ยฒ (lr 0.01)\n\nรŽ_final = รŽ + (1 โˆ’ ฮฑ) ยท S(๊ด‘์„  ๋ฐฉํ–ฅ)\n\nBCE: ํ•˜๋Š˜ ํ”ฝ์…€ ฮฑ โ†’ 0,\n๋ผ์ด๋‹ค ํ‘œ๋ฉด ํ”ฝ์…€ ฮฑ โ†’ 1 (ฮป 0.05)\n\n์ €์žฅ: sky.ktx2 (RGBA16F ์„ ํ˜•)\nโ†’ Vulkan background ํŒจ์Šค")]
for k, (t, d) in enumerate(cards):
box(s, 0.85 + k * 4.0, y + 0.2, 3.8, 2.45, d, title=t, fill=PALE, line=BLUE, size=11, align=PP_ALIGN.LEFT)
why = [("๋ถ„๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด", "์นด๋ฉ”๋ผ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ƒ‰ ยท ๋…ธ์ถœ์„ ๊ฐ€์šฐ์‹œ์•ˆ ์ƒ‰์ด ํก์ˆ˜ โ†’ ์ƒˆ ์‹œ์ ์—์„œ ์–ผ๋ฃฉ"),
("๋ถ„๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด", "์žฅ์ฐฉ ์˜ค์ฐจ (0.1~0.4ยฐ) ๋งŒํผ ๊ฐ™์€ ๋ฌผ์ฒด๊ฐ€ ๊ฒน์ณ ํ๋ ค์ง"),
("๋ถ„๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด", "ํ•˜๋Š˜์ด 9 m ๊ฑฐ๋ฆฌ์˜ ๋ฐ์€ ๊ฐ€์šฐ์‹œ์•ˆ ๋ฉ์–ด๋ฆฌ๋กœ ๊ตฌ์›Œ์ ธ floater ๊ฐ€ ๋จ")]
for k, (t, d) in enumerate(why):
x = 0.85 + k * 4.0
down_arrow(s, x + 1.77, y + 2.72, h=0.24, color=ORANGE)
box(s, x, y + 3.02, 3.8, 0.85, d, title=t, fill=WHITE, line=ORANGE, size=10)
notes(s, "ํ•˜๋Š˜์„ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ํ•˜๋Š˜ ์ผ๋ถ€๊ฐ€ ๊ฐ€๊นŒ์šด ๋ถˆํˆฌ๋ช… ๊ฐ€์šฐ์‹œ์•ˆ์œผ๋กœ ๊ตฌ์›Œ์ ธ(9 m ๊ฑฐ๋ฆฌ์˜ ๋ฐ์€ ๋ฉ์–ด๋ฆฌ) ์ƒˆ ์‹œ์ ์—์„œ ๋– ๋‹ค๋‹Œ๋‹ค. 'ํ•˜๋Š˜ ์•„๋‹˜' ์ „์ฒด์— ฮฑโ†’1 ์„ ๊ฑธ๋ฉด ๋‚˜๋ญ‡์žŽ ์‚ฌ์ด๋กœ floater ๊ฐ€ ์ƒ๊ฒจ ๋ผ์ด๋‹ค๊ฐ€ ํ‘œ๋ฉด์„ ํ™•์ธํ•œ ํ”ฝ์…€์—๋งŒ ๊ฑด๋‹ค.")
# ------------------------------------------------------------------ 17 ์†์‹ค ยท ํ•™์Šต ์„ค์ •
s = slides[16]
y = body(s, "๋ชจ๋ธ ๊ตฌ์กฐ", "์†์‹ค ํ•จ์ˆ˜ ๋ฐ ํ•™์Šต ์„ค์ •", [
"์‚ฌ์ง„ ์žฌ๊ตฌ์„ฑ ์†์‹ค์— ๋ผ์ด๋‹ค ๊นŠ์ด ยท ํ•˜๋Š˜ ๋ถ„๋ฆฌ ยท MCMC ์ •๊ทœํ™” ยท ์นด๋ฉ”๋ผ ๋ณด์ • ์‚ฌ์ „์„ ๋”ํ•ด ํ•™์Šตํ•จ โ€” ์‚ฌ์ง„ ์†์‹ค์€ ์ฐจ๋Ÿ‰ ยท ์‚ฌ๋žŒ ๋งˆ์Šคํฌ ๋ฐ– ํ”ฝ์…€์—์„œ๋งŒ ๊ณ„์‚ฐ",
])
box(s, 0.85, y + 0.15, 11.8, 0.62, "L = 0.8 ยท L1 + 0.2 ยท (1 โˆ’ SSIM) + 0.1 ยท L_depth + 0.05 ยท (L_sky + L_surf) + 0.01 ยท mean(ฮฑ) + 0.01 ยท mean(s) + 5ยท10โปโด ยท R(ฮ”)",
fill=NAVY, color=WHITE, size=14, bold=True)
table(s, 0.85, y + 0.95, 6.3, [["ํ•ญ", "์ •์˜"], ["L1 ยท D-SSIM", "๋ Œ๋” รŽ ์™€ ์‹ค์ œ ์‚ฌ์ง„, ๊ฐ์ฒด ๋งˆ์Šคํฌ ๋ฐ– ํ”ฝ์…€ (SSIM ฮป 0.2)"],
["L_depth", "|D โˆ’ D_lidar| / D_lidar, 1/4 ํ•ด์ƒ๋„, ์ฐจ๋Ÿ‰ ํ”ฝ์…€ ์ œ์™ธ"],
["L_sky ยท L_surf", "ํ•˜๋Š˜ ํ”ฝ์…€ โˆ’log(1โˆ’ฮฑ), ๋ผ์ด๋‹ค ํ‘œ๋ฉด ํ”ฝ์…€ โˆ’log ฮฑ"],
["mean(ฮฑ) ยท mean(s)", "MCMC ๋ถˆํˆฌ๋ช…๋„ ยท ์Šค์ผ€์ผ ์ •๊ทœํ™”"],
["R(ฮ”)", "์นด๋ฉ”๋ผ ์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณด์ •์˜ ํฌ๊ธฐ ์‚ฌ์ „"]], [0.3, 0.7], size=10, rowh=0.44)
table(s, 7.4, y + 0.95, 5.25, [["ํ•™์Šต ์„ค์ • (day_map)", "๊ฐ’"], ["์Šคํ… / ๊ตฌ๊ฐ„", "15,000 (์•ฝ 20๋ถ„)"], ["ํ•ด์ƒ๋„", "800ร—450 (2๋ฐฐ ์ถ•์†Œ)"],
["๊ฐ€์šฐ์‹œ์•ˆ ์ƒํ•œ", "2,000,000"], ["lr ์œ„์น˜ / ์Šค์ผ€์ผ", "1.6e-4 (โ†’ ร—0.01) / 5e-3"],
["lr ํšŒ์ „ / ๋ถˆํˆฌ๋ช…๋„ / ์ƒ‰", "1e-3 / 5e-2 / 1e-3"], ["์žฌ๋ฐฐ์น˜ ๊ตฌ๊ฐ„", "500 ~ 15,000 ์Šคํ…"]],
[0.55, 0.45], size=10, rowh=0.37)
notes(s, "L_depth ๋Š” ๊ฐ™์€ ์ •์  ๋ผ์ด๋‹ค๋ฅผ ๊ทธ ์นด๋ฉ”๋ผ์— ํˆฌ์˜ํ•œ ๊นŠ์ด ์ง€๋„์™€์˜ ์ƒ๋Œ€ ์˜ค์ฐจ๋‹ค. ์ฐจ๋Ÿ‰ ํ”ฝ์…€์˜ ๋ผ์ด๋‹ค ๊นŠ์ด๋Š” ์ฐจ ๋’ค ๋ฐฐ๊ฒฝ์ด๋ผ ๋บ€๋‹ค. GPU ํ…์„œ ๊ฐ’์„ ํŒŒ์ด์ฌ if ๋กœ ๊ฒ€์‚ฌํ•˜๋ฉด ๋งค ์Šคํ… ๋™๊ธฐํ™”๊ฐ€ ๊ฑธ๋ ค ํ•™์Šต ๋ฃจํ”„์—์„œ ํ”ผํ•œ๋‹ค.")
# ------------------------------------------------------------------ 18 ๋ฆฌ๊ทธ ๋ณ€ํ™˜
s = slides[17]
y = body(s, "๋ชจ๋ธ ๊ตฌ์กฐ", "๋ชจ๋“ˆ โ‘ข ๋ฉ€ํ‹ฐ๋ทฐ ๋ฆฌ๊ทธ ๋ณ€ํ™˜ ๋ฐ ๋ Œ๋”๋ง", [
"6๋Œ€ ์นด๋ฉ”๋ผ ์ „์ฒด์— ๊ฐ™์€ ๋ณ€ํ˜• T ๋ฅผ ์ฃผ์–ด ๋ฆฌ๊ทธ ๊ธฐํ•˜๋ฅผ ์œ ์ง€ํ•œ ์ฑ„ '๋‹ค๋ฅธ ์ฐจ์— ๋‹จ ์นด๋ฉ”๋ผ' ๋ฅผ ๋งŒ๋“ฆ โ€” ์ž์ฐจ ๊ถค์  ยท ์‹œ๊ฐ์€ ์›๋ณธ ๊ทธ๋Œ€๋กœ",
"ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๊ทธ ์‹œ๊ฐ์„ ๋งก์€ ๊ตฌ๊ฐ„ ๋ชจ๋ธ๋กœ ๋ Œ๋”๋งํ•˜์—ฌ ๊ตฌ๊ฐ„ ๊ฒฝ๊ณ„์—์„œ๋„ ์ƒ‰ ยท ๊ธฐํ•˜ ์ด์Œ๋งค ์—†์ด ์ด์–ด์ง (scene-0402: ๊ตฌ๊ฐ„ 5๊ฐœ)",
])
pic = figure(s, "/home/mm/Downloads/vkgs-sim/docs/presentation/figures/out/fig_viewpoint_model_b.png", y + 0.1, h=2.9)
yy = y + 0.2 + pic.height / 914400
table(s, 0.85, yy, 11.8, [["๋‹จ๊ณ„", "๋‚ด์šฉ"],
["1 ยท ๋ณ€ํ˜• ์ •์˜", "shift [x ์•ž, y ์™ผ์ชฝ, z ์œ„] m ยท rot [roll, pitch, yaw]ยฐ โ€” configs/aug/rig_variants.json (9์ข…)"],
["2 ยท ์บ˜๋ฆฌ๋ธŒ ๋ณ€ํ™˜", "Rโ€ฒ = Rz(yaw) ยท R ยท Rx(โˆ’pitch) ยท Rz(roll), tโ€ฒ = t + shift โ†’ w2cโ€ฒ = (ego โ†’ world ยท cam โ†’ egoโ€ฒ)โปยน ยท ฮ”"],
["3 ยท ๋‹ด๋‹น ๊ตฌ๊ฐ„", "CAM_FRONT ์‹œ๊ฐ โˆˆ [own0, own1) ์ธ ๊ตฌ๊ฐ„ ๋ชจ๋ธ (๊ฒน์นจ 10 m ์˜ ๊ฐ€์šด๋ฐ์—์„œ ์ž๋ฆ„)"],
["4 ยท ๋ Œ๋” ยท ์ถœ๋ ฅ", "๊ตฌ๊ฐ„๋งˆ๋‹ค rig.txt โ†’ ์˜คํ”„์Šคํฌ๋ฆฐ 6์บ  (FXAA ๋”, ํ•˜๋Š˜ ํ๋ธŒ๋งต) โ†’ <variant>/<CAM>/*.jpg + meta.json"]],
[0.16, 0.84], size=10, rowh=0.31)
notes(s, "๋ณ€ํ™˜ ๊ณต์‹์€ nusim/aug/rig_aug.py transform_calib ๊ทธ๋Œ€๋กœ๋‹ค. pitch + ๋Š” ์นด๋ฉ”๋ผ๊ฐ€ ์•„๋ž˜๋กœ ์ˆ™์ด๋Š” ๋ฐฉํ–ฅ, yaw + ๋Š” ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฆฌ๋Š” ๋ฐฉํ–ฅ. ๋ฆฌ๊ทธ ์ „์ฒด์— ๊ฐ™์€ T ๋ฅผ ์ฃผ๋ฏ€๋กœ 6์บ  ์‚ฌ์ด์˜ ์ƒ๋Œ€ ๊ธฐํ•˜๊ฐ€ ์‹ค์ œ ์ฐจ๋Ÿ‰์ฒ˜๋Ÿผ ์ผ๊ด€๋œ๋‹ค.")