Skip to content

Latest commit

ย 

History

History
74 lines (59 loc) ยท 8.32 KB

File metadata and controls

74 lines (59 loc) ยท 8.32 KB
title Introduction to Caffe
tags
caffe
keywords start, introduction, begin, install, build, hello world,
last_updated August 12, 2015

By koosy on 2015.05.19

@inproceedings{jia2014caffe,
  title={Caffe: Convolutional architecture for fast feature embedding},
  author={Jia, Yangqing and Shelhamer, Evan and Donahue, Jeff and Karayev, Sergey and Long, Jonathan and Girshick, Ross and Guadarrama, Sergio and Darrell, Trevor},
  booktitle={Proceedings of the ACM International Conference on Multimedia},
  pages={675--678},
  year={2014},
  organization={ACM}
}

Abstract

caffe๋Š” ์ตœ์‹  ๋”ฅ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ชจ๋ธ๋“ค์„ ํฌํ•จํ•˜๋Š” ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค. BSD ๋ผ์ด์„ผ์Šค์˜ C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํŒŒ์ด์„  ๋ฐ ๋ฉ”ํ‹€๋ ™ ๋ฐ”์ธ๋”ฉ ํˆด์„ ํฌํ•จํ•˜๋ฉฐ, convolutional neural networks (CNN) ๋ฐ ๊ธฐํƒ€ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํšจ์œจ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. caffe๋Š” CUDA GPU ํ”„๋กœ์„ธ์‹ฑ์„ ์ง€์›ํ•˜๋ฉฐ, K40 ๋˜๋Š” Titan GPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 4์ฒœ๋งŒ์žฅ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋ฃจ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์ฝ”๋“œ ๊ตฌํ˜„๊ณผ ๋ชจ๋ธ์ •์˜๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์‹คํ—˜ ๋ฐ ํ”Œ๋ ›ํผ๊ฐ„ ๋งค๋„๋Ÿฌ์šด ๋ณ€ํ™˜์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ์ด๋Š” ํ”„๋กœํ† ํƒ€์ดํ•‘ ๋จธ์‹ ์—์„œ๋ถ€ํ„ฐ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

caffe๋Š” Berkeley Vision and Learning Center (BVLC)์— ์˜ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ  GitHub ๊ธฐ์—ฌ์ž๋“ค์— ์˜ํ•ด ์œ ์ง€๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. caffe๋Š” ์—ฐ๊ตฌ๊ณผ์ œ, ๋Œ€์šฉ๋Ÿ‰ ์‚ฐ์—…์‘์šฉ, ๋น„์ ผ/์Œ์„ฑ/์˜์ƒ ์ฒ˜๋ฆฌ ๊ด€๋ จ ์Šคํƒ€ํŠธ์—…์— ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์š”์•ฝ๋งŒ ํ• ๊ฒŒ์š”. ์–ด์„คํ”ˆ ๋ฒˆ์—ญ๋ณด๋‹ค ์›๋ฌธ์„ ๋ณด์‹œ๋Š”๊ฒŒ ๋” ์ดํ•ดํ•˜์‹œ๊ธฐ ์ข‹์„๋“ฏ...

