Object Detection Model Traning์ ์ ์ํด์ผํ ์ฌํญ๋ค์ ๋ฐํ์ฌ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
๋๋์ ์ด๋ฏธ์ง ํ์ต์ Memory ๋ฌธ์
๋๋์ ์ด๋ฏธ์ง ํ์ต ์, ์ด๋ฏธ์ง๋ฅผ ๋คํธ์ํฌ์ ์ ๋ ฅํ๊ธฐ ์ํด ๋ฐฐ์น๋ก ๋ณํ๋๋ฉฐ, ์ด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํฉ๋๋ค.
๋ฐ๋ณต์ ์ธ ํ์ต ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ ์ปค์ง๊ฒ ๋๊ณ , ์ด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฆ, ์ด๋ฏธ์ง์ ๊ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋๋ถ๋ถ์ ์ข์ฐํ๊ฒ ๋ฉ๋๋ค.
Keras fit_generator()๋ฅผ ์ด์ฉํ ํ์ต
Keras์ fit_generator()๋ฅผ ์ด์ฉํ ํ์ต์ ํ ๋, ๋ง์ฝ ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ํฌ๋ฉด Memory์ ๋ชจ๋ ์ฌ๋ฆฌ์ง ์๊ณ , Batch ๋จ์๋ก Data Generator(๋ฐ์ดํฐ ์์ฑ๊ธฐ)๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธํ๋ฉฐ ํ์ต์ ์งํํ๋ ๋ฐฉ์์ ๋๋ค.
์ด๋ฏธ์ง๋ฅผ ํ๋ฒ์ ๋ชจ๋ ํ์ตํ์ง ์๊ณ , Batch ํฌ๊ธฐ ๋จ์๋ก ๋๋์ด ์ฒ๋ฆฌํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Steps_per_Epoch์ ํ Epoch์์ ๋ช๋ฒ์ Batch ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋์ง๋ฅผ ๋ํ๋ด๋ฉฐ,
์ด ๊ฐ์ ์ด ๋ฐ์ดํฐ ์๋ฅผ Batch_szie๋ก ๋๋ ๊ฐ์ ๋๋ค.
๊ฒฐ๋ก ์ Batch size๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ง์ ๋ถ๋ถ์ ์ข์ฐํฉ๋๋ค.
Python Generator
Generator ํจ์๋ ์ผ๋ฐ ํจ์์๋ ๋ค๋ฅด๊ฒ ํจ์ ๋ด ๋ก์ง์ ์ํ ํ ๊ฐ์ ๋ฐํํ๊ณ ์ข ๋ฃํ๋๊ฒ์ด ์๋๋ผ yield๋ก ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๋ฐํํ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์๊ฒ ๋ง๋๋๊ฒ์ด ํน์ง์ ๋๋ค.
Keras์ fit_generator()๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ Data Generator
from keras.preprocessing.image import ImageDataGenerator
train_datagen= ImageDataGenerator(rescale=1./255)
train_generator= train_datagen.flow_from_directory( ‘ํ์ต์ฉ ์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ', target_size=(240, 240), batch_size=10, class_mode='categorical')
valid_datagen= ImageDataGenerator(rescale=1./255)
valid_generator = valid_datagen.flow_from_directory( ‘๊ฒ์ฆ์ฉ ์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ', target_size=(240, 240), batch_size=10, class_mode='categorical')
Keras fit_generator() ์ ์ฉ ์์
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(240,240,3)))
………
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit_generator( train_generator, steps_per_epoch=100, epochs=10, validation_data=valid_generator, validation_steps=2)
Object Detection Model์์ CPU์ GPU์ ์ญํ
CPU ์ญํ
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ: CPU๋ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค. ์ด ๊ณผ์ ์์๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์น(batch)๋ก ๋๋๊ณ , ๊ฐ ๋ฐฐ์น๋ฅผ ๋ฐฐ์ด๋ก ๋ณํํ์ฌ ๋ชจ๋ธ์ ์ ํฉํ ์ ๋ ฅ ํ์์ผ๋ก ๋ง๋ญ๋๋ค.
- Batch ์ฒ๋ฆฌ: ํ์ต์ ์ฌ์ฉํ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ, CPU๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํฌ๊ธฐ์ ๋ฐฐ์น๋ก ๋๋์ด ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๋นํฉ๋๋ค.
- Steps per Epoch: ํ Epoch(์ ์ฒด ๋ฐ์ดํฐ์ ์ ํ ๋ฒ ํ์ตํ๋ ๊ณผ์ )์์ CPU๊ฐ ์ฒ๋ฆฌํด์ผ ํ ์ด ๋ฐฐ์น์ ์๋ฅผ ๋ํ๋ ๋๋ค. ์๋ฅผ ๋ค์ด, 1000์ฅ์ ์ด๋ฏธ์ง๋ฅผ Batch size 10์ผ๋ก ๋๋๋ฉด 100ํ ๋ฐ๋ณตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
- CPU๋ ๋ชจ๋ธ์ ์ฐ์ฐ๋ณด๋ค๋ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๊ณ ์ ๋ฌํ๋ ์ญํ ์ ๋ ๋ง์ด ์ํํฉ๋๋ค.
GPU ์ญํ
- CNN Network: GPU๋ Convolutional Neural Network(CNN)์ ๊ฐ์ ๋ณต์กํ ์ ๊ฒฝ๋ง ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ณ๋ ฌ ์ฐ์ฐ: GPU๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ํ ๋ฒ์ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. CNN ๋คํธ์ํฌ๋ ์ด๋ฏธ์ง์์ ํน์ง์ ์ถ์ถํ๊ณ , ๊ฐ์ฒด๋ฅผ ํ์งํ๋ ์ฐ์ฐ์ด ์ฃผ๋ก ์ด๋ฃจ์ด์ง๋๋ฐ, ์ด ์ฐ์ฐ์ GPU๊ฐ ๋ด๋นํ๊ฒ ๋ฉ๋๋ค.
- ํ์ต ๋ฐ ์ถ๋ก ์๋ ํฅ์: GPU๋ ๋๊ท๋ชจ ํ๋ ฌ ์ฐ์ฐ๊ณผ ๊ฐ์ ์์น ๊ณ์ฐ์ ๋น ๋ฅด๊ฒ ์ํํ ์ ์์ผ๋ฏ๋ก, ํ์ต ๋ฐ ์ถ๋ก ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํต๋๋ค. Object Detection๊ณผ ๊ฐ์ ๋ชจ๋ธ์์ CNN์ ๊ณ์ฐ์ ๋๋ถ๋ถ GPU์์ ์ด๋ฃจ์ด์ง๋๋ค.
CPU์ GPU๊ฐ ํ๋ ฅํ์ฌ ๋๋์ ์ด๋ฏธ์ง๋ฅผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ฉฐ,
์ด๋ ํนํ Object Detection๊ณผ ๊ฐ์ ์ฐ์ฐ ์ง์ฝ์ ์ธ ์์ ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
Object Detection Model์์ Batch size ์ค์
Object Detection ๋ชจ๋ธ์์ Batch size ์ค์ ์ ํ์ต ์๋์ GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฌ์ด์์ ๊ท ํ์ ๋ง์ถ๋ ์ค์ํ ์์ ์ ๋๋ค.
Batch size๋ฅผ ์ค์ ํ ๋๋ ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํจ์จ ๋ฐ ์๋์ ์ฌํญ๋ค์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
Batch size๊ฐ ํฌ๋ค๊ณ ๋ฌด์กฐ๊ฑด ์ํ ์๋๊ฐ ํฅ์๋์ง ์์
- Batch size๊ฐ ์ปค์ง๋ฉด ํ ๋ฒ์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋์ด ํ์ต ์๋๊ฐ ๋นจ๋ผ์ง ๊ฐ๋ฅ์ฑ์ด ์์ง๋ง, ํญ์ ๊ทธ๋ ์ง๋ ์์ต๋๋ค.
- ๋๋ฌด ํฐ Batch size๋ ๋ ๋ง์ ์ฐ์ฐ์ ํ ๋ฒ์ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์, ์คํ๋ ค ํ์ต์ ์์ ์ฑ์ ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ํฐ Batch size๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๊ธฐ ๋๋ฌธ์, ๋ชจ๋ธ ํฌ๊ธฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
Batch size๊ฐ ๋๋ฌด ํฌ๋ฉด GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํด
- GPU ๋ฉ๋ชจ๋ฆฌ๋ ํ์ ๋์ด ์๊ธฐ ๋๋ฌธ์, Out of Memory (OOM) ๋๋ Segmentation Fault ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํฐ Batch size๋ ํ ๋ฒ์ ๋ ๋ง์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ผ ํ๋ฏ๋ก, ํนํ ๊ณ ํด์๋ ์ด๋ฏธ์ง๋ ๋ณต์กํ ๋ชจ๋ธ์์ GPU ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ์ด๊ณผํ ์ ์์ต๋๋ค.
- ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ํ์ต์ด ์ค๋จ๋๊ฑฐ๋, ๋ ์ด์ ์คํ๋์ง ์์ ์ ์์ต๋๋ค.
ํ์ฌ GPU ์๋ฒ ํ๊ฒฝ์์ ์ ์ ํ Batch size
- CPU 4core, GPU P100๊ณผ ๊ฐ์ ํ๋์จ์ด ์ฌ์์์๋ ๋๋ฌด ํฐ Batch size๋ฅผ ์ค์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์ต๋๋ค.
- NVIDIA Tesla P100 GPU๋ 16GB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฏ๋ก, ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ์ ๋ณต์ก์ฑ์ ๋ฐ๋ผ ์ ์ ํ Batch size๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก Batch size 4~8์ ์ด๋ฌํ ์๋ฒ ํ๊ฒฝ์์ ์ ํฉํฉ๋๋ค. ์ด ์ ๋์ Batch size๋ GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ์ ํ๊ฒ ์ ์งํ๋ฉด์๋, ํ์ต ์๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ฌ์ด์ ๊ท ํ์ ๋ง์ถ ์ ์์ต๋๋ค.
์ ์ ํ Batch size๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ
- ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ํ์ธ: GPU์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ํ์ธํ๊ณ , ๋ชจ๋ธ์ด ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๊ธฐ๋ฐ์ผ๋ก Batch size๋ฅผ ์ค์ ํ์ธ์.
- ์์ Batch size๋ก ์์: ์ฒ์์๋ ์์ Batch size(์: 4)๋ก ์์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๊ณ , ์ ์ง์ ์ผ๋ก ์ฆ๊ฐ์ํค๋ฉฐ ์ ์ ํ ๊ฐ์ ์ฐพ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- OOM ๋ฌธ์ ๋ฐ์ ์ Batch size ๊ฐ์: ๋ง์ฝ OOM์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด Batch size๋ฅผ ์ค์ฌ์ผ ํฉ๋๋ค.
- ๋ชจ๋ธ ๋ณต์ก์ฑ์ ๋ฐ๋ฅธ ์กฐ์ : ๋ชจ๋ธ์ด ๋ณต์กํ๊ฑฐ๋ ๋ฐ์ดํฐ๊ฐ ๊ณ ํด์๋์ผ์๋ก ๋ ์์ Batch size๊ฐ ํ์ํ ์ ์์ต๋๋ค.
'๐ Computer Vision' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CV] Google Open Image Dataset (0) | 2024.10.11 |
---|---|
[CV] Keras YOLO๋ก Raccoon Dataset์ ์ด์ฉํ Object Detection (0) | 2024.10.10 |
[CV] Keras ๊ธฐ๋ฐ YOLO Open Source Package & Object Detection (0) | 2024.10.07 |
[CV] OpenCV์์ YOLO๋ฅผ ์ด์ฉํ Object Detection Part.2 (0) | 2024.10.06 |
[CV] OpenCV์์ YOLO๋ฅผ ์ด์ฉํ Object Detection Part.1 (0) | 2024.07.15 |