Caffe Example : 1.Brewing ImageNet (Kor) - ys7yoo/BrainCaffe GitHub Wiki

์ด๋ฏธ์ง€๋ง ์ง‘์ค‘ํ•™์Šต(Brewing ImageNet)

์ด ๊ฐ€์ด๋“œ๋Š” ๋‹น์‹ ์ด ์†Œ์œ ํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋‹น์‹ ๋งŒ์˜ ๋ชจ๋ธ์„ ํ•™์Šตํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋Š”ํ•˜์— ์ง„ํ–‰ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ์ง€๋ง์œผ๋กœ ํ•™์Šต๋œ ๋„คํŠธ์›Œํฌ(ImageNet-trained network)๋ฅผ ์›ํ•œ๋‹ค๋ฉด, ํ•™์Šต์ด ๋งŽ์€ ์—๋„ˆ์ง€๋ฅผ ์ทจํ•˜๋Š”๋ฐ ์šฐ๋ฆฌ๋Š” ์ง€๊ตฌ์˜จ๋‚œํ™”๋ฅผ ์‹ซ์–ดํ•˜๊ธฐ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” CaffeNet ๋ชจ๋ธ์„ model zoo์—์„œ ์•„๋ž˜์™€๊ฐ™์ด ์„œ์ˆ ๋œ๊ฒƒ์œผ๋กœ์จ ํ•™์Šต์‹œ์ผฐ๋‹ค.

๋ฐ์ดํ„ฐ์ค€๋น„(Data Preparation)

์ด ๊ฐ€์ด๋“œ๋Š” ๋ชจ๋“  ๊ณผ์ •์„ ๋ช…์‹œํ•˜๊ณ  ๋ชจ๋“  ๋ช…๋ น์–ด๊ฐ€ Caffe root directory์—์„œ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฐ€์ •ํ•œ๋‹ค. โ€œImageNetโ€์—์˜ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ ILSVRC12 challenge๋ฅผ ๋งํ•˜์ง€๋งŒ, ์•ฝ๊ฐ„์˜ ๋””์Šคํฌ ๊ณต๊ฐ„๊ณผ, ๋” ์ ์€ ํ•™์Šต์‹œ๊ฐ„์œผ๋กœ ๋‹น์‹ ์€ ์‰ฝ๊ฒŒ ImageNet์˜ ์ „์ฒด ๋˜ํ•œ ํ•™์Šต์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ด ์ด๋ฏธ์ง€๋ง ํ•™์Šต๋ฐ์ดํ„ฐ์™€ ์œ ํšจ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•ด๋†“์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉฐ, ์ด๋“ค์€ ๋‹น์‹ ์˜ ๋””์Šคํฌ์ƒ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ €์žฅ๋œ๋‹ค:

/path/to/imagenet/train/n01440764/n01440764_10026.JPEG
/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG

์šฐ์„  ํ•™์Šต์„ ์œ„ํ•ด ๋ช‡๊ฐœ์˜ ์˜ˆ๋น„ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•ด๋†“์„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ์— ์˜ํ•ด ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

./data/ilsvrc12/get_ilsvrc_aux.sh

ํ•™์Šต์ž…๋ ฅ๊ณผ ์œ ํšจ์ž…๋ ฅ์€ ๋ชจ๋“  ํŒŒ์ผ๋“ค๊ณผ ๊ทธ๋“ค์˜ ๋ผ๋ฒจ๋“ค์„ ๋ฆฌ์ŠคํŠธํ•œ ๊ธ€๋กœ์ ํžŒ train.txt์™€ val.txt์— ์ ํ˜€์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ILSVRC devkit์™€๋Š” ๋‹ฌ๋ฆฌ ๋ผ๋ฒจ์—๋Œ€ํ•ด ์ธ๋ฑ์Šค๋ฅผ ๋งค๊ฒจ๋†“๋Š” ์ƒ‰๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž„์„ ์•Œ์•„๋‘์–ด๋ผ. ์šฐ๋ฆฌ๋Š” synset์ด๋ฆ„๋“ค์„ ๊ทธ๋“ค์˜ ์•„์Šคํ‚ค๋ฒ•์น™์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•˜๊ณ , ๊ทธ๋Ÿฌ๊ณ ๋‚˜์„œ ๊ทธ๋“ค์„ 0๋ถ€ํ„ฐ 999๊นŒ์ง€ ๋ผ๋ฒจ์„ ๋ถ™์ธ๋‹ค. synset/name ๋งตํ•‘์— ๋Œ€ํ•˜์—ฌ๋Š” synset_words.txt์„ ๋ณด๋ผ.

๋‹น์‹ ์€ ์•„๋งˆ ๋ฏธ๋ฆฌ 256x256๋กœ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ธธ ์›ํ• ๊ฒƒ์ด๋‹ค. ๋””ํดํŠธ๊ฐ’์—์˜ํ•ด, ์šฐ๋ฆฌ๋Š” ๋”ฑํžˆ ์ด๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š”๋ฐ, ์ด๋Š” ๊ตฐ์ง‘ํ™” ํ™˜๊ฒฝ์—์„œ, mapreduce๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ‘๋ ฌ ๋ฐฉ์‹์—์„œ ์žฌ์„ค์ •ํ•˜๋Š” ์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ ์ด๋“์„ ์ทจํ• ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋“ค๋“ค์–ด Yangqing์€ ๊ทธ์˜ ๊ฒฝ๋Ÿ‰์˜ mincepie ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ๋งŒ์•ฝ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค๋ฉด, ๋‹น์‹ ์€ ๋˜ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ shell ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

for name in /path/to/imagenet/val/*.JPEG; do
    convert -resize 256x256\! $name $name
done

examples/imagenet/create_imagenet.sh์„ ํ•œ๋ฒˆ๋ณด๋ผ. ํ•„์š”ํ•˜๋‹ค๋ฉด ํ•™์Šต๋””๋ ‰ํ† ๋ฆฌ์™€ ์œ ํšจ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ณ , ๋ฏธ๋ฆฌ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ˆ˜์ •ํ•ด๋‘์ง€ ์•Š์•˜๋‹ค๋ฉด, 256x256๋กœ ๋ชจ๋“  ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ธฐ์œ„ํ•ด โ€œRESIZE=trueโ€๋ฅผ ์„ค์ •ํ•˜๋ผ. ์ง€๊ธˆ, examples/imagenet/create_imagenet.sh๋กœ leveldbs๋ฅผ ๊ฐ„๋‹จํžˆ ๋งŒ๋“ค์–ด๋ณด์•„๋ผ examples/imagenet/ilsvrc12_train_leveldb์™€ examples/imagenet/ilsvrc12_val_leveldb๋Š” ์ด๋ฒˆ ์‹คํ–‰์ „์— ์กด์žฌํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ž„์„ ์•Œ๊ณ ์žˆ์œผ๋ผ. ์ด ๋ช…๋ น๊ตฌ๋ฌธ์œผ๋กœ ์ƒ์„ฑ๋  ๊ฒƒ์ด๋‹ค. GLOG_logtostderr=1์€ ์ ๊ฒ€ํ•˜๊ธฐ์œ„ํ•ด ๋‹น์‹ ์„ ์œ„ํ•ด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ฒ„๋ฆด๊ฒƒ์ด๊ณ , ๋‹น์‹ ์€ ์•ˆ์ „ํ•˜๊ฒŒ ์ด๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฏธ์ง€ ํ‰๊ท  ์—ฐ์‚ฐํ•˜๊ธฐ(Compute Image Mean)

๋ชจ๋ธ์€ ๋‹น์‹ ์—๊ฒŒ ๊ฐ๊ฐ ์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ์ง€ ํ‰๊ท ์„ ๋นผ๋ผ๊ณ  ์š”๊ตฌํ•  ๊ฒƒ์ด๊ณ , ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ด ํ‰๊ท ์„ ๊ณ„์‚ฐํ•ด์•ผ๋งŒํ•œ๋‹ค. tools/compute_image_mean.cpp๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋Š” ๋˜ํ•œ ์–ด๋–ป๊ฒŒ ๋‹ค์ค‘์š”์†Œ๋“ค ์˜ˆ๋ฅผ๋“ค๋ฉด ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ(protocol buffer)๋‚˜ leveldbs, ๊ทธ๋ฆฌ๊ณ  ๋กœ๊น…(logging)์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋‹น์‹ ์ž์‹ ์„ ์นœ์ˆ™ํ•˜๊ฒŒ ํ•ด์ค„ ์ข‹์€ ์˜ˆ์ด๋‹ค. ์–ด์จŒ๊ฑฐ๋‚˜, ํ‰๊ท ์—ฐ์‚ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜ํ–‰๋˜์–ด์งˆ ์ˆ˜์žˆ๋‹ค:

./examples/imagenet/make_imagenet_mean.sh

์ด๋Š” data/ilsvrc12/imagenet_mean.binaryproto๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ๊ฒƒ์ด๋‹ค.

๋ชจ๋ธ์ •์˜(Model definition)

์šฐ๋ฆฌ๋Š” Krizhevsky, Sutskever, ๊ทธ๋ฆฌ๊ณ  Hinton๊ฐ€ ์ฒ˜์Œ NIPS 2012 paper์— ์ œ์‹œํ•œ ์ ‘๊ทผ๋ฐฉ๋ฒ•์— ๋Œ€ํ•˜์—ฌ ์ฐธ์กฐ๊ตฌํ˜„์„ ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค.

๋„คํŠธ์›Œํฌ ์ •์˜(models/bvlc_reference_caffenet/train_val.prototxt)๋Š” in Krizhevsky ์™€ ๊ทธ์˜ ๋™๋ฃŒ๋“ค์˜ ๊ฒƒ์„ ๋”ฐ๋ฅธ๋‹ค. ๋งŒ์•ฝ ๋‹น์‹ ์ด ์ด ๊ฐ€์ด๋“œ์—์„œ ์ œ์‹œํ•œ ํŒŒ์ผ ๊ฒฝ๋กœ๋กœ๋ถ€ํ„ฐ ๋ฒ—์–ด๋‚œ๋‹ค๋ฉด, ๋‹น์‹ ์€ .prototxt ํŒŒ์ผ๋“ค์—์„œ ์ ์ ˆํ•œ ๊ฒฝ๋กœ๋ฅผ ์กฐ์ ˆํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ์„ ์œ ์˜ํ•˜๋ผ.

๋งŒ์•ฝ ๋‹น์‹ ์ด ์œ ์‹ฌํžˆ models/bvlc_reference_caffenet/train_val.prototxt๋ฅผ ๋ณด์•˜๋‹ค๋ฉด, phase: TRAIN์ด๋‚˜ ํ˜น์€ phase: TEST ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ช…์‹œํ•œ include ์„ธ์…˜๋“ค ๋ณผ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์„ธ์…˜๋“ค์€ ํ•œ ํŒŒ์ผ์—์„œ ์šฐ๋ฆฌ์—๊ฒŒ ๋‘˜์ด ๊ฐ€๊น๊ฒŒ ์—ฐ๊ด€๋œ ๋„คํŠธ์›Œํฌ๋“ค(ํ•™์Šต์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋„คํŠธ์›Œํฌ์™€ ์‹คํ—˜์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋„คํŠธ์›Œํฌ)์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ด๋Ÿฌํ•œ ๋‘ ๋„คํŠธ์›Œํฌ๋“ค์€ include { phase: TRAIN }์ด๋‚˜ include { phase: TEST }๋กœ ์ ํžŒ ๊ฒƒ๋“ค์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๊ณ„์ธต๋“ค์„ ๊ณต์œ ํ•˜์—ฌ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—์„œ, ๋‹จ์ผ ์ž…๋ ฅ ๊ณ„์ธต๊ณผ ํ•˜๋‚˜์˜ ์ถœ๋ ฅ ๊ณ„์ธต์€ ๋‹ค๋ฅด๋‹ค.

  • ์ž…๋ ฅ๊ณ„์ธต ์ฐจ์ด์ (Input layer differences)

ํ•™์Šต ๋„คํŠธ์›Œํฌ์˜ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๊ณ„์ธต์€ examples/imagenet/ilsvrc12_train_leveldb๋กœ๋ถ€ํ„ฐ ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ์ˆ ํ•˜๋ฉฐ ๋žœ๋ค์œผ๋กœ ์ž…๋ ฅ์ด๋ฏธ์ง€๋ฅผ ๋ฏธ๋Ÿฌ๋งํ•œ๋‹ค. ์‹คํ—˜ ๋„คํŠธ์›Œํฌ์˜ ๋ฐ์ดํ„ฐ ๊ณ„์ธต์€ examples/imagenet/ilsvrc12_val_leveldb์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ทจํ•˜์ง€๋งŒ ๋žœ๋ค ๋ฏธ๋Ÿฌ๋ง์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ์ถœ๋ ฅ๊ณ„์ธต ์ฐจ์ด์ (Output layer differences)

๋‘ ๋„คํŠธ์›Œํฌ ๋ชจ๋‘ softmax_loss ๊ณ„์ธต์„ ์ถœ๋ ฅํ•˜๋ฉฐ, ์ด๋Š” ํ•™์Šต์—์„œ ์†์‹ค ํ•จ์ˆ˜๋ฅผ ์—ฐ์‚ฐํ•˜๊ณ  backpropagation์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฐ˜๋ฉด์— ์œ ํšจ์—์„œ๋Š” ์ด ์†์‹ค์€ ๊ฐ„๋‹จํžˆ ๋ณด๊ณ ๋งŒ ํ•œ๋‹ค. ์‹คํ—˜ ๋„คํŠธ์›Œํฌ๋Š” ๋˜ํ•œ ๋‘๋ฒˆ์งธ ์ถœ๋ ฅ ๊ณ„์ธต, ์ •ํ™•๋„๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๊ณ , ์ด๋Š” ์‹คํ—˜ ์„ธํŠธ์— ๋Œ€ํ•œ ์ •ํ™•๋„๋ฅผ ๋ณด๊ณ ํ•˜๋Š”๋ฐ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค. ํ•™์Šต๊ณผ์ •์—์„œ, ์‹คํ—˜ ๋„คํŠธ์›Œํฌ๋Š” ๋•Œ๋•Œ๋กœ ์˜ˆ๋ฅผ๋“ค๋ฉฐ ์„ค๋ช…ํ•  ๊ฒƒ์ด๊ณ  Test score #0: xxx ์ด๋‚˜ Test score #1: xxx์™€ ๊ฐ™์€ ์ค„์„ ์ƒ์„ฑํ•˜๋ฉด์„œ ์‹คํ—˜ ์„ธํŠธ์— ๋Œ€ํ•˜์—ฌ ์‹คํ—˜๋  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ, ์Šค์ฝ”์–ด 0์€ ์ •ํ™•๋„์ด๋ฉฐ(์ด ์ •ํ™•๋„๋Š” ํ•™์Šต๋˜์ง€ ์•Š์€ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•˜์—ฌ 1/1000 = 0.001 ์ฃผ๋ณ€์—์„œ ์‹œ์ž‘ํ•œ๋‹ค), ๊ทธ๋ฆฌ๊ณ  ์Šค์ฝ”์–ด 1์€ ์†์‹ค์ด๋‹ค(์ด ์†์‹ค์€ ํ•™์Šต๋˜์ง€์•Š์€ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•˜์—ฌ ์•ฝ 7 ์ฃผ๋ณ€์—์„œ ์‹œ์ž‘ํ•  ๊ฒƒ์ด๋‹ค.).

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ํ•ด๊ฒฐ์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋‹ค. ๊ณ„ํš์„ ์„ธ์›Œ๋ณด์ž:

  • ์šฐ๋ฆฌ๋Š” 256์˜ ์ผํšŒ์ฒ˜๋ฆฌ๋Ÿ‰์œผ๋กœ ์‹คํ–‰ํ•  ๊ฒƒ์ด๊ณ , ์ „์ฒด 450,000๋งŒ๋ฒˆ์˜ ๋ฐ˜๋ณต (์•ฝ 90ํšŒ์˜ ์—์ฝ”)์„ ์‹คํ–‰ํ•  ๊ฒƒ์ด๋‹ค.
  • ๋งค 1000๋ฒˆ ๋ฐ˜๋ณต๋งˆ๋‹ค ์šฐ๋ฆฌ๋Š” ์œ ํšจ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•˜์—ฌ ํ•™์Šต๋œ ๋ง์„ ์‹คํ—˜ํ•œ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ดˆ๊ธฐ ํ•™์Šต์œจ์„ 0.01๋กœ ์„ค์ •ํ•˜๊ณ , ์ด๋ฅผ ๋งค 100,000๋งŒ๋ฒˆ (์•ฝ 20ํšŒ์˜ ์—์ฝ”)์—์„œ ๊ฐ์†Œํ•  ๊ฒƒ์ด๋‹ค.
  • ์ •๋ณด๋“ค์€ ๋งค 20ํšŒ ๋ฐ˜๋ณต๋งˆ๋‹ค ๋ณด์—ฌ์งˆ ๊ฒƒ์ด๋‹ค.
  • ๋„คํŠธ์›Œํฌ๋Š” ๋ชจ๋ฉ˜ํ…€ 0.9 ๊ทธ๋ฆฌ๊ณ  0.0005์˜ ๊ฐ€์ค‘์น˜ ๊ฐ์†Œ๋กœ ํ•™์Šต๋  ๊ฒƒ์ด๋‹ค.
  • ๋งค 10,000๋ฒˆ ๋ฐ˜๋ณต๋งˆ๋‹ค, ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์ƒํƒœ์˜ ์Šค๋ƒ…์ƒท์„ ์ฐ์„ ๊ฒƒ์ด๋‹ค.

๊ดœ์ฐฎ์•„ ๋ณด์ด์ง€? ์ด๋Š” models/bvlc_reference_caffenet/solver.prototxt.์— ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.

์ด๋ฏธ์ง€๋ง ํ•™์Šตํ•˜๊ธฐ(Training ImageNet)

์ค€๋น„๋ฌ์ง€? ์‹œ์ž‘ํ•ด๋ณด์ž.

./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt

์ด์ œ ์ฆ๊ฒจ๋ณด๋ผ๊ณ !

K40 ๋จธ์‹ ์ƒ์—์„œ๋Š”, ๋งค 20ํšŒ ๋ฐ˜๋ณต๋งˆ๋‹ค (K20๋จธ์‹ ์ƒ์—์„œ๋Š” 36์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”๋ฐ ๋น„ํ•ด) ์‹คํ–‰ํ•˜๋Š”๋ฐ ์•ฝ 26.5์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋ฉฐ, ๋งค์šฐ ํšจ๊ณผ์ ์œผ๋กœ ์ •๋ฐฉํ–ฅ-์—ญ๋ฐฉํ–ฅ ๊ณผ์ • ๋ชจ๋‘์— ๋Œ€ํ•˜์—ฌ ์ด๋ฏธ์ง€๋‹น ์•ฝ 5.2 ms๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. ์•ฝ 2 ms๊ฐ€ ์ •๋ฐฉํ–ฅ์— ์‚ฌ์šฉ๋˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ์—ญ๋ฐฉํ–ฅ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ๋งŒ์•ฝ ์ด ์—ฐ์‚ฐ์‹œ๊ฐ„์„ ํ•ด๋ถ€ํ•˜๋Š”๋ฐ ํฅ๋ฏธ๊ฐ€์žˆ๋‹ค๋ฉด, ๋‹ค์Œ์„ ์‹คํ–‰์‹œ์ผœ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

./build/tools/caffe time --model=models/bvlc_reference_caffenet/train_val.prototxt

ํ•™์Šต์žฌ๊ฐœ?(Resume Training?)

์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ํŒŒ์›Œ๊ฐ€ ๋‚˜๊ฐˆ๋•Œ๋ฅผ ๊ฒฝํ—˜ํ•ด๋ดค๊ฑฐ๋‚˜ ๋ฐฐํ‹€ํ•„๋“œ๋ฅผ ์ฆ๊น€์œผ๋กœ์จ ๊ฑฐ์˜ ์šฐ๋ฆฌ์ž์‹ ์„ ๊ฐ€์น˜์žˆ๊ฒŒ ๋ณด๋žŒ์žˆ์ง€์•Š์€ ๊ฒƒ ๊ฐ™์ด ๋Š๊ผˆ๋‹ค(๋ˆ„๊ตฌ ํ€˜์ดํฌ๋ฅผ ์•„์ง๋„ ๊ธฐ์–ตํ•˜๋Š” ์ด๊ฐ€ ์žˆ๋Š”๊ฐ€?). ์šฐ๋ฆฌ๊ฐ€ ํ•™์Šต์ค‘์— ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์Šค๋ƒ…์ƒท์œผ๋กœ ์ฐ๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” ์Šค๋ƒ…์ƒท์—์„œ ๋ถ€ํ„ฐ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt --snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate

์Šคํฌ๋ฆฝํŠธ์—์„œ caffenet_train_iter_10000.solverstate๋Š” ์ •ํ™•ํ•œ ํ•ด๊ฒฐ์‚ฌ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ชจ๋“  ํ•„์ˆ˜์ ์ธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ•ด๊ฒฐ์‚ฌ ์ƒํƒœ ์Šค๋ƒ…์ƒท์ด๋‹ค.

์ž‘๋ณ„์ธ์‚ฌ(Parting Words)

๋‹น์‹ ์ด ์ด ๋ ˆ์‹œํ”ผ๋ฅผ ์ข‹์•„ํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•œ๋‹ค! ๋„คํŠธ์›Œํฌ์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๋ฉด์„œ ๊ทธ๋ฆฌ๊ณ /ํ˜น์€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์™€ ์—…๋ฌด๋ฅผ ๋ณด๋‚ด๋ ค๋Š” ๋„คํŠธ์›Œํฌ๋‚ด์˜ ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ์ž˜ ์กฐ์œจํ•˜๋ฉด์„œ, ILSVRC 2012 challenge์ด๋ž˜๋กœ ๋งŽ์€ ์—ฐ๊ตฌ์ž๋“ค์€ ๋”์šฑ ์ง„์ „ํ–ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์ ์€ ๋‹ค์–‘ํ•œ prototxt ํŒŒ์ผ๋“ค์—์˜ํ•ด Caffe๊ฐ€ ๋‹น์‹ ์„ ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ์„ ํƒ์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•˜๋„๋ก ํ•˜์—ฌ๋ผ. - ํฅ๋ฏธ๋กญ์ง€ ์•Š์•„?

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ๋ง‰ ํ›ˆ๋ จ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์—, classifying ImageNet์— ๋Œ€ํ•œ Python ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ผ

์œ„ํ‚ค๋กœ ๋Œ์•„๊ฐ€๊ธฐ