Introduction

  • ์ด๋ฏธ์ง€, ์Œ์„ฑ์‹ ํ˜ธ, ํ–…ํ‹ฑ์‹ ํ˜ธ ๋“ฑ ์„ผ์„œ ์ •๋ณด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋”ฅ๋ชจ๋ธ๋“ค์ด ์ˆ˜์ž‘์—… ํŠน์ง• ์ถ”์ถœ๋ณด๋‹ค ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜์˜€๋‹ค. ํŠน๋ณ„ํžˆ ๋Œ€์šฉ๋Ÿ‰ ๋น„์ „์ธ์‹ ๋ถ„์•ผ์—์„œ CNN์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋™์ž‘ํ•˜์˜€๋‹ค.
  • ํ•˜์ง€๋งŒ, ์ถœํŒ๋œ ์„ฑ๊ณต์ ์ธ ์—ฐ๊ตฌ๊ฒฐ๊ณผ๋ฅผ ์žฌํ™œ์šฉ ํ•˜๋Š”๋ฐ๋Š” ์ˆ˜๊ฐœ์›”์ด ๊ฑธ๋ฆฌ๊ณ , ์—ฐ๊ตฌ์ž๋“ค์€ ๋…ผ๋ฌธ ์™ธ์—๋„ ํ•™์Šตํ•œ ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๋Š”๊ฒƒ์ด ์‹ค์ œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ™œ์šฉํ•˜๋Š”๋ฐ ๋” ๊ฐ€์น˜์žˆ๋‹ค๊ณ  ์—ฌ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฏธ๋ฆฌ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํšจ์œจ์ ์ธ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ํˆด์ด ํ•„์š”ํ•˜๋‹ค.
  • ์ด๋ฅผ ๋ชฉ์ ์œผ๋กœ caffe๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋ ›ํผ, C++, CUDA GPU์—ฐ์‚ฐ, Python/Numpy ๋ฐ Matlab์„ ์ง€์›ํ•œ๋‹ค.
  • ํŠน์ง•: ์œ ๋‹› ํ…Œ์ŠคํŠธ, ์—„๊ฒฉํ•˜๊ณ  ๋น ๋ฅธ ๋ฐฐํฌ, ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ, ๋„คํŠธ์›Œํฌ ์ •์˜์™€ ์‹ค์ œ ๊ตฌํ˜„๊ฐ„์˜ ์—„๊ฒฉํ•œ ๊ตฌ๋ถ„.
  • ํ™œ์šฉ์˜์—ญ: ๋น„์ ผ ๋ฐ ์Œ์„ฑ ์ธ์‹, ๋กœ๋ณดํ‹ฑ์Šค, ๋‰ด๋กœ์‚ฌ์ด์–ธ์Šค ๋“ฑ

Highlights of caffe

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

  • Modularity: ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํฌ๋ฉง, ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด, loss function ๋“ฑ์— ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ชจ๋“ˆํ™”๋˜์–ด ๊ฐœ๋ฐœ๋จ.
  • Separation of representation and implementation: ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์€ Protocol Buffer ์–ธ์–ด๋ฅผ ์ด์šฉํ•œ config files ๋กœ ์ •์˜๋จ. directed acyclic graph ํ˜•ํƒœ์˜ ์ž„์˜์˜ ๋„คํŠธ์›Œํฌ ์ •์˜ ๊ฐ€๋Šฅ (Recurrent๋Š” ์•ˆ๋˜๋„ค์š”. ์ฐธ๊ณ ํ•˜์‹œ๊ธธ..) CPU ๋˜๋Š” GPU ๊ตฌํ˜„์€ function ํ•˜๋‚˜๋งŒ ๋ถ€๋ฆ„์œผ๋กœ์จ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ.
  • Test coverage: ๊ฐ ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์€ ๊ฐ test code๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ. (์ฒ˜์Œ make ํ•  ๋•Œ test code ๋™์ž‘์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ๋ชจ๋“ˆํ™”๋œ test code๋ฅผ ๊ณต๋ถ€ํ•จ์œผ๋กœ์จ caffe์˜ ๊ฐ ๋ชจ๋“ˆ ๊ธฐ๋Šฅ ์‚ฌ์šฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)
  • Python and Matlab bindings: ๊ธฐ์กด ์ฝ”๋“œ๋“ค๊ณผ์˜ ์ธํ„ฐํŽ˜์ด์‹ฑ์„ ์œ„ํ•ด python/matlab binding์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ์ž…์ถœ๋ ฅ ๋ฟ ์•„๋‹ˆ๋ผ python binding์€ solver module์— ์ ‘๊ทผํ•จ์œผ๋กœ์จ ์ƒˆ๋กœ์šด ํ›ˆ๋ จ๊ณผ์ •์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด๊ฑฐ ํƒ๋‚˜๋Š” ๊ธฐ๋Šฅ์ด๋„ค์š”. ๋ˆ„๊ตฌ python ์ž˜ ํ•˜์‹œ๋Š” ๋ถ„๊ป˜์„œ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ์ข‹์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.)
  • Pre-trained reference models: ๋น„์ ผ์ธ์‹์— ๊ด€ํ•œ ์ฐธ๊ณ ๋ชจ๋ธ(AlexNet ImageNet, R-CNN detection model) ์ œ๊ณต (BSD license ์•„๋‹˜)

