일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬 머신러닝
- 스위프트
- Golang
- 스칼라
- 파이썬 동시성
- play 강좌
- 그라파나
- 스칼라 동시성
- 엔터프라이즈 블록체인
- Play2
- 블록체인
- 파이썬
- Akka
- play2 강좌
- 파이썬 데이터분석
- 플레이프레임워크
- 하이브리드앱
- Play2 로 웹 개발
- 주키퍼
- 안드로이드 웹뷰
- hyperledger fabric
- Actor
- Adapter 패턴
- 스칼라 강좌
- 파이썬 강좌
- akka 강좌
- Hyperledger fabric gossip protocol
- 이더리움
- CORDA
- 하이퍼레저 패브릭
- Today
- Total
HAMA 블로그
Caffe - binaryproto 형식의 mean 을 npy 로 바꾸기 본문
Caffe - binaryproto 형식의 mean 을 npy 로 바꾸기
[하마] 이승현 (wowlsh93@gmail.com) 2016. 3. 17. 11:00binaryproto -> npy 변경 함수 예시
#!/usr/bin/env python
import caffe
import numpy as np
import sys
## proto / datum / ndarray conversion
def blobproto_to_array(blob, return_diff=False):
"""
Convert a blob proto to an array. In default, we will just return the data,
unless return_diff is True, in which case we will return the diff.
"""
# Read the data into an array
if return_diff:
data = np.array(blob.diff)
else:
data = np.array(blob.data)
# Reshape the array
if blob.HasField('num') or blob.HasField('channels') or blob.HasField('height') or blob.HasField('width'):
# Use legacy 4D shape
return data.reshape(blob.num, blob.channels, blob.height, blob.width) // bug ??
else:
return data.reshape(blob.shape.dim)
blob = caffe.proto.caffe_pb2.BlobProto()
data = open( './company_mean.binaryproto' , 'rb' ).read()
blob.ParseFromString(data)
arr = blobproto_to_array(blob)
np.save('./company_mean.npy', arr)
문제 발생 !!!
위의 함수는 python/caffe 안의 io.py 에 있는 blobproto_to_array 를 활용한것인데, 이렇게 npy 로 바꾼
mean 파일가지고 caffe 를 실행하면 raise ValueError('Mean shape invalid') 예외가 뜨더라.
에러메세지를 살펴보니 set_mean 함수 내부에서 나온 예외인데
def set_mean(self, in_, mean):
ms = mean.shape
if mean.ndim == 1:
# broadcast channels
if ms[0] != self.inputs[in_][1]:
raise ValueError('Mean channels incompatible with input.')
mean = mean[:, np.newaxis, np.newaxis]
else:
# elementwise mean
if len(ms) == 2:
ms = (1,) + ms
if len(ms) != 3:
raise ValueError('Mean shape invalid')
보다시피 ms 의 크기가 3이 아니라서 나온것이다.
저 ms 의 크기는 첫번째 예제 소스의 data.reshape(blob.num, blob.channels, blob.height,
blob.width) 에서 만들어지는데 첫번째 인자인 blob.num 를 제외하니깐 예외는 없어졌다.
즉 원래 이미지와 mean 이미지를 조합할때 channels, height,width 만 필요한데, num 가 들어가서
길이가 4가 되버려서 문제가 된 것이다.
'통계 & 머신러닝 & 딥러닝 ' 카테고리의 다른 글
구글 vision API 인식테스트 (0) | 2016.04.06 |
---|---|
Deeplearning 에 대한 수학 강의 (0) | 2016.04.02 |
Caffe - Layer 들 ( Pooling, LRN, ReLU 등 ) (0) | 2016.03.16 |
Caffe - Fine Tuning (0) | 2016.03.15 |
Caffe 에서 이미 제공하는 모델 ( Model Zoo ) 정리 (0) | 2016.03.13 |