Классификация изображений Tensorflow 2.0: установка, загрузка данных, построение и обучение модели

Опубликовано: 2020-04-21

Классификация изображений — это категория распознавания образов. Он классифицирует изображения в соответствии с отношениями между соседними пикселями. Другими словами, он использует контекстную информацию для организации изображений и довольно популярен среди различных технологий. Это важная тема в глубоком обучении, и если вы изучаете ее, вам наверняка понравится эта статья.

Здесь мы выполним классификацию изображений TensorFlow. Мы построим модель, обучим ее, а затем повысим ее точность для классификации изображений кактусов. TensorFlow — это платформа машинного обучения с открытым исходным кодом, продукт Google.

Давайте начнем.

Оглавление

Установите TensorFlow 2.0

Во-первых, вам нужно установить TensorFlow в Google Colab. Вы можете установить его через pip:

!pip установить tensorflow-gpu == 2.0.0-alpha0

Затем мы проверим установку:

импортировать тензорный поток как tf

печать (tf.__версия)

# Вывод: 2.0.0-alpha0

Источник

Узнайте: 5 самых популярных проектов TensorFlow для начинающих

Загрузить данные

После проверки мы можем загрузить данные с помощью tf.data.dataset. Мы создадим классификатор, который определяет, содержит ли изображение кактус или нет. Кактус должен быть столбчатым. Для этой цели мы можем использовать набор данных Cactus Aerial Photos. Теперь мы загрузим пути к файлам вместе с их метками:

train_csv = pd.read_csv('данные/train.csv')

# Добавить имена файлов изображений в train/ с относительным путем

имена файлов = ['train/' + fname для fname в train_csv['id'].tolist()]

метки = train_csv['has_cactus'].tolist()

train_filenames, val_filenames, train_labels, val_labels =

train_test_split (имена файлов,

этикетки,

размер поезда = 0,9,

случайное_состояние=42)

Когда у нас есть метки и имена файлов, мы готовы создать объекты tf.data.Dataset:

train_data = tf.data.Dataset.from_tensor_slices(

(tf.constant(train_filenames), tf.constant(train_labels))

)

val_data = tf.data.Dataset.from_tensor_slices(

(tf.constant(val_filenames), tf.constant(val_labels))

)

Источник

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

IMAGE_SIZE = 96 # Минимальный размер изображения для использования с MobileNetV2

ПАКЕТ_РАЗМЕР = 32

# Функция для загрузки и предварительной обработки каждого изображения

def _parse_fn (имя файла, метка):

img = tf.io.read_file(img)

img = tf.image.decode_jpeg (img)

img = (tf.cast(img, tf.float32)/127,5) – 1

img = tf.image.resize(img, (IMAGE_SIZE, IMAGE_SIZE))

вернуть изображение, ярлык

# Запускаем _parse_fn для каждого примера в наборах данных train и val

# Также перемешивайте и создавайте пакеты

train_data = (train_data.map(_parse_fn)

.shuffle (buffer_size = 10000)

.пакет (BATCH_SIZE)

)

val_data = (val_data.map(_parse_fn)

.shuffle (buffer_size = 10000)

.пакет (BATCH_SIZE)

)

Источник

Построение модели

В этом примере классификации изображений TensorFlow мы создадим модель обучения переносу. Эти модели работают быстро, поскольку они могут использовать существующие модели классификации изображений, которые ранее прошли обучение. Им нужно только переобучить верхний уровень своей сети, так как этот уровень определяет класс требуемого изображения.

Мы будем использовать Keras API TensorFlow 2.0 для создания нашей модели классификации изображений. И для целей обучения переносу мы будем использовать MobileNetV2 в качестве детектора атрибутов. Это вторая версия MobileNet, продукт Google. Он легче других моделей, таких как Inception и ResNet, и может работать на мобильных устройствах. Мы загрузим эту модель в ImageNet, зафиксируем веса, добавим заголовок классификации и запустим ее без верхнего слоя.

IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3)

# Предварительно обученная модель с MobileNetV2

base_model = tf.keras.applications.MobileNetV2(

input_shape = IMG_SHAPE,

include_top = Ложь,

веса = 'imagenet'

)

# Заморозить предварительно обученные веса модели

base_model.trainable = Ложь

# Обучаемая классификационная голова

maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()

предсказание_слой = tf.keras.layers.Dense (1, активация = 'сигмоид')

# Головка классификации слоев с детектором признаков

модель = tf.keras.Sequential([

базовая_модель,

maxpool_layer,

уровень_предсказания

])

скорость_обучения = 0,0001

# Скомпилируйте модель

model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),

потеря = 'binary_crossentropy',

метрики=['точность']

)

Источник

Вам следует использовать оптимизаторы TensorFlow, если вы собираетесь обучать модели tf.keras. Оптимизаторы в API tf.keras.optimizers и tf.train объединены в tf.keras.optimizers TensorFlow 2.0. В TensorFlow 2.0 многие оригинальные оптимизаторы tf.keras получили обновления и замены для повышения производительности. Они позволяют нам применять оптимизаторы без ущерба для производительности, а также экономить время.

Читайте: Учебное пособие по обнаружению объектов TensorFlow для начинающих

Изучите курсы по науке о данных в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Обучение модели

После того, как мы построили модель, мы можем ее обучить. API tf.keras в TensorFlow 2.0 поддерживает API tf.data, поэтому для этой цели необходимо использовать объекты tf.data.Dataset. Он может эффективно выполнять обучение, и нам не придется идти на компромиссы с производительностью.

число_эпох = 30

steps_per_epoch = round(num_train)//BATCH_SIZE

знач_шагов = 20

model.fit(train_data.repeat(),

эпохи = число_эпох,

шаги_за_эпоху = шаги_за_эпоху,

validation_data=val_data.repeat(),

validation_steps=val_steps)

Источник

После 30 эпох точность модели существенно возрастает, но мы можем улучшить ее еще больше. Помните, мы упоминали о замораживании весов во время трансферного обучения? Что ж, теперь, когда мы обучили заголовок классификации, мы можем разморозить эти слои и дополнительно настроить наш набор данных:

# Разморозить все слои MobileNetV2

base_model.trainable = Истина

# Повторно заморозить слои до тех пор, пока слои, которые мы хотим настроить,

для слоя в base_model.layers[:100]:

слой.trainable = Ложь

# Используйте более низкую скорость обучения

lr_finetune = скорость_обучения / 10

# Перекомпилировать модель

model.compile (потеря = 'binary_crossentropy',

оптимизатор = tf.keras.optimizers.Adam(lr=lr_finetune),

метрики=['точность'])

# Увеличение тренировочных эпох для тонкой настройки

Fine_tune_epochs = 30

total_epochs = число_эпох + Fine_tune_epochs

# Тонкая настройка модели

# Примечание. Установите initial_epoch, чтобы начать обучение после 30-й эпохи, так как мы

# предварительно обученный на 30 эпох.

model.fit(train_data.repeat(),

шаги_за_эпоху = шаги_за_эпоху,

эпохи = общее количество эпох,

начальная_эпоха = число_эпох,

validation_data=val_data.repeat(),

validation_steps=val_steps)

Источник

Спустя 30 эпох точность модели еще больше повышается. С увеличением количества эпох мы увидели большее улучшение точности модели. Теперь у нас есть правильная модель распознавания изображений TensorFlow, которая может распознавать столбчатые кактусы на изображениях с высокой точностью.

Читайте также: Идеи проекта Tensorflow для начинающих

Узнайте больше о классификации изображений TensorFlow

Высокофункциональные API-интерфейсы TensorFlow и его возможности делают его мощной технологией для любого программиста. Его высокоуровневые API также упрощают его общую сложность, упрощая его использование.

Вам интересно узнать больше о TensorFlow, классификации изображений и связанных темах? Тогда мы рекомендуем вам ознакомиться с дипломом PG IIIT-B и upGrad в области машинного обучения и искусственного интеллекта, который предназначен для работающих профессионалов и предлагает более 450 часов тщательного обучения, более 30 тематических исследований и заданий, статус выпускника IIIT-B, 5+ практических занятий. практические проекты и помощь в трудоустройстве в ведущих фирмах.

Курс машинного обучения | Учитесь онлайн, IIIT Bangalore‎

ДИПЛОМ PG ПО МАШИННОМУ ОБУЧЕНИЮ И ИИ С UPGRAD И IIIT BANGALORE.
Применить сейчас