์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Ultralytics YOLO ๋ชจ๋ธ์— ๋Œ€ํ•œ OpenVINO ์ถ”๋ก  ์ตœ์ ํ™”ํ•˜๊ธฐ: ์ข…ํ•ฉ ๊ฐ€์ด๋“œ

OpenVINO ์—์ฝ”์‹œ์Šคํ…œ

์†Œ๊ฐœ

๋”ฅ ๋Ÿฌ๋‹ ๋ชจ๋ธ, ํŠนํžˆ Ultralytics YOLO ๋ชจ๋ธ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด ๊ฐ์ง€์šฉ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•  ๋•Œ๋Š” ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ์ธํ…”์˜ OpenVINO ํˆดํ‚ท์„ ํ™œ์šฉํ•˜์—ฌ ์ถ”๋ก ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰์— ์ดˆ์ ์„ ๋งž์ถฐ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์†Œ๋น„์ž๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž‘์—…ํ•˜๋“  ๋Œ€๊ทœ๋ชจ ๋ฐฐํฌ์—์„œ ์ž‘์—…ํ•˜๋“  ์ด๋Ÿฌํ•œ ์ตœ์ ํ™” ์ „๋žต์„ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ๋ชจ๋ธ์„ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์—ฐ ์‹œ๊ฐ„ ์ตœ์ ํ™”

์ง€์—ฐ ์‹œ๊ฐ„ ์ตœ์ ํ™”๋Š” ์†Œ๋น„์ž ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ์ž…๋ ฅ์— ๋Œ€ํ•ด ๋‹จ์ผ ๋ชจ๋ธ์˜ ์ฆ‰๊ฐ์ ์ธ ์‘๋‹ต์ด ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ์ž…๋ ฅ๊ณผ ์ถ”๋ก  ๊ฒฐ๊ณผ ์‚ฌ์ด์˜ ์ง€์—ฐ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์งง์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ํŠนํžˆ ๋™์‹œ ์ถ”๋ก ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•  ๋•Œ ์‹ ์ค‘ํ•œ ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ง€์—ฐ ์‹œ๊ฐ„ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ฃผ์š” ์ „๋žต:

  • ๋””๋ฐ”์ด์Šค๋‹น ๋‹จ์ผ ์ถ”๋ก : ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋””๋ฐ”์ด์Šค๋‹น ํ•œ ๋ฒˆ์— ํ•œ ๋ฒˆ์˜ ์ถ”๋ก ์œผ๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋ฉด ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์œ„ ์žฅ์น˜ ํ™œ์šฉ: ๋ฉ€ํ‹ฐ ์†Œ์ผ“ CPU ๋˜๋Š” ๋ฉ€ํ‹ฐ ํƒ€์ผ GPU์™€ ๊ฐ™์€ ์žฅ์น˜๋Š” ๋‚ด๋ถ€ ํ•˜์œ„ ์žฅ์น˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง€์—ฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • OpenVINO ์„ฑ๋Šฅ ํžŒํŠธ: OpenVINO ์˜ ov::hint::PerformanceMode::LATENCY ์— ๋Œ€ํ•œ ov::hint::performance_mode ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋ธ ์ปดํŒŒ์ผ ์ค‘ ์„ฑ๋Šฅ ํŠœ๋‹์ด ๊ฐ„์†Œํ™”๋˜์–ด ๊ธฐ๊ธฐ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ๋ฏธ๋ž˜์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ถ”๋ก  ์ง€์—ฐ ์‹œ๊ฐ„ ๊ด€๋ฆฌ:

  • ๋ชจ๋ธ ์บ์‹ฑ: ์ง€์—ฐ ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ชจ๋ธ ๋กœ๋“œ ๋ฐ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๋ฉด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ชจ๋ธ ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์บ์‹ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ CPU๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅธ ๋ชจ๋ธ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ ๋งคํ•‘ ๋Œ€ ์ฝ๊ธฐ: ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด OpenVINO ์—์„œ ๋ชจ๋ธ ์ฝ๊ธฐ๋ฅผ ๋งคํ•‘์œผ๋กœ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋ธ์ด ์ด๋™์‹ ๋˜๋Š” ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ธŒ์— ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ov::enable_mmap(false) ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋‹ค์‹œ ์ฝ๊ธฐ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž๋™ ์žฅ์น˜ ์„ ํƒ: ์ด ๋ชจ๋“œ๋Š” CPU์—์„œ ์ถ”๋ก ์„ ์‹œ์ž‘ํ•˜๊ณ  ์ค€๋น„๊ฐ€ ๋˜๋ฉด ๊ฐ€์†๊ธฐ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ์ถ”๋ก  ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์›ํ™œํ•˜๊ฒŒ ์ค„์ž…๋‹ˆ๋‹ค.

