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
- data/ilsvrc12/*
Obtain the script get_ilsvrc_aux.sh from https://github.com/BVLC/caffe/tree/master/data/ilsvrc12.
After the execution is complete, all files will be uploaded to this 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])
Last Article: Running Caffe in CCE
Next Article: Preparing Resources
Did this article solve your problem?
Thank you for your score!Your feedback would help us improve the website.