๊ทธ๋ฆฌ๊ณ C++23์ ๊ทธ๋ฐ #embed? ๊ฐ์ ํน๋ณํ ๋ ์์ด ๋์ ๋๋ค๋ C++๋ ์ด์ฌํ ๊ณต๋ถํด์ผ๊ฒ ๊ตฐ์ ์ฌ์ ํ ํ์ญ์ด๋ค์.. #์ด ๋ถ์๊ฑฐ ๋ณด๋ ์ ์ฒ๋ฆฌ๊ธฐ์ชฝ์ธ๊ฐ๋ณด๊ตฐ์? ์ ๊ธฐํ๋ค์. (#define #if #pragma ๊ฐ์๋ ์?)
ํ๋ฅญํ ๊ธฐ์ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
์ ๋ OpenCV๊ฐ ์ ์ฉ๋ C++ ์ธํฐํ์ด์ค ์ฝ๋๋ฅผ C++/CLI๋ก ๋ํํด์ C# WPF๋ก ์ด๋ฏธ์ง ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์ฑํํด์ ์์์ฒ๋ฆฌ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ์ค์ด์๋๋ฐ AI(Python)๊น์ง ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค๋๊ฒ ๋๋ผ์ธ ๋ฐ๋ฆ์
๋๋ค. ๋์ ํด๋ด์ผ๊ฒ ๋ค์~
๊ถ๊ธํ ์ ์ด ์์ด ๋๊ธ ๋จ๊น๋๋ค.
ํ์ฌ ํ๋ก์ ํธ์์ C++๋ก ํ ๋ฒ ๋ํํ ๋ค C#์์ ์ฌ์ฉํ๋ ๊ตฌ์กฐ๋ก ์์ฑํ์ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ์,
C#์์๋ ๋ฐ๋ก ์ถ๋ก ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ์๊ณ ์์ด์ C++ ๋ ์ด์ด๋ฅผ ๋์ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค.
ํน์ ์๋์ ๊ฐ์ ์ด์ ๊ฐ ์์์๊น์?
-
C#์์ ๋ฐ๋ก ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ด ์ ์ฝ, ํธํ์ฑ ์ด์
-
์ฑ๋ฅ ์ต์ ํ ๋ชฉ์
-
๋ฐฐํฌ/์ฌ์ฌ์ฉ์ฑ(๋ค๋ฅธ ์ธ์ด/๋ชจ๋์์ ๊ณตํต DLL๋ก ์ฐ๊ธฐ ๋ฑ)
-
๋๋ ์ ์ธ์ ๋ค๋ฅธ ์ด์
์ ๋ชฐ๋ผ์ ์ฌ์ญค๋ณด๋ฉฐ ๋ต๋ณ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
AI ONNX ๋ชจ๋ธ์ ๋๋ฆด๋ ONNX C#๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ง์ํ์ ๋๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ฐ์.
C++๋ก ๋ฉํํด์ ํ์ฌ๋ด๋ถ์ MFC๋ C++์ ์ฌ์ฉํ๋ ํ๊ฒฝ์ ๊ฐ์ ํ์์ต๋๋ค.
๊ทธ๋์ c#์ผ๋ก ๋ํํ๋ ๊ณผ์ ์ ๊ธฐ๋กํ๊ฑฐ๋ ์๋ฃ๋ก ๋ง๋ค์ด์ ์๊ฒฌ์ ๋๋๊ฑฐ๋ ์ด์ํ์ ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ด์ผ๊ธฐํด๋ณด๋ ค ํ์ต๋๋ค .
์ ํฌ ํ์ฌ ๋ด๋ถ์์๋ c#์ด๋ WPF๋ฅผ ์ฐ์๋๋ถ์ ๊ทน์์๋ผ ใ ใ ๋๋ค ๋ง์กฑํ ๋ ค๋ฉด ์ ๋ฐฉ๋ฒ๋ฐ์ ์๋๊ตฐ์.
์ฌ๋ก๊ทธ ๊ธฐ๋ก์ด ์ข ์์ด๋ฉด ๋ฐํ์๋ฃ๋ก๋ ์ ๋ฆฌํ ์๊ฐ์ ๋๋ค ใ ์ฃผ์ ๋์ง๋ง.. ์ฉ
ใ
ใ
์ ์ํฐ์์ ๋์ง๋ฅผ ๋ง๋ ๊ธฐ๋ถ์ด๊ตฐ์ ใ
๊ฐ์ด ์๊ฒฌ ๋๋ ๋ด์ ใ
ใ
์ง๊ธ๊น์ง์ ๊ณผ์ ์ ๋ฐ์ํ์ฌ ๋๊ฒํจํค์ง์ README๋ฅผ ์ ๋ฐ์ดํธํ์ฌ git์ ์ฌ๋ ธ์ต๋๋ค.
๋ด์ผ.. C# ์์ ํด์ผ๊ฒ ๊ตฐ์.
Tutorial Code
#include <lle/memoryPool.h>
#include <lle/image.h>
#include <lle/lle.h>
#include <iostream>
int main()
{
try {
// create lle instance
auto lle = lleapi::v1::lle::create();
// load Zero-DCE++ model on CPU
// (also supports loading an ONNX model from a file path)
lle->setup(lleapi::v1::dlType::zeroDCE, lleapi::v1::device::cpu);
// load color image
auto input = lleapi::v1::image::imread(
"C://github//dataset//lol_dataset//our485//low//low_15.png",
lleapi::v1::colorType::color
);
// predict
auto output = lle->predict(input);
// save result image
lleapi::v1::image::imwrite(
"C://github//LLE//LLE//x64//Debug//result1.jpg",
output
);
// cleanup internal instance
lle->shutdown();
}
catch (std::exception ex) {
std::cout << ex.what() << std::endl;
}
}
์ฝ๋๋ก ๋ณด์๋ค์ํผ ๋ชจ๋ธ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ ํ์ง ์์๋ enum flag๋ฅผ ๋ฃ์ด์ dll๋ด๋ถ์ ๋ค์ด๊ฐ ์๋ ๋ชจ๋ธ ๋ฐ์ด๋ฌ๋๋ฅผ ์ฝ์ด์ ๋ก๋ํ๋๋ก ์์ ํ์ต๋๋ค. bin2c๋ก ๊ทธ๋ฅ ํค๋ ํ์ผ๋ก ๋ง๋ค์ด์ ๋ฃ์๋ค์ ใ .. ๋ค์์๋ asm ๋ฐฉ๋ฒ์ด๊ฑด ๋ค๋ฅด๊ฒ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฐ์ด๋ฃ๋ ์์ ์ ํด๋ณด๊ณ ์ถ๊ตฐ์.
๋ด์ผ ํ ๊ฒ..
์ด์ ๋ ์ ๋ง๋ก ๋ท๋ท์ฉ ๋ฉํ!!
C++/CLI๋ฅผ ํตํ ๋ฉํ
์ฝ๋ ์์
์ ์๋ฃ ๋์๊ณ ๋๊ฒ์ผ๋ก ํจํค์งํ๋ ์์
์ ์งํํ๊ณ ์์ต๋๋ค.
๋๊ฒ๋ ํด๋ณด๋โฆ cpp dll์ด ํฌํจ๋์ด์๋ ํจํค์ง์ ์งํํ ๋์๋ ์กฐ๊ธ ๋ ๊น๋ค๋กญ๊ตฐ์.
์๋๋ ์ด์ ์ ์์ฑํ cpp์ฝ๋์ ์ง๊ธ ๋ง๋ managed ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํํ๋ฅผ ๋น๊ตํ๊ธฐ ์ฝ๋๋ก ์ ์์ต๋๋ค.
CPP
#include <lle/memoryPool.h>
#include <lle/image.h>
#include <lle/lle.h>
#include <iostream>
int main()
{
try {
// create lle instance
auto lle = lleapi::v1::lle::create();
// load Zero-DCE++ model on CPU
// (also supports loading an ONNX model from a file path)
lle->setup(lleapi::v1::dlType::zeroDCE, lleapi::v1::device::cpu);
// load color image
auto input = lleapi::v1::image::imread(
"C://github//dataset//lol_dataset//our485//low//low_15.png",
lleapi::v1::colorType::color
);
// predict
auto output = lle->predict(input);
// save result image
lleapi::v1::image::imwrite(
"C://github//LLE//LLE//x64//Debug//result1.jpg",
output
);
// cleanup internal instance
lle->shutdown();
}
catch (std::exception ex) {
std::cout << ex.what() << std::endl;
}
}
CSharp
namespace ManagedTest
{
internal class Program
{
static void Main(string[] args)
{
try
{
//// Create LLE Instance
var lle = LLEAPI.V1.LLE.Create();
//// load zerodce model and load on cpu
//// its also support onnx model load from path
lle.Setup(LLEAPI.V1.DlType.ZeroDCE, LLEAPI.V1.Device.Cpu);
//// load color image
var input = LLEAPI.V1.Image.Imread("C://github//dataset//lol_dataset//our485//low//low_15.png", LLEAPI.V1.ColorType.Color);
//// predict
var output = lle.Predict(input);
//// save image file on disk
LLEAPI.V1.Image.Imwrite("C://github//LLE//LLE//x64//Debug//result1.jpg", output);
//// cleanup internal instance
lle.Shutdown();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
}
}
}
C++/CLI๋ฅผ ํตํ ๋ฉํ ์ฅ๋จ์
๊ฐ์ธ์ ์ผ๋ก ์๋์ฐ OS๋ง์ ํ์ ํด์ ์์ ํ ๋ C++/CLI์ ํตํด ๋ฉํํ๋ ๋ฐฉ์์ด ์ด์ ์ด ๋ ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋๋ ๊ฐ์ธ์ ์ผ๋ก ์๊ฐํ๋ ์ฅ๋จ์ ์ ๋๋ค.
์ฅ์
- ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฉํํ ์ ๋๊ธ๋ง ํฌ์ธํฐ ๋ฒ๊ทธ๋ฅผ ์ต์ํ ํ ์ ์๋ค.
- PInvoke ๋ง์ฌ๋ง์ ํตํด ๋ฉํํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ C++ dll ๋ด๋ถ์์ ์งํํ๋ ๋ธ๋ฆฟ์ง ํจ์ ์์ ์ด ํ์ ์๋ค. (์: ABI ํธํ ์ฑ์ ๋์ด๊ธฐ ์ํ extern "C"๋ฅผ ๋ถ์ธ primitive ํ์ ์ ์ถ๋ ฅ ํจ์ ์์ )
- ๊ฐ์ฒด ํด๋์ค ๋ฉํ์ด ์ฝ๋ค.
- throw๊ฐ ์๋ C++ ํจ์ ๋ฉํ์ด ์ฝ๋ค.
- ํ์ค C++๋ผ์ด๋ธ๋ฌ๋ฆฌ std::string ํ์ ์ด๋ std::vector๊ฐ์ ์ปจํ ์ด๋์์ ์ปจ๋ฒ์ ์ ์ฝ๊ฒ ํ ์ ์๋ค.
- ๋ณต์กํ C++๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค๊ณ ํํ๋ ๋ณ๊ฒฝ ์์ด ์ ์ง๊ฐ ๊ฐ๋ฅํ๋ค.
๋จ์
- C++/CLI ์ธ์ด ๋ฌ๋์ปค๋ธ๊ฐ ์์.
- ๋ฉํฐ OS ์ง์์ด ๋ถ๊ฐ๋ฅ
- C++์ธ์ด์ ๋ํ ์ดํด๊ฐ ์ด๋ ์ ๋ ํ์.
- ๋ค์ดํฐ๋ธ ์ธ์ด์ ํผ์ฉํ๋ ์ธ์ด์ด๊ณ managed์ธ์ด์์ ๋ณด๋ ์๋ฌ ํํ์๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น ๋์ด๋๊ฐ ์กฐ๊ฑด๋ถ๋ก ์์น.
๋ค์์ ํ ์ผ
C# WPF UI ๊ฐ๋ฐ์ ๋ฌด์กฐ๊ฑด ํ ๊ฒ์ด๊ณ โฆ ์๊ฐ์ด ๋๋ค๋ฉด C++/CLI์ ๋ง์ฌ๋ง์ ์ฐจ์ด๋ฅผ ์ข๋ ์์ธํ๊ฒ ๊ธฐ๋ก์ ํด๋ณด๊ณ ์ถ๊ตฐ์.
์ฒจ์ธ์ ์ข ๋๋ฆฌ๋ฉด, ๋ค์ดํฐ๋ธ ํธ๋ค์ SafeHandle (SafeHandle ํด๋์ค (System.Runtime.InteropServices) | Microsoft Learn)์ ํตํด ์ ๊ณตํด์ฃผ์๊ณ , ์ด๊ฑธ ํฌ์ฅํ๋ ๋งค๋์ง๋ ๋ํผ๋ IDisposable ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ฃผ์๋ฉด ๋ ์ข์ต๋๋ค.!
๋๊ธ์ ๋จผ์ ๋ดค์ด์ผํ๋๋ฐ ๋์ถฉ ํด๋ฒ๋ ธ๊ตฐ์ ใ ใ ๋ค์๋ฒ์ ์์ ํ ๋ ๋ฐ์ํด์ผ๊ฒ ์ต๋๋ค ใ
์ ์ด ์๋ฃ๋ ์ด๋ ๊ฒ ๊ฐ๋ณ๊ฒ ๋ณผ ์๋ฃ๊ฐ ์๋๋ผ ๊ธ์ชฝ๊ฐ์ ์๋ฃ๋ค์ ์ ๋ง ๋ฅํ๊ฒ ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
์ ๊ฐ ๋น์ฅ์ ๋ชฉํ๊ฐ โํ์ตํ๋ ๋ฐฉ๋ฒ ๊ทธ๊ฑธ ํ์ฉโ ์ด ๋์ ์ ๋ํด์ ์ด๋ป๊ฒ๋ ํด๋ณผ๋ ค๊ณ ํ๊ณ ์๊ฑฐ๋ ์
๊ฐ์ฌํฉ๋๋ค.
ํ์ตํ๋ ๋ฐฉ๋ฒ ํ์ฉ์ด๋ผ๋๊ฒ ๊ทธ ๋ฅ๋ฌ๋ ํ์ต ๋ง์ํ์๋๊ฑด๊ฐ์ฉ?
๋ฐ์ดํ์
์ ๋ชจ์๋๊ณ ์ด๊ฑธ ํ์ต ํ๋ค๋ ๊ฐ๋
์ ์๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ ํ์ตํด์ ํจํด์ ๋ง๋ค์ด์ ๋ค๋ฅธ ๋ฐ์ดํ์
์ ์ ์ฉํ๋ค
์ด๊ฑธ ๋ฐฐ์ฐ๊ณ ์ถ์ต๋๋ค.
๋ง์ฝ ๊ทธ AIํ์ต์ ์ํค๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ผ๋ฉด AI๋ฅผ ๊น๊ฒ ๋ชจ๋ฅด๋๋ผ๋ ๊ฐ๋จํ ์ถ๋ก ์ ์ดํดํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. (๋ฐ์ด๋ธ์ฝ๋ฉ์ผ๋ก AI์๊ฒ ์ํค๋๋ผ๋ ์ถ๋ก ์ด ๋ฌด์์ธ์ง ์ดํดํ๋ฉด ์ข์ต๋๋ค.)
์ ๊ฐ ํ๋๋งค๋์ด ์๋ํ ๊ฒ์ ์ ํํ๊ฒ ์ดํดํ ๊ฒ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง โํ์ตํ๋ ๋ฐฉ๋ฒ ๊ทธ๊ฑธ ํ์ฉโ ์ด ๋ถ๋ถ? ์์ฆํ๋ AI๊ฐ ํ์ตํ๋ ๊ฒ์ ์ดํดํ๊ณ ํต์ฐฐ์ ์ป์ด์ ํ์ฉ์ ํ์๋ ๊ฑฐ๋ผ๋ฉด
์ฐธ๊ณ ๋ก ์ ๋ ์ธ๋ฌธ๊ณ, ์ด๊ณผ ์ถ์ ์ด ์๋๋ผ ์๋ฅ๋ ์ณ๋ณธ ์ ์๋ ๊ณต๊ณ ์ถ์ ์ฌ๋์ธ์ง๋ผ -_-..
์ ์๊ณผ๋ฅผ ๋์์ง๋ง ๋ฏธ๋ถ์ ๋ํ์ ํ๋ถ์๋ ๊ณ ์ํ๋ฉด์ ์ธ์ฐ๋ฉด์ ํ์ ์ ์ํ ๊ณต๋ถ๋ฅผ ํ๊ณ ์ด๋ ค์ด ์ํ ๊ธฐํธ๋ฅผ ์ ๋ง ์๋ชป๋ด
๋๋ค -_-..
๊ณ ๋ฑ๊ณผ์ ์ ์ด๊ณผ๋ฅผ ๋์ค์ ๋ถ๋ค์ ์ ๋ง ๋น ๋ฆฟ๋น ๋ฆฟํ๊ฒ ์๋ณด์๋๊ตฐ์ -_-..
๊ทธ๋ ๋ค๊ณ ํด์ ๋ฅ๋ฌ๋ ๋
ผ๋ฌธ ์ ๋ถ๊ฐ ๋ค ์ด๋ ค์ด ๊ฒ์ ์๋๊ณ ์ดํดํ ์ ์๋ ์ฌ์ด ๊ฒ๋ค๋ง ๊ณจ๋ผ์ ๋ณด๋ ๊ฒ ๋ง์ผ๋ก๋ ๋์์ด ๋ง์ด๋ฉ๋๋ค.
์ ๊ฐ ๊ณต๋ถํ๋ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ์์ AI ํธ๋๋ถ์ด๋ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด ๊ณตํต์ ์ผ๋ก ๋์ค๋ ๊ฒ๋ค.
- Linear Regression
- Gradient Descent Algorithm
- Multivariate Linear Regression
- Logistic Regression
- Multivariate Logistic Regression
- XOR Problem
- Multi Layer Perceptron (MLP)
- Dropout
- CNN
- Batch Normalization
- Classification
๊ทผ๋ฐ ์ ๊ฒ๋ค์ ์ ๋ ๊ฒ ์.. ๋ญ๋๊ฐ ๋๋ํ์ ๋ถ๋ค ์ฉ์ด๋ก ๋ณด์ง๋ง๊ณ ์ง๊ด์ ์ธ ์๊ธฐ๋ง์ ๊ฐ๊ฐ์ผ๋ก ๋ณด๋๊ฒ ์ค์ํ๊ฑฐ๊ฐ์ต๋๋ค.
์ ๋ ์ ๊ฒ๋ค์ ์๋ ๋ฆฌ์คํธ๋ก ๋ค์ ์นํํด์ ๋จธ๋ฆฌ์์ ๊ธฐ์ตํ๊ณ ์์ต๋๋ค.
๋ด ๋ฐฉ์๋๋ก ์ดํดํ ๊ฒ
- Linear Regression โ ๊ฐ์ ์์ธกํ๋ ๋ฐฉ๋ฒ
- Gradient Descent Algorithm โ ๋ก์ค ๊ธฐ์ธ๊ธฐ ๊ณ์ฐ์ ์ํ ์ฐ์๋ฏธ๋ถ ํธ๋ ์๊ณ ๋ฆฌ์ฆ?
- Multivariate Linear Regression โ ๊ฐ์ ์์ธกํ ๋ ์ฌ๋ฌ๊ฐ์ง ๋ค๋ณ์ ์ ๋ ฅ?์ ๊ฐ์ง๊ณ ์์ธก
- Logistic Regression โ ํ๋ฅ ์ ์์ธก
- Multivariate Logistic Regression โ ํ๋ฅ ์ ์์ธกํ ๋ ์ฌ๋ฌ๊ฐ์ง ๋ค๋ณ์ ์ ๋ ฅ?์ ๊ฐ์ง๊ณ ์์ธก
- XOR Problem โ ์ฑ๋ฅ์ ๋์ด ์ฌ๋ฆฌ๊ธฐ ์ํด์ ๋น์ ํ์ด ํ์ํ ์ด์
- Multi Layer Perceptron (MLP) โ 5๋ฒ์ XOR๋ก ์ธํด ๊ณ ์๋ ์ค๊ณ
- Dropout โ ํ์ต ์์ ํ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ค ํ๋
- CNN โ ํํฐ๋ฅผ ํ์ตํด๋ณด์
- Batch Normalization โ ํ์ต ์์ ํ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ค ํ๋
- Classification โ ํ๋ฅ ์์ธก์ํด์ ๋ฌผ์ฒด๋ฅผ ๋ถ๋ฅ
์ฑ
๋ ์ฌ๋ฌ ๊ฐ ๋ณด๋ฉด ๋์๋ ์๋๊ณ ๋๋ฌด ๋ณต์กํด์ง๊ธฐ ๋๋ฌธ์ โฆ
๋ง์น GoF ๋์์ธ ํจํด ์์๋ฅผ ๋ณด๋ฉด ๋จธ๋ฆฌ๊ฐ ์ํ์ง๋ง Head First Design Pattern์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ณด๋ฉด ์ฝ๋ฏ์ด.
ํ์ฝฉ๊ณผ๊ธฐ๋ ๊ต์๋ ์ฑํด ๊ต์๋์ ์ ๋ฌด๋ฃ ์๋ฃ ์์ฆ1๋ง ์ดํด๋ ๋ ๊น์ง ๋๋ ค๋ดค์ต๋๋ค. (ํผ์์ ์์ญ๋ฒ -_- ์ดํด์๋๋ฉด ๋ค์์ผ๋ก ๋์ด๊ฐ์ง ์๋ ๊ฒ์ด ์ค์.)
์ ๊ฐ ๋ณธ AIํ์ต ์๋ฃ์ค ๊ฐ์ฅ ์ง๊ด์ ์ธ ์ค๋ช
์ ํ์๋๊ตฐ์.. ์ง๊ด์ ์ธ ์ดํด๊ฐ ๋ ์ค์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ฝ๋ฉ์ ํ ํ์์๊ณ .. ์ง๊ด์ ์ธ ์ดํด๋ฅผ ์ํด์๋ง ๋ฐ๋ณต์ ์ผ๋ก ๋ฃ๊ธฐ๋ง ํ์๊ณ ๋๋ฌด ์ดํด๊ฐ ์๋๋ฉด
์ฃผ๋ณ์ ๋ฉํ ๋ถ์ด ๊ณ์๋ค๋ฉด ๋ฌผ์ด๋ด์ ์ดํดํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ ๊ฐ์ต๋๋ค. (์์ฆ1๋ง ๋ณด์ธ์)
๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ฅ ์ด๋ ค์ ๋ ๊ฐ๋
1~11์ ์ด๋์ ๊ฒ ์ค์ Mutivariate ๋ผ๊ณ ์ ํ๊ฒ ์๋๋ฐ ์ ๊ฒ๋ค์ -_- ํธ๋ฏธ๋ถ์ด๋ผ๋ ๊ฒ์ ํด์ผ๋ฉ๋๋ค.
ํธ๋ฏธ๋ถ์ ํธ๋๊ฒ ์ด๋ ค์ด๊ฒ ์๋๋ผ ์ ๊ฒ ์ ํธ๋ฏธ๋ถ์ด์ด์ผ ํ๋์ง๊ฐ ๋จธ๋ฆฌ์์ ์๊ทธ๋ ค์ง๋ฉด ์ ๋ง ๋๊ฐํฉ๋๋ค. ๊ทผ๋ฐ ๊นจ์ฐ์น๊ณ ๋์๋ถํฐ๋ ๋ ๋ค๋ฅธ ํต์ฐฐ์ ํฌ์ด์ ๋๋ผ์ค๊ฒ๋๋ค.
์ ๊ฒ๋ค์ด ๋์๊ฒ ์ค ํต์ฐฐ? ๋๋?
์๋ก๋ค์ด Yolo๊ฐ์ ๊ฒฝ์ฐ ๋ฌผ์ฒด์ ๋ฐ์ค 1๊ฐ๋ฅผ ์์ธก์ ํ๋ ค๋ฉด ๋ฐ์ค๋ฅผ ๊ตฌ์ฑํ๋ x, y, width, height๊ณผ ๋ฌผ์ฒด ์ธ์ง ์๋์ง ํ๋ฅ ์ด ๋ค์ด๊ฐ๊ฒ๋ฉ๋๋ค.
๊ฐ์ด 4๊ฐ๊ณ ๋ฌผ์ฒด์ ํ๋ฅ ์ ์์ธกํ๋๊ฒ 1๊ฐ๊ฐ ๋ค์ด๊ฐ์ผ๋๊ธฐ๋๋ฌธ์ ๊ทธ๋ฅ ๋๋์ผ๋ก? Linear Regression ์ค๋ฌ์ด๊ฒ 4๊ฐ์ Logistic Regression ์ค๋ฌ์ด๊ฒ 1๊ฐ๊ฐ ์ต์ํ ๋ค์ด๊ฐ์ผ ๋๊ฒ ๋ค๋ผ๋ ์๊ฐ์ ๊ฐ์ง๊ฒ๋ฉ๋๋ค. (์ค์ ๋ก๋ ๋ ๋ณต์กํ์ง๋ง ๊ทธ๋ฐ ๋๋?์ด ๋ ์ค๋ฅด๋ ๊ฒ์ด ์ค์ํ๋ค๋ ์๋ฏธ๋ก ๋ง์๋๋ ธ์ต๋๋ค.)
๊ทธ๋ฆฌ๊ณ ์ 1~11 ๋จ๊ณ๋ฅผ ์ดํด๋ฅผ ํ๊ฒ ๋๋ฉด ์์ ๊ฐ์ด ๋ถ๊ณ ์ฌ์ด ๋
ผ๋ฌธ๋ค์ ๋ณผ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ถ์ผ๋ ๋ค์ํ์ง๋ง ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ชจ๋ธ์ ๊ตฌ์กฐ ์ ์, ๊ฐ๋จํ ๋ชจ๋ธ ๊ฐ์ ๋
ผ๋ฌธ ์์ฃผ๋ก ์ถ์ฒ๋๋ฆฝ๋๋ค.
๊ทธ๋๋ง ์๋์ ์ผ๋ก ๋ค๋ฅธ ๋ถ์ผ ๋ณด๋ค ๋ณ๋์ด ์ ๊ณ ๋
ผ๋ฌธ ํ๋๋ฅผ ์ ์ดํดํ๊ณ ์์ผ๋ฉด ์ฐ๋ ค๋จน๊ธฐ๊ฐ ๋ง์์ ๊ณ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
๋ฅ๋ฌ๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ผ๋ผ๋ ๋ง์ ์ ๋ ์๋๊ณ ๋ช๊ฐ๋ฅผ ์ฝ์ด๋ณด๋ฉด AI๋ ๋ค๋ฅธ ๋ฅ๋ฌ๋ ๊ฐ๋ฐ์๋ค๊ณผ ์ด์ผ๊ธฐํ๊ธฐ ์ฌ์์ง์ค ๊ฒ๋๋ค.
๊ธฐ์ด ๊ณต๋ถ ์ดํ ์์ฃผ ์์ฃผ ๋ชจ๋ธ ๊ตฌ์กฐ ๋ ผ๋ฌธ ์ถ์ฒ
- VGG (2014๋ ๋ ผ๋ฌธ)
- GlobalAverage Pooling (2014๋ ๋ ผ๋ฌธ)
- ResNet (2015๋ ๋ ผ๋ฌธ)
- DenseNet (2016๋ ๋ ผ๋ฌธ)
- MobileNet (2017๋ ๋ ผ๋ฌธ)
- SENet (2017๋ ๋ ผ๋ฌธ)
- CBAM (2018 ๋ ผ๋ฌธ) โ ์๋์ค๋ฌ์ด ๊ตญ์ฐ ๋ ผ๋ฌธ (KAIST)
- MobileNetV3 (2019๋ ๋ ผ๋ฌธ)
- CSPNet (2019๋ ๋ ผ๋ฌธ)
- EfficientNet (2019๋ ๋ ผ๋ฌธ)
- RexNet (2021๋ ๋ ผ๋ฌธ) โ ์๋์ค๋ฌ์ด ๊ตญ์ฐ ๋ ผ๋ฌธ (๋ค์ด๋ฒ)
- ์ทจํฅ์ ๋ฐ๋ผ Transformer ํน์ Mamba ๋ ผ๋ฌธ ํนํ ํ ์คํธ๋ฅผ ๋ค๋ฃจ์๋ ๋ถ์ด๋ผ๋ฉด.
์ ์ด ๋
ผ๋ฌธ๋ค์ ์ธ๊ธ ํ๋๋ฉด ์ด ๋
ผ๋ฌธ๋ค์ด ์ง์ง ๋ง๊ทธ๋๋ก ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ๋์ง๋ฅผ ๋ค๋ฃจ๋ ๋
ผ๋ฌธ๋ค์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋๋ฉด ๊ฐ์ ..
์์๋ก ์ผ๋ฐ ๊ฐ๋ฐ์๋ค์ด Yolo๋ฅผ ๋ชจ๋ธ๋ก ์ดํดํ์์ง๋ง Yolo๋ ๋ฌผ์ฒด๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๋
ผ๋ฌธ์ด์ง ๋ชจ๋ธ์ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃจ๋ ๋
ผ๋ฌธ์ ์๋๊ธฐ ๋๋ฌธ์ -_- ๋ฌผ๋ก Yolo๋ฅผ ๋ณด์๋ฉด ๊ทธ ๋๋ฆ๋๋ก ๊ตฌ์กฐ ๊ฐ์ ์ ์ ์ํ์ง๋ง ์ด์ ์ ํ
์คํฌ๋ผ๋ ๊ฑฐ์ง์.
๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ ์ฑ๋ฅ ๊ฐ์ ์ด๋ ํธ๋ ๋๋ฅผ ๋ฐ๊ฟ ์ ๋์ ํ๊ธ๋ ฅ์ ๋๋ถ๋ถ ์ ๊ฐ ๋๋ผ๊ธฐ์ ๋ชจ๋ธ๊ตฌ์กฐ์ Lossํจ์์ ์ค๊ณ, ๊ธฐ๋ฐํ ํ์ต์ ๋ต์์ ๋์ค๊ธฐ ๋๋ฌธ์ ํ
์คํฌ ๋
ผ๋ฌธ์ ์ง์ฐฉํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋คใ
๋ชจ๋ธ์ ๋ง๋ค ์ค ์๊ฒ ๋๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํ
์คํฌ ๋
ผ๋ฌธ๋ค์ด ์ฝ๊ฒ ๋ค๊ฐ์ค์ค ๊ฒ๋๋ค.
ํผ์ ๊ณต๋ถํ๊ธฐ ์ํ ํด ์ถ์ฒ
2017๋ ๋์ ํผ์์ -_- ๋ํ์์๊ฐ๊ณ ํ์ฌ๋ค๋๋ฉด์ ๋ ์ ๋จธ๋ฆฌ๋ฐ์น๊ธฐํ๋ฉด์ ๋ ํํ ์ ์๋ chatgpt๊ฐ์๊ฒ ์์์ง๋ง.. ์์ฆ์ ๋๋ฌด ์ข์ ๊ฒ๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋๊ตฌ๋ฅผ ์ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
- chatgpt๊ฐ์ LLM๋ชจ๋ธ (์กฐ์ธ์ ๊ตฌํด์ผ ๋๊ธฐ ๋๋ฌธ์)
- Moonlight (๋ ผ๋ฌธ ์์ฝ ๋ฐ ๋ฒ์ญ์ ๊ธฐ๊ฐ๋งํ๊ฒ ํด์ค๋๋ค)
- ๊ตฌ๊ธ Notebook์ ๊ธฐ๋ฅ ์ค ํ์ผ์คํธ ๋๋ ์ด์
๊ธฐ๋ฅ
(์ ๊ธฐ๋ฅ์ผ๋ก ๋ ผ๋ฌธ์ ์์ฑํ์ผ๋ก ๋ฐ๊ฟ์ ์ถ๊ทผํ๋ ๊ธธ์ ํ์ด์ ๋ค์ผ์๋ฉด ๋์์ด ๋์ค๊ฒ๋๋ค.)
๊ทธ ํค๋ชจ๋์ด ๋งค์ํ์๋ ํ์ฌ๋ผ๊ณ ํด์ผ๋๋ -_- ์ ๋ ํด์ง์ค์ ๊ฐ์ ์ผ๊ตด์ด๋ผ๋ ๋น์ถ๋ ค๊ณ ์ฐธ์ํด๋ณผ๋ ค๊ณ ํ๋๋ฐ์ ์ง๊ธ๊น์ง ํ์ฌ ์ผ๋งํ๋ค๊ณ ์์ง์ ์๋ค๊ฐ ๋ฐ๊นฅ์ด ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ๊ถ๊ธํด์ ใ ใ ๊ทธ๋ ์ค์๋ฉด ์ผ๊ตด๋ณด๊ณ ์ด์ผ๊ธฐํ๋ฉด ์ข๊ฒ ๊ตฐ์ ํํโฆ
์ ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ์ ๊ทผ์ ์ข์ผ์ ๊ฑฐ๊ฐ๊ตฐ์ ํ์ต์ด๋ผ๋ ๊ทธ ๊ฐ๋
์ ์๊ณ ์ถ๋ค๋ผ๋ ๊ทธ๋๋โฆ
์ ๋ ๊ทธ๋ ๊ฒ ์์ํ๊ฑฐ๋ผ 2017๋
๋ถํฐ ใ
โฆ ์์ฆ ํธ๋์คํฌ๋จธ๋ Mamba๋ ๋ญ๋ ๋ง์ด ๋์ค๋๋ฐ ๊ทธ๋ฐ๊ฑฐ ์์ด๋ ๊ฐ๋จํ ์์
๋ฐ์ดํฐ๋ ๋๋น ๋ฐ์ดํฐ๊ฐ์๊ฑด ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด์ ํ์ต์์ผ๋ ๋ฌธ์ ์์ต๋๋ค.
๊ฐ๋จํ ๋์์ ์ ์ค์ณ์ธ์ ๋ชจ๋ธ ์ ๋๋ (ํธ๋์ ์ค์ณ? ์์ผ๋ก ์์ผ๋ก ๋ฏธ๋ ๋์์ด๋ ์คํ ์ ์ค์ณ) ๋ง๋ค ์ ์์ผ์ค๊ฒ๋๋ค. ๋ฌ๋์ปค๋ธ๊ฐ ์๊ฐ๋ณด๋ค ๊ธธ์ง ์์ต๋๋ค. 3์ฃผ? 1๋ฌ? ์ค์ํ๊ฑด ๊ทธ.. ํ์ต ๋ฐฉํฅ์ด๋ ์์๊ฐ ์ค์ํ๊ฒ ์๋์ง ใ
2017๋
๋ถํฐ ๊ณต๋ถํ๋ฉด์ git์ ๋ถ์๊ณ ๋ค์ ๋ง๋ค๊ณ ๋ฐ๋ณตํ๋ค๊ฐ 4๋
์ ๋ถํด๊ฐ ์ฌ๊ธฐ์ ๋ค ๋ชฐ์์ ์ ๋ฆฌ๋ฅผ ํ๊ณ ์๊ฑฐ๋ ์. ์ฃผ๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธํ์ง ์๊ณ .. ํ์ฌ์ผ์ ํ๋ฌปํ์ ์
๋ฐ์ดํธ์ํ์ง ์ข๋ฌ๋๋ฐ.
๋์์ด ๋์
จ์ผ๋ฉด ํ๋ค์. ์ ๊ฐ ์ดํดํ๊ณ ์ง์ ์์ผ๋ก ํ๋ํ๋ ๋ง๋ ๋ฐฑ๋ณธ ๋ชจ๋ธ๋ค์ ์ฌ๊ธฐ์ ๋ค ์ ๋ฆฌํด๋จ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค ์ ๋ง ์ง์งํ๊ฒ ํด๋ณด๊ฒ ์ต๋๋ค. ์์ฆ ์๊ทธ๋๋ ์ด๋ฐ์ ๋ฐ ์๊ฐ์ด ๋ง์๋ฐ
์ ์ปค๋ฆฌ์ด์ ์์ฒญ๋ ์ํฅ์ ๋ผ์น์ ์ง๋ ๋ฌผ๋ก ์ ๊ฐ ์ ํ๋ด์ผ ๊ฒ ์ง๋ง์
๋์ค์ ์ ์์์ ๋ต์ฃ ใ
ใ
๋ต๊ณ ์๊ธฐํ๋ฉด ์ข๊ฒ ์ง๋ง ์ด๊ฑด๋ญ ์ ์น์ ์์ด๋ ์๊ธฐํ์๋ ๋๋ ๋ค๊ฒ ๊ฐ์์
์กฐ์ฌ์ค๋ฝ๋ค์ ใ
๊ฐ์ธ์ ์ผ๋ก ๋ฅ๋ฌ๋์ผ๋ก ํด๋ณด๊ณ ์ถ์๊ฒ ์ญ์ฌ์ ์ธ ์ด๋ฒคํธ๋ฅผ ๋ ์ง๋ณ๋ก ์ ๋ฆฌํด์ ๋ญ๊ฐ ์ฐ๊ด์ฑ
ํจํด์ด ์์ง ์์๊น ์ฐ๊ตฌํด๋ณด๊ณ ์ถ์ต๋๋ค
๊ทธ๋ฐ๊ฑฐ๋ฉด ํด๋ฌ์คํฐ๋ง์ด๋ ์ด๋ฐ๊ฑฐ ๊ณต๋ถํ์ ์ผ๊ฒ ๊ตฐ์? ๊ฒฐ๊ตญ ๊ทธ๊ฒ๋ ํ๋ ค๋ฉด ๋ชจ๋ธ(๋ฐฑ๋ณธ)์ ๋ง๋ค๊ฑฐ๋ ๊ทธ.. ํผ์ณ๋ฅผ ๋ฝ๋ ๋ฐฉ๋ฒ์ ์์ ์ผํ๋๊น ์๊น ์ธ๊ธ๋๋ฆฐ 1-11์ ํ์๊ธด ํ์ ์ผํ ๊ฒ๋๋ค ใ ๊ทธ๋ฆฌ๊ณ ๊ทธ.. ์ธ์ ๋ ์ง ๊ฐ ํก์ด๋ ๋ฌผ์ด๋ณด์ ๋๋ฉ๋๋ค์ ใ ์ธ์ ๋ ์ง ํ์์ ๋๋ค์ ๊ฐ๋จํ๊ฑฐ๋ผ๋ ๋์์ ๋๋ฆฌ๋ฉด ์ข์ง์
๊ฐ์ฌํฉ๋๋ค ์ด๋์ ๋ ๊ธฐ๋ณธ์ ์ฑ์ฐ๊ณ ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค ใ