์ฒ˜๋ฆฌ๋Ÿ‰ ์ตœ์ ํ™”

์ฒ˜๋ฆฌ๋Ÿ‰ ์ตœ์ ํ™”๋Š” ์ˆ˜๋งŽ์€ ์ถ”๋ก  ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋งค์šฐ ์ค‘์š”ํ•˜๋ฉฐ, ๊ฐœ๋ณ„ ์š”์ฒญ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ ๋ฆฌ์†Œ์Šค ํ™œ์šฉ๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜๋ฆฌ๋Ÿ‰ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹:

  1. OpenVINO ์„ฑ๋Šฅ ํžŒํŠธ: ์„ฑ๋Šฅ ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋””๋ฐ”์ด์Šค์—์„œ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋†’์€ ์ˆ˜์ค€์˜ ๋ฏธ๋ž˜ ์ง€ํ–ฅ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
import openvino.properties as props
import openvino.properties.hint as hints

config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
  1. ๋ช…์‹œ์  ๋ฐฐ์น˜ ๋ฐ ์ŠคํŠธ๋ฆผ: ๊ณ ๊ธ‰ ์„ฑ๋Šฅ ํŠœ๋‹์„ ์œ„ํ•œ ๋ช…์‹œ์  ์ผ๊ด„ ์ฒ˜๋ฆฌ ๋ฐ ์ŠคํŠธ๋ฆผ ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ๋œ ๋ณด๋‹ค ์„ธ๋ถ„ํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ฒ˜๋ฆฌ๋Ÿ‰ ์ง€ํ–ฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„:

์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ตœ๋Œ€ํ™”ํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ๊ธฐ๊ธฐ์˜ ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์ž…๋ ฅ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋ณ‘๋ ฌ ์‹คํ–‰์„ ์œ„ํ•ด ์˜ˆ์•ฝ๋œ ๋™์‹œ ์ถ”๋ก  ์š”์ฒญ์œผ๋กœ ๋ถ„ํ•ดํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝœ๋ฐฑ์ด ํฌํ•จ๋œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋””๋ฐ”์ด์Šค ๊ณ ๊ฐˆ์„ ๋ฐฉ์ง€ํ•˜์„ธ์š”.

๋‹ค์ค‘ ์žฅ์น˜ ์‹คํ–‰:

OpenVINO์˜ ๋ฉ€ํ‹ฐ ๋””๋ฐ”์ด์Šค ๋ชจ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์˜ ๋””๋ฐ”์ด์Šค ๊ด€๋ฆฌ ์—†์ด๋„ ๋””๋ฐ”์ด์Šค ๊ฐ„ ์ถ”๋ก  ์š”์ฒญ์˜ ๊ท ํ˜•์„ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜์—ฌ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ™•์žฅ์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

Ultralytics YOLO ๋ชจ๋ธ์„ ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐ ์ฒ˜๋ฆฌ๋Ÿ‰์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•˜๋ฉด OpenVINO ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์— ์„ค๋ช…๋œ ์ „๋žต์„ ์‹ ์ค‘ํ•˜๊ฒŒ ์ ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ๋ชจ๋ธ์ด ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด ๋‹ค์–‘ํ•œ ๋ฐฐํฌ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์—ฐ ์‹œ๊ฐ„ ์ตœ์ ํ™” ๋˜๋Š” ์ฒ˜๋ฆฌ๋Ÿ‰ ์ตœ์ ํ™” ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ• ์ง€๋Š” ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๋ฐฐํฌ ํ™˜๊ฒฝ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

์ž์„ธํ•œ ๊ธฐ์ˆ  ์ •๋ณด์™€ ์ตœ์‹  ์—…๋ฐ์ดํŠธ๋Š” OpenVINO ๋ฌธ์„œ์™€ Ultralytics YOLO ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค์—์„œ๋Š” ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ฌ์ธต์ ์ธ ๊ฐ€์ด๋“œ, ํŠœํ† ๋ฆฌ์–ผ ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๋ชจ๋ธ์ด ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๋‹จ์ˆœํžˆ ๊ตฌ์„ฑ์„ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๊ณ  ์ •๋ณด์— ์ž…๊ฐํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ์‘๋‹ต์„ ์ตœ์ ํ™”ํ•˜๋“  ๋Œ€๊ทœ๋ชจ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ทน๋Œ€ํ™”ํ•˜๋“ , Ultralytics YOLO ๋ชจ๋ธ๊ณผ OpenVINO ์˜ ์กฐํ•ฉ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ์„ฑ๋Šฅ AI ์†”๋ฃจ์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ํˆดํ‚ท์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.



2024-03-17 ์ƒ์„ฑ๋จ 2024-03-17 ์—…๋ฐ์ดํŠธ๋จ
์ž‘์„ฑ์ž: glenn-jocher (1)

๋Œ“๊ธ€