A A
[CV] Object Detection Model Training์‹œ ์œ ์˜์‚ฌํ•ญ
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๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ํ™•์ธ: GPU์˜ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์„ ํ™•์ธํ•˜๊ณ , ๋ชจ๋ธ์ด ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์„ ๊ธฐ๋ฐ˜์œผ๋กœ Batch size๋ฅผ ์„ค์ •ํ•˜์„ธ์š”.
  2. ์ž‘์€ Batch size๋กœ ์‹œ์ž‘: ์ฒ˜์Œ์—๋Š” ์ž‘์€ Batch size(์˜ˆ: 4)๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ์ ์ง„์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ์ ์ ˆํ•œ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  3. OOM ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ Batch size ๊ฐ์†Œ: ๋งŒ์•ฝ OOM์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Batch size๋ฅผ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ชจ๋ธ ๋ณต์žก์„ฑ์— ๋”ฐ๋ฅธ ์กฐ์ •: ๋ชจ๋ธ์ด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ํ•ด์ƒ๋„์ผ์ˆ˜๋ก ๋” ์ž‘์€ Batch size๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.