paint-brush
Создание вашего искусственного радиолога: забавное руководство по созданию детектора пневмонии с помощью VGG16к@kisican
565 чтения
565 чтения

Создание вашего искусственного радиолога: забавное руководство по созданию детектора пневмонии с помощью 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, в качестве отправной точки и настраивайте их для вашего конкретного набора данных.
  • Настройка гиперпараметров: экспериментируйте с различными скоростями обучения, размерами пакетов и оптимизаторами, чтобы найти наилучшую комбинацию.


Заключение

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