Как компьютеры понимают изображения на примере

Мы уже говорили об этом раньше. Компьютеры понимают числа. Не текст. Не видео. Не изображения.

Как же тогда модели машинного обучения могут извлекать текст из изображений рукописных символов?

Давайте посмотрим на изображение рукописной цифры 9, которое мы извлечем из модуля наборов данных sklearn.

# import datasets module
from sklearn import datasets
# grab the digits dataset from the module
digits = datasets.load_digits()
# import pyplot to display the image based on pixel values
import matplotlib.pyplot as plt
# display an image from the dataset based on index
def display_digit(index):
    image = digits.images[index]
    plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
    plt.show()    
# run function
display_digit(9)

Изображение на самом деле представляет собой матрицу пикселей разной интенсивности. И значения интенсивности этих пикселей - это то, что мы скармливаем нашей модели машинного обучения.

# print the matrix of pixel values
digits.images[9]

Нам нужно сгладить это перед загрузкой в ​​модель. Давайте также отобразим это как изображение, просто для удовольствия.

# flatten images
flat_images = digits.images.reshape((len(digits.images), -1))
# display flattened images by index
def display_flat_digit(index):
    image = flat_images[index]
    plt.imshow([image], cmap=plt.cm.gray_r, interpolation='nearest')
display_flat_digit(9)

Уплощенная матрица.

Теперь приступим к классификации. Сначала мы разделим наши данные на тестовые и обучающие наборы, как обычно.

# examples
X = flat_images
# labels for examples specifying which digit each image represents
y = digits.target
# import an sklearn module to split data between test and train
from sklearn.model_selection import train_test_split
# split the data
X_train, X_test, y_train, y_test = train_test_split(
    X, 
    y, 
    test_size=0.33, 
    random_state=42
)

Создайте экземпляр нашей модели.

# load a model from sklearn
from sklearn.linear_model import SGDClassifier
classifier = SGDClassifier()

Обучите модель.

classifier.fit(X_train, y_train)

Прогнозируйте ярлыки.

y_pred = classifier.predict(X_test)

Оцените результаты.

# classification_report prints a table with metrics for each class
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred) )

Наша модель проделала довольно хорошую работу без какой-либо настройки и с учетом небольшого набора данных.

Можем ли мы сделать лучше с другой моделью или с настройкой? Определенно. Но здесь мы просто хотели пройти через процесс, чтобы лучше понять машинное обучение для классификации изображений.