Как компьютеры понимают изображения на примере
Мы уже говорили об этом раньше. Компьютеры понимают числа. Не текст. Не видео. Не изображения.
Как же тогда модели машинного обучения могут извлекать текст из изображений рукописных символов?
Давайте посмотрим на изображение рукописной цифры 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) )
Наша модель проделала довольно хорошую работу без какой-либо настройки и с учетом небольшого набора данных.
Можем ли мы сделать лучше с другой моделью или с настройкой? Определенно. Но здесь мы просто хотели пройти через процесс, чтобы лучше понять машинное обучение для классификации изображений.