Cnofigurando o Ambiente
Para configurar o ambiente, consulte o tutorial básico disponível na documentação oficial.
Este tutorial está na maioria correto. Uma complementação importante é que após executar:
make all -j4
Vários arquivos *.bin serão gerados no diretório build/bin/, indicando que a compilação foi bem-sucedida.
Problemas com o Script create_mnist.sh
Ao executar o script MNIST, especificamente no passo create_mnist.sh, pode ocorrer o seguinte erro:
./create_mnist.sh: 17: ./create_mnist.sh: build/examples/mnist/convert_mnist_data.bin: not found
Este erro pode ser resolvido alterando o diretório de trabalho. É importante notar que versões mais recentes do Caffe exigem a execução a partir do diretório raiz do projeto para evitar este problema:
ubuntu@ubuntu-PC:~/work/caffe-master$ cp examples/mnist/create_mnist.sh ./
ubuntu@ubuntu-PC:~/work/caffe-master$ ./create_mnist.sh
A documentação oficial sugere o seguinte procedimento:
cd $CAFFE_ROOT
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
Recomenda-se seguir a documentação oficial para a configuração completa do ambiente.
Testando com Dados Personalizados
Muitos tutoriais terminam após alcançar uma precisão de 99% com os dados oficiais do MNIST. No entanto, é importante testar com seus próprios dados para validar a implementação.
Existem duas abordagens principais para classificação: usando Python ou C++ para chamar o binário de classiifcação.
Usando Python para Classificação
import os
import sys
import numpy as np
import matplotlib.pyplot as plt
caffe_root = '/caminho/para/seu/diretorio/caffe/'
sys.path.insert(0, caffe_root + 'python')
import caffe
MODEL_FILE = '/caminho/para/seu/diretorio/caffe/examples/mnist/lenet.prototxt'
PRETRAINED = '/caminho/para/seu/diretorio/caffe/examples/mnist/lenet_iter_10000.caffemodel'
IMAGE_FILE = '/caminho/para/sua/imagem/teste.jpg'
input_image = caffe.io.load_image(IMAGE_FILE, color=False)
net = caffe.Classifier(MODEL_FILE, PRETRAINED)
prediction = net.predict([input_image])
caffe.set_mode_cpu()
print 'Classe prevista:', prediction[0].argmax()
Usando C++ para Classificação
O binário de classificação pode ser chamado diretamente:
./build/examples/cpp_classification/classifier.bin
Este comando exibirá instruções de uso. Uma chamada de exemplo seria:
./build/examples/cpp_classification/classifier.bin \
caminho/para/seu/network.prototxt \
caminho/para/seu/modelo.caffemodel \
caminho/para/seu/mean.binaryproto \
caminho/para/seu/labels.txt \
caminho/para/sua/imagem.png
Se encontrar muitos parâmetros difíceis de gerenciar, considere modificar o arquivo classifeir.cpp e recompilar o binário com suas necessidades específicas.
Problemas com Bibliotecas Compartilhadas
Ao executar o binário de classificação, pode ocorrer o seguinte erro relacionado a bibliotecas compartilhadas:
./build/tools/caffe: error while loading shared libraries: libcaffe.so.1.0.0-rc5: cannot open shared object file: No such file or directory
Uma solução é copiar as bibliotecas (ou links simbólicos) para o diretório de bibliotecas do sistema:
sudo cp distribute/bin/libcaffe.so.1.0.0-rc5 /usr/lib/x86_64-linux-gnu/
Após esta etapa, a execução deve ocorrer normalmente, permitindo que você utilize o modelo treinado para classificar suas próprias imagens.