Ultralytics YOLO ๋ชจ๋ธ์ ๋ํ OpenVINO ์ถ๋ก ์ต์ ํํ๊ธฐ: ์ข ํฉ ๊ฐ์ด๋
์๊ฐ
When deploying deep learning models, particularly those for object detection such as Ultralytics YOLO models, achieving optimal performance is crucial. This guide delves into leveraging Intel's OpenVINO toolkit to optimize inference, focusing on latency and throughput. Whether you're working on consumer-grade applications or large-scale deployments, understanding and applying these optimization strategies will ensure your models run efficiently on various devices.
์ง์ฐ ์๊ฐ ์ต์ ํ
์ง์ฐ ์๊ฐ ์ต์ ํ๋ ์๋น์ ์๋๋ฆฌ์ค์์ ํํ ๋ณผ ์ ์๋ ๋จ์ผ ์ ๋ ฅ์ ๋ํด ๋จ์ผ ๋ชจ๋ธ์ ์ฆ๊ฐ์ ์ธ ์๋ต์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ์ ๋๋ค. ๋ชฉํ๋ ์ ๋ ฅ๊ณผ ์ถ๋ก ๊ฒฐ๊ณผ ์ฌ์ด์ ์ง์ฐ์ ์ต์ํํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์งง์ ์ง์ฐ ์๊ฐ์ ๋ฌ์ฑํ๋ ค๋ฉด ํนํ ๋์ ์ถ๋ก ์ ์คํํ๊ฑฐ๋ ์ฌ๋ฌ ๋ชจ๋ธ์ ๊ด๋ฆฌํ ๋ ์ ์คํ ๊ณ ๋ ค๊ฐ ํ์ํฉ๋๋ค.
์ง์ฐ ์๊ฐ ์ต์ ํ๋ฅผ ์ํ ์ฃผ์ ์ ๋ต:
- ๋๋ฐ์ด์ค๋น ๋จ์ผ ์ถ๋ก : ์ง์ฐ ์๊ฐ์ ์ค์ด๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋ฐ์ด์ค๋น ํ ๋ฒ์ ํ ๋ฒ์ ์ถ๋ก ์ผ๋ก ์ ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ฑ์ด ์ฆ๊ฐํ๋ฉด ์ง์ฐ ์๊ฐ์ด ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ํ์ ์ฅ์น ํ์ฉ: ๋ฉํฐ ์์ผ CPU ๋๋ ๋ฉํฐ ํ์ผ GPU์ ๊ฐ์ ์ฅ์น๋ ๋ด๋ถ ํ์ ์ฅ์น๋ฅผ ํ์ฉํ์ฌ ์ง์ฐ ์๊ฐ ์ฆ๊ฐ๋ฅผ ์ต์ํํ๋ฉด์ ์ฌ๋ฌ ์์ฒญ์ ์คํํ ์ ์์ต๋๋ค.
- OpenVINO ์ฑ๋ฅ ํํธ: OpenVINO ์
ov::hint::PerformanceMode::LATENCY
์ ๋ํov::hint::performance_mode
์์ฑ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ธ ์ปดํ์ผ ์ค ์ฑ๋ฅ ํ๋์ด ๊ฐ์ํ๋์ด ๊ธฐ๊ธฐ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ๋ฏธ๋์๋ ์ฌ์ฉํ ์ ์๋ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ์ถ๋ก ์ง์ฐ ์๊ฐ ๊ด๋ฆฌ:
- ๋ชจ๋ธ ์บ์ฑ: ์ง์ฐ ์๊ฐ์ ์ํฅ์ ๋ฏธ์น๋ ๋ชจ๋ธ ๋ก๋ ๋ฐ ์ปดํ์ผ ์๊ฐ์ ์ค์ด๋ ค๋ฉด ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋ธ ์บ์ฑ์ ์ฌ์ฉํ์ธ์. ์บ์ฑ์ ์ฌ์ฉํ ์ ์๋ ์๋๋ฆฌ์ค์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก CPU๊ฐ ๊ฐ์ฅ ๋น ๋ฅธ ๋ชจ๋ธ ๋ก๋ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
- ๋ชจ๋ธ ๋งคํ ๋ ์ฝ๊ธฐ: ๋ก๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด OpenVINO ์์ ๋ชจ๋ธ ์ฝ๊ธฐ๋ฅผ ๋งคํ์ผ๋ก ๋์ฒดํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ธ์ด ์ด๋์ ๋๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ธ์ ์๋ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ov::enable_mmap(false)
๋ฅผ ํด๋ฆญํ์ฌ ๋ค์ ์ฝ๊ธฐ๋ก ์ ํํฉ๋๋ค. - ์๋ ์ฅ์น ์ ํ: ์ด ๋ชจ๋๋ CPU ์์ ์ถ๋ก ์ ์์ํ๊ณ ์ค๋น๊ฐ ๋๋ฉด ๊ฐ์๊ธฐ๋ก ์ ํํ์ฌ ์ฒซ ๋ฒ์งธ ์ถ๋ก ๋๊ธฐ ์๊ฐ์ ์ํํ๊ฒ ์ค์ ๋๋ค.
์ฒ๋ฆฌ๋ ์ต์ ํ
์ฒ๋ฆฌ๋ ์ต์ ํ๋ ์๋ง์ ์ถ๋ก ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ๋ ์๋๋ฆฌ์ค์์ ๋งค์ฐ ์ค์ํ๋ฉฐ, ๊ฐ๋ณ ์์ฒญ ์ฑ๋ฅ์ ํฌ๊ฒ ์ ํ์ํค์ง ์์ผ๋ฉด์ ๋ฆฌ์์ค ํ์ฉ๋๋ฅผ ๊ทน๋ํํฉ๋๋ค.
์ฒ๋ฆฌ๋ ์ต์ ํ๋ฅผ ์ํ ์ ๊ทผ ๋ฐฉ์:
-
OpenVINO ์ฑ๋ฅ ํํธ: ์ฑ๋ฅ ํํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋๋ฐ์ด์ค์์ ์ฒ๋ฆฌ๋์ ํฅ์์ํค๋ ๋์ ์์ค์ ๋ฏธ๋ ์งํฅ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
-
๋ช ์์ ๋ฐฐ์น ๋ฐ ์คํธ๋ฆผ: ๊ณ ๊ธ ์ฑ๋ฅ ํ๋์ ์ํ ๋ช ์์ ์ผ๊ด ์ฒ๋ฆฌ ๋ฐ ์คํธ๋ฆผ ์ฌ์ฉ๊ณผ ๊ด๋ จ๋ ๋ณด๋ค ์ธ๋ถํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
์ฒ๋ฆฌ๋ ์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ:
์ฒ๋ฆฌ๋์ ์ต๋ํํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ด ํด์ผ ํฉ๋๋ค:
- ๊ธฐ๊ธฐ์ ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ์ฌ ์ ๋ ฅ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ฐ์ดํฐ ํ๋ฆ์ ๋ณ๋ ฌ ์คํ์ ์ํด ์์ฝ๋ ๋์ ์ถ๋ก ์์ฒญ์ผ๋ก ๋ถํดํฉ๋๋ค.
- ์ฝ๋ฐฑ์ด ํฌํจ๋ ๋น๋๊ธฐ API๋ฅผ ํ์ฉํ์ฌ ํจ์จ์ฑ์ ์ ์งํ๊ณ ๋๋ฐ์ด์ค ๊ณ ๊ฐ์ ๋ฐฉ์งํ์ธ์.
๋ค์ค ์ฅ์น ์คํ:
OpenVINO์ ๋ฉํฐ ๋๋ฐ์ด์ค ๋ชจ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ๋๋ฐ์ด์ค ๊ด๋ฆฌ ์์ด๋ ๋๋ฐ์ด์ค ๊ฐ ์ถ๋ก ์์ฒญ์ ๊ท ํ์ ์๋์ผ๋ก ์กฐ์ ํ์ฌ ์ฒ๋ฆฌ๋ ํ์ฅ์ ๊ฐ์ํํฉ๋๋ค.
๊ฒฐ๋ก
Ultralytics YOLO ๋ชจ๋ธ์ ์ง์ฐ ์๊ฐ ๋ฐ ์ฒ๋ฆฌ๋์ ๋ง๊ฒ ์ต์ ํํ๋ฉด OpenVINO ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ์ ๋ต์ ์ ์คํ๊ฒ ์ ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ๋ชจ๋ธ์ด ํจ์จ์ ์ผ๋ก ์คํ๋์ด ๋ค์ํ ๋ฐฐํฌ ์๋๋ฆฌ์ค์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค. ์ง์ฐ ์๊ฐ ์ต์ ํ ๋๋ ์ฒ๋ฆฌ๋ ์ต์ ํ ์ค ์ด๋ค ๊ฒ์ ์ ํํ ์ง๋ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ๊ณผ ๋ฐฐํฌ ํ๊ฒฝ์ ํน์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์.
์์ธํ ๊ธฐ์ ์ ๋ณด์ ์ต์ ์ ๋ฐ์ดํธ๋ OpenVINO ๋ฌธ์์ Ultralytics YOLO ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์. ์ด๋ฌํ ๋ฆฌ์์ค์์๋ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ์ต๋ํ ํ์ฉํ ์ ์๋๋ก ์ฌ์ธต์ ์ธ ๊ฐ์ด๋, ํํ ๋ฆฌ์ผ ๋ฐ ์ปค๋ฎค๋ํฐ ์ง์์ ์ ๊ณตํฉ๋๋ค.
๋ชจ๋ธ์ด ์ต์ ์ ์ฑ๋ฅ์ ๋ฐํํ๋๋ก ํ๋ ค๋ฉด ๋จ์ํ ๊ตฌ์ฑ์ ์กฐ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ์ ์ดํดํ๊ณ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ค์๊ฐ ์๋ต์ ์ต์ ํํ๋ ๋๊ท๋ชจ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฒ๋ฆฌ๋์ ๊ทน๋ํํ๋ , Ultralytics YOLO ๋ชจ๋ธ๊ณผ OpenVINO ์ ์กฐํฉ์ ๊ฐ๋ฐ์๊ฐ ๊ณ ์ฑ๋ฅ AI ์๋ฃจ์ ์ ๋ฐฐํฌํ ์ ์๋ ๊ฐ๋ ฅํ ํดํท์ ์ ๊ณตํฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
OpenVINO ์ ์ฌ์ฉํ์ฌ ์งง์ ์ง์ฐ ์๊ฐ์ ์ํด Ultralytics YOLO ๋ชจ๋ธ์ ์ต์ ํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
์งง์ ์ง์ฐ ์๊ฐ์ ์ํด Ultralytics YOLO ๋ชจ๋ธ์ ์ต์ ํํ๋ ๋ฐ๋ ๋ช ๊ฐ์ง ์ฃผ์ ์ ๋ต์ด ํ์ํฉ๋๋ค:
- ์ฅ์น๋น ๋จ์ผ ์ถ๋ก : ์ง์ฐ์ ์ต์ํํ๊ธฐ ์ํด ๋๋ฐ์ด์ค๋น ์ถ๋ก ์ ํ ๋ฒ์ ํ ๋ฒ์ผ๋ก ์ ํํฉ๋๋ค.
- ํ์ ์ฅ์น ํ์ฉ: ์ง์ฐ ์๊ฐ ์ฆ๊ฐ๋ฅผ ์ต์ํํ๋ฉด์ ์ฌ๋ฌ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฉํฐ ์์ผ CPU ๋๋ ๋ฉํฐ ํ์ผ GPU์ ๊ฐ์ ์ฅ์น๋ฅผ ํ์ฉํ์ธ์.
- OpenVINO ์ฑ๋ฅ ํํธ: OpenVINO ์ฌ์ฉ
ov::hint::PerformanceMode::LATENCY
๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ ์ปดํ์ผ ์ค์ ๋๋ฐ์ด์ค์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ๊ฐํธํ๊ฒ ํ๋ํ ์ ์์ต๋๋ค.
์ง์ฐ ์๊ฐ ์ต์ ํ์ ๋ํ ๋ณด๋ค ์ค์ฉ์ ์ธ ํ์ ๊ฐ์ด๋์ ์ง์ฐ ์๊ฐ ์ต์ ํ ์น์ ์ ์ฐธ์กฐํ์ธ์.
Ultralytics YOLO ์ฒ๋ฆฌ๋ ์ต์ ํ๋ฅผ ์ํด OpenVINO ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
OpenVINO ์ฑ๋ฅ ์ ํ ์์ด ๋๋ฐ์ด์ค ๋ฆฌ์์ค ํ์ฉ๋๋ฅผ ๊ทน๋ํํ์ฌ Ultralytics YOLO ๋ชจ๋ธ ์ฒ๋ฆฌ๋์ ํฅ์์ํต๋๋ค. ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ฑ๋ฅ ํํธ: ์ฌ๋ฌ ๊ธฐ๊ธฐ์์ ๊ฐ๋จํ๊ณ ๋์ ์์ค์ ์ฑ๋ฅ ํ๋.
- ๋ช ์์ ์ผ๊ด ์ฒ๋ฆฌ ๋ฐ ์คํธ๋ฆผ: ๊ณ ๊ธ ์ฑ๋ฅ์ ์ํ ๋ฏธ์ธ ์กฐ์ .
- ๋ฉํฐ ๋๋ฐ์ด์ค ์คํ: ์๋ํ๋ ์ถ๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๊ด๋ฆฌ๊ฐ ๊ฐํธํด์ง๋๋ค.
๊ตฌ์ฑ ์์:
import openvino.properties.hint as hints
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
์ฒ๋ฆฌ๋ ์ต์ ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ธ ๊ฐ์ด๋์ ์ฒ๋ฆฌ๋ ์ต์ ํ ์น์ ์์ ํ์ธํ์ธ์.
OpenVINO ์์ ์ฒซ ๋ฒ์งธ ์ถ๋ก ์ง์ฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ฌด์์ธ๊ฐ์?
์ฒซ ๋ฒ์งธ ์ถ๋ก ์ง์ฐ ์๊ฐ์ ์ค์ด๋ ค๋ฉด ๋ค์ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ธ์:
- ๋ชจ๋ธ ์บ์ฑ: ๋ชจ๋ธ ์บ์ฑ์ ์ฌ์ฉํ์ฌ ๋ก๋ ๋ฐ ์ปดํ์ผ ์๊ฐ์ ์ค์ ๋๋ค.
- ๋ชจ๋ธ ๋งคํ ๋ ์ฝ๊ธฐ: ๋งคํ ์ฌ์ฉ(
ov::enable_mmap(true)
)๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ์ง๋ง ์ฝ๊ธฐ(ov::enable_mmap(false)
) ๋ชจ๋ธ์ด ์ด๋์ ๋๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ธ์ ์๋ ๊ฒฝ์ฐ. - ์๋ ์ฅ์น ์ ํ: ์๋ ๋ชจ๋๋ฅผ ํ์ฉํ์ฌ CPU ์ถ๋ก ์ผ๋ก ์์ํ์ฌ ๊ฐ์๊ธฐ๋ก ์ํํ๊ฒ ์ ํํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ถ๋ก ๋๊ธฐ ์๊ฐ ๊ด๋ฆฌ์ ๋ํ ์์ธํ ์ ๋ต์ ์ฒซ ๋ฒ์งธ ์ถ๋ก ๋๊ธฐ ์๊ฐ ๊ด๋ฆฌ ์น์ ์ ์ฐธ์กฐํ์ธ์.
์ง์ฐ ์๊ฐ๊ณผ ์ฒ๋ฆฌ๋ ์ต์ ํ์ ๊ท ํ์ ๋ง์ถ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์ Ultralytics YOLO ์ OpenVINO?
์ง์ฐ ์๊ฐ๊ณผ ์ฒ๋ฆฌ๋ ์ต์ ํ์ ๊ท ํ์ ๋ง์ถ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ ์ฌํญ์ ์ดํดํด์ผ ํฉ๋๋ค:
- ์ง์ฐ ์๊ฐ ์ต์ ํ: ์ฆ๊ฐ์ ์ธ ์๋ต์ด ํ์ํ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ (์: ์๋น์ ๋ฑ๊ธ ์ฑ)์ ์ด์์ ์ ๋๋ค.
- ์ฒ๋ฆฌ๋ ์ต์ ํ: ๋์ ์ถ๋ก ์ด ๋ง์ ์๋๋ฆฌ์ค์ ๊ฐ์ฅ ์ ํฉํ๋ฉฐ ๋ฆฌ์์ค ์ฌ์ฉ์ ๊ทน๋ํํฉ๋๋ค(์: ๋๊ท๋ชจ ๋ฐฐํฌ).
OpenVINO ์ ๊ณ ๊ธ ์ฑ๋ฅ ํํธ์ ๋ฉํฐ ๋๋ฐ์ด์ค ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ ํ ๊ท ํ์ ๋ง์ถ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ ์ ํ OpenVINO ์ฑ๋ฅ ํํธ๋ฅผ ์ ํํ์ธ์.
OpenVINO ์ธ์ ๋ค๋ฅธ AI ํ๋ ์์ํฌ์ ํจ๊ป Ultralytics YOLO ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์๋์?
์, Ultralytics YOLO ๋ชจ๋ธ์ ๋งค์ฐ ๋ค์ฌ๋ค๋ฅํ๋ฉฐ ๋ค์ํ AI ํ๋ ์์ํฌ์ ํตํฉํ ์ ์์ต๋๋ค. ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- TensorRT: NVIDIA GPU ์ต์ ํ์ ๊ฒฝ์ฐ TensorRT ํตํฉ ๊ฐ์ด๋๋ฅผ ๋ฐ๋ฅด์ธ์.
- CoreML: Apple ๋๋ฐ์ด์ค์ ๊ฒฝ์ฐ CoreML ๋ด๋ณด๋ด๊ธฐ ์ง์นจ์ ์ฐธ์กฐํ์ธ์.
- TensorFlow.js: For web and Node.js apps, see the TF.js conversion guide.
Ultralytics ํตํฉ ํ์ด์ง์์ ๋ ๋ง์ ํตํฉ ๊ธฐ๋ฅ์ ์ดํด๋ณด์ธ์.