์ด ํ๋ก์ ํธ๋ ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง(CNN)์ ์ฌ์ฉํ์ฌ CIFAR-10 ๋ฐ์ดํฐ์ ์ ์ด๋ฏธ์ง๋ฅผ 10๊ฐ ํด๋์ค๋ก ๋ถ๋ฅํ๋ ๋ฅ๋ฌ๋ ํ๋ก์ ํธ์ ๋๋ค.
- ๋ฐ์ดํฐ์ : CIFAR-10 (50,000๊ฐ ํ๋ จ ์ด๋ฏธ์ง, 10,000๊ฐ ํ ์คํธ ์ด๋ฏธ์ง)
- ์ด๋ฏธ์ง ํฌ๊ธฐ: 32x32 ํฝ์ (์ปฌ๋ฌ)
- ํด๋์ค: 10๊ฐ (๋นํ๊ธฐ, ์๋์ฐจ, ์, ๊ณ ์์ด, ์ฌ์ด, ๊ฐ, ๊ฐ๊ตฌ๋ฆฌ, ๋ง, ๋ฐฐ, ํธ๋ญ)
- ๋ชจ๋ธ: Convolutional Neural Network (CNN)
- ํ๋ ์์ํฌ: TensorFlow 2.20.0 / Keras 3.12.0
- 3๊ฐ์ ํฉ์ฑ๊ณฑ ๋ธ๋ก: ๊ฐ ๋ธ๋ก๋ง๋ค Conv2D, BatchNormalization, MaxPooling, Dropout ๋ ์ด์ด ํฌํจ
- ์์ ์ฐ๊ฒฐ ๋ ์ด์ด: Dense + Dropout์ผ๋ก ๊ณผ์ ํฉ ๋ฐฉ์ง
- ์ถ๋ ฅ ๋ ์ด์ด: 10๊ฐ ํด๋์ค์ ๋ํ Softmax ํ์ฑํ ํจ์
- Batch Normalization: ํ์ต ์์ ํ ๋ฐ ์๋ ด ๊ฐ์ํ
- Dropout: ๊ณผ์ ํฉ ๋ฐฉ์ง (0.25, 0.5)
- Data Augmentation: ์ด๋ฏธ์ง ํ์ , ์ด๋, ๋ค์ง๊ธฐ, ํ๋/์ถ์
- Early Stopping: ๊ฒ์ฆ ์์ค ๊ธฐ๋ฐ ์กฐ๊ธฐ ์ข ๋ฃ
- Learning Rate Scheduling: ๋์ ํ์ต๋ฅ ์กฐ์
Python 3.10+
TensorFlow 2.20.0
Keras 3.12.0
NumPy
Matplotlib
Seaborn
Scikit-learn
Pandas
OpenCV (์ ํ)- ์ ์ฅ์ ํด๋ก
git clone <repository-url>
cd project_oss2025- ๊ฐ์ ํ๊ฒฝ ์์ฑ ๋ฐ ํ์ฑํ
python -m venv .venv
.venv\Scripts\activate # Windows- ํจํค์ง ์ค์น
pip install --upgrade pip
pip install tensorflow matplotlib seaborn scikit-learn pandas numpy opencv-pythonJupyter Notebook ์คํ:
jupyter notebook project.ipynb๋๋ VS Code์์ ์ง์ ๋ ธํธ๋ถ ์ด๊ธฐ
project_oss2025/
โ
โโโ project.ipynb # ๋ฉ์ธ ๋
ธํธ๋ถ (์ ์ฒด ํ๋ก์ ํธ)
โโโ best_model.keras # ์ต๊ณ ์ฑ๋ฅ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ
โโโ cifar10_cnn_model.keras # ์ต์ข
ํ์ต ๋ชจ๋ธ
โโโ README.md # ํ๋ก์ ํธ ๋ฌธ์
โโโ .venv/ # ๊ฐ์ ํ๊ฒฝ (์ ํ)
- ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋
- ํ๊ธ ํฐํธ ์ค์ (Windows: ๋ง์ ๊ณ ๋)
- ๋๋ค ์๋ ๊ณ ์ (์ฌํ์ฑ)
- CIFAR-10 ๋ฐ์ดํฐ ๋ก๋
- ์ ๊ทํ (0
255 โ 01) - ์-ํซ ์ธ์ฝ๋ฉ
- ์ํ ์ด๋ฏธ์ง ํ์ธ
- ํด๋์ค ๋ถํฌ ๋ถ์
- ๋ชจ๋ธ ์ํคํ ์ฒ ์ ์
- ๋ ์ด์ด๋ณ ์ค์
- ๋ฐ์ดํฐ ์ฆ๊ฐ ์ค์
- ์ฝ๋ฐฑ ํจ์ ์ค์
- ๋ชจ๋ธ ํ์ต (์ต๋ 50 ์ํฌํฌ)
- ์ ํ๋/์์ค ๊ทธ๋ํ
- ํ์ต ๊ณก์ ๋ถ์
- ํ ์คํธ ๋ฐ์ดํฐ ์ฑ๋ฅ ํ๊ฐ
- ๋ถ๋ฅ ๋ฆฌํฌํธ
- ํผ๋ ํ๋ ฌ (Confusion Matrix)
- ํด๋์ค๋ณ ์ ํ๋
- ์ ํํ ์์ธก ์ํ
- ์๋ชป๋ ์์ธก ์ํ
- ์์ธก ํ๋ฅ ๋ถํฌ
- ์ ํ/์ค๋ต ์ ๋ขฐ๋ ๋น๊ต
- ํ์ต๋ ๋ชจ๋ธ ์ ์ฅ
- ๊ธฐ์ด: MNIST, Fashion-MNIST
- ์ค๊ธ: ์ ์ด ํ์ต, ์๋ฃ ์์ ๋ถ๋ฅ
- ๊ณ ๊ธ: ์ค์๊ฐ ๋ถ๋ฅ, ์์๋ธ ํ์ต
- ํ ์คํธ ์ ํ๋: 75~85%
- ํ๋ จ ์๊ฐ: ์ฝ 30๋ถ (CPU), ์ฝ 10๋ถ (GPU)
- Accuracy: ์ ์ฒด ์ ํ๋
- Precision: ์ ๋ฐ๋
- Recall: ์ฌํ์จ
- F1-Score: ์ ๋ฐ๋์ ์ฌํ์จ์ ์กฐํ ํ๊ท
- Confusion Matrix: ํด๋์ค๋ณ ์์ธก ๊ฒฐ๊ณผ
# ๋ชจ๋ธ ๊ตฌ์กฐ
input_shape = (32, 32, 3)
conv_filters = [32, 32, 64, 64, 128, 128]
dense_units = [256, 128]
dropout_rates = [0.25, 0.25, 0.25, 0.5, 0.5]
# ํ์ต ์ค์
batch_size = 64
epochs = 50
optimizer = 'adam'
loss = 'categorical_crossentropy'
# ๋ฐ์ดํฐ ์ฆ๊ฐ
rotation_range = 15
width_shift_range = 0.1
height_shift_range = 0.1
horizontal_flip = True
zoom_range = 0.1- MNIST: ์๊ธ์จ ์ซ์ ๋ถ๋ฅ (โญโโโโ)
- Fashion-MNIST: ํจ์ ์์ดํ ๋ถ๋ฅ (โญโญโโโ)
- CIFAR-10: ์ปฌ๋ฌ ์ด๋ฏธ์ง ๋ถ๋ฅ (โญโญโญโโ)
- ์ ์ด ํ์ต: VGG16, ResNet50 ํ์ฉ (โญโญโญโญโ)
- ์ค์๊ฐ ๋ถ๋ฅ: ์น์บ ๊ธฐ๋ฐ ๋ถ๋ฅ (โญโญโญโญโญ)
- ์์๋ธ ํ์ต: ์ฌ๋ฌ ๋ชจ๋ธ ๊ฒฐํฉ (โญโญโญโญโ)
- ์ ์ด ํ์ต: ResNet, EfficientNet ๋ฑ ์ฌ์ ํ์ต ๋ชจ๋ธ ํ์ฉ
- ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋: Grid Search, Random Search
- ์์๋ธ: ์ฌ๋ฌ ๋ชจ๋ธ์ ์์ธก ๊ฒฐํฉ
- ๊ณ ๊ธ ์ฆ๊ฐ: Mixup, CutMix, AutoAugment
- ๋ชจ๋ธ ๊ฒฝ๋ํ: Quantization, Pruning
- ์น ์ ํ๋ฆฌ์ผ์ด์ : Flask/FastAPI
- ๋ชจ๋ฐ์ผ ๋ฐฐํฌ: TensorFlow Lite
- ํด๋ผ์ฐ๋ ๋ฐฐํฌ: AWS, GCP, Azure
- TensorFlow ๊ณต์ ๋ฌธ์
- Keras API ๋ฌธ์
- Fast.ai - Practical Deep Learning
- Coursera - Deep Learning Specialization
์ด ํ๋ก์ ํธ๋ ๊ต์ก ๋ชฉ์ ์ผ๋ก ์ ์๋์์ต๋๋ค. ๊ฐ์ ์ฌํญ์ด๋ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ์๋ฉด ์ด์๋ฅผ ๋ฑ๋กํด์ฃผ์ธ์.
์ด ํ๋ก์ ํธ๋ ๊ต์ก ๋ชฉ์ ์ผ๋ก ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ๋ก์ ํธ: CIFAR-10 ์ด๋ฏธ์ง ๋ถ๋ฅ
- ํ๋ ์์ํฌ: TensorFlow/Keras
- ๊ฐ๋ฐ ํ๊ฒฝ: VS Code + Jupyter Notebook
- ๋ ์ง: 2025๋ 12์
- โ ์ฒด๊ณ์ ์ธ CNN ์ํคํ ์ฒ ์ค๊ณ
- โ ๋ฐ์ดํฐ ์ฆ๊ฐ์ผ๋ก ์ผ๋ฐํ ์ฑ๋ฅ ํฅ์
- โ ๋ค์ํ ์๊ฐํ ๋ฐ ๋ถ์
- โ ์ค๋ฌด ์ ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๊ตฌ์กฐ
- โ ๋จ๊ณ๋ณ ํ์ต ๊ฐ์ด๋ ํฌํจ
- โ ํ์ฅ ๊ฐ๋ฅํ ํ๋ก์ ํธ ๊ตฌ์กฐ