일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Play2 로 웹 개발
- 블록체인
- 스칼라 동시성
- 스칼라 강좌
- 안드로이드 웹뷰
- 파이썬 데이터분석
- Golang
- CORDA
- 이더리움
- Actor
- 파이썬 머신러닝
- play2 강좌
- 주키퍼
- 스위프트
- 파이썬 동시성
- 하이퍼레저 패브릭
- 스칼라
- Play2
- Adapter 패턴
- play 강좌
- akka 강좌
- 파이썬 강좌
- 파이썬
- 엔터프라이즈 블록체인
- 하이브리드앱
- 그라파나
- Akka
- hyperledger fabric
- 플레이프레임워크
- Hyperledger fabric gossip protocol
- Today
- Total
HAMA 블로그
Caffe 처음 설치를 마친 사람들을 위한 정리 본문
일단 Caffe 를 이미지분류를 위한 목적으로 설치 했다고 치면 아래와 같은 2가지가 핵심입니다.
1. 내 이미지 (혹은 샘플이미지)를 학습시켜서 나만의 모델을 만들자.
2. 나의 모델 (혹은 샘플 모델) 을 이용하여 이미지를 잘 이해(분류)하는지 보자.
용어 정리 )
* 모델 정의 하기: 데이터를 학습 시키기위한, 네트워크 과정 및 파라미터등을 총칭. 그 결과로 '모델' 을 만듬.
* 파인 튜닝 하기: 더 적당한 모델을 만들거나, 더 나은 분류를 위해 조작하면서 최적값을 찾는 행위
1. 내 데이터를 학습시켜라
가. 일단 Caffe 내에는 이미 학습된 모델들이 여러개 있습니다. 그 중 ImageNet 의 이미지를 이용하여 학습시킨 예를 살펴봅니다.
/path/to/imagenet/train/n01440764/n01440764_10026.JPEG // 이런 ImageNet 이미지들이 있구요.
나. 자신의 이미지를 Caffe 에서 요구하는 input 데이터형식으로 바꾸는 작업도 해야합니다. (lmdb 형식 , leveldb 형식)
ImageNet 의 경우 examples/imagenet/create_imagenet.sh
. 이걸 이용했으니 확인하셔야하구요.
다. 학습과 분류를 더 잘 하기위해서 Image Mean 값을 구해서 이미지를 변화시켜야합니다.
./examples/imagenet/make_imagenet_mean.sh // ImageNet 의 경우 이것으로 변경했습니다.
data/ilsvrc12/imagenet_mean.binaryproto
// jpeg 들이 이러한 binaryproto 형식으로 변환되었구요.
io.py (이전에는 convert.py 사용) 의 blobproto_to_array 함수등을 이용하여 최종적으로 iLsvrc_2012_mean.npy
라. 모델 정의를 합니다.
imageNet 의 모델을 만들기 위해서 (즉 우리것을 만들기 위해서는 이것들을 참고해서 만들면 됨)
네트워크 정의 파일로는 models/bvlc_reference_caffenet/train_val.prototxt 있고
input 데이터로는 ilsvrc12_train_leveldb 와 ilsvrc12_val_leveld 이 사용되었습니다.
마지막으로 솔버로는 bvlc_reference_caffenet/solver.prototxt 가 사용되었습니다.
마. 이미지들을 학습시킵니다.
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt
.examples/imagenet/train_caffenet.sh 파일 이용하여 간편히도 가능.
즉 caffe train 명령으로 데이터들을 학습시킵니다. 인자로는 solver 정의서가 들어가네요.
바. 학습시킨 중간 결과등을 저장 해 놓을 수 도 있습니다.
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt --snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate
2. 모델을 이용하여 나의 이미지를 잘 이해(분류)하는지 보자.
가. ImageNet 의 경우 models/bvlc_reference_caffenet/deploy.prototxt 에 분류를 위한 모델정의를 담았고
models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel 이것이 1번에서 최종적으로 만든 모델인데
이것도 물론 사용됩니다.
나. Caffe 를 처음 설치하면 Caffe 의 root 로 가서 간단히 run cat1.jpg 하면 고양이를 인식하게 되는데
run 의 내부에는 python/classify.py 를 호출하도록 되있습니다. classify.py 내부를 보면
아래와 같으며 , 내용을 가져다 우리의 데이터 분류에 사용하면 됩니다.
# 분류기 만들기. ( 1에서만든 모델, Mean데이터등이 입력으로 이용)
classifier = caffe.Classifier(args.model_def, args.pretrained_model,
image_dims=image_dims, mean=mean,
input_scale=args.input_scale, raw_scale=args.raw_scale,
channel_swap=channel_swap)
# 고양이 이미지 가져옴 (npy, jpg 형식등)
args.input_file = os.path.expanduser(args.input_file)
if args.input_file.endswith('npy'):
print("Loading file: %s" % args.input_file)
inputs = np.load(args.input_file)
elif os.path.isdir(args.input_file):
print("Loading folder: %s" % args.input_file)
inputs =[caffe.io.load_image(im_f)
for im_f in glob.glob(args.input_file + '/*.' + args.ext)]
else:
print("Loading file: %s" % args.input_file)
inputs = [caffe.io.load_image(args.input_file)]
print("Classifying %d inputs." % len(inputs))
# 분류 (알아내기) 시작
start = time.time()
predictions = classifier.predict(inputs, not args.center_only)
print("Done in %.2f s." % (time.time() - start))
3. 딥러닝 개념 요약
http://sanghyukchun.github.io/75/ 참고
'통계 & 머신러닝 & 딥러닝 ' 카테고리의 다른 글
Caffe - Fine Tuning (0) | 2016.03.15 |
---|---|
Caffe 에서 이미 제공하는 모델 ( Model Zoo ) 정리 (0) | 2016.03.13 |
Caffe 에서 ImageNet 모델은 어떻게 만들었나 (0) | 2016.03.11 |
Caffe 에서 Blobs, Layers,Nets 란 ? (0) | 2016.03.11 |
ilsvrc_2012_mean.npy 관련 정보 (0) | 2016.03.10 |