|
Download openpose/3rdparty/caffe/examples/cpp_classification/readme.md from camenduru/show: direct link, hf CLI and curl.
- Browser
- Download file 2.84 kB
-
https://huggingface.co/camenduru/show/resolve/main/openpose/3rdparty/caffe/examples/cpp_classification/readme.md
- Command line
-
hf download hf://camenduru/show/openpose/3rdparty/caffe/examples/cpp_classification/readme.md
-
curl -L -o readme.md https://huggingface.co/camenduru/show/resolve/main/openpose/3rdparty/caffe/examples/cpp_classification/readme.md
2.84 kB
| title: CaffeNet C++ Classification example | |
| description: A simple example performing image classification using the low-level C++ API. | |
| category: example | |
| include_in_docs: true | |
| priority: 10 | |
| # Classifying ImageNet: using the C++ API | |
| Caffe, at its core, is written in C++. It is possible to use the C++ | |
| API of Caffe to implement an image classification application similar | |
| to the Python code presented in one of the Notebook examples. To look | |
| at a more general-purpose example of the Caffe C++ API, you should | |
| study the source code of the command line tool `caffe` in `tools/caffe.cpp`. | |
| ## Presentation | |
| A simple C++ code is proposed in | |
| `examples/cpp_classification/classification.cpp`. For the sake of | |
| simplicity, this example does not support oversampling of a single | |
| sample nor batching of multiple independent samples. This example is | |
| not trying to reach the maximum possible classification throughput on | |
| a system, but special care was given to avoid unnecessary | |
| pessimization while keeping the code readable. | |
| ## Compiling | |
| The C++ example is built automatically when compiling Caffe. To | |
| compile Caffe you should follow the documented instructions. The | |
| classification example will be built as `examples/classification.bin` | |
| in your build directory. | |
| ## Usage | |
| To use the pre-trained CaffeNet model with the classification example, | |
| you need to download it from the "Model Zoo" using the following | |
| script: | |
| ``` | |
| ./scripts/download_model_binary.py models/bvlc_reference_caffenet | |
| ``` | |
| The ImageNet labels file (also called the *synset file*) is also | |
| required in order to map a prediction to the name of the class: | |
| ``` | |
| ./data/ilsvrc12/get_ilsvrc_aux.sh | |
| ``` | |
| Using the files that were downloaded, we can classify the provided cat | |
| image (`examples/images/cat.jpg`) using this command: | |
| ``` | |
| ./build/examples/cpp_classification/classification.bin \ | |
| models/bvlc_reference_caffenet/deploy.prototxt \ | |
| models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \ | |
| data/ilsvrc12/imagenet_mean.binaryproto \ | |
| data/ilsvrc12/synset_words.txt \ | |
| examples/images/cat.jpg | |
| ``` | |
| The output should look like this: | |
| ``` | |
| ---------- Prediction for examples/images/cat.jpg ---------- | |
| 0.3134 - "n02123045 tabby, tabby cat" | |
| 0.2380 - "n02123159 tiger cat" | |
| 0.1235 - "n02124075 Egyptian cat" | |
| 0.1003 - "n02119022 red fox, Vulpes vulpes" | |
| 0.0715 - "n02127052 lynx, catamount" | |
| ``` | |
| ## Improving Performance | |
| To further improve performance, you will need to leverage the GPU | |
| more, here are some guidelines: | |
| * Move the data on the GPU early and perform all preprocessing | |
| operations there. | |
| * If you have many images to classify simultaneously, you should use | |
| batching (independent images are classified in a single forward pass). | |
| * Use multiple classification threads to ensure the GPU is always fully | |
| utilized and not waiting for an I/O blocked CPU thread. | |