Классификация изображений с использованием предварительно обученной модели нейронной сети Inception v3 Convolution.
Введение
Сегодня мы собираемся создать программу на Python, которая будет классифицировать изображения, используя предварительно обученнуюмодель Inception-v3.
Что такое предварительно обученная модель?
Предварительно обученная модель – это модель, созданная кем-то другим для решения аналогичной задачи. Вместо создания модели с нуля для решения аналогичной проблемы вы используете в качестве отправной точки модель, обученную другой проблеме.
Таким образом, вместо того, чтобы создавать модель классификации изображений с нуля, мы можем просто использовать некоторую предварительно обученную модель для нашего проекта. В Keras доступно несколько различных предварительно обученных моделей, ссылка.
Что такое Inception-v3?
Inception-v3 – это предварительно обученная модель сверточной нейронной сети с 48-уровневой глубиной.
Это широко используемая модель распознавания изображений, которая, как было показано, обеспечивает точность более 78,1 % в наборе данных ImageNet. Модель — это кульминация многих идей, разработанных несколькими исследователями на протяжении многих лет.
Эта предварительно обученная сеть может классифицировать изображения по 1000 категорий объектов, таких как клавиатура, мышь, карандаш и многие животные. Исходный размер 299 на 299.
Архитектура начала-v3
Подробнее о модели Inception-v3 можно прочитать здесь ссылка.
Теперь давайте начнем с кода.
Импортируйте необходимые модули
Мы собираемся использовать TensorFlow v2.x
import tensorflow as tf import numpy as np import pandas as pd import keras import requests
Загрузить и импортировать начальную версию 3
Мы собираемся загрузить и импортировать inception-v3 из keras.applications.
inception = tf.keras.applications.InceptionV3()
Скачать удобочитаемый текст для предсказания
Мы загружаем удобочитаемый текст для Image-Net
и разделяем их.
response = requests.get("https://git.io/JJkYN") label = response.text.split('\n')
Функция классификации изображений
Пользователь введет изображение, и функция изменит изображение на 299 на 299 и три канала, поскольку входной размер начальной модели составляет 299 на 299, и передаст изображение в предварительно обученную начальную версию-v3, которая даст прогноз, и функция вернет первые 1000 прогнозируемых значений.
def classify(image): image = image.reshape((-1, 299, 299, 3)) image=tf.keras.applications.inception_v3.preprocess_input(image) prediction = inception.predict(image).flatten() return {label[i]: float(prediction[i]) for i in range(1000)}
Функция прогнозирования
В функции prediction пользователь будет передавать изображение, и с помощью opencv-python функция будет читать и изменять размер изображения и передавать изображение в функцию классификатора изображений. Функция вернет 1000 значений, в которых их много не требуется, и для получения единственного прогноза с наибольшим значением мы будем использовать Счетчик из коллекцийmodules, которые будут сортировать каталог и давать прогноз с наибольшим значением.
По умолчанию дается только прогноз с наивысшим значением, но пользователь может получить столько лучших прогнозов, сколько захочет, просто передав значение
n
.
from collections import Counter import cv2 def prediction(image, n=1): image = cv2.imread(image) image = cv2.resize(image, (299, 299), 3) label = classify(image) k = Counter(label) high = k.most_common(n) for i in high: print ("{} : {}".format(i[0], i[1]))
Прогноз
Мы собираемся дать модели неизвестное изображение и проверить верхнее предсказанное значение.
image = 'unknown.jpg' prediction(image)
Давайте проверим фактическое изображение.
import matplotlib.pyplot as plt img = cv2.imread(image1) plt.imshow(img)
Как мы видим, классификация моделей была правильной.
Мы можем экспериментировать с моделью с разными типами объектов и изображений животных и предсказывать метку.
Спасибо за прочтение статьи.
~ Счастливого обучения