초보자를 위한 Caffe Model Zoo [나이와 성별의 분류]
12650 단어 PythonDeepLearningCaffe
만약 틀렸다면 저에게 연락 주셨으면 좋겠어요.
ubuntu에 설치
일반 의존 관계sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
14.04sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
추가 버전
http://caffe.berkeleyvision.org/install_apt.html
다른 운영 체제의 경우
http://caffe.berkeleyvision.org/installation.html
환경 가져오기 git clone https://github.com/BVLC/caffe.git
Makefile.구성 구성 구성 cd caffe
cp Makefile.config.example Makefile.config
Makefile.config
# USE_CUDNN := 1
↓
USE_CUDNN := 1
#cudaは自分の環境に合わせて修正
CUDA_DIR := /usr/local/cuda-7.0
#anacondaでやりたい場合はここを変えるといけるはずなのだけども、自分の環境ではうまく通らなかった。
ANACONDA_HOME := $(HOME)/anaconda
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
PYTHON_LIB := $(ANACONDA_HOME)/lib
번역하다 cmake .
make -j4 all
make install
하면, 만약, 만약...
make clean make-j4all
생성기 - 응용 프로그램을 만들 때 사용할 수 있는 중간 파일과 결과를 생성하는 응용 프로그램 자체를 삭제합니다.
python 설정
python 컴파일 등sudo apt-get install python-dev python-pip python-numpy python-skimage gfortran
sudo pip install -r ~/caffe/python/requirements.txt
make pycaffe
패스export PYTHONPATH=/home/ubuntu/caffe/build/caffe/python/:$PYTHONPATH
import 하면 오케이.python
>>>import caffe
경로 설정
.badhrcexport CAFFE_HOME=caffeをインストールした場所
export PATH=${CAFFE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${CAFFE_HOME}/lib:${LD_LIBRARY_PATH}
export PYTHONPATH=${CAFFE_HOME}/python:${PYTHONPATH}
※ 주의
이것도classify입니다.때로는 py가 움직이지 않는다.
http://qiita.com/Bonnnou_108/items/41e6dadeff1310b4eb5d
야후의 기사대로 하면 움직일 수 있지만 때로는 틀릴 수 있다
https://techblog.yahoo.co.jp/programming/caffe-intro/ python classify.py --raw_scale 255 ../101_ObjectCategories/airplanes/image_0001.jpg ../result.npy
오류 내용ValueError: Mean shape incompatible with input shape
편집하기
caffe/python/caffe/io.pyif ms != self.inputs[in_][1:]:
raise ValueError('Mean shape incompatible with input shape.')
↓if ms != self.inputs[in_][1:]:
print(self.inputs[in_])
in_shape = self.inputs[in_][1:]
m_min, m_max = mean.min(), mean.max()
normal_mean = (mean - m_min) / (m_max - m_min)
mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min
#raise ValueError('Mean shape incompatible with input shape.')
Caffe Model Zoo
연령과 성별의 분류 모델
emotion 데이터 세트
http://www.ics.uci.edu/~xzhu/face/
http://www.openu.ac.il/home/hassner/Adience/data.html
age_net.caffemodel...연령 분류 모델
deploy_age.prototxt...연령 분류의 숫자와 라벨의 관련
mean.binaryproto...평균 이미지 사용
gender_net.caffemodel...성별 분류 모델
deploy_gender.prototxt...성별 분류 숫자와 라벨 연결
모델 다운로드
wget http://www.openu.ac.il/home/hassner/projects/cnn_agegender/cnn_age_gender_models_and_data.0.0.1.zip
unzip cnn_age_gender_models_and_data.0.0.1.zip
import
import os
import numpy as np
import matplotlib.pyplot as plt
caffe_root = './caffe-master/'
import sys
sys.path.insert(0, caffe_root + 'python')
import caffe
plt.rcParams['figure.figsize'] = (10, 10)
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'
mean 이미지 읽기
mean_filename='./mean.binaryproto'
proto_data = open(mean_filename, "rb").read()
a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)
mean = caffe.io.blobproto_to_array(a)[0]
age 네트워크 로드
age_net_pretrained='./age_net.caffemodel'
age_net_model_file='./deploy_age.prototxt'
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
공식 네트워크 로드
gender_net_pretrained='./gender_net.caffemodel'
gender_net_model_file='./deploy_gender.prototxt'
gender_net = caffe.Classifier(gender_net_model_file, gender_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
Labels
age_list=['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']
gender_list=['Male','Female']
이미지 읽기 및 보기
example_image = './example_image.jpg'
input_image = caffe.io.load_image(example_image)
_ = plt.imshow(input_image)
연령 예측
prediction = age_net.predict([input_image])
print 'predicted age:', age_list[prediction[0].argmax()]
출력 결과:predicted age:(0,2)
성별 예측
prediction = gender_net.predict([input_image])
print 'predicted gender:', gender_list[prediction[0].argmax()]
출력 결과:predicted gender:Female
필터 시각화
CNN은 무게를 필터라고 부른다.def showimage(im):
if im.ndim == 3:
im = im[:, :, ::-1]
plt.set_cmap('jet')
plt.imshow(im)
def vis_square(data, padsize=1, padval=0):
data -= data.min()
data /= data.max()
# フィルター数を強制的に正方形にする
n = int(np.ceil(np.sqrt(data.shape[0])))
padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))
# フィルタを画像にタイル張りする
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
showimage(data)
가시화를 위해 평균 이미지 없이 성별 네트워크 가져오기
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
prediction = age_net.predict([input_image])
이미지 가져오기
때때로 input와 시작하는 함수 등이 나타난다.python에서는 외부 클래스에서 인용할 수 있지만 인용하지 않는다는 뜻을 사용할 수 있습니다._ = plt.imshow(input_image)
첫 번째 도면층 필터conv1
filters = age_net.params['conv1'][0].data[:49]
vis_square(filters.transpose(0, 2, 3, 1))
1층 출력conv1
feat = age_net.blobs['conv1'].data[4, :49]
vis_square(feat, padval=1)
Flickr 이미지를 사용하여 fine-tuning
caffe가 있는 폴더로 이동
cd ~/caffe
학습 모형 다운로드
scripts/download_model_binary.py models/bvlc_reference_caffenet
Flickr에서 이미지 다운로드
python examples/finetune_flickr_style/assemble_data.py --workers=1 --images=2000 --seed 831486
bvlc_reference_caffenet.caffemodel을 초기값으로 하고 Flickr 데이터로 미세 조정합니다.
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
Regression Methods for Localization
산도, 주자
이해 방향
● Object localization
● Object segmentation
● Human pose estimation
DNN 기반 회귀로 공식화
● Deep Neural Net-based Regression
● Object Mask Regression
● Object Bounding Box Regression
● Human Pose Estimation
DNN-based Regression
참고 자료
fine-tuning
http://hirotaka-hachiya.hatenablog.com/entry/2015/02/21/072255
Reference
이 문제에 관하여(초보자를 위한 Caffe Model Zoo [나이와 성별의 분류]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyamotok0105/items/61efc0f5d7fc6656ad98
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
git clone https://github.com/BVLC/caffe.git
Makefile.구성 구성 구성 cd caffe
cp Makefile.config.example Makefile.config
Makefile.config
# USE_CUDNN := 1
↓
USE_CUDNN := 1
#cudaは自分の環境に合わせて修正
CUDA_DIR := /usr/local/cuda-7.0
#anacondaでやりたい場合はここを変えるといけるはずなのだけども、自分の環境ではうまく通らなかった。
ANACONDA_HOME := $(HOME)/anaconda
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
PYTHON_LIB := $(ANACONDA_HOME)/lib
번역하다 cmake .
make -j4 all
make install
하면, 만약, 만약...
make clean make-j4all
생성기 - 응용 프로그램을 만들 때 사용할 수 있는 중간 파일과 결과를 생성하는 응용 프로그램 자체를 삭제합니다.
python 설정
python 컴파일 등sudo apt-get install python-dev python-pip python-numpy python-skimage gfortran
sudo pip install -r ~/caffe/python/requirements.txt
make pycaffe
패스export PYTHONPATH=/home/ubuntu/caffe/build/caffe/python/:$PYTHONPATH
import 하면 오케이.python
>>>import caffe
경로 설정
.badhrcexport CAFFE_HOME=caffeをインストールした場所
export PATH=${CAFFE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${CAFFE_HOME}/lib:${LD_LIBRARY_PATH}
export PYTHONPATH=${CAFFE_HOME}/python:${PYTHONPATH}
※ 주의
이것도classify입니다.때로는 py가 움직이지 않는다.
http://qiita.com/Bonnnou_108/items/41e6dadeff1310b4eb5d
야후의 기사대로 하면 움직일 수 있지만 때로는 틀릴 수 있다
https://techblog.yahoo.co.jp/programming/caffe-intro/ python classify.py --raw_scale 255 ../101_ObjectCategories/airplanes/image_0001.jpg ../result.npy
오류 내용ValueError: Mean shape incompatible with input shape
편집하기
caffe/python/caffe/io.pyif ms != self.inputs[in_][1:]:
raise ValueError('Mean shape incompatible with input shape.')
↓if ms != self.inputs[in_][1:]:
print(self.inputs[in_])
in_shape = self.inputs[in_][1:]
m_min, m_max = mean.min(), mean.max()
normal_mean = (mean - m_min) / (m_max - m_min)
mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min
#raise ValueError('Mean shape incompatible with input shape.')
Caffe Model Zoo
연령과 성별의 분류 모델
emotion 데이터 세트
http://www.ics.uci.edu/~xzhu/face/
http://www.openu.ac.il/home/hassner/Adience/data.html
age_net.caffemodel...연령 분류 모델
deploy_age.prototxt...연령 분류의 숫자와 라벨의 관련
mean.binaryproto...평균 이미지 사용
gender_net.caffemodel...성별 분류 모델
deploy_gender.prototxt...성별 분류 숫자와 라벨 연결
모델 다운로드
wget http://www.openu.ac.il/home/hassner/projects/cnn_agegender/cnn_age_gender_models_and_data.0.0.1.zip
unzip cnn_age_gender_models_and_data.0.0.1.zip
import
import os
import numpy as np
import matplotlib.pyplot as plt
caffe_root = './caffe-master/'
import sys
sys.path.insert(0, caffe_root + 'python')
import caffe
plt.rcParams['figure.figsize'] = (10, 10)
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'
mean 이미지 읽기
mean_filename='./mean.binaryproto'
proto_data = open(mean_filename, "rb").read()
a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)
mean = caffe.io.blobproto_to_array(a)[0]
age 네트워크 로드
age_net_pretrained='./age_net.caffemodel'
age_net_model_file='./deploy_age.prototxt'
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
공식 네트워크 로드
gender_net_pretrained='./gender_net.caffemodel'
gender_net_model_file='./deploy_gender.prototxt'
gender_net = caffe.Classifier(gender_net_model_file, gender_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
Labels
age_list=['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']
gender_list=['Male','Female']
이미지 읽기 및 보기
example_image = './example_image.jpg'
input_image = caffe.io.load_image(example_image)
_ = plt.imshow(input_image)
연령 예측
prediction = age_net.predict([input_image])
print 'predicted age:', age_list[prediction[0].argmax()]
출력 결과:predicted age:(0,2)
성별 예측
prediction = gender_net.predict([input_image])
print 'predicted gender:', gender_list[prediction[0].argmax()]
출력 결과:predicted gender:Female
필터 시각화
CNN은 무게를 필터라고 부른다.def showimage(im):
if im.ndim == 3:
im = im[:, :, ::-1]
plt.set_cmap('jet')
plt.imshow(im)
def vis_square(data, padsize=1, padval=0):
data -= data.min()
data /= data.max()
# フィルター数を強制的に正方形にする
n = int(np.ceil(np.sqrt(data.shape[0])))
padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))
# フィルタを画像にタイル張りする
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
showimage(data)
가시화를 위해 평균 이미지 없이 성별 네트워크 가져오기
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
prediction = age_net.predict([input_image])
이미지 가져오기
때때로 input와 시작하는 함수 등이 나타난다.python에서는 외부 클래스에서 인용할 수 있지만 인용하지 않는다는 뜻을 사용할 수 있습니다._ = plt.imshow(input_image)
첫 번째 도면층 필터conv1
filters = age_net.params['conv1'][0].data[:49]
vis_square(filters.transpose(0, 2, 3, 1))
1층 출력conv1
feat = age_net.blobs['conv1'].data[4, :49]
vis_square(feat, padval=1)
Flickr 이미지를 사용하여 fine-tuning
caffe가 있는 폴더로 이동
cd ~/caffe
학습 모형 다운로드
scripts/download_model_binary.py models/bvlc_reference_caffenet
Flickr에서 이미지 다운로드
python examples/finetune_flickr_style/assemble_data.py --workers=1 --images=2000 --seed 831486
bvlc_reference_caffenet.caffemodel을 초기값으로 하고 Flickr 데이터로 미세 조정합니다.
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
Regression Methods for Localization
산도, 주자
이해 방향
● Object localization
● Object segmentation
● Human pose estimation
DNN 기반 회귀로 공식화
● Deep Neural Net-based Regression
● Object Mask Regression
● Object Bounding Box Regression
● Human Pose Estimation
DNN-based Regression
참고 자료
fine-tuning
http://hirotaka-hachiya.hatenablog.com/entry/2015/02/21/072255
Reference
이 문제에 관하여(초보자를 위한 Caffe Model Zoo [나이와 성별의 분류]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyamotok0105/items/61efc0f5d7fc6656ad98
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cd caffe
cp Makefile.config.example Makefile.config
# USE_CUDNN := 1
↓
USE_CUDNN := 1
#cudaは自分の環境に合わせて修正
CUDA_DIR := /usr/local/cuda-7.0
#anacondaでやりたい場合はここを変えるといけるはずなのだけども、自分の環境ではうまく通らなかった。
ANACONDA_HOME := $(HOME)/anaconda
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
PYTHON_LIB := $(ANACONDA_HOME)/lib
cmake .
make -j4 all
make install
하면, 만약, 만약...
make clean make-j4all
생성기 - 응용 프로그램을 만들 때 사용할 수 있는 중간 파일과 결과를 생성하는 응용 프로그램 자체를 삭제합니다.
python 설정
python 컴파일 등sudo apt-get install python-dev python-pip python-numpy python-skimage gfortran
sudo pip install -r ~/caffe/python/requirements.txt
make pycaffe
패스export PYTHONPATH=/home/ubuntu/caffe/build/caffe/python/:$PYTHONPATH
import 하면 오케이.python
>>>import caffe
경로 설정
.badhrcexport CAFFE_HOME=caffeをインストールした場所
export PATH=${CAFFE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${CAFFE_HOME}/lib:${LD_LIBRARY_PATH}
export PYTHONPATH=${CAFFE_HOME}/python:${PYTHONPATH}
※ 주의
이것도classify입니다.때로는 py가 움직이지 않는다.
http://qiita.com/Bonnnou_108/items/41e6dadeff1310b4eb5d
야후의 기사대로 하면 움직일 수 있지만 때로는 틀릴 수 있다
https://techblog.yahoo.co.jp/programming/caffe-intro/ python classify.py --raw_scale 255 ../101_ObjectCategories/airplanes/image_0001.jpg ../result.npy
오류 내용ValueError: Mean shape incompatible with input shape
편집하기
caffe/python/caffe/io.pyif ms != self.inputs[in_][1:]:
raise ValueError('Mean shape incompatible with input shape.')
↓if ms != self.inputs[in_][1:]:
print(self.inputs[in_])
in_shape = self.inputs[in_][1:]
m_min, m_max = mean.min(), mean.max()
normal_mean = (mean - m_min) / (m_max - m_min)
mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min
#raise ValueError('Mean shape incompatible with input shape.')
Caffe Model Zoo
연령과 성별의 분류 모델
emotion 데이터 세트
http://www.ics.uci.edu/~xzhu/face/
http://www.openu.ac.il/home/hassner/Adience/data.html
age_net.caffemodel...연령 분류 모델
deploy_age.prototxt...연령 분류의 숫자와 라벨의 관련
mean.binaryproto...평균 이미지 사용
gender_net.caffemodel...성별 분류 모델
deploy_gender.prototxt...성별 분류 숫자와 라벨 연결
모델 다운로드
wget http://www.openu.ac.il/home/hassner/projects/cnn_agegender/cnn_age_gender_models_and_data.0.0.1.zip
unzip cnn_age_gender_models_and_data.0.0.1.zip
import
import os
import numpy as np
import matplotlib.pyplot as plt
caffe_root = './caffe-master/'
import sys
sys.path.insert(0, caffe_root + 'python')
import caffe
plt.rcParams['figure.figsize'] = (10, 10)
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'
mean 이미지 읽기
mean_filename='./mean.binaryproto'
proto_data = open(mean_filename, "rb").read()
a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)
mean = caffe.io.blobproto_to_array(a)[0]
age 네트워크 로드
age_net_pretrained='./age_net.caffemodel'
age_net_model_file='./deploy_age.prototxt'
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
공식 네트워크 로드
gender_net_pretrained='./gender_net.caffemodel'
gender_net_model_file='./deploy_gender.prototxt'
gender_net = caffe.Classifier(gender_net_model_file, gender_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
Labels
age_list=['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']
gender_list=['Male','Female']
이미지 읽기 및 보기
example_image = './example_image.jpg'
input_image = caffe.io.load_image(example_image)
_ = plt.imshow(input_image)
연령 예측
prediction = age_net.predict([input_image])
print 'predicted age:', age_list[prediction[0].argmax()]
출력 결과:predicted age:(0,2)
성별 예측
prediction = gender_net.predict([input_image])
print 'predicted gender:', gender_list[prediction[0].argmax()]
출력 결과:predicted gender:Female
필터 시각화
CNN은 무게를 필터라고 부른다.def showimage(im):
if im.ndim == 3:
im = im[:, :, ::-1]
plt.set_cmap('jet')
plt.imshow(im)
def vis_square(data, padsize=1, padval=0):
data -= data.min()
data /= data.max()
# フィルター数を強制的に正方形にする
n = int(np.ceil(np.sqrt(data.shape[0])))
padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))
# フィルタを画像にタイル張りする
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
showimage(data)
가시화를 위해 평균 이미지 없이 성별 네트워크 가져오기
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
prediction = age_net.predict([input_image])
이미지 가져오기
때때로 input와 시작하는 함수 등이 나타난다.python에서는 외부 클래스에서 인용할 수 있지만 인용하지 않는다는 뜻을 사용할 수 있습니다._ = plt.imshow(input_image)
첫 번째 도면층 필터conv1
filters = age_net.params['conv1'][0].data[:49]
vis_square(filters.transpose(0, 2, 3, 1))
1층 출력conv1
feat = age_net.blobs['conv1'].data[4, :49]
vis_square(feat, padval=1)
Flickr 이미지를 사용하여 fine-tuning
caffe가 있는 폴더로 이동
cd ~/caffe
학습 모형 다운로드
scripts/download_model_binary.py models/bvlc_reference_caffenet
Flickr에서 이미지 다운로드
python examples/finetune_flickr_style/assemble_data.py --workers=1 --images=2000 --seed 831486
bvlc_reference_caffenet.caffemodel을 초기값으로 하고 Flickr 데이터로 미세 조정합니다.
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
Regression Methods for Localization
산도, 주자
이해 방향
● Object localization
● Object segmentation
● Human pose estimation
DNN 기반 회귀로 공식화
● Deep Neural Net-based Regression
● Object Mask Regression
● Object Bounding Box Regression
● Human Pose Estimation
DNN-based Regression
참고 자료
fine-tuning
http://hirotaka-hachiya.hatenablog.com/entry/2015/02/21/072255
Reference
이 문제에 관하여(초보자를 위한 Caffe Model Zoo [나이와 성별의 분류]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyamotok0105/items/61efc0f5d7fc6656ad98
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
python 컴파일 등
sudo apt-get install python-dev python-pip python-numpy python-skimage gfortran
sudo pip install -r ~/caffe/python/requirements.txt
make pycaffe
패스export PYTHONPATH=/home/ubuntu/caffe/build/caffe/python/:$PYTHONPATH
import 하면 오케이.python
>>>import caffe
경로 설정.badhrc
export CAFFE_HOME=caffeをインストールした場所
export PATH=${CAFFE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${CAFFE_HOME}/lib:${LD_LIBRARY_PATH}
export PYTHONPATH=${CAFFE_HOME}/python:${PYTHONPATH}
※ 주의이것도classify입니다.때로는 py가 움직이지 않는다.
http://qiita.com/Bonnnou_108/items/41e6dadeff1310b4eb5d
야후의 기사대로 하면 움직일 수 있지만 때로는 틀릴 수 있다
https://techblog.yahoo.co.jp/programming/caffe-intro/
python classify.py --raw_scale 255 ../101_ObjectCategories/airplanes/image_0001.jpg ../result.npy
오류 내용ValueError: Mean shape incompatible with input shape
편집하기caffe/python/caffe/io.py
if ms != self.inputs[in_][1:]:
raise ValueError('Mean shape incompatible with input shape.')
↓if ms != self.inputs[in_][1:]:
print(self.inputs[in_])
in_shape = self.inputs[in_][1:]
m_min, m_max = mean.min(), mean.max()
normal_mean = (mean - m_min) / (m_max - m_min)
mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min
#raise ValueError('Mean shape incompatible with input shape.')
Caffe Model Zoo
연령과 성별의 분류 모델
emotion 데이터 세트
http://www.ics.uci.edu/~xzhu/face/
http://www.openu.ac.il/home/hassner/Adience/data.html
age_net.caffemodel...연령 분류 모델
deploy_age.prototxt...연령 분류의 숫자와 라벨의 관련
mean.binaryproto...평균 이미지 사용
gender_net.caffemodel...성별 분류 모델
deploy_gender.prototxt...성별 분류 숫자와 라벨 연결
모델 다운로드
wget http://www.openu.ac.il/home/hassner/projects/cnn_agegender/cnn_age_gender_models_and_data.0.0.1.zip
unzip cnn_age_gender_models_and_data.0.0.1.zip
import
import os
import numpy as np
import matplotlib.pyplot as plt
caffe_root = './caffe-master/'
import sys
sys.path.insert(0, caffe_root + 'python')
import caffe
plt.rcParams['figure.figsize'] = (10, 10)
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'
mean 이미지 읽기
mean_filename='./mean.binaryproto'
proto_data = open(mean_filename, "rb").read()
a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)
mean = caffe.io.blobproto_to_array(a)[0]
age 네트워크 로드
age_net_pretrained='./age_net.caffemodel'
age_net_model_file='./deploy_age.prototxt'
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
공식 네트워크 로드
gender_net_pretrained='./gender_net.caffemodel'
gender_net_model_file='./deploy_gender.prototxt'
gender_net = caffe.Classifier(gender_net_model_file, gender_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
Labels
age_list=['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']
gender_list=['Male','Female']
이미지 읽기 및 보기
example_image = './example_image.jpg'
input_image = caffe.io.load_image(example_image)
_ = plt.imshow(input_image)
연령 예측
prediction = age_net.predict([input_image])
print 'predicted age:', age_list[prediction[0].argmax()]
출력 결과:predicted age:(0,2)
성별 예측
prediction = gender_net.predict([input_image])
print 'predicted gender:', gender_list[prediction[0].argmax()]
출력 결과:predicted gender:Female
필터 시각화
CNN은 무게를 필터라고 부른다.def showimage(im):
if im.ndim == 3:
im = im[:, :, ::-1]
plt.set_cmap('jet')
plt.imshow(im)
def vis_square(data, padsize=1, padval=0):
data -= data.min()
data /= data.max()
# フィルター数を強制的に正方形にする
n = int(np.ceil(np.sqrt(data.shape[0])))
padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))
# フィルタを画像にタイル張りする
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
showimage(data)
가시화를 위해 평균 이미지 없이 성별 네트워크 가져오기
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
prediction = age_net.predict([input_image])
이미지 가져오기
때때로 input와 시작하는 함수 등이 나타난다.python에서는 외부 클래스에서 인용할 수 있지만 인용하지 않는다는 뜻을 사용할 수 있습니다._ = plt.imshow(input_image)
첫 번째 도면층 필터conv1
filters = age_net.params['conv1'][0].data[:49]
vis_square(filters.transpose(0, 2, 3, 1))
1층 출력conv1
feat = age_net.blobs['conv1'].data[4, :49]
vis_square(feat, padval=1)
Flickr 이미지를 사용하여 fine-tuning
caffe가 있는 폴더로 이동
cd ~/caffe
학습 모형 다운로드
scripts/download_model_binary.py models/bvlc_reference_caffenet
Flickr에서 이미지 다운로드
python examples/finetune_flickr_style/assemble_data.py --workers=1 --images=2000 --seed 831486
bvlc_reference_caffenet.caffemodel을 초기값으로 하고 Flickr 데이터로 미세 조정합니다.
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
Regression Methods for Localization
산도, 주자
이해 방향
● Object localization
● Object segmentation
● Human pose estimation
DNN 기반 회귀로 공식화
● Deep Neural Net-based Regression
● Object Mask Regression
● Object Bounding Box Regression
● Human Pose Estimation
DNN-based Regression
참고 자료
fine-tuning
http://hirotaka-hachiya.hatenablog.com/entry/2015/02/21/072255
Reference
이 문제에 관하여(초보자를 위한 Caffe Model Zoo [나이와 성별의 분류]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyamotok0105/items/61efc0f5d7fc6656ad98
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
wget http://www.openu.ac.il/home/hassner/projects/cnn_agegender/cnn_age_gender_models_and_data.0.0.1.zip
unzip cnn_age_gender_models_and_data.0.0.1.zip
import os
import numpy as np
import matplotlib.pyplot as plt
caffe_root = './caffe-master/'
import sys
sys.path.insert(0, caffe_root + 'python')
import caffe
plt.rcParams['figure.figsize'] = (10, 10)
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'
mean_filename='./mean.binaryproto'
proto_data = open(mean_filename, "rb").read()
a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)
mean = caffe.io.blobproto_to_array(a)[0]
age_net_pretrained='./age_net.caffemodel'
age_net_model_file='./deploy_age.prototxt'
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
gender_net_pretrained='./gender_net.caffemodel'
gender_net_model_file='./deploy_gender.prototxt'
gender_net = caffe.Classifier(gender_net_model_file, gender_net_pretrained,
mean=mean,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
age_list=['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']
gender_list=['Male','Female']
example_image = './example_image.jpg'
input_image = caffe.io.load_image(example_image)
_ = plt.imshow(input_image)
prediction = age_net.predict([input_image])
print 'predicted age:', age_list[prediction[0].argmax()]
prediction = gender_net.predict([input_image])
print 'predicted gender:', gender_list[prediction[0].argmax()]
def showimage(im):
if im.ndim == 3:
im = im[:, :, ::-1]
plt.set_cmap('jet')
plt.imshow(im)
def vis_square(data, padsize=1, padval=0):
data -= data.min()
data /= data.max()
# フィルター数を強制的に正方形にする
n = int(np.ceil(np.sqrt(data.shape[0])))
padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))
# フィルタを画像にタイル張りする
data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
showimage(data)
age_net = caffe.Classifier(age_net_model_file, age_net_pretrained,
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
prediction = age_net.predict([input_image])
_ = plt.imshow(input_image)
filters = age_net.params['conv1'][0].data[:49]
vis_square(filters.transpose(0, 2, 3, 1))
feat = age_net.blobs['conv1'].data[4, :49]
vis_square(feat, padval=1)
cd ~/caffe
scripts/download_model_binary.py models/bvlc_reference_caffenet
python examples/finetune_flickr_style/assemble_data.py --workers=1 --images=2000 --seed 831486
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
산도, 주자
이해 방향
● Object localization
● Object segmentation
● Human pose estimation
DNN 기반 회귀로 공식화
● Deep Neural Net-based Regression
● Object Mask Regression
● Object Bounding Box Regression
● Human Pose Estimation
DNN-based Regression
참고 자료
fine-tuning
http://hirotaka-hachiya.hatenablog.com/entry/2015/02/21/072255
Reference
이 문제에 관하여(초보자를 위한 Caffe Model Zoo [나이와 성별의 분류]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miyamotok0105/items/61efc0f5d7fc6656ad98
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(초보자를 위한 Caffe Model Zoo [나이와 성별의 분류]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/miyamotok0105/items/61efc0f5d7fc6656ad98텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)