Фазовая составляющая микроструктуры стали, электронный микроскоп. Детальное фото.
Фазовая составляющая микроструктуры стали, электронный микроскоп. Детальное фото.

Целью данной работы является разработка модели компьютерного зрения для распознавания и классификации составляющих микроструктуры стали. 

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

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

На рисунке 1 приведено изображение микроструктуры стали с выделенным зерном.

Рисунок 1. Общий вид микроструктуры стали
Рисунок 1. Общий вид микроструктуры стали
import torchvision.datasets as datasets 
import torchvision.transforms as transforms
train = datasets.ImageFolder("path/train", transform = transformations)
val = datasets.ImageFolder("path/test", transform = transformations_s)
train_loader = torch.utils.data.DataLoader(train, batch_size=4, shuffle=True)
val_loader = torch.utils.data.DataLoader(val, batch_size =4, shuffle=False)

С помощью функции DataLoader были созданы загрузчики данных отдельными партиями — batch. 

С целью компенсации небольшого количества данных был применен подход «Transfer Learning», использующий модель, обученную на большом количестве изображений. Последний слой предобученной модели был заменен на классификатор для 3х классов микроструктур. В качестве предобученной модели выбрана densenet161, для инициализации предварительного обучения установлен режим pretrained = True.

num_labels = 3 
classifier = nn.Sequential(nn.Linear(512, num_labels),
                           nn.LogSoftmax(dim=1))
# Заменим последний полносвязный слой модели на наш классификатор 
model.fc = classifier

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

transformations = transforms.Compose([
    transforms.ToTensor(),            
    transforms.Normalize(mean=[0.485], std=[0.229])])

Для оценки точности классификации модели была выбрана метрика «accuracy». При обучении на baseline-модели получен разброс по «accuracy» в 0,1 и отмечено, что от эпохи к эпохе эта метрика не улучшается. Сделан вывод, что модель недообучается. С целью повышения обучаемости модели было решено разнообразить набор данных с помощью аугментаций и сократить количество признаков путем бинаризации изображений. Кроме того, решено было заменить предобученную модель с densenet161 на ResNet18, использующую остаточное соединение (переброс исходного тензора через слои). 

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

Рисунок 2. Аугментации
Рисунок 2. Аугментации

Бинаризация проведена методом Оцу. Метод Оцу (Otsu's Method) использует гистограмму изображения для расчета порога отнесения пикселя к 0 или 1.

Для выявления наиболее эффективного вида аугментаций они применялись по отдельности. Результаты применения различных видов аугментаций приведены в таблице 1. 

Таблица 1. Применение аугментаций

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

Для определения оптимальной скорости обучения была применена функция lr_scheduler (далее планировщик), позволяющая менять скорость обучения каждые 2 эпохи с мультипликатором 0,1. Мультипликатор (gamma=0,1) означает, что скорость обучения будет снижаться в 10 раз.

# Зададим начальную скорость обучения = 0.01 
optimizer = optim.Adam(model.fc.parameters(), lr=1e-2)
# Импортируем шедулер
from torch.optim import lr_scheduler
# Функция снижения скорости обучения встроена в данный шедулер. 
exp_lr_scheduler = lr_scheduler.StepLR(optimizer, step_size=2, gamma=0.1)

Апробация планировщика производилась с использованием двух предобученных моделей ResNet18 и ResNet34 отличающихся количеством слоев. Результаты апробации представлены в таблице 2.

Таблица 2. Сводные результаты

Получаем оптимальные результаты по accuracy на значениях LR 1e-5 и 1e-6. 

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

Результаты применения модели, основанной на предобученных моделях ResNet18 и ResNet34, представлены на рисунках 3 и 4 соответственно.

Рисунок 3. Применение модели, основанной на ResNet18
Рисунок 3. Применение модели, основанной на ResNet18
Рисунок 4. Применение модели, основанной на ResNet34
Рисунок 4. Применение модели, основанной на ResNet34

Из рисунков 3 и 4 мы видим, что в одном случае модель, основанная на ResNet34, допустила ошибку, указав, что микроструктура, фактически представляющая из себя бейнит, с вероятностью 100% является перлитом. 

Рисунок 5. Дополнительное изображение с бейнитом для модели, основанной на ResNet34
Рисунок 5. Дополнительное изображение с бейнитом для модели, основанной на ResNet34

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

По результатам исследования можно сделать следующие выводы:

  • Предсказание составляющих микроструктуры с подачей на вход модели случайных изображений происходит с вероятностью 93 – 100%;

  • Учитывая, что модель, основанная на ResNet34, делает ошибки при определении типа зерна «бейнит», необходимо увеличить набор данных и поработать с изображениями бейнита. 

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

Также интересной задачей выглядит обучение модели для классификации составляющих микроструктуры металла в термообработанном состоянии. 

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

Комментарии (1)


  1. andyudol
    13.04.2023 06:21
    +3

    Перлит и бейнит — не фазы, а смеси двух фаз. Перлит — смесь феррита и цементита. Бейнит — смесь феррита и карбида железа. Да, они являются элементами микроструктуры и их надо уметь распознавать, но всё же это не фазы.