@cleardusk
2016-03-06T14:47:24.000000Z
字数 6675
阅读 1611
GjzCV
loss function is also knowns as an error, cost, or objective function
删除部分 leveldb 后的代码:
#include <iostream>#include <gflags/gflags.h>#include <glog/logging.h>#include <google/protobuf/text_format.h>#include <lmdb.h>#include <caffe/proto/caffe.pb.h>#include <stdint.h>#include <sys/stat.h>#include <fstream> // NOLINT(readability/streams)#include <string>using namespace caffe; // NOLINT(build/namespaces)using std::string;DEFINE_string(backend, "lmdb", "The backend for storing the result");uint32_t swap_endian(uint32_t val) {val = ((val << 8) & 0xFF00FF00) | ((val >> 8) & 0xFF00FF);return (val << 16) | (val >> 16);}void convert_dataset(const char* image_filename, const char* label_filename,const char* db_path, const string& db_backend) {// Open filesstd::ifstream image_file(image_filename, std::ios::in | std::ios::binary);std::ifstream label_file(label_filename, std::ios::in | std::ios::binary);CHECK(image_file) << "Unable to open file " << image_filename;CHECK(label_file) << "Unable to open file " << label_filename;// Read the magic and the meta datauint32_t magic;uint32_t num_items;uint32_t num_labels;uint32_t rows;uint32_t cols;image_file.read(reinterpret_cast<char*>(&magic), 4);magic = swap_endian(magic);CHECK_EQ(magic, 2051) << "Incorrect image file magic.";label_file.read(reinterpret_cast<char*>(&magic), 4);magic = swap_endian(magic);CHECK_EQ(magic, 2049) << "Incorrect label file magic.";image_file.read(reinterpret_cast<char*>(&num_items), 4);num_items = swap_endian(num_items);label_file.read(reinterpret_cast<char*>(&num_labels), 4);num_labels = swap_endian(num_labels);CHECK_EQ(num_items, num_labels);image_file.read(reinterpret_cast<char*>(&rows), 4);rows = swap_endian(rows);image_file.read(reinterpret_cast<char*>(&cols), 4);cols = swap_endian(cols);// lmdbMDB_env *mdb_env;MDB_dbi mdb_dbi;MDB_val mdb_key, mdb_data;MDB_txn *mdb_txn;// Open dbif (db_backend == "lmdb") { // lmdbLOG(INFO) << "Opening lmdb " << db_path;CHECK_EQ(mkdir(db_path, 0744), 0)<< "mkdir " << db_path << "failed";CHECK_EQ(mdb_env_create(&mdb_env), MDB_SUCCESS) << "mdb_env_create failed";CHECK_EQ(mdb_env_set_mapsize(mdb_env, 1099511627776), MDB_SUCCESS) // 1TB<< "mdb_env_set_mapsize failed";CHECK_EQ(mdb_env_open(mdb_env, db_path, 0, 0664), MDB_SUCCESS)<< "mdb_env_open failed";CHECK_EQ(mdb_txn_begin(mdb_env, NULL, 0, &mdb_txn), MDB_SUCCESS)<< "mdb_txn_begin failed";CHECK_EQ(mdb_open(mdb_txn, NULL, 0, &mdb_dbi), MDB_SUCCESS)<< "mdb_open failed. Does the lmdb already exist? ";} else {LOG(FATAL) << "Unknown db backend " << db_backend;}// Storing to dbchar label;char* pixels = new char[rows * cols];int count = 0;const int kMaxKeyLength = 10;char key_cstr[kMaxKeyLength];string value;Datum datum;datum.set_channels(1);datum.set_height(rows);datum.set_width(cols);LOG(INFO) << "A total of " << num_items << " items.";LOG(INFO) << "Rows: " << rows << " Cols: " << cols;for (int item_id = 0; item_id < num_items; ++item_id) {image_file.read(pixels, rows * cols);label_file.read(&label, 1);datum.set_data(pixels, rows*cols);datum.set_label(label);snprintf(key_cstr, kMaxKeyLength, "%08d", item_id);datum.SerializeToString(&value);string keystr(key_cstr);// Put in dbif (db_backend == "lmdb") { // lmdbmdb_data.mv_size = value.size();mdb_data.mv_data = reinterpret_cast<void*>(&value[0]);mdb_key.mv_size = keystr.size();mdb_key.mv_data = reinterpret_cast<void*>(&keystr[0]);CHECK_EQ(mdb_put(mdb_txn, mdb_dbi, &mdb_key, &mdb_data, 0), MDB_SUCCESS)<< "mdb_put failed";} else {LOG(FATAL) << "Unknown db backend " << db_backend;}if (++count % 1000 == 0) {if (db_backend == "lmdb") { // lmdbCHECK_EQ(mdb_txn_commit(mdb_txn), MDB_SUCCESS)<< "mdb_txn_commit failed";CHECK_EQ(mdb_txn_begin(mdb_env, NULL, 0, &mdb_txn), MDB_SUCCESS)<< "mdb_txn_begin failed";} else {LOG(FATAL) << "Unknown db backend " << db_backend;}}}// write the last batchif (count % 1000 != 0) {if (db_backend == "lmdb") { // lmdbCHECK_EQ(mdb_txn_commit(mdb_txn), MDB_SUCCESS) << "mdb_txn_commit failed";mdb_close(mdb_env, mdb_dbi);mdb_env_close(mdb_env);} else {LOG(FATAL) << "Unknown db backend " << db_backend;}LOG(ERROR) << "Processed " << count << " files.";}delete[] pixels;}int main(int argc, char** argv) {#ifndef GFLAGS_GFLAGS_H_namespace gflags = google;#endifgflags::SetUsageMessage("This script converts the MNIST dataset to\n""the lmdb/leveldb format used by Caffe to load data.\n""Usage:\n"" convert_mnist_data [FLAGS] input_image_file input_label_file ""output_db_file\n""The MNIST dataset could be downloaded at\n"" http://yann.lecun.com/exdb/mnist/\n""You should gunzip them after downloading,""or directly use data/mnist/get_mnist.sh\n");gflags::ParseCommandLineFlags(&argc, &argv, true);const string& db_backend = FLAGS_backend;if (argc != 4) {gflags::ShowUsageWithFlagsRestrict(argv[0],"examples/mnist/convert_mnist_data");} else {google::InitGoogleLogging(argv[0]);convert_dataset(argv[1], argv[2], argv[3], db_backend);}return 0;}
Makefile 文件:
CAFFE_HEADER = ../caffe/includeCAFFE_LIB = ../caffe/libSRC_FILES = test.cppOUTPUT = testCXX = g++CXX_FLAG = -std=c++11 -I${CAFFE_HEADER} -L${CAFFE_LIB} -lcaffe -lglog -lgflags -lprotobuf -pthread -lpthread -llmdb# LIB_PATH = /usr/lib/x86_64-linux-gnu# LIB_FLAG := $(shell pkg-config --cflags --libs libgflags libglog protobuf)default:${CXX} ${SRC_FILES} ${CXX_FLAG} -o ${OUTPUT} #${LIB_FLAG} -L${LIB_PATH} -llmdbclean:rm -rf ${OUTPUT}run:./${OUTPUT}
注意,还需要在 .zshrc(.bashrc) 中手动添加
export LD_LIBRARY_PATH=/home/gjz/GjzProjects/DeepLearning/mnist_lg_exp/caffe/lib:$LD_LIBRARY_PATH
测试了,能正常工作。以上的解决方案很粗糙,有需求了再弄得细致一点!!
error while loading shared libraries: libcaffe.so 或者 caffe issue#1988
这里跟人脸特征点检测有什么区别?
值得一看的链接:
https://www.zhihu.com/question/27982282
https://github.com/BVLC/caffe/wiki/Development
https://www.quora.com/How-do-we-read-the-source-code-of-Caffe
https://docs.google.com/presentation/d/1AuiPxUy7-Dgb36Q_SN8ToRrq6Nk0X-sOFmr7UnbAAHI/edit#slide=id.g38b6d86c6_12
file:///home/gjz/Downloads/Brewing%20Deep%20Networks%20With%20Caffe.pdf
caffe.proto 1040 行之后
enum LayerType {NONE = 0;ABSVAL = 35;ACCURACY = 1;ARGMAX = 30;BNLL = 2;CONCAT = 3;CONTRASTIVE_LOSS = 37;CONVOLUTION = 4;DATA = 5;DECONVOLUTION = 39;DROPOUT = 6;DUMMY_DATA = 32;EUCLIDEAN_LOSS = 7;ELTWISE = 25;EXP = 38;FLATTEN = 8;HDF5_DATA = 9;HDF5_OUTPUT = 10;HINGE_LOSS = 28;IM2COL = 11;IMAGE_DATA = 12;INFOGAIN_LOSS = 13;INNER_PRODUCT = 14;LRN = 15;MEMORY_DATA = 29;MULTINOMIAL_LOGISTIC_LOSS = 16;MVN = 34;POOLING = 17;POWER = 26;RELU = 18;SIGMOID = 19;SIGMOID_CROSS_ENTROPY_LOSS = 27;SILENCE = 36;SOFTMAX = 20;SOFTMAX_LOSS = 21;SPLIT = 22;SLICE = 33;TANH = 23;WINDOW_DATA = 24;THRESHOLD = 31;}
github 上的 issues:
https://github.com/BVLC/caffe/issues/79
http://stackoverflow.com/questions/31395729/how-to-enable-multithreading-with-caffe
https://github.com/BVLC/caffe/issues/1539
http://caffe.berkeleyvision.org/
caffefkp
安装 cuda:
http://www.r-tutor.com/gpu-computing/cuda-installation/cuda7.5-ubuntu
找驱动:http://www.nvidia.com/Download/index.aspx?lang=en-us#axzz41qi4wOvv
貌似不行,看 cuda 官网:
https://developer.nvidia.com/cuda-toolkit
如何检测显卡驱动有没有装