[PYTHON] Probieren Sie Caffe und Pylearn2 zusammen aus

Umgebung

Neuer Ubuntu-Container mit Docker erstellt

Docker Hub

Für diejenigen, die es vorerst ausprobieren möchten, ist Docker Hub ein Docker-Container, der die Umgebung für Caffe (einschließlich Python-Wrapper) und Pylearn2 erstellt hat. Veröffentlicht in /). Weitere Informationen finden Sie in den Informationen im Repository.

Caffe

bash


# docker pull cordea/pycaffe

In diesem Artikel handelt es sich um einen Container, der "make" abgeschlossen hat.

Pylearn2

bash


# docker pull cordea/pylearn2

Es ist ein Container, der bis "Pfad" fertig ist.

Verbreitet

Create user

Wenn Sie root sein können, überspringen Sie es bitte.

bash


# username="your user name"
# adduser --disabled-password --gecos '' $username
# adduser $username sudo
# echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
# su $username

Installieren Sie vorerst nur die Grundlagen Es gibt andere gängige Pakete, aber ...

$ sudo apt-get update
$ sudo apt-get install python vim git wget

Caffe

Dieses Mal arbeiten wir im ** CPU-Modus **, sodass wir den NVIDIA-Grafiktreiber nicht installieren.

Installation

$ sudo apt-get install make bc libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libblas-dev libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler libsvm-dev libsvm3 libsvm-tools

PyCaffe Anaconda Python wird empfohlen, aber ich werde es diesmal nicht verwenden, da es Probleme mit Linux gibt.

Wenn Sie es wie offiziell in "pip" einfügen (wahrscheinlich müssen Sie "gfortran" zusätzlich installieren)

$ sudo apt-get install python-pip
$ cd ~/caffe/python/
$ for req in $(cat requirements.txt); do sudo pip install $req; done

Wenn Sie so viel wie möglich mit "apt-get" auskommen möchten

$ sudo apt-get install python-pip python-scipy python-matplotlib python-scikits-learn ipython python-h5py python-leveldb python-networkx python-nose python-pandas python-dateutil python-protobuf python-yaml python-gflags python-skimage cython

CUDA

$ cd ~
$ cd 
$ chmod u+x cuda_6.5.14_linux_64.run 
$ ./cuda_6.5.14_linux_64.run 
Do you accept the previously read EULA? (accept/decline/quit): accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 340.29? ((y)es/(n)o/(q)uit): n
Install the CUDA 6.5 Toolkit? ((y)es/(n)o/(q)uit): y
Enter Toolkit Location [ default is /usr/local/cuda-6.5 ]: 
/usr/local/cuda-6.5 is not writable.
Do you wish to run the installation with 'sudo'? ((y)es/(n)o): y
Do you want to install a symbolic link at /usr/local/cuda? ((y)es/(n)o/(q)uit): y
Install the CUDA 6.5 Samples? ((y)es/(n)o/(q)uit): n
Installing the CUDA Toolkit in /usr/local/cuda-6.5 ...

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-6.5
Samples:  Not Selected

$ sudo ldconfig /usr/local/cuda-6.5/lib64/
$ rm cuda_6.5.14_linux_64.run

make

$ git clone https://github.com/BVLC/caffe
$ cd caffe/
$ cp Makefile.config.example Makefile.config  
$ echo "CPU_ONLY := 1" >> Makefile.config # 1/26 Nachtrag
$ make all
$ make test
$ make runtest

...

[----------] Global test environment tear-down
[==========] 457 tests from 98 test cases ran. (14811 ms total)
[  PASSED  ] 457 tests.

Tutorial

$ vim examples/mnist/lenet_solver.prototxt
$ ./data/mnist/get_mnist.sh 
$ ./examples/mnist/create_mnist.sh
$ ./examples/mnist/train_lenet.sh 

PyCaffe Tutorials

Folgen Sie dem Tutorial gemäß Einfache Bildklassifizierung mit Caffe.

