[PYTHON] Caffe Model Zoo für Anfänger [Alters- und Geschlechtsklassifizierung]

Ich wollte caffe in einer Anaconda-Umgebung ausführen, aber es hat nicht funktioniert, selbst wenn ich Makefile.config geändert habe. Notieren Sie sich den Erstellungsvorgang in einer Umgebung, in der keine Versionsverwaltung verwendet wird. Wenn Sie einen Fehler machen, würde ich mich freuen, wenn Sie mich kontaktieren könnten.

Installation auf Ubuntu

Allgemeine Abhängigkeiten

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.04

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

Klicken Sie hier für andere Versionen http://caffe.berkeleyvision.org/install_apt.html

Klicken Sie hier für ein anderes Betriebssystem http://caffe.berkeleyvision.org/installation.html

Holen Sie sich die Umwelt

git clone https://github.com/BVLC/caffe.git

Einstellungen für Makefile.config

cd caffe
cp Makefile.config.example Makefile.config

Makefile.config



# USE_CUDNN := 1
↓
USE_CUDNN := 1

#cuda an Ihre Umgebung angepasst
CUDA_DIR := /usr/local/cuda-7.0

#Wenn ich es mit Anaconda machen wollte, sollte ich das ändern können, aber es hat in meiner Umgebung nicht funktioniert.
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


kompilieren

cmake .
make -j4 all
make install

Wenn Sie neu kompilieren möchten

mach sauber und mach -j4 alles sauber machen: Löscht die beim Erstellen einer Anwendung erstellten Zwischendateien und die resultierende Anwendung selbst.

Python-Einstellungen

Python-Zusammenstellung usw.

sudo apt-get install python-dev python-pip python-numpy python-skimage gfortran
sudo pip install -r ~/caffe/python/requirements.txt
make pycaffe

Durchlaufen

export PYTHONPATH=/home/ubuntu/caffe/build/caffe/python/:$PYTHONPATH

OK, wenn Sie importieren können

python
>>>import caffe

Stellen Sie den Pfad ein

.badhrc


export CAFFE_HOME=Wo Sie caffe installiert haben
export PATH=${CAFFE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${CAFFE_HOME}/lib:${LD_LIBRARY_PATH}
export PYTHONPATH=${CAFFE_HOME}/python:${PYTHONPATH}

※Hinweis Trotzdem funktioniert classify.py möglicherweise nicht. http://qiita.com/Bonnnou_108/items/41e6dadeff1310b4eb5d

Wenn Sie dem Yahoo-Artikel folgen, sollte es funktionieren, aber Sie erhalten möglicherweise eine Fehlermeldung. https://techblog.yahoo.co.jp/programming/caffe-intro/

python classify.py --raw_scale 255 ../101_ObjectCategories/airplanes/image_0001.jpg ../result.npy

Details des Fehlers

ValueError: Mean shape incompatible with input shape

Hier bearbeiten 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

Klassifikationsmodell von Alter und Geschlecht

Emotionsdatensatz

http://www.ics.uci.edu/~xzhu/face/ http://www.openu.ac.il/home/hassner/Adience/data.html

age_net.caffemodel ... Altersklassifizierungsmodell deploy_age.prototxt ... Verknüpfung von Altersklassifizierungsnummern und -bezeichnungen mean.binaryproto ... für durchschnittliches Bild gender_net.caffemodel ... Modell der Geschlechtsklassifizierung deploy_gender.prototxt ... Geschlechtsklassifizierungsnummer und Labelzuordnung

Modell herunterladen

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'

Mittleres Bild laden

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]

ダウンロード.png

Laden des Altersnetzwerks

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))

Laden des Gender-Netzwerks

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']

Laden und Anzeigen von Bildern

example_image = './example_image.jpg'
input_image = caffe.io.load_image(example_image)
_ = plt.imshow(input_image)

Altersprognose

prediction = age_net.predict([input_image]) 

print 'predicted age:', age_list[prediction[0].argmax()]

