๐ฏ C++์์ Microsoft.Windows.AI๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒใ์ํ ์ฝ๋ ํฌํจใ
Windows 10 ์ดํ, Windows์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ONNX ํ์์ AI ๋ชจ๋ธ์ ์คํํ ์ ์๋ ๋ฐํ์ ** ์ด ํ์ฌ๋์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ฐ๋ก ** Windows ML (Windows.AI.MachineLearning) ์ ๋๋ค.
์ด ๊ธ์์๋ C++(Win32 ์ฑ ๊ธฐ๋ฐ) ์์ Microsoft.Windows.AI.MachineLearning์ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ** ์ํ ์ฝ๋์ ํจ๊ป ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช
** ํฉ๋๋ค.
โ ์ค๋นํธ
โพ ํ์ ํ๊ฒฝ
- Windows 10 (1809+) ๋๋ Windows 11
- Visual Studio 2019 ์ดํ (Community ๋ฒ์ ๊ฐ๋ฅ)
- C++/WinRT ์ง์ (
Microsoft.Windows.CppWinRT) - Windows SDK 10.0.17763.0 ์ด์
โ ํ๋ก์ ํธ ๊ตฌ์ฑ
Visual Studio์์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค.
์ ํ: C++ Windows ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ (๋น ํ๋ก์ ํธ)
ํ์ ์์คํ : Windows (
WinMain)NuGet์์ ๋ค์ ํจํค์ง๋ฅผ ์ถ๊ฐ
1Microsoft.Windows.CppWinRT
โ ์ํ ์ฝ๋
๋ค์์ WinMain์ ์ฌ์ฉํ์ฌ Win32 API์ Windows.AI.MachineLearning์ ์กฐํฉํ ์ต์ ๊ตฌ์ฑ์ ์ํ์
๋๋ค.
โป ์ฌ์ฉํ ONNX ๋ชจ๋ธ์
model.onnx๋ก ํ๊ณ , ์คํ ํ์ผ๊ณผ ๊ฐ์ ํด๋์ ๋ฐฐ์นํด ์ฃผ์ธ์.
main.cpp
| |
โ ๋ณด์ถฉ: ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ Tensor ์ง์ ๋ฐฉ๋ฒ
๋ชจ๋ธ์ ๋ฐ๋ผ ์ถ๋ก ์ ์ Tensor์ ์์ฑ ๋ฐ ๋ฐ์ธ๋ฉ ์ด ํ์ํ ์ ์์ต๋๋ค.
์:
| |
์ถ๋ ฅ๋ ๋ง์ฐฌ๊ฐ์ง๋ก result.Outputs().Lookup(L"output_0")์ผ๋ก ์ป์ ์ ์์ต๋๋ค.
โ ๋๋ฒ๊น ์ ์ฃผ์์ฌํญ
- ๋ชจ๋ธ ํ์ผ์ด ์คํ ํด๋์ ์กด์ฌํ์ง ์์ผ๋ฉด
FileNotFoundException์ด ๋ฐ์ํฉ๋๋ค. - ์
์ถ๋ ฅ ์ด๋ฆ์ด ์ผ์นํ์ง ์์ผ๋ฉด
invalid_argument์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. - ๋ชจ๋ธ์ ์ ํํ IO ์ฌ์์ Netron ๋ฑ์ ๋๊ตฌ๋ก ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
โ ์์ฝ
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ์ฌ์ฉ API | Windows.AI.MachineLearning (WinRT) |
| ์ธ์ด | C++ (Win32 ๊ธฐ๋ฐ) |
| ๊ถ์ฅ ๋ฐฉ์ | C++/WinRT ํค๋ ๊ฒฝ์ |
| ์ฅ์ | ONNX ๋ชจ๋ธ์ด ๋ค์ดํฐ๋ธ๋ก ๋์, GPU ์ง์๋ ๊ฐ๋ฅ |
| ์ฃผ์ | ๋ชจ๋ธ์ ์ ๋ ฅ ์ด๋ฆ๊ณผ Tensor ํํ์ ์ฃผ์ |
โ ๋์: WinRT๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ ๋ถ๋ค์ ์ํด
- Microsoft์
ONNX Runtime์ ์ฌ์ฉํ๋ฉด WinRT ์์ด C++์์ ์์ ํ ONNX ๋ชจ๋ธ์ ๋ค๋ฃฐ ์ ์์ต๋๋ค. - ํฌ๋ก์ค ํ๋ซํผ ์ง์์ผ๋ก Windows/Linux์์๋ ๊ณตํต ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ
Windows ML (Microsoft.Windows.AI)์ C++์์๋ ํ์คํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ AI ์ถ๋ก ์์ง์ ๋๋ค. Windows ๋ค์ดํฐ๋ธ์์์ ์ถ๋ก ์ด ํ์ํ์ ๋ถ๋ค์ ๊ผญ ์๋ํด ๋ณด์๊ธธ ๋ฐ๋๋๋ค.
ONNX ๋ชจ๋ธ ์์ฑ์ด๋ Tensor ๋ฐ์ธ๋ฉ์ ๊ตฌ์ฒด์ ์ธ ์์๊ฐ ํ์ํ์ ๋ถ๋ค์ ์ํด ํ์ ๊ธฐ์ฌ์์ ์ค๋ช ํ ์์ ์ ๋๋ค!