$ cd ~/caffe/examples/imagenet/
$ wget https://raw.githubusercontent.com/sguada/caffe-public/master/models/get_caffe_reference_imagenet_model.sh
$ chmod u+x get_caffe_reference_imagenet_model.sh
$ ./get_caffe_reference_imagenet_model.sh
$ cd ~/caffe/data/ilsvrc12/
$ ./get_ilsvrc_aux.sh
$ cd ~/caffe/
$ wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz
$ tar xzvf 101_ObjectCategories.tar.gz
$ echo "export PYTHONPATH=$HOME/caffe/python:$PYTHONPATH" >> ~/.bashrc
$ source ~/.bashrc

Lauf

Klassifizierung nach Referenzmodell

$ cd ~/caffe/python/
$ python classify.py --raw_scale 255 ../101_ObjectCategories/airplanes/image_0001.jpg ../result.npy

Folgen Sie dem obigen Link, um show_result.py zu erstellen und auszuführen.

$ cd ~/caffe/
$ python show_result.py data/ilsvrc12/synset
synset_words.txt  synsets.txt       
$ python show_result.py data/ilsvrc12/synset_words.txt result.npy 
#1 | n04552348 warplane, military plane | 84.8%
#2 | n04008634 projectile, missile |  5.5%
#3 | n02690373 airliner |  5.1%
Wenn Sie eine Fehlermeldung in classify.py erhalten

