576 чтения
576 чтения

Создание вашего искусственного радиолога: забавное руководство по созданию детектора пневмонии с помощью VGG16

к Can Kisi5m2024/07/09
Read on Terminal Reader

Слишком долго; Читать

Радиология — это область, которая в значительной степени зависит от опыта высококвалифицированных специалистов. Именно здесь вступает в игру искусственный интеллект (ИИ), преобразующий эту область за счет расширения человеческих возможностей. К концу этой статьи вы создадите свою собственную модель классификатора изображений для анализа и обнаружения пневмонии на медицинских изображениях!
featured image - Создание вашего искусственного радиолога: забавное руководство по созданию детектора пневмонии с помощью VGG16
Can Kisi HackerNoon profile picture
0-item
1-item

Радиология – это область, которая в значительной степени зависит от опыта высококвалифицированных специалистов. Радиологи анализируют медицинские изображения для диагностики и мониторинга целого ряда состояний: от простых переломов до сложных заболеваний, таких как рак. Тем не менее, с ростом популярности медицинской визуализации и острой потребностью в быстрой и точной диагностике рентгенологи находятся под огромным давлением. Именно здесь на помощь приходит искусственный интеллект (ИИ), преобразующий эту сферу за счет расширения человеческих возможностей. К концу этой статьи вы создадите свою собственную модель классификатора изображений, которая поможет обнаружить пневмонию на медицинских изображениях.

Шаг 1. Настройка среды

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

 %pip install --upgrade tensorflow keras numpy pandas sklearn pillow


Эти библиотеки необходимы для построения и обучения нашей модели:

  • tensorflow и keras для создания и обучения нейронных сетей.
  • numpy для числовых операций.
  • pandas для манипулирования данными.
  • sklearn для предварительной обработки данных.
  • pillow для обработки изображений.

Шаг 2. Импорт библиотек

Установив библиотеки, давайте импортируем их:

 import os from tensorflow import keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten from tensorflow.keras.preprocessing.image import ImageDataGenerator import numpy as np


Мы начнем с импорта нескольких основных библиотек и модулей, необходимых для построения и обучения модели нейронной сети для задач обработки изображений. Мы будем использовать TensorFlow и его подмодули для создания наших моделей глубокого обучения и управления ими. В частности, мы импортируем Keras для использования в качестве нашего высокоуровневого API, Sequential для построения линейного стека слоев и такие модули, как Dense, Conv2D, MaxPool2D и Flatten, для создания и настройки различных слоев нейронной сети. Кроме того, ImageDataGenerator поможет нам расширить данные изображения, улучшая способность модели к обобщению. Наконец, мы импортируем numpy для поддержки числовых операций, что особенно полезно для обработки массивов и выполнения математических функций.

Шаг 3: Подготовка данных

Нашему ИИ-рентгенологу нужны данные, на которых можно учиться. Мы будем использовать ImageDataGenerator для загрузки и дополнения наших данных для обучения и проверки: для загрузки данных мы будем использовать нашего друга данных с открытым исходным кодом Kaggle. Загрузите помеченный набор данных по ссылке здесь.


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

 trdata = ImageDataGenerator() traindata = trdata.flow_from_directory(directory="data-task1/train", target_size=(224, 224)) tsdata = ImageDataGenerator() testdata = tsdata.flow_from_directory(directory="data-task1/val", target_size=(224, 224))


Этот фрагмент кода настраивает генераторы данных для наших наборов данных обучения и проверки. Размер изображений изменяется до 224x224 пикселей — стандартного входного размера для модели VGG16.


Шаг 4: Построение модели VGG16