Ausgabeergebnis: vorhergesagtes Alter: (0, 2)

Geschlechtsvorhersage

prediction = gender_net.predict([input_image]) 

print 'predicted gender:', gender_list[prediction[0].argmax()]

Ausgabeergebnis: vorhergesagtes Geschlecht: weiblich

Filtervisualisierung

In CNN wird das Gewicht als Filter bezeichnet.

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()
    
    #Erzwingen Sie, dass die Anzahl der Filter quadratisch ist
    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))
    
    #Kachelfilter für Bilder
    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)

Laden Sie Gender-Netzwerke ohne durchschnittliche Bilder zur besseren Visualisierung

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]) 

Bild eingeben

Funktionen, die mit input oder _ beginnen, werden möglicherweise angezeigt. In Python kann _ verwendet werden, um zu bedeuten, dass es von einer externen Klasse referenziert, aber nicht referenziert werden kann.

_ = plt.imshow(input_image)

Filter der ersten Schicht conv1

filters = age_net.params['conv1'][0].data[:49]
vis_square(filters.transpose(0, 2, 3, 1))

ダウンロード (1).png

Erste Schicht Ausgabe conv1

feat = age_net.blobs['conv1'].data[4, :49]
vis_square(feat, padval=1)

ダウンロード (2).png

Feinabstimmung mit Flickr-Bildern

Mit Kaffee nach Forta ziehen

cd ~/caffe

Laden Sie das trainierte Modell herunter

scripts/download_model_binary.py models/bvlc_reference_caffenet

Laden Sie Bilder von Flickr herunter

python examples/finetune_flickr_style/assemble_data.py --workers=1 --images=2000 --seed 831486

Feinabstimmung mit Flickr-Daten mit bvlc_reference_caffenet.caffemodel als Anfangswert.

./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel

Regression Methods for Localization

Berge, Straßen, Läufer スクリーンショット 2017-06-08 19.54.04.png Um das Bild zu verstehen ● Object localization ● Object segmentation ● Human pose estimation スクリーンショット 2017-06-08 19.55.19.png Formuliert als DNN-basierte Regression ● Deep Neural Net-based Regression ● Object Mask Regression ● Object Bounding Box Regression ● Human Pose Estimation DNN-based Regression

Referenz

fine-tuning http://hirotaka-hachiya.hatenablog.com/entry/2015/02/21/072255

https://bfeba431-a-62cb3a1a-s-sites.googlegroups.com/site/deeplearningcvpr2014/RegressionMethodsforLocalization.pdf?attachauth=ANoY7cpwt94hVCZXGTsfVWXtfKcakWqTiHT9TEYM6tLGdUk2jmlmBHiyEaL3qByRJEeBn-2EtPhanI3uoT58LSiRDl_A6JP51_8jm8LqcbyLZYo2bSMJpvbmCXlP4fMiRtJLT7nXmUu0QERcZEnYd_Ly-kka7TKKUEyk4-ez1iXr5ROM-G_2jjLa21y3y1y6s9sQK3Q0KJVvIHAAmzKn7uonJ4N2Q3f3dLVs7QQyw4MgIDd_ZiYcati9Ktkjq51cvzjLOPMfa7d6&attredirects=0

Recommended Posts

Caffe Model Zoo für Anfänger [Alters- und Geschlechtsklassifizierung]
CNN (1) zur Bildklassifizierung (für Anfänger)
Führen Sie das Caffe-Modell in Google Colaboratory aus, um Alter und Geschlecht der Supermodels der Welt vorherzusagen
Datensatz IMDB-WIKI zur Schätzung von Alter und Geschlecht anhand von Gesichtsbildern
Implementierung und Beschreibung mit XGBoost für Anfänger
[Erklärung für Anfänger] Grundlegende Syntax und Konzept von TensorFlow
Laden Sie das Kaffeemodell mit Chainer und klassifizieren Sie die Bilder
Kausales Denken und kausale Suche von Python (für Anfänger)