๐ท CNN์ ํ์ฉํ ์ด๋ฏธ์ง ํน์ง ์ถ์ถ ์์ ์ ๋ณต
์๋ ํ์ธ์! ์ค๋์ ์ธ๊ณต์ง๋ฅ์์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ํต์ฌ ๊ธฐ์ ์ธ CNN ๊ธฐ๋ฐ ์ด๋ฏธ์ง ํน์ง ์ถ์ถ์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฅ๋ฌ๋ ์ ๋ฌธ์๋ถํฐ ์ค๋ฌด ๊ฐ๋ฐ์๊น์ง ์ดํดํ ์ ์๋๋ก ์ด๋ก , ๊ตฌ์กฐ, ์ค๋ฌด ์ฝ๋๊น์ง ๋ชจ๋ ์๊ฐํ๊ฒ ์ต๋๋ค.
1. ์ด๋ฏธ์ง ํน์ง ์ถ์ถ์ด๋?
์ด๋ฏธ์ง๋ ์๋ง์ ํฝ์ ๋ก ๊ตฌ์ฑ๋ ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ ๋๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ์์ถํ๊ณ ์๋ฏธ ์๋ ์ ๋ณด(์ , ๋ชจ์, ์ง๊ฐ ๋ฑ)๋ง ์ถ์ถํด์ ๋ฒกํฐ(ํน์ง ๋ฒกํฐ)๋ก ํํํ๋ ๊ณผ์ ์ด ํน์ง ์ถ์ถ์ ๋๋ค. ๋จธ์ ๋ฌ๋/๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ์ ๋ ฅ์ผ๋ก ์ฐ๊ธฐ ์ํด ๋ฐ๋์ ํ์ํฉ๋๋ค.
2. ์ด๋ฏธ์ง ํน์ง ์ถ์ถ ๋ฐฉ๋ฒ ์ข ๋ฅ
- ์ ํต์ ์ธ ๋ฐฉ๋ฒ: SIFT, HOG, SURF ๋ฑ
- ๋ฅ๋ฌ๋ ๊ธฐ๋ฐ ๋ฐฉ๋ฒ (CNN)
3. CNN(Convolutional Neural Network)์ ๊ฐ๋
CNN์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ํนํ๋ ๊ตฌ์กฐ๋ก, ์ด๋ฏธ์ง์์ ๊ณต๊ฐ์ ํจํด(์ฃ์ง, ๋ชจ์๋ฆฌ, ํจํด ๋ฑ)์ ์๋์ผ๋ก ํ์ตํฉ๋๋ค. Conv Layer์ Pooling Layer๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ์ ์ ์ถ์์ ์ธ ํน์ง์ ๋ฝ์๋ ๋๋ค.
4. CNN ๊ธฐ๋ฐ ํน์ง ์ถ์ถ ๋ฐฉ๋ฒ์ ์ข ๋ฅ ๋ฐ ์ ์
๊ตฌ๋ถ | ์ ์ | ํน์ฑ |
---|---|---|
1. ConvNet ์ง์ ๊ตฌ์ฑ | Conv2D์ Pooling ๋ ์ด์ด๋ก ์ง์ ๊ตฌ์กฐ ์ค๊ณ | ์ ์ฐํ๋ ๋ง์ ํ์ต ๋ฐ์ดํฐ ํ์ |
2. ์ฌ์ ํ์ต ๋ชจ๋ธ ์ ์ดํ์ต | ResNet, VGG ๋ฑ ๊ธฐ์กด ๋ชจ๋ธ์์ ์ค๊ฐ์ธต ์ถ์ถ | ์ ์ ๋ฐ์ดํฐ๋ก๋ ์ฐ์ํ ์ฑ๋ฅ |
3. Feature Extractor๋ก CNN๋ง ์ฌ์ฉ | Fully connected layer ์ ๊ฑฐ, conv feature๋ง ์ถ์ถ | ๋ถ๋ฅ ๋์ ํน์ง ๋ฒกํฐ๋ง ์ฌ์ฉ |
5. ์ค๋ฌด ์์ : ์ฌ์ ํ์ต๋ ResNet์ ํ์ฉํ ํน์ง ์ถ์ถ
from torchvision import models, transforms
from PIL import Image
import torch
import numpy as np
# 1. ์ด๋ฏธ์ง ์ ์ฒ๋ฆฌ
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
# 2. ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ
img = Image.open("cat.jpg").convert("RGB")
img_tensor = transform(img).unsqueeze(0) # ๋ฐฐ์น ์ฐจ์ ์ถ๊ฐ
# 3. ๋ชจ๋ธ ๋ก๋ฉ ๋ฐ ํน์ง ์ถ์ถ (fc ์ ๊ฑฐ)
resnet = models.resnet50(pretrained=True)
feature_extractor = torch.nn.Sequential(*list(resnet.children())[:-1])
feature_extractor.eval()
# 4. ํน์ง ๋ฒกํฐ ์ถ์ถ
with torch.no_grad():
features = feature_extractor(img_tensor)
features = features.view(features.size(0), -1) # Flatten
print("ํน์ง ๋ฒกํฐ shape:", features.shape)
6. CNN ํน์ง ์ถ์ถ ๋ฐฉ์๋ณ ์ฅ๋จ์
๋ฐฉ๋ฒ | ์ฅ์ | ๋จ์ |
---|---|---|
์ง์ ๊ตฌ์ฑ | ์์ ๋ก์ด ์ค๊ณ, ๋๋ฉ์ธ ๋ง์ถค ๊ฐ๋ฅ | ๋ง์ ๋ฐ์ดํฐ์ ์๊ฐ ํ์ |
์ฌ์ ํ์ต ๋ชจ๋ธ | ๋น ๋ฅธ ์ ์ฉ, ์๋ ๋ฐ์ดํฐ๋ก ๊ฐ๋ฅ | ์ ์ฐ์ฑ ๋ถ์กฑ, ๋ชจ๋ธ ํฌ๊ธฐ ํผ |
Conv layer๋ง ์ฌ์ฉ | ํน์ง ์ถ์ถ์ ์ต์ , ๋ค์ด์คํธ๋ฆผ์ ํ์ฉ ์ฌ์ | ๋ถ๋ฅ๊ธฐ ์ง์ ์ค๊ณ ํ์ |
7. ๊ธฐํ ์ค๋ฌด ํ
- โ ๋ฐ์ดํฐ ์ ๊ทํ: ๋ฐ๋์ ํ์ต๋ ๋ชจ๋ธ์ ๋ง๋ ํ๊ท /ํ์คํธ์ฐจ ์ฌ์ฉ
- ๐ฆ ํน์ง ๋ฒกํฐ ์ ์ฅ: ๋ฒกํฐ๋ฅผ .npy ๋ฑ์ผ๋ก ์ ์ฅ ํ ๋ณ๋ ๋ถ์ ์ถ์ฒ
- ๐ง ํด๋ฌ์คํฐ๋ง, ์ ์ฌ๋ ๋ถ์: ์ถ์ถ๋ ๋ฒกํฐ๋ก ๊ตฐ์งํ๋ ๊ฒ์ ์์คํ ๊ตฌํ ๊ฐ๋ฅ
- ๐ก ์๊ฐํ ๋๊ตฌ: t-SNE, PCA ๋ฑ์ผ๋ก ๋ฒกํฐ ๋ถํฌ๋ฅผ ์๊ฐํํ๋ฉด ์ ์ฉํจ
8. ๋ง๋ฌด๋ฆฌ
CNN์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๋จ์ํ ๋ถ๋ฅ๋ฅผ ๋์ด์, CNN์ ์ค๊ฐ ์ถ๋ ฅ๊ฐ(ํน์ง ๋ฒกํฐ)์ ํ์ฉํ๋ฉด ์ถ์ฒ ์์คํ , ๊ฒ์ ์์ง, ๊ตฐ์งํ, ์ด์ํ์ง ๋ฑ ๋ค์ํ ์์ญ์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค.
์ค๋ ์๊ฐํ ์ฝ๋๋ ์ค์ ํ๋ก์ ํธ์์๋ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ค์ํ ์ฌ์ ํ์ต ๋ชจ๋ธ์ ํ์ฉํด ๋ ๋์ ์์ ์ ์์ฉํ ์ ์์ต๋๋ค. ๋ค์ ๊ธ์์๋ ์ถ์ถํ ํน์ง ๋ฒกํฐ๋ฅผ ํ์ฉํ ์ ์ฌ ์ด๋ฏธ์ง ๊ฒ์ ์์คํ ๋ ๋ค๋ค๋ณผ๊ฒ์!