Es scheint, dass io von numpy und io.py von PyCaffe Konflikt. (Seltsames Problem mit Python # 782)

$ python classify.py --raw_scale 255 ~/caffe/101_ObjectCategories/airplanes/image_0001.jpg ../result.npy
Traceback (most recent call last):
  File "classify.py", line 7, in <module>
    import numpy as np

...


  File "/usr/local/lib/python2.7/dist-packages/skimage/util/dtype.py", line 8, in <module>
    dtype_range = {np.bool_: (False, True),
AttributeError: 'module' object has no attribute 'bool_'

Benennen Sie io.py in caffe_io.py um, was eine unvernünftige Methode ist. Wenn Sie es hier umbenennen, müssen Sie es auch mit feature.py umbenennen, das in der nächsten" Klassifizierung mit Caffe als Feature-Extraktor "erstellt wurde.

$ cd ~/caffe/python/
$ aftfile="caffe_io"
$ for file in `find . -name "*.py"`; do; cat $file | sed -e "s/import [\w\.]*io/import $aftfile/g" | sed -e "s/caffe\.io/caffe\.$aftfile/g" > $file".tmp";mv $file".tmp" $file; done
$ mv "caffe/io.py" "caffe/"$aftfile".py"

Klassifizierung mit Caffe als Feature-Extraktor

Ich habe völlig vergessen, zum vorherigen Zweig zurückzukehren, also gibt es vielleicht etwas anderes.

$ cd ~/caffe
$ cp examples/imagenet/imagenet_deploy.prototxt examples/imagenet/imagenet_feature.prototxt
$ vim examples/imagenet/imagenet_feature.prototxt

Ändern Sie imagenet_feature.prototxt wie folgt.

imagenet_feature.prototxt


...

154   top: "fc6wi"

...

162   bottom: "fc6wi"

...

deeplearning-tutorials Erstellen Sie eine Datei mit Funktionen im libsvm-Format.

$ cd ~/caffe/
$ git clone https://github.com/CORDEA/deeplearning-tutorials
$ mv ~/caffe/deeplearning-tutorials/caffe/feature.py ~/caffe/
$ python feature.py

Oder

$ cd ~/caffe/
$ wget https://raw.githubusercontent.com/CORDEA/deeplearning-tutorials/master/caffe/feature.py
$ python feature.py

Der Befehl train wird zu svm-train Der Befehl "Vorhersagen" wird zu "svm-Vorhersagen" Bitte beachten Sie, dass sich jeder Name geändert hat.

$ svm-scale -s scale.txt train.txt > train_scaled.txt
$ svm-scale -r scale.txt test.txt > test_scaled.txt
$ svm-train -c 0.03 train_scaled.txt caltech101.model

Fine tuning

Bereiten Sie die erforderlichen Dateien vor.

Wenn "Git-Klon" in "Klassifizierung mit Caffe als Feature-Extraktor" durchgeführt wird

$ cd ~/caffe/
$ mv ~/caffe/deeplearning-tutorials/caffe/fine_tuning.py ~/caffe/
$ python fine_tuning.py

Wenn wget

$ cd ~/caffe/
$ wget https://raw.githubusercontent.com/CORDEA/deeplearning-tutorials/master/caffe/fine_tuning.py
$ python fine_tuning.py

Da sich die Spezifikationen von convert_imageset.bin geändert haben, funktioniert es nicht gemäß dem Referenzartikel. Ich weiß nicht, welches der aktuellen Flags "1" im Referenzartikel angegeben ist, aber ich gehe mit dem Urteil fort, dass es wahrscheinlich "-grau" ist.

$ build/tools/convert_imageset.bin -gray -resize_width 256 -resize_height 256 101_ObjectCategories/ train.txt caltech101_train_leveldb
$ build/tools/convert_imageset.bin -gray -resize_width 256 -resize_height 256 101_ObjectCategories/ val.txt caltech101_val_leveldb
$ build/tools/compute_image_mean.bin caltech101_train_leveldb caltech101_mean.binaryproto

Bitte beachten Sie, dass sich das Referenzziel gegenüber dem Referenzartikel geändert hat.

$ cp ~/caffe/models/bvlc_reference_caffenet/*.prototxt ~/caffe/
$ cd ~/caffe/
$ sed -i -e 's/fc8/fc8ft/g' train_val.prototxt deploy.prototxt

Bitte ändern Sie den folgenden Teil mit einem Editor (z. B. vi).

solver.prototxt


1 net: "train_val.prototxt"

...

4 base_lr: 0.001

...

14 solver_mode: CPU

train_val.prototxt


8     source: "caltech101_train_leveldb"
9     backend: LEVELDB

...

14     mean_file: "caltech101_mean.binaryproto"

...

25     source: "caltech101_val_leveldb"
26     backend: LEVELDB

...

31     mean_file: "caltech101_mean.binaryproto"

...

321     num_output: 102

deploy.prototxt


5 input_dim: 256
6 input_dim: 256

...

204     num_output: 102
$ build/tools/caffe train -solver solver.prototxt

Pylearn2

Installation

$ sudo apt-get install python-setuptools python-pip python-dev python-numpy python-scipy python-yaml python-matplotlib liblapack-dev python-nose2 cython
$ sudo pip install theano
$ cd ~
$ git clone https://github.com/lisa-lab/pylearn2.git
$ cd pylearn2
$ sudo python setup.py develop

path

$ echo "export PATH=$HOME/pylearn2/pylearn2/scripts/:$PATH" >> ~/.bashrc
$ echo "export PYLEARN2_DATA_PATH=$HOME/.data/lisa/data" >> ~/.bashrc
$ source ~/.bashrc

Tutorials

Gaussian-Bernoulli RBM examples using CIFAR10

$ cd ~/pylearn2/pylearn2/scripts/datasets/
$ ./download_cifar10.sh
$ cd ~/pylearn2/pylearn2/scripts/tutorials/grbm_smd/
$ python make_dataset.py
$ train.py cifar_grbm_smd.yaml
$ show_weights.py cifar_grbm_smd.pkl --out weights_result.png #Wenn Sie eine GUI haben--out muss nicht sein
$ plot_monitor.py cifar_grbm_smd.pkl --out monitor_result.png
Put e, b, s or h in the list somewhere to plot epochs, batches, seconds, or hours, respectively.
Enter a list of channels to plot (example: A, C,F-G, h, <test_err>) or q to quit or o for options: b,L,M
set x_axis to example
A. bias_hid_max:cifar_grbm
B. bias_hid_mean:cifar_grbm
C. bias_hid_min:cifar_grbm
D. bias_vis_max:cifar_grbm
E. bias_vis_mean:cifar_grbm
F. bias_vis_min:cifar_grbm
G. h_max:cifar_grbm
H. h_mean:cifar_grbm
I. h_min:cifar_grbm
J. learning_rate:cifar_grbm
K. objective:cifar_grbm
L. reconstruction_error:cifar_grbm
M. total_seconds_last_epoch:cifar_grbm
N. training_seconds_this_epoch:cifar_grbm

Put e, b, s or h in the list somewhere to plot epochs, batches, seconds, or hours, respectively.
Enter a list of channels to plot (example: A, C,F-G, h, <test_err>) or q to quit or o for options: q

Bild bestätigen

Beim Laufen mit Docker

Kopieren Sie einfach mit docker cp nach local

% container="pylearn2" # Enter the container ID or name
% for file in `echo weights_result.png monitor_result.png`;do;docker cp $container:/home/cordea/pylearn2/pylearn2/scripts/tutorials/grbm_smd/$file /host/path/to/dir/;done
% open *.png # for Mac

SdA examples using MNIST

$ cd ~/pylearn2/pylearn2/scripts/datasets/
$ python download_mnist.py
$ cd ~/pylearn2/pylearn2/scripts/tutorials/stacked_autoencoders/tests
$ python test_dae.py

Verwenden Sie die von Ihnen vorbereiteten Daten

** Wenn Sie csv so wie es ist verwenden möchten, ist hier hilfreich. ** **.

Dieses Mal werde ich Ihnen zeigen, wie Sie pkl aus csv erstellen.

Konvertieren Sie das Bild nach Größenänderung und Graustufen in CSV.

$ cd ~
$ git clone https://github.com/CORDEA/deeplearning-tutorials.git
$ cd deeplearning-tutorials/pylearn2
$ mkdir in

convertImage.py wird unter der Annahme der folgenden Verzeichnisstruktur erstellt. Bitte verwenden Sie den Verzeichnisnamen als Etiketteninformation.

.
├── convertImage.py
    ├── in
        ├── hoge # label name
        |   ├── hogehoge.png
        |   ...
        |
        ├── huge
        |   ├── hugehuge.png
        |   ...
        ...
$ python convertImage.py

Machen Sie die erstellte train.csv zu einer pkl-Datei.

$ python createpkl.py

Ich denke, dass Sie train.pkl verwenden können, indem Sie sich auf das Beispiel von ~ / pylearn2 / pylearn2 / scripts / tutorials / beziehen.

Beispiel

Die Anzahl der Klassen ist mit 10 dargestellt.

$ cd ~/pylearn2/pylearn2/scripts/tutorials/dbm_demo/
$ cp ~/deeplearning-tutorials/pylearn2/train.pkl ./

rbm.yaml


13,21c13
<     dataset: &data !obj:pylearn2.datasets.binarizer.Binarizer {
<         # We use the "raw" tag to specify the underlying dataset defining
<         # the sampling probabilities should be MNIST.
<         raw: &raw_train !obj:pylearn2.datasets.mnist.MNIST {
<             which_set: "train",
<             start: 0,
<             stop: %(train_stop)i
<         }
<     },
---
>     dataset: !pkl: "train.pkl",

train_dbm.py


22     hyper_params = {'detector_layer_dim': 10,
$ python train_dbm.py rbm.yaml
$ show_weights.py dbm.pkl --out figure.png

Error

pylearn2/pylearn2/space/__init__.py


794                 raise TypeError(Cannot safely cast batch dtype %s to space's dtype %s. % (batch.dtype, self.dtype))

Ich habe hier einen Fehler bekommen, aber es lief nicht gut, selbst wenn ich mit den Daten herumgespielt habe.

pylearn2/pylearn2/space/__init__.py


794                 # raise TypeError("Cannot safely cast batch dtype %s to "
795                 print "Might not be safely cast batch dtype %s to space's dtype %s." \
796                         % (batch.dtype, self.dtype)

pylearn2/pylearn2/format/target_format.py


 98             try:
 99                 print "Run the conversion to int64 from %s" % (targets.dtype)
100                 targets = np.array([[int(r) for r in label] for label in targets])
101             except:
102                 raise TypeError("need an integer array for targets, %s" % (targets.dtype))

Im Moment bewege ich es gewaltsam so ...

Danke für deine harte Arbeit.

Referenz

Caffe

Pylearn2

Recommended Posts

Probieren Sie Caffe und Pylearn2 zusammen aus
Versuchen Sie es mit pytest-Overview und Samples-
Erstellen Sie TOPPERS / ASP3 und probieren Sie es aus
Installieren Sie Fabric unter Ubuntu und versuchen Sie es
Versuchen Sie, iptablse zu lernen, portieren Sie vorwärts