Теперь самое интересное: создание модели VGG16. VGG16 — это популярная архитектура сверточной нейронной сети (CNN), известная своей простотой и эффективностью благодаря своей уникальной архитектуре, построенной в основном на 13 сверточных слоях и 3 полносвязных слоях. Что отличает VGG16, так это использование небольших сверточных фильтров 3x3 в глубокой сети. Эта конструкция улавливает сложные узоры на изображениях, обеспечивая при этом эффективность вычислений. Вот как мы это создаем:


 model = Sequential() model.add(Conv2D(input_shape=(224,224,3), filters=64, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=64, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=128, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=128, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Flatten()) model.add(Dense(units=4096, activation="relu")) model.add(Dense(units=4096, activation="relu")) model.add(Dense(units=2, activation="softmax")) model.summary()


Давайте разберем это:

  • Слои Conv2D: это сверточные слои, которые учатся обнаруживать такие функции, как края и текстуры.
  • Слои MaxPool2D: они уменьшают пространственные размеры, сохраняя важные функции.
  • Сгладить слой: конвертирует 2D-карты объектов в 1D-вектор.
  • Плотные слои: это полностью связанные слои для классификации.

Шаг 5: Компиляция модели

Определив архитектуру нашей модели, нам нужно ее скомпилировать:

 opt = keras.optimizers.Adam(learning_rate=0.001) model.compile(optimizer=opt, loss=keras.losses.binary_crossentropy, metrics=['accuracy'])


Здесь мы используем оптимизатор Адама со скоростью обучения 0,001 и двоичной кросс-энтропией в качестве функции потерь, подходящей для задач двоичной классификации. Давайте разберем плюсы и минусы этих вариантов:

Компонент

Преимущества

Недостатки

Адам Оптимизатор

1. Адаптивная скорость обучения. 2. Хорошо работает с настройками по умолчанию.

Возможность переоснащения сложными моделями.

Двоичная перекрестная энтропийная потеря

Идеально подходит для бинарной классификации

не очень совместимо с моей функцией активации выходного слоя, почему? (Оставь это в комментариях!)


Не стесняйтесь экспериментировать с различными оптимизаторами, скоростями обучения и функциями потерь, поскольку это отличный способ набраться опыта.

Шаг 6: Обучение модели

Пришло время обучить нашего искусственного радиолога! Мы настраиваем обратные вызовы, чтобы сохранить лучшую модель и прекратить работу раньше, если точность проверки перестанет улучшаться:

 from keras.callbacks import ModelCheckpoint, EarlyStopping checkpoint = ModelCheckpoint("vgg16_1.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1) early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto') hist = model.fit_generator(steps_per_epoch=20, generator=traindata, validation_data=testdata, validation_steps=10, epochs=10, callbacks=[checkpoint, early])


  • ModelCheckpoint: сохраняет лучшую модель на основе точности проверки.
  • EarlyStopping: останавливает обучение, если производительность модели не улучшается в течение указанного количества эпох.



Шаг 7. Визуализация прогресса обучения

Чтобы увидеть, как работает наша модель, мы можем построить график потерь и точности обучения и проверки:

 import matplotlib.pyplot as plt # Training loss plt.plot(hist.history['loss']) plt.legend(['Training']) plt.title('Training loss') plt.ylabel('loss') plt.xlabel('epoch') plt.show() # Validation loss plt.plot(hist.history['val_loss']) plt.legend(['Validation']) plt.title('Validation loss') plt.ylabel('validation loss') plt.xlabel('epoch') plt.show() # Training and validation accuracy plt.plot(hist.history['accuracy']) plt.plot(hist.history['val_accuracy']) plt.legend(['Training', 'Validation']) plt.title('Training & Validation accuracy') plt.xlabel('epoch') plt.show()

Эти графики помогут нам понять, насколько хорошо обучается наша модель и не переоснащается она или не подстраивается.

Шаг 8: Делаем прогнозы

После обучения наш рентгенолог с искусственным интеллектом готов делать прогнозы. Вот как вы можете загрузить изображение и получить прогноз модели:

 from tensorflow.keras.preprocessing import image # Load and preprocess image img_path = 'path_to_your_image.jpg' img = image.load_img(img_path, target_size=(224, 224)) img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) # Create batch axis # Make prediction prediction = model.predict(img_array) print('Prediction:', prediction)

Шаг 9: Тонкая настройка и экспериментирование

Создание радиолога с искусственным интеллектом — это только начало. Вот несколько советов по тонкой настройке и улучшению вашей модели:

  • Увеличение данных: увеличьте разнообразие ваших тренировочных данных с помощью таких методов, как вращение, переворачивание и масштабирование.
  • Трансферное обучение: используйте предварительно обученные модели, такие как VGG16, в качестве отправной точки и настраивайте их для вашего конкретного набора данных.
  • Настройка гиперпараметров: экспериментируйте с различными скоростями обучения, размерами пакетов и оптимизаторами, чтобы найти наилучшую комбинацию.


Заключение

Вау, потрясающая работа! 🎉 Вы создали модель, которая может анализировать медицинские изображения и делать прогнозы — какое великое достижение в медицине! :) Углубившись в сложности архитектуры нейронных сетей, вы увидели, насколько эффективной может быть точно настроенная модель ИИ. Продолжайте расширять границы, продолжайте экспериментировать и, самое главное, наслаждайтесь каждым моментом работы над своими проектами ИИ!

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks