Применение эффекта всплеска цвета к фотографиям воздушных шаров для вечеринок и обнаружение дефектов сварки на рентгеновских изображениях

Вы наверняка уже встречали в Twitter или LinkedIn мем, где COVID-19 указан ответственным за цифровую трансформацию компании.

Цифровизация, как и в случае с COVID-19, может заключаться в переводе персонала и процессов в онлайн. Однако в то время как все знакомы с электронной почтой, браузером или программным обеспечением, таким как Zoom, многие слышали о машинном обучении, нейронных сетях только по названию. Итак, в этой статье я предлагаю вам познакомиться с приложениями искусственного интеллекта, пожалуй, самой перспективной области цифровизации.

В настоящее время почти каждый может справиться с некоторыми простыми задачами ИИ. Рецепт довольно прост: возьмите готовую реализацию нейросетевой архитектуры, например Mask R-CNN, добавьте немного кода и запустите ее в Google Colab.

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

… или обнаруживать дефекты сварки на рентгеновском снимке

Далее я постараюсь показать, как получить такие же результаты самостоятельно.

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

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

Часть 1. Обработка изображений воздушных шаров для вечеринок

Начнем с самой простой задачи — запуска обученной и готовой к использованию модели.

Сначала создайте новый блокнот в Google Colab.

Collaborative, или сокращенно «Collab», позволяет вам писать и выполнять Python в вашем браузере. В «Коллабе» среда для запуска Python-кода работает «из коробки», вы получаете бесплатный графический ускоритель, такой как NVidia Tesla K80.

В используемой модели требуется TensorFlow 1.x, поэтому во избежание ошибок выполнения кода указываем нужную версию в самой первой строке.

Новую ячейку кода можно создать с помощью клавишCtrl + A(новая ячейка вверху)/Ctrl + В(новая ячейка внизу),или нажав + Code под главной панели или меню Вставка.

# run this cell once again in case of error "AttributeError: module 'tensorflow' has no attribute 'placeholder'" 
%tensorflow_version 1.x

Код выполняется построчно нажатием клавиши Ctrl + Enter,весь код - клавишами Ctrl + F9

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

# to use custom image with balloons change the link below
balloon_URL = 'https://live.staticflickr.com/2677/4404039169_042fa233d1_b.jpg'

Клонируйте репозиторий модели Mask R-CNN.

# download Mask RCNN model 
!git clone https://github.com/matterport/Mask_RCNN.git

Далее выбираем каталог с клонированным экземпляром нашей модели.

# choose MaskRCNN folder %cd /content/Mask_RCNN/

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

# download Mask RCNN Balloon model weigths 
!pip install wget 
import wget wget.download('https://github.com/matterport/Mask_RCNN/releases/download/v2.1/mask_rcnn_balloon.h5')

Выбор каталога, в котором находится файл balloon.py с кодом нашей модели

# choose directory with balloon.py file # run this cell once again in case of error "python3: can't open file 'balloon.py': [Errno 2] No such file or directory" 
%cd /content/Mask_RCNN/samples/balloon

Затем мы фактически запускаем команду, которая выполняет функцию Splash из файла ballon.py, используя веса обученной модели из mask_rcnn_balloon.h5 и обрабатывает изображение по указанной нами ссылке.

%%capture cap_out 
!python balloon.py splash \
--weights=/content/Mask_RCNN/mask_rcnn_balloon.h5 \ 
--image=$balloon_URL

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

# plot original and modified images 
%pylab inline 
from PIL import Image 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import requests 
img_orig = Image.open(requests.get(balloon_URL, stream=True).raw) img_splash=mpimg.imread(cap_out.stdout.split()[-1]) 
fig = plt.figure(figsize=(20,10)) 
ax1 = fig.add_subplot(1,2,1) 
ax1.set_title('Original') 
ax1.imshow(img_orig) 
ax2 = fig.add_subplot(1,2,2) 
ax2.set_title('Modified') 
ax2.imshow(img_splash) 
plt.show()

Ссылки

  • Описание архитектуры модели Mask RCNN и представленной задачи представлено в следующей статье, с которой настоятельно рекомендую ознакомиться.


  • Репозиторий Mask RCNN на GitHub


  • блокнот с кодом


Часть 2. Поиск дефектов сварки на рентгеновских снимках

Здесь мы используем систему обнаружения дефектов, которая является ответвлением Matterport Mask RCNN, использовавшейся в предыдущей задаче.

В отличие от предыдущей задачи, мы будем обучать модель. Существуют ограничения на использование Google Colab. Время сеансов виртуальной машины Colab ограничено максимум 12 часами использования, после чего все данные сбрасываются. Обучение занимает в общей сложности около 26 часов машинного времени. Поэтому нам потребуется создать чекпоинты (настроены по умолчанию), а для их хранения хорошо подойдет Google Диск.

Google Диск предоставляет бесплатно 15 ГиБ дискового пространства, общий объем места, занимаемого контрольными точками после 160 эпох обучения, может составить 38 ГиБ. Таким образом, по мере заполнения диска необходимо освобождать место, удаляя предыдущие контрольные точки (кроме последней) или увеличивать лимит хранилища, подписываясь на Google One (контрольные точки могут использоваться для визуализации данных в Tensorboard).

Гугл драйв

Сначала добавьте ярлык к папке с набором данных GDXray на вашем Диске. Это позволит нам не скачивать этот набор данных и не занимать место на диске.

Колаб

Как и в предыдущей задаче, создайте новую записную книжку.

В Colab в качестве среды выполнения по умолчанию используется ЦП. Для обучения модели следует выбрать ускоритель GPU или TPU. Google утверждает, что TPU выполняет вычисления быстрее, чем GPU, но для этого требуется, чтобы модель была настроена для TPU.

Выбор типа среды выполнения (Среда выполнения Изменить тип среды выполнения).

Выберите графический ускоритель GPU в раскрывающемся списке.

Подключитесь к виртуальной машине с помощью кнопки Connect.

Выберите нужную версию Tensorflow.

#run this cell once again in case of error "AttributeError: module 'tensorflow' has no attribute 'placeholder'" 
%tensorflow_version 1.x

Здесь нам нужно настроить среду, указав версию библиотеки.

Версия библиотек берется из файла environment.yml.Этот файл используется для настройки окружения вAnaconda.

!pip install scipy==1.1.0 
!pip install opencv-python==4.1.0.25 
!pip install tensorflow-gpu==1.5 
!pip install keras==2.1.3

Для подключения Google Диска получите код авторизации по появившейся ссылке.

from google.colab import drive 
drive.mount('/content/gdrive', force_remount=True)

Выберите смонтированный диск Google Drive.

%cd gdrive/My\ Drive

Клонировать (скачать на Google Диск) репозиторий проекта обнаружения дефектов металла.

!git clone https://github.com/maxkferg/metal-defect-detection.git

Выберите каталог, в который экземпляр был клонирован.

# choose MaskRCNN folder 
%cd /content/gdrive/My\ Drive/metal-defect-detection

Здесь используется трансферное обучение, что означает, что модель, обученная для одной задачи, переназначается для второй связанной задачи, поэтому мы загружаем файл mask_rcnn_coco.h5 с весами модели, предварительно обученной на наборе данных COCO. .

# download COCO model weigths 
!pip install wget 
import wget wget.download('https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5')

Начать обучение.

!python gdxray.py train \ 
--dataset=/content/gdrive/My\ Drive/GDXray/GDXray \ 
--series=All \ 
--model=mask_rcnn_coco.h5 \ 
--logs=logs/gdxray \ 
--download=True

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

# run this cell after runtime restarting 
%tensorflow_version 1.x 
!pip install scipy==1.1.0 
!pip install opencv-python==4.1.0.25 
!pip install tensorflow-gpu==1.5 
!pip install keras==2.1.3 from google.colab import drive drive.mount('/content/gdrive', force_remount=True) 
%cd /content/gdrive/My\ Drive/metal-defect-detection 
!python gdxray.py train \ 
--dataset=/content/gdrive/My\ Drive/GDXray/GDXray \ 
--series=All \ 
--model=last \ 
--logs=logs/gdxray \ 
--download=False

Обучение заканчивается после 160 эпох. В каталоге проекта есть записная книжка inspect_model.ipynb для визуализации работы модели. По ссылке размещен немного измененный файл. Я добавил код для работы с Google Диском и блок кода для загрузки изображений через URL.

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

Ссылки

  • Репозиторий проекта Metal Defects Detection на GitHub


  • Блокнот в Google Colab


  • Если вы не хотите обучать модель, то скачайте один из чекпоинтов по следующей ссылке. Контрольная точка используется в блокноте inspect_model_weld.ipynb, после копирования файла контрольной точки на диск задайте путь к файлу в переменной LOG_DIR.


В заключении

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

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