Prerequisites
This section provides an example for running Caffe on CCE to classify an image. For more information, see https://github.com/BVLC/caffe/blob/master/examples/00-classification.ipynb.
Pre-configuring OBS Storage Data
Create an OBS bucket and ensure that the following folders have been created and required files have been uploaded to the specified paths using the OBS Browser.
The folder name can be in the format of File path in the bucket/File name. You can search for the file download addresses in the specified paths of the specified project in GitHub, as shown in 1 and 2.
- models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
https://github.com/BVLC/caffe/tree/master/models/bvlc_reference_caffenet
- models/bvlc_reference_caffenet/deploy.prototxt
https://github.com/BVLC/caffe/tree/master/models/bvlc_reference_caffenet
- python/caffe/imagenet/ilsvrc_2012_mean.npy
https://github.com/BVLC/caffe/tree/master/python/caffe/imagenet
- outputimg/
- examples/images/cat.jpg
https://github.com/BVLC/caffe/blob/master/examples/00-classification.ipynb
Save the picture of the cat in the link.
- data/ilsvrc12/*
https://github.com/BVLC/caffe/tree/master/data/ilsvrc12
Obtain and execute the get_ilsvrc_aux.sh script. The script downloads a compressed package and decompresses it. After the script is executed, upload all decompressed files to the directory.
- caffeEx00.py
# set up Python environment: numpy for numerical routines, and matplotlib for plotting import numpy as np import matplotlib as mpl mpl.use('Agg') import matplotlib.pyplot as plt # display plots in this notebook #%matplotlib inline # set display defaults plt.rcParams['figure.figsize'] = (10, 10) # large images plt.rcParams['image.interpolation'] = 'nearest' # don't interpolate: show square pixels plt.rcParams['image.cmap'] = 'gray' # use grayscale output rather than a (potentially misleading) color heatmap # The caffe module needs to be on the Python path; # we'll add it here explicitly. import sys caffe_root = '/home/' # this file should be run from {caffe_root}/examples (otherwise change this line) sys.path.insert(0, caffe_root + 'python') import caffe # If you get "No module named _caffe", either you have not built pycaffe or you have the wrong path. import os #if os.path.isfile(caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'): # print 'CaffeNet found.' #else: # print 'Downloading pre-trained CaffeNet model...' # !../scripts/download_model_binary.py ../models/bvlc_reference_caffenet caffe.set_mode_cpu() model_def = caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt' model_weights = caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel' net = caffe.Net(model_def, # defines the structure of the model model_weights, # contains the trained weights caffe.TEST) # use test mode (e.g., don't perform dropout) # load the mean ImageNet image (as distributed with Caffe) for subtraction mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy') mu = mu.mean(1).mean(1) # average over pixels to obtain the mean (BGR) pixel values print 'mean-subtracted values:', zip('BGR', mu) # create transformer for the input called 'data' transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) transformer.set_transpose('data', (2,0,1)) # move image channels to outermost dimension transformer.set_mean('data', mu) # subtract the dataset-mean value in each channel transformer.set_raw_scale('data', 255) # rescale from [0, 1] to [0, 255] transformer.set_channel_swap('data', (2,1,0)) # swap channels from RGB to BGR # set the size of the input (we can skip this if we're happy # with the default; we can also change it later, e.g., for different batch sizes) net.blobs['data'].reshape(50, # batch size 3, # 3-channel (BGR) images 227, 227) # image size is 227x227 image = caffe.io.load_image(caffe_root + 'examples/images/cat.jpg') transformed_image = transformer.preprocess('data', image) plt.imshow(image) plt.savefig(caffe_root + 'outputimg/img1.png') # copy the image data into the memory allocated for the net net.blobs['data'].data[...] = transformed_image ### perform classification output = net.forward() output_prob = output['prob'][0] # the output probability vector for the first image in the batch print 'predicted class is:', output_prob.argmax() # load ImageNet labels labels_file = caffe_root + 'data/ilsvrc12/synset_words.txt' #if not os.path.exists(labels_file): # !../data/ilsvrc12/get_ilsvrc_aux.sh labels = np.loadtxt(labels_file, str, delimiter='\t') print 'output label:', labels[output_prob.argmax()] # sort top five predictions from softmax output top_inds = output_prob.argsort()[::-1][:5] # reverse sort and take five largest items print 'probabilities and labels:' zip(output_prob[top_inds], labels[top_inds])
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot