import numpy as np from sklearn_theano.feature_extraction import GoogLeNetClassifier from sklearn_theano.datasets import load_sample_image X = load_sample_image("sloth_closeup.jpg") top_n_classes = 5 goog_clf = GoogLeNetClassifier(top_n=top_n_classes) goog_preds = goog_clf.predict(X)[0] goog_probs = goog_clf.predict_proba(X)[0] # Want the sorted from greatest probability to least sort_indices = np.argsort(goog_probs)[::-1] for n, (pred, prob) in enumerate( zip(goog_preds[sort_indices], goog_probs[sort_indices])): print("Class prediction (probability): %s (%.4f)" % (pred, prob))
probability outputs are plotted as a bar graph. The red box represents the cropping window on the input - because input is forced to be 231x231, a center box of size 231x231 is taken from the larger image to perform classification. In general, the top N probability outputs represent the most likely potential classes for the OverfeatClassifier. """ print(__doc__) import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Rectangle from sklearn_theano.datasets import load_sample_image from sklearn_theano.feature_extraction import OverfeatClassifier X = load_sample_image("sloth_closeup.jpg") top_n_classes = 5 clf = OverfeatClassifier(top_n=top_n_classes) prediction = clf.predict(X) # Shortened the labels for plotting prediction = [p.split(",")[0] for p in prediction.ravel()] prediction_probs = clf.predict_proba(X) crop_width = clf.crop_bounds_[1] - clf.crop_bounds_[0] crop_height = clf.crop_bounds_[3] - clf.crop_bounds_[2] crop_box = Rectangle((clf.crop_bounds_[0], clf.crop_bounds_[2]), crop_width, crop_height, fc='darkred', ec='darkred', alpha=.35) f, axarr = plt.subplots(2, 1) plt.suptitle("Top %i classification and cropping box" % top_n_classes) axarr[0].imshow(X) axarr[0].add_patch(crop_box) axarr[0].autoscale(enable=False)
from sklearn_theano.datasets import load_sample_image from sklearn_theano.feature_extraction import OverfeatLocalizer from sklearn.mixture import GMM def convert_gmm_to_box(gmm, color, alpha): midpoint = gmm.means_ std = 3 * np.sqrt(clf.covars_) width = std[:, 0] height = std[:, 1] upper_left_point = (midpoint[:, 0] - width // 2, midpoint[:, 1] - height // 2) return Rectangle(upper_left_point, width, height, ec=color, fc=color, alpha=alpha) X = load_sample_image("cat_and_dog.jpg") dog_label = 'dog.n.01' cat_label = 'cat.n.01' clf = OverfeatLocalizer(top_n=1, match_strings=[dog_label, cat_label]) points = clf.predict(X) dog_points = points[0] cat_points = points[1] plt.imshow(X) ax = plt.gca() ax.autoscale(enable=False) clf = GMM() clf.fit(dog_points) dog_box = convert_gmm_to_box(clf, "darkred", .6) clf.fit(cat_points)
axarr[1, 1].scatter(sloth_points[:, 0], sloth_points[:, 1], color='orange', s=50) print("Localization complete!") def convert_gmm_to_box(gmm, color, alpha): midpoint = gmm.means_ std = 3 * np.sqrt(clf.covars_) width = std[:, 0] height = std[:, 1] upper_left_point = (midpoint[:, 0] - width // 2, midpoint[:, 1] - height // 2) return Rectangle(upper_left_point, width, height, ec=color, fc=color, alpha=alpha) X = load_sample_image("cat_and_dog.jpg") dog_label = 'dog.n.01' cat_label = 'cat.n.01' print("Starting localization") clf = OverfeatLocalizer(top_n=1, match_strings=[dog_label, cat_label]) points = clf.predict(X) print("Localization complete!") dog_points = points[0] cat_points = points[1] plt.figure() plt.imshow(X) ax = plt.gca() ax.autoscale(enable=False) clf = GMM()
from matplotlib.patches import Rectangle from sklearn_theano.datasets import load_sample_image from sklearn_theano.feature_extraction import OverfeatLocalizer from sklearn_theano.feature_extraction import OverfeatTransformer def convert_points_to_box(points, color, alpha): upper_left_point = (points[:, 0].min(), points[:, 1].min()) width = points[:, 0].max() - points[:, 0].min() height = points[:, 1].max() - points[:, 1].min() return Rectangle(upper_left_point, width, height, ec=color, fc=color, alpha=alpha) # Show the original image f, axarr = plt.subplots(2, 3) X = load_sample_image("sloth.jpg") axarr[0, 0].imshow(X) axarr[0, 0].axis('off') # Show a single box axarr[0, 1].imshow(X) axarr[0, 1].axis('off') r = Rectangle((0, 0), 231, 231, fc='yellow', ec='black', alpha=.8) axarr[0, 1].add_patch(r) # Show all the boxes being processed axarr[0, 2].imshow(X) axarr[0, 2].axis('off') clf = OverfeatTransformer(force_reshape=False) X_tf = clf.transform(X) x_points = np.linspace(0, X.shape[1] - 231, X_tf[0].shape[3])
def convert_points_to_box(points, color, alpha): upper_left_point = (points[:, 0].min(), points[:, 1].min()) width = points[:, 0].max() - points[:, 0].min() height = points[:, 1].max() - points[:, 1].min() return Rectangle(upper_left_point, width, height, ec=color, fc=color, alpha=alpha) # Show the original image f, axarr = plt.subplots(2, 3) X = load_sample_image("sloth.jpg") axarr[0, 0].imshow(X) axarr[0, 0].axis('off') # Show a single box axarr[0, 1].imshow(X) axarr[0, 1].axis('off') r = Rectangle((0, 0), 231, 231, fc='yellow', ec='black', alpha=.8) axarr[0, 1].add_patch(r) # Show all the boxes being processed axarr[0, 2].imshow(X) axarr[0, 2].axis('off') clf = OverfeatTransformer(force_reshape=False) X_tf = clf.transform(X) x_points = np.linspace(0, X.shape[1] - 231, X_tf[0].shape[3])