Привет, Хабр! Сегодня с вами участники профессионального сообщества NTA Попов Иван и Чимбеев Анатолий. В современном мире, где фотографии играют огромную роль в сфере социальных медиа, онлайн‑безопасности и контроля содержимого, важно иметь эффективные инструменты для обнаружения нежелательных предметов на изображениях. В данной публикации мы рассмотрим практическое применение двух из самых популярных моделей YOLO и ResNet для обнаружения нежелательных предметов на фотографиях. О моделях и данных Модель YOLO8x Модель RESNET101 Результаты применения моделей YOLO и Resnet Итоги  YOLO (You Only Look Once) — это одна из наиболее известных моделей для обнаружения объектов на изображениях в реальном времени. Она основана на сверточных нейронных сетях и позволяет достичь высокой скорости обработки без ущерба точности. YOLO разделяет изображение на сетку ячеек и каждая ячейка предсказывает границы и классы объектов, содержащихся внутри нее. ResNet (Residual Neural Network) — это глубокая нейронная сеть, разработанная для решения проблемы затухания градиента. Она использует концепцию «skip connections» или «residual connections», позволяющих передавать информацию непосредственно от одного слоя к другому, минуя промежуточные слои. Это позволяет обучать более глубокие сети с лучшей производительностью. Предлагаем рассмотреть практический пример использования данных моделей для обнаружения нежелательных предметов на фотографиях. У нас имеется массив адресов изображений в объявлениях сайта ДомКлик. Нашей задачей был поиск на изображениях таких нежелательных элементов, как оружие, алкогольные напитки, сигареты или экстремистская символика. Первым шагом будет чтение csv-файла с адресами изображений и их загрузка. Для примера мы хотим найти изображения с ножами.  Разработчики опубликовали предобученные модели в открытом доступе. Помимо этого, они предлагают возможность провести обучение моделей на их вычислительных ресурсах, если собственных мощностей не хватает.  Запускаем предобученную модель YOLO v8x для определения объектов (Detection) на 1000 фотографиях из Domclick.ru. Для выполнения задачи используем следующий код (так как код получился объёмным, мы скрыли его под спойлером):  Команда для запуска: Результаты будут записываться в текстовый файл и выводиться на экран. Определение предметов заняло примерно 16 минут времени. Было определено 686 предметов. Произведем поиск на экране по слову knife (Нож) и находим 6 фото, где были обнаружены ножи: image 1/1 C:\Users\chimb\WORK\photos\b77190191fbf40d18f1cca62ddbcdd84.jpg: 480x640 3 bottles, 4 cups, 2 knifes, 2 spoons, 2 bowls, 1 bed, 1 dining table, 1 tv, 2 ovens, 1 sink, 7429.8ms image 1/1 C:\Users\chimb\WORK\photos\8bd91f5dc622460c91119d168e199b2d.jpg: 384x640 3 bottles, 1 fork, 8 knifes, 1 spoon, 1 sink, 7209.2ms image 1/1 C:\Users\chimb\WORK\photos\c86b4f2189ff41ba97729e8ffa9168df.jpg: 480x640 2 bottles, 2 cups, 1 knife, 1 bowl, 1 chair, 1 dining table, 1 cell phone, 1 oven, 1 refrigerator, 11615.4ms image 1/1 C:\Users\chimb\WORK\photos\4928822c7c62451d82e7535163c84073.jpg: 640x480 6 bottles, 1 knife, 1 bowl, 2 bananas, 1 carrot, 1 microwave, 1 oven, 1 sink, 10649.5ms.  image 1/1 C:\Users\chimb\WORK\photos\f4853d8d75b24bd7bb430b05c78f4962.jpg: 640x480 1 bottle, 1 knife, 1 oven, 6389.7ms На основании результатов можно сделать вывод, что были обнаружены в основном предметы кухонной принадлежности, похожие на ножи. Запустим задачу определения объектов (Detection) на 1000 фотографиях из Domclick.ru, используя модель RESNET101. Для запуска задачи используем следующий код (под спойлером).  Результаты будут записываться в текстовый файл и выводиться на экран. Производим поиск на экране по слову knife (Нож) и определяем, что ножи не обнаружены. Можно сделать вывод о том, что модель YOLO показывает лучший результат в данной задаче. Далее мы проводим дообучение наших моделей на датасете ножей. Возможно, это даст нам лучший результат.  Подключаем готовую обученную модель с ножами с сайта. Для подключения используем следующий код: В результате запуска получили результат, который демонстрирует, что предобученная модель неправильно находит ножи, например, ошибочно принимает за ножи другие предметы. На следующем изображении показан пример ошибочного определения. Вместо ножа определена верхняя часть дома. Далее протестируем модель RCNN ResNet 50 FPN V2. Мы обучим её на реальном наборе данных и протестируем.  Создадим свой датасет из 55 фотографий и произведем обучение модели. При создании своего набора фотографий для обучения используем 55 фотографий с ДомКлик, где были обнаружены ножи моделью Yolo8x. Модель RCNN ResNet 50 FPN V2 требует, чтобы датасет был подготовлен в формате Pascal VOC format. В результате получаем каталог с тремя подкаталогами test, train, valid c фотографиями. Test содержит тестовый набор из 5 файлов, 39 файлов из train используется для обучения, 11 файлов из valid для проведения проверки модели. Выполняем вручную маркировку фотографий. Для этого выделяем область с ножами и указываем к какому классу эта область относится. Используем классы __background__', 'knifes‑detect', 'knifes', 'no_knifes', 'object'. Подготавливаем файл YAML для набора данных. Он содержит информацию об изображениях и путях к XML‑файлам. Наряду с этим, он также содержит имена классов и количество классов в наборе данных. Файл knifes-detect.yaml: Используем следующий код модели. Torch vision позволяет загрузить предварительно подготовленную модель и настроить ее на другом наборе данных. Для запуска обучения используем следующую команду: Ниже приведены выходные данные терминала после окончания последней эпохи. Получили mAP@0.50:0.95 IoU 35,2%. Но для этого прогона лучший результат оказался после 45-й эпохи, которая составила 37,3 при 0.50:0.95 IoU. Обучающий скрипт сохраняет модель последней эпохи, а также лучшую модель. Мы будем использовать наилучшую модель для вывода. В результате обучения получили следующие графики: На графике видно, что самое большое значение mAP получено на эпохе 45. Далее следует график потерь, который снижался до конца обучения. Теперь мы проверим нашу обученную модель на тестовом наборе данных. Для запуска определения объектов используем команду: После запуска на нескольких фотографиях получили результат, свидетельствующий о том, что модель не смогла определить ножи на изображениях. Название модели Использование предобученной модели Определение требуемых предметов на   фотографиях Domclick.ru Возможность дообучения модели на своем датасете mAP– средняя точность  Yolo8x Да Да Да 93,3% ResNet101 Да Нет Да 0% RCNN   ResNet 50 FPN V2    Да Нет Да 0% В итоге проделанной работы можно сделать следующие выводы: Задача определения предметов на фотографиях может быть решена путем применения предобученных моделей YOLO8. Данная модель имеет хорошую поддержку в интернете и успешно развивается. В своем составе имеет несколько предобученных моделей. Предобученная модель Yolo8x.pt показала хороший результат в данной задаче. Предобученные модели Resnet не смогли справиться с задачей определения ножей на фотографиях. Попытка дообучить модели Resnet на своем наборе данных также не увенчалась успехом. Для дообучения модели Resnet требуются датасет для обучения большего размера и вычислительные ресурсы. Таким образом, в условиях ограниченности временных и вычислительных ресурсов и учитывая более хорошую поддержку YOLO в сети Интернет, можно сделать вывод, что применение предобученной модели YOLO8 является лучшим выбором для решения задачи определения предметов на фотографиях.  Профессиональное сообщество