Comparison to related software

caffe_comparison

Architecture

  • Data storage

    • blob ์ด๋ผ๊ณ  ํ•˜๋Š” 4์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ชจ๋“ˆ๊ฐ„ ํ†ต์‹ ํ•จ
    • blob์€ ๋ฉ”๋ชจ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, CPU/GPU๊ฐ„ ๋™๊ธฐํ™” ๋ฐ ์ด์ข… ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. (์ œ ๊ฒฝํ—˜์ƒ ๋™๊ธฐํ™”์— ๊ฝค ๋งŽ์€ ๊ณ„์‚ฐ ์‹œ๊ฐ„์„ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๋ฏผ์„ ์ข€ ํ•˜๊ธด ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ณ ๋ ค๋งŒ ํ•  ๋ฟ ์‹ค์ œ ๊ตฌํ˜„์€ ์•ˆํ•ด๋„ ๋˜๋‹ˆ ํŽธํ•ฉ๋‹ˆ๋‹ค.) ๋ฉ”๋ชจ๋ฆฌ๋Š” ์š”์ฒญ์— ์˜ํ•ด ํ• ๋‹น๋จ.
    • ๋ชจ๋ธ์€ Google Protocol Buffers ์— ์˜ํ•ด ์ €์žฅ๋จ. protobuf์˜ ํŠน์ง•: ์ตœ์†Œ์‚ฌ์ด์ฆˆ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ŠคํŠธ๋ง, ํšจ์œจ์ ์ธ ์‹œ๋ฆฌ์–ผํ™”, text format ๋“ฑ๋“ฑ (์จ๋ณด๋‹ˆ xml ๋ณด๋‹ค ์žฅ์ ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.)
    • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹์€ LevelDB์— ์ €์žฅ๋จ.
  • Layers

    • ํ•˜๋‚˜ ๋˜๋Š” ๋‹ค์ˆ˜์˜ blob์„ ์ž…๋ ฅ์œผ๋กœ ํ•˜๊ณ , ํ•˜๋‚˜ ๋˜๋Š” ๋‹ค์ˆ˜์˜ blob์„ ์ถœ๋ ฅ์œผ๋กœ ํ•˜๋Š” ๋„คํŠธ์›Œํฌ์˜ ๊ตฌ์„ฑ ๋‹จ์œ„.
    • forward pass: ์ž…๋ ฅ --> ์ถœ๋ ฅ
    • *backward pass: ์ถœ๋ ฅ์˜ ๊ตฌ๋ฐฐ(gradient)๋ฅผ ํ†ตํ•ด layer์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์˜ ์ฆ๊ฐ(gradient)๋ฅผ ๊ณ„์‚ฐ. ์ตœ์ข… ์ถœ๋ ฅ์˜ ์˜ค์ฐจ๋ฅผ ์—ญ์ „ํŒŒ (back probagation) ํ•จ.
    • convolution, pooling, inner products, rectified linear, logistic, local response normalization, element-wise operations, losses like softmax and hinge ๋“ฑ์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋Š” layer ์ œ๊ณต.
  • Networks and Run Mode

    • caffe network๋Š” ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ data๋ฅผ ๋กœ๋”ฉํ•˜๋Š” data layer๋ถ€ํ„ฐ ๋ชฉ์ (์˜ค๋ฅ˜)ํ•จ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” loss layer๊นŒ์ง€ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    • ์ด ๋„คํŠธ์›Œํฌ๋Š” CPU ๋˜๋Š” GPU์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ์ด๋Š” ํ•˜๋‚˜์˜ switch๋กœ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๋ชจ๋“œ๋Š” ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ด๋Š” ๋ชจ๋ธ ์ •์˜์™€๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•จ.
  • Training a network

    • caffe๋Š” ๋น ๋ฅด๊ณ  ํ‘œ์ค€์ธ stochastic gradient descent algorithm ์œผ๋กœ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ MNIST digit classification ์„ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์˜ ํ•œ ์˜ˆ์ด๋‹ค. (ํˆฌํ† ๋ฆฌ์–ผ์—์„œ ์˜ˆ์ œ๋กœ ๋‹ค๋ฃฐ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.) caffe network model for mnist digit classification
    • ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด๋Š” ๊ฐ ์ด๋ฏธ์ง€์™€ ๋ผ๋ฒจ์„ ์ฝ์–ด์˜ค๊ณ , ์˜์ƒ ๋ฐ์ดํ„ฐ๋Š” convolution, pooling, rectified linear transforms ๋“ฑ์˜ ๋ฉ€ํ‹ฐ ๋ ˆ์ด์–ด๋ฅผ ๊ฑฐ์ณ์„œ ๋ผ๋ฒจ๊ณผ ๋น„๊ตํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” loss layer์— ๋„๋‹ฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์˜ค์ฐจ์˜ ๊ตฌ๋ฐฐ(gradient)๋ฅผ ํ†ตํ•ด ์ „์ฒด ๋„คํŠธ์›Œํฌ๋ฅผ ํ›ˆ๋ จํ•˜๊ฒŒ ๋œ๋‹ค.
    • ๋„คํŠธ์›Œํฌ ํ›ˆ๋ จ์„ ์œ„ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” learning rate decay schedules, momentum, stopping ๋ฐ resuming์„ ์œ„ํ•œ snapshots ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ๋ชจ๋‘ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ณ  ๋ฌธ์„œํ™” ๋˜์–ด ์žˆ๋‹ค.
    • Finetuning ์€ ๊ธฐ์กด ํ›ˆ๋ จ๋œ ๋ชจ๋ธ์„ ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ณ๋‚˜ ๋ฐ์ดํ„ฐ์— ์ ์šฉํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ธฐ์กด ๋„คํŠธ์›Œํฌ์˜ snapshot ๊ณผ ์ƒˆ๋กœ์šด ๋„คํŠธ์›Œํฌ ์ •์˜๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ํ…Œ์Šคํฌ์— ๋Œ€ํ•œ ๋ชจ๋ธ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค(weights)์„ ํŠœ๋‹ํ•œ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ knowledge transfer, object detection, object retrieval ๋“ฑ์— ํ™œ์šฉ๋œ๋‹ค.

