0 / 0 / 0
Регистрация: 12.01.2022
Сообщений: 4

Ultralytics не может создать маску для уже обученного YOLO

11.05.2025, 15:39. Показов 2041. Ответов 2

Студворк — интернет-сервис помощи студентам
Имеется на руках уже готовая модель весов YOLO для касок, но мне нужно получить Маски касок, для сравнения параметров работы нейронки(IoU, полнота, точность и т.д.). На сайте ultralytics нашёл гайд как это сделать(https://docs.ultralytics.com/r... n-objects/) и, в теории, оно должно работать, но оно выдаёт ошибку о том, что c.masks пустой, из-за чего остальные преобразования не идут. Так что надеюсь кто-то разбирающийся подскажет, что дальше делать. Можно ли решить данную ошибку или же искать другой путь?
Код поиска и вывода маски:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from pathlib import Path
import cv2
import numpy as np
from ultralytics import YOLO
 
m = YOLO("models/last_hardhat_200_epochs.pt")
res = m.predict('input_files')
 
# Iterate detection results
for r in res:
    img = np.copy(r.orig_img)
    img_name = Path(r.path).stem
 
    # Iterate each object contour
    for ci, c in enumerate(r):
        label = c.names[c.boxes.cls.tolist().pop()]
        b_mask = np.zeros(img.shape[:2], np.uint8)
 
 
        # Create contour mask
        contour = c.masks.xy.pop().astype(np.int32).reshape(-1, 1, 2)
        _ = cv2.drawContours(b_mask, [contour], -1, (255, 255, 255), cv2.FILLED)
 
        # Choose one:
        # OPTION-1: Isolate object with black background
        mask3ch = cv2.cvtColor(b_mask, cv2.COLOR_GRAY2BGR)
        isolated = cv2.bitwise_and(mask3ch, img)
 
        # OPTIONAL: detection crop (from either OPT1 or OPT2)
        x1, y1, x2, y2 = c.boxes.xyxy.cpu().numpy().squeeze().astype(np.int32)
        iso_crop = isolated[y1:y2, x1:x2]
 
        cv2.imwrite('output_mask\\{}.png'.format(img_name), isolated)
Ошибка:
Python
1
2
3
4
5
Traceback (most recent call last):
  File "*адрес до проги*\hard-hat-detection\Mask.py", line 22, in <module>
    contour = c.masks.xy.pop().astype(np.int32).reshape(-1, 1, 2)
              ^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'xy'
Использую Питон 3.11

UPD: Извиняюсь, что в теме C++ с питоном, но почему-то на него идёт ссылка из Python Искусственный Интеллект, а у меня был вопрос именно по OpenCV, так что если надо перенести в другую тему просто сообщите.

UPD2: Проблема только с c.masks, boxes заполняються нормально.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.05.2025, 15:39
Ответы с готовыми решениями:

Зачем нужны маски?
Зачем нужны маски? Сначала думал что бы на изображении прямоугольном отделять что конкретно искать...

CUDA ускорение нейросети с модулем ultralytics
- Я установил ultralytics - Начала обучать модель YOLOV8n - Понял, что CUDA не работает,...

Преобразовать маску картинки в двухклассовую маску
Здравствуйте! Есть картинки, к ним маски, на которых определенным цветом выделены футболисты одной...

2
 Аватар для andrey_f
654 / 425 / 202
Регистрация: 21.02.2011
Сообщений: 5,317
13.05.2025, 11:39
У объекта c (одного из результатов детекции) поле masks равно None, из-за чего вызов c.masks.xy.pop() вызывает ошибку. Эта ситуация возникает потому, что при использовании модели YOLO (особенно в версиях до полноценной поддержки масок) поле masks может быть пустым или не инициализированным.
1
0 / 0 / 0
Регистрация: 12.01.2022
Сообщений: 4
13.05.2025, 12:14  [ТС]
Уже разобрался с помощью с гита. Проще говоря, моя модель last_hardhat_200_epochs.pt это модель для обнаружения объектов, у неё не может быть маски, для этого она должна была быть в расширении .seg

Для того чтобы вытащить параметры модели, нужна другая программа примерно подобного вида:
Python
1
2
3
4
5
6
7
8
9
10
from ultralytics import YOLO
 
model = YOLO('models/last_hardhat_200_epochs.pt')
r = model.val(data="training/datasets/helmet-tracking-2/data.yaml")
 
# Print metrics
print(r.box.map)  # mAP50-95
print(r.box.map50)  # mAP50
print(r.box.mp)  # mean precision
print(r.box.mr)  # mean recall
Где в data.yaml надо прописать источник датасета, который вы использовали для обучения. Ну или просто датасет для тестирования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2025, 12:14
Помогаю со студенческими работами здесь

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

CNN YOLO
Добрый, нужен человек, который хорошо разбирается в CNN. Есть пару вопросов. Ничего готового не...

C#+OpenCV/YOLO ищу консультанта
Нужна консультация развернутая по стеку C#(WinForms)+OpenCV или C#(WinForms)+YOLO. В частности...

Не запускается 'object-detection' в консоли Windows нейросети yolo
Всем добрый день! Подскажите, почему при запуске команды в cmd Windows 'python yolo_opencv.py...

Во время установки yolo v4 возникает ошибка по не нахождению hetopt.c
Здравствуйте, во время сборки yolo_cpp_dll в visual studio возникает ошибка C1083|Не удается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru