совместно с Кэти Коврлия и Ревой Санкхе

«Насколько хорошо ИИ может распознавать эмоции нарисованного портрета?»

С помощью нейронных сетей и глубокого обучения мы изучаем, как машинное обучение может (и может ли) классифицировать эмоции нарисованных портретов. Например, как бы вы описали эмоции Моны Лизы? Она грустная? Счастливый? Нейтральный?

Посмотрим, сможет ли ИИ это понять.

Фон

Что такое сверточная нейронная сеть?

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

Что такое трансферное обучение?

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

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

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

Наборы данных

Для этого проекта мы использовали два набора данных из Kaggle. Набор данных 1 включает 35 685 изображений человеческих лиц в оттенках серого, демонстрирующих одно из следующих семи выражений: счастливое, грустное, нейтральное, злое, удивленное, отвращение и страх. Каждое изображение помечено показанным выражением, и это набор данных, который использовался для обучения модели. Набор данных 2 включает в себя около 4000 картин маслом художественных портретов. Это набор данных, на котором была протестирована модель, чтобы предсказать одну из семи эмоций в художественных портретах.

Два набора данных связаны ниже:

  1. https://www.kaggle.com/datasets/ananthu017/emotion-detection-fer
  2. https://www.kaggle.com/datasets/karnikakapoor/art-portraits

Наш подход

1. Предварительно обработать набор данных 1

Мы использовали различные функции библиотеки Keras для предварительной обработки набора данных, содержащего человеческие лица. Это гарантировало, что все изображения были в одном формате и имели одинаковые свойства. Каждое из этих изображений было помечено эмоцией, отображаемой на человеческом лице. Этот набор данных был разделен на набор данных для обучения, набор данных для тестирования и набор данных для проверки. Ниже представлена ​​диаграмма, показывающая распределение различных эмоций в обучающем наборе данных.

2. Модель обучения и тестирования на наборе данных 1

Мы использовали модель DenseNet169 для классификации наших изображений на основе эмоций. Вот краткое изложение нашей модели:

При тестировании на проверочном наборе данных наша модель достигла точности 61%.

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

3. Предварительно обработать набор данных 2

Второй набор данных, содержащий картины маслом с художественными портретами, также нуждался в предварительной обработке. Этот набор данных содержал множество портретов, которые можно было бы считать «абстрактным искусством». Таким образом, мы должны были убедиться, что наша модель способна распознавать лица на портретах. Приведенный ниже код с использованием многозадачной каскадной сверточной нейронной сети (MTCNN) позволил нам извлечь лица из портретов. Затем мы правильно отформатировали изображения для ввода в модель.

# face detection with mtcnn
from matplotlib import pyplot
from PIL import Image
from numpy import asarray
from mtcnn.mtcnn import MTCNN
 
# extract a single face from a given photograph
def extract_face(filename, required_size=(48, 48)):
    # load image from file
    pixels = pyplot.imread(filename)
    # create the detector, using default weights
    detector = MTCNN()
    # detect faces in the image
    results = detector.detect_faces(pixels)
    # extract the bounding box from the first face
    x1, y1, width, height = results[0]['box']
    x2, y2 = x1 + width, y1 + height
    # extract the face
    face = pixels[y1:y2, x1:x2]
    # resize pixels to the model size
    image = Image.fromarray(face)
    image = image.resize(required_size)
    face_array = asarray(image)
    return face_array

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

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

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

Результаты и заключение

Наша модель имела общую оценку f-1 0,61. Модель тестировалась на наборе данных около 1000 художественных портретов. Из приведенного ниже распределения видно, что большинству художественных портретов было предсказано «нейтральное» выражение лица. Мы не нашли в этом ничего удивительного. Модель обучалась на наборе данных, который содержал в основном «счастливые» и «нейтральные» выражения. Также исторически было принято иметь «нейтральное» выражение лица во время рисования вашего портрета, что могло быть ошибочно принято за «грустное». Мы считаем, что это было отражено в прогнозах. Мы также протестировали модель на изображениях людей, «преобразованных» в портреты. Модель справилась с ними на удивление хорошо.

Ссылки на полный код и наборы данных.

Рекомендации

Полное руководство по сверточным нейронным сетям — способ ELI5

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

Навстречу datascience.com

https://towardsdatascience.com/a-comprehensive-hands-on-guide-to-transfer-learning-with-real-world-applications-in-deep-learning-212bf3b2f27a

https://www.kaggle.com/code/odins0n/emotion-detection

https://www.kaggle.com/datasets/karnikakapoor/art-portraits

https://link.springer.com/article/10.1007/s42452-020-2234-1

https://machinelearningmastery.com/how-to-perform-face-recognition-with-vggface2-convolutional-neural-network-in-keras/

https://machinelearningmastery.com/transfer-learning-for-deep-learning/

https://towardsdatascience.com/face-detection-using-mtcnn-a-guide-for-face-extraction-with-a-focus-on-speed-c6d59f82d49

https://machinelearningmastery.com/how-to-perform-face-recognition-with-vggface2-convolutional-neural-network-in-keras/