Applications and examples

  • Object classification. online demo: 1,000 ImageNet ์นดํ…Œ๊ณ ๋ฆฌ ์ค‘์—์„œ ํ•˜๋‚˜ ๋งž์ถ”๊ธฐ. ๋˜ํ•œ ์ด๋ ‡๊ฒŒ ํ•™์Šต๋œ ๋„คํŠธ์›Œํฌ๋ฅผ finetuning ํ•ด์„œ 10,000 ๊ฐœ์˜ full ImageNet ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜์˜€๋‹ค. (ํ—..)
  • Learning semantic features. ๋ฏธ๋ฆฌ ํ•™์Šต๋œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์šฉํ•˜์—ฌ semantic feature๋ฅผ ์ถ”์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋จ [DeCaf]. ์ด ํ”ผ์ณ๋Š” ๋˜ํ•œ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์˜ ์ด๋ฏธ์ง€ (๋นˆํ‹ฐ์ง€ ๋˜๋Š” ๋กœ๋งจํ‹ฑ) ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ์—๋„ ์˜๋ฏธ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ž„.
  • Object detection. ํ˜„์žฌ๊นŒ์ง€ ์‚ฌ๋ฌผ๊ฒ€์ถœ์— ๊ฐ€์žฅ ํƒ์›”ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ž„. (PASCAL VOC 2007-2012, ImageNet 2013 Detection challenge)