Caffe Example : 5.Extracting Features (Kor) - ys7yoo/BrainCaffe GitHub Wiki

ํŠน์ง• ์ถ”์ถœ(Extracting Features)

์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š”, ์šฐ๋ฆฌ๋Š” C++ ๋„๊ตฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์ „์— ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ ํŠน์ง•์ถ”์ถœ์„ ํ•  ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•„ํ„ฐ ์‹œ๊ฐํ™” ์˜ˆ์‹œ์—์„œ์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ, ์ด๋ฒˆ ์—…๋ฌด๋ฅผ ์œ„ํ•ด ํŒŒ์ด์ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

Caffe ์„ค์น˜์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ๋”ฐ๋ผํ•˜๊ณ , Caffe root directory์—์„œ scripts/download_model_binary.py models/bvlc_reference_caffene๋ฅผ ์‹คํ–‰ํ•˜๋ผ. ๋งŒ์•ฝ ์•„๋ž˜์˜ ํˆด์—๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋“ค์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ๊ทธ๋“ค์˜ ์†Œ์Šค ์ฝ”๋“œ์—๋Œ€ํ•ด ์ƒ๋‹ดํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉฐ ์ด๋Š” ์ถ”๊ฐ€์  ์ •๋ณด๊ฐ€ ๋ณดํ†ต ์ œ๊ณต๋œ๋‹ค.

์‹คํ–‰ํ•  ๋ฐ์ดํ„ฐ ๊ณ ๋ฅด๊ธฐ (Select data to run on)

์šฐ๋ฆฐ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ €์žฅํ•ด๋‘˜ ์ž„์‹œ ํด๋”๋ฅผ ๋งŒ๋“ค๊ฒƒ์ด๋‹ค.

mkdir examples/_temp

์ฒ˜๋ฆฌํ•  ํŒŒ์ผ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ผ. ์šฐ๋ฆฌ๋Š” Caffe๋กœ ๋งˆ์‹œ๋Š”(์ฒ˜๋ฆฌํ•˜๋Š”) ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

find `pwd`/examples/images -type f -exec echo {} \; > examples/_temp/temp.txt

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ImageDataLayer๋Š” ๊ฐ๊ฐ์˜ ํŒŒ์ผ์ด๋ฆ„ ํ›„์— ๋ผ๋ฒจ๋ฅผ ๋ถ™์ด๊ณ , 0๋ถ€ํ„ฐ ๊ฐ๊ฐ ๋ผ์ธ์˜ ๋๊นŒ์ง€ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ด๋‹ค.

sed "s/$/ 0/" examples/_temp/temp.txt > examples/_temp/file_list.txt

ํŠน์ง• ์ถ”์ถœ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ ์ •์˜(Define the Feature Extraction Network Architecture)

์‹ค์ œ๋กœ, ๋ฐ์ดํ„ฐ์„ธํŠธ๋กœ๋ถ€ํ„ฐ ํ‰๊ท  ์ด๋ฏธ์ง€๋ฅผ ๋บ„์…ˆํ•˜๋Š”๊ฒƒ์€ ์ƒ๋‹นํžˆ ๋ถ„๋ฅ˜ํ™” ์ •ํ™•๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค. ILSVRC ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ํ‰๊ท ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ผ

./data/ilsvrc12/get_ilsvrc_aux.sh

์šฐ๋ฆฌ๋Š” ๋„คํŠธ์›Œํฌ ์ •์˜ prototxt์—์„œ data/ilsvrc212/imagenet_mean.binaryproto๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๊ฒƒ์ด๋‹ค.

๋„คํŠธ์›Œํฌ ์ •์˜๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์ˆ˜์ •ํ•˜์ž. ์šฐ๋ฆฌ๋Š” ImageDataLayer๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฉฐ, ์ด๋Š” ์šฐ๋ฆฌ๋ฅผ์œ„ํ•ด ์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ๊ณ  ๋ถˆ๋Ÿฌ์™€์ค„ ๊ฒƒ์ด๋‹ค.

cp examples/feature_extraction/imagenet_val.prototxt examples/_temp

ํŠน์ง•์ถ”์ถœ (Extract Features)

์ด์ œ ํ•„์š”ํ•œ ๋ชจ๋“ ๊ฒƒ์ด ์ค€๋น„๋๋‹ค.

./build/tools/extract_features.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel 
examples/_temp/imagenet_val.prototxt fc7 examples/_temp/features 10 leveldb

๋‹น์‹ ์ด ์ถ”์ถœํ•œ ํŠน์ง• blob์˜ ์ด๋ฆ„์€ fc7์ด๋ฉฐ ์ด๋Š” ์ž ์กฐ ๋ชจ๋ธ์˜ ์ตœ์ƒ ๋ ˆ๋ฒจ ํŠน์ง•์„ ์ƒ์ง•ํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” conv5๋‚˜ pool3์™€ ๊ฐ™์€ ์–ด๋–ค ๋‹ค๋ฅธ ๊ณ„์ธต์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ ๋งˆ์ง€๋ง‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ฐ์ดํ„ฐ ์ตœ์†Œ ์ผํšŒ์ฒ˜๋ฆฌ๋Ÿ‰์˜ ์ˆ˜์ด๋‹ค.

ํŠน์ง•๋“ค์€ ๋ช‡๋ช‡ ๋‹ค๋ฅธ ์ฝ”๋“œ๋“ค์— ์˜ํ•ด ์ ‘๊ทผ๋  ์ค€๋น„๋ฅผ ํ•˜๋Š” examples/_temp/features์˜ LevelDB์†์— ์ €์žฅ๋œ๋‹ค.

๋งŒ์•ฝ ์—๋Ÿฌ โ€œCheck failed: status.ok() Failed to open leveldb examples/_temp/featuresโ€๋ฅผ ์กฐ์šฐํ–ˆ๋‹ค๋ฉด, ์ด๋Š” ๋””๋ ‰ํ† ๋ฆฌ examples/_temp/features๊ฐ€ ์ „์— ๋‹น์‹ ์ด ์‹คํ–‰ํ–ˆ๋˜ ์ฝ”๋“œ๋กœ ์ƒ์„ฑ๋˜์–ด์žˆ๋‹ค๋Š”๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์žฌ์‹คํ–‰ํ•˜์—ฌ๋ผ.

rm -rf examples/_temp/features/

๋งŒ์•ฝ ํŠน์ง•์ถ”์ถœ์— ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›์น˜ ์•Š๋Š”๋‹ค๋ฉด, ํ•„ํ„ฐ ์‹œ๊ฐํ™” ๋…ธํŠธ๋ถ์„ ๋ณด์•„๋ผ.

์น˜์šฐ๊ธฐ (Clean up)

์ด์ œ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜์ž.

rm -r examples/_temp
์œ„ํ‚ค๋กœ ๋Œ์•„๊ฐ€๊ธฐ