Обучение YOLOv8-obb для задачи детекции повернутых боксов

แชร์
ฝัง
  • เผยแพร่เมื่อ 6 ต.ค. 2024
  • В этом видео продемонстрирован подробный туториал как осуществлять полный цикл DL проекта (разметка, обучение сети и инференс) по детекции повернутых боксов YOLOv8-obb (Oriented Bounding Box Detection with YOLO)
    Мой репозиторий по конвертации разметки из COCO в YOLO: github.com/Kol... (тот что в видео используется)
    Код из этого видео доступен по ссылке:
    drive.google.c...
    Таймкоды из видео:
    5:59 - Разметка в CVAT
    28:40 - Обучение нейронной сети YOLO-obb
    40:39 - Использование на практике обученной сети
    Подписывайтесь на канал, чтобы быть в курсе новых видео и узнавать больше о компьютерном зрении!

ความคิดเห็น • 50

  • @Koldim2001
    @Koldim2001  6 หลายเดือนก่อน +2

    Если вам понравилось данное видео, то будет очень приятно если вы поддержите меня, поставив звёздочку ⭐️ на данном репозитории
    github.com/Koldim2001/YOLO-Patch-Based-Inference
    Это мой довольно масштабный проект, позволяющий значительно улучшить качество детекциии и сегментации задачах компьютерного зрения
    Если вам интересно про него узнать, то вот ссылка на видео туториал - th-cam.com/video/ihch6pIZtQg/w-d-xo.htmlsi=usHHF2EIifm3CnN4

  • @Tri_Pachki_Margarina
    @Tri_Pachki_Margarina 2 หลายเดือนก่อน +1

    Радует, что разработчики yolo не стоят на месте. А вам спасибо за подробный разбор этого нововведения

  • @igormalev2871
    @igormalev2871 7 หลายเดือนก่อน +2

    Спасибо огромное за уроки!!!!!!!!! Материал 🔥

  • @fait0n
    @fait0n 4 หลายเดือนก่อน +1

    Спасибо, наглядно и полезно!

  • @ONESTIRES
    @ONESTIRES 4 หลายเดือนก่อน +1

    спасибо, очень помогли!

  • @Motskin_AI
    @Motskin_AI 8 หลายเดือนก่อน +2

    Обучающий датасет из 5-ти изображений это круто :) Я сначала удивился, но потом посмотрел дальше видео и понял что чуда не произошло . А почему решил так мало изображений использовать? Думаю за часик смог бы изображений 50 подготовить и разметить. Глядишь и красиво бы всё получилось.

    • @Koldim2001
      @Koldim2001  8 หลายเดือนก่อน

      Ахахаха да цель была показать как это делать а не реализовать полный процесс с хорошим итоговым качеством))

  • @АлексВу
    @АлексВу 6 หลายเดือนก่อน +1

    🔥

  • @wardog5260
    @wardog5260 7 หลายเดือนก่อน +1

    Дмитрий, огромное спасибо за уроки! Отличное объяснение. Хотелось бы больше роликов, но, понимаю, у вас могут быть другие дела. Может быть вы подскажите других авторов, кого вы смотрите или можете посоветовать?

    • @Koldim2001
      @Koldim2001  7 หลายเดือนก่อน

      Огромные спасибо) очень приятно ☺️
      Из хороших computer vision спецов могу посоветовать глянуть эти каналы: roboflow, Nikolai Nielsen, Nicholas Renotte

  • @zateeman
    @zateeman 5 หลายเดือนก่อน +1

    Спасибо за информативный материал!
    Возник следующий вопрос: как правильно поступать при разметки, когда объекты перекрывают друг друга? Например резисторы лежат в куче и хочется определить какой из них лежит сверху. При таком раскладе лейбл верхнего резистора и тех, что лежат под ним должны быть разными?
    Каким образом обычно решается такая задача?

    • @Koldim2001
      @Koldim2001  5 หลายเดือนก่อน

      Для сети не имеет разницы кто выше кто ниже. Так что без дополнительной информации типа карты глубины понять кто где не выйдет. Сеть просто в идеале выдаст N объектов не более
      Можно далее зная боксы определить удаление до центров боксов с помощью лидара или стерео камеры и уже понять кто где. Но это уже не из коробки решение

    • @zateeman
      @zateeman 5 หลายเดือนก่อน

      Речь скорее идёт не об определении дальности до объектов, а об разделении объектов на "полностью видимые", и "частично скрытые".

    • @Koldim2001
      @Koldim2001  5 หลายเดือนก่อน

      Ааа ну тут мб стоит через сегментацию делать. То есть находишь маски объектов и оцениваешь по числу пикселей весь ли объект виден или часть (yolo-seg как вариант)

    • @zateeman
      @zateeman 5 หลายเดือนก่อน +1

      Спасибо за ответ. Буду экспериментировать =)

  • @davidnez2167
    @davidnez2167 7 หลายเดือนก่อน

    Огромное спасибо!
    Правильно ли я понял, что отличие от обычного обучения и obb в формате экспорта из CVAT(COCO) и тем, что в коде мы формат модели указываем -obb?)
    ну и соответственно, что мы еще и прямоугольники при разметки вертим)
    Еще у меня есть вопрос, а модели можно дообучать? к примеру, я уже обучил модель, но у меня появился еще один объект интереса который появляется в кадре.

    • @Koldim2001
      @Koldim2001  7 หลายเดือนก่อน

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

    • @davidnez2167
      @davidnez2167 7 หลายเดือนก่อน

      @@Koldim2001 понял, спасибо!

  • @АлексВу
    @АлексВу 2 หลายเดือนก่อน

    Огромное спасибо за видео! Натренил по Вашему видео модель на игральньіх костях (с 1..6 точками на гранях) для определения стороньі кубика, в результате саму грань детектит отлично, но угльі поворота всегда близки к 0 или 90 градусов, не зависимо от того как размещеньі на изображении... В чем может бьіть проблема?..

    • @Koldim2001
      @Koldim2001  2 หลายเดือนก่อน

      @@АлексВу Хмм возможно нужно больше данных при обучении. Он под капотом минимизирует сразу кучу лоссов. И распознавание, классификации так еще и поворот

  • @TheGoldArmada
    @TheGoldArmada 6 หลายเดือนก่อน

    Приветствую, отличное видео! Не могли бы вы подсказать, у меня к примеру есть 1000 изображений с резисторами размеченных вручную, и есть еще 2000 неразмеченных изображений, можно ли как-то автоматизировать процесс?

    • @Koldim2001
      @Koldim2001  6 หลายเดือนก่อน

      Если есть уже обученная сетка на 1000 фотках то можно написать код по авторазметке и интегрировать его с сиватом

  • @jaxtesla499
    @jaxtesla499 3 หลายเดือนก่อน

    Добрый день! Спасибо большое за видео и прочие материалы! Очень полезно и познавательно!
    Пытаюсь обучить аналогичную сеть, и обучение вроде проходит достаточно хорошо, но как только я пытаюсь что либо предсказать с помощью обученной сети, она выдает 0 предсказаний, причем даже если подать ей на предсказание, изображения из обучающего набора. При этом она еще и перестает предсказывать, то что до обучения предсказывала, машины, корабли и самолеты. Почему так происходит, не понимаю, бьюсь с этой проблемой уже два дня, раз 7 переобучал выбирая разные модели от n до L, менял размер изображений в датасете, ничего не помогает, после обучения сеть не находит вообще ничего....
    Если будут предположения или советы, буду признателен, так как нахожусь в тупике (((
    сразу отмечу, что общее количество размеченных изображений 1134, из низ 15% отведено на валидацию. На изображениях машины которые подъезжают, камера смотрит сверху и чуть сбоку, соответственно там еще и перспектива немного искажается. Задача состоит в том, чтобы выделить прямоугольник автомобильного номера.

    • @Koldim2001
      @Koldim2001  3 หลายเดือนก่อน

      То что сеть перестает распознавать классы что знала ранее это норма. Сеть учится на ваших примерах решать вашу задачу меняя веса под ваш уникальный кейс. Если хотите чтобы сеть помнила и старое, то надо скачать тот датасет на котором её исходно учили и уже к нему добавить свои примеры и классы. Но обычно так не делают и просто обучают сеть лишь на своих примерах + параллельно включают исходную предоюученную сеть. И вот теперь ваша сетка решает ваши кейсы и ваши классы + вторая сеть помнит то на чем её обучили по умолчанию

    • @Koldim2001
      @Koldim2001  3 หลายเดือนก่อน

      Попробуйте на инференсе сети поставить conf поменьше. Возможно объекты находятся но вы просто их высоким конфиденсом срезаете. И плюсом обучайте на большем размере батча. То есть минимум 16-32 ставьте батч

    • @jaxtesla499
      @jaxtesla499 3 หลายเดือนก่อน

      ​@@Koldim2001 Спасибо за совет, я уже conf поставил минимальный (results = model(img, conf=0.001)[0]) и все равно ничего не находит...
      увеличить батч попробую, но он жрет кучу видеопамяти ((( я обучаю его сейчас на 8, и он съедает 14gb видеопамяти

    • @jaxtesla499
      @jaxtesla499 3 หลายเดือนก่อน +1

      @@Koldim2001 Понял, хорошо, спасибо за пояснения. Я предполагал, что это нормально, но не был уверен, теперь знаю! Спасибо!

    • @jaxtesla499
      @jaxtesla499 3 หลายเดือนก่อน

      @@Koldim2001 Я уже думаю, может попробовать YOLOv8m-seg, может, я с разметкой начудил. Просто я Ваши ролики увидел, когда пытался проблему решить, а изначально разметку на 1000 объектов сделал в roboflow и уже грешу, что может там что-то не так ((

  • @Максим-й9я2д
    @Максим-й9я2д 5 หลายเดือนก่อน

    Приветствую! При обводке изображений мы можем использовать только прямоугольники? Или многоугольники, которые будут являтся прямоугольниками тоже можно использовать? Чтобы регулировать не только наклон вправо влево, но и вперёд-назад?

    • @Koldim2001
      @Koldim2001  5 หลายเดือนก่อน

      К сожалению у данной модели нет. Так посмотри в сторону yolo-seg у меня на канале есть туториал

  • @dmitrykhomyakov8451
    @dmitrykhomyakov8451 6 หลายเดือนก่อน

    Дмитрий добрый день. Возникло вот такое замечание к исползуемой предобученной сети. 55:25 мин видео три больших самолета стоят одинаково (фюзеляжи параллельны) а сеть показала разные углы поворота. При чем разница значительная - почти в 15 градусов (38 и 24). Это недостаток обучения предобученной сети или причина в чем то другом? Есть необходимость применения как раз такой сетки где есть определенные требования к точности. Есть ли параметр наподобие confidence, но который показывает вероятность определения не объекта а уверенность в точности опредления угла?

    • @Koldim2001
      @Koldim2001  6 หลายเดือนก่อน

      Объект определяется сразу вместе с углом так что конфиденс там они сразу на всю детекцию конкретную. Сетку использую предобученную полагаю да в ней трабл можете сами обучить свою))

  • @evgenynovichenko1895
    @evgenynovichenko1895 6 หลายเดือนก่อน

    что если повернутый bound box выходит за границу изображений, yolo это как то обрабатывается и как? используется такая разметка при тренировке или эта картинка с разметкой исключается из тренировки? Спасибо!

    • @Koldim2001
      @Koldim2001  6 หลายเดือนก่อน

      Вроде как помню, он не исключает её, то есть он под капотом хранит: центр бокса, его ширину, высоту и поворот. поэтому если центр находится не вне зоны изображения, то должен сработать. Надо потестировать на практике не часто с obb работаю

  • @АрсенийМедведев-и7о
    @АрсенийМедведев-и7о 5 หลายเดือนก่อน

    Здравствуйте, подскажите пожалуйста, какие параметры у Вашего железа??
    Я разметил датасет через CVAT, выбрал medium-модель и дальше два варианта: я получал либо сразу ошибку выделения памяти на CUDA, либо заполнение оперативы на 100% и карты на 50% с фризом и вылетом всех программ, которые есть, включая и сам VS Code + система начинала лагать, и помогает перезагрузка компьютера.
    Обучить получилось лишь один раз на nano-модели со значением imgsz чуть ли не в один пиксель.
    Мои параметры:
    RAM = 16GB
    CPU = i5 13500HX
    GPU = RTX4060
    ОС = WIndows11

    • @Koldim2001
      @Koldim2001  5 หลายเดือนก่อน

      Скорее всего батч слишком большой. Попробуйте батч сайз снизить до 2 или 4. У меня i9 и 4090. Но ваших параметров должно с головой хватать для обучения. Так что поэксперимтируйте с батчами

    • @АрсенийМедведев-и7о
      @АрсенийМедведев-и7о 5 หลายเดือนก่อน +1

      @@Koldim2001 Спасибо за ответ! Я ещё раз попробовал заново пройти все шаги и оказалось, что я просто не знал как работает Jupyter Notebook, потому что в области машинного обучения я пока что полный beginner.
      Я не знал, что существует такое понятие как ядро/kernel, и что оно запускает сессию, отбирая при этом память RAM в полное владение. Поэтому когда я запускаю обучение в первый раз выделяется память, всё нормально, и если обучение прервать, то почему то память так и остаётся занятой, что мне не совсем понятно. И теперь, если запустить обучение во второй раз, то память ещё раз выделяется, при том что старый кусок так и остаётся, поэтому на новую места не хватает, и всё крашится, так как один кусок занимает всю оперативу + файл подкачки и в общей сложности где-то 18-20гб это всё занимает, а на диске C у меня свободно около 30гб.
      Чтобы освободить этот кусок мне нужно рестартнуть это ядро и запустить новую сессию, тогда обучение снова идёт нормально :)
      Ещё от Вас узнал, какая у batch корреляция с памятью уже видеокарты. При imgsz = 640 память карты загружается под завязку при batch = 18-20, поэтому наверное можно задать значение batch=16, но я пока что не особо знаю, какой должен быть у него оптимальный размер, и работает ли для него правило "чем больше, тем лучше".

    • @Koldim2001
      @Koldim2001  5 หลายเดือนก่อน

      @@АрсенийМедведев-и7о да все верно надо перезапускать кернел ноутбука. Все верно говорите)

  • @marktwain2525
    @marktwain2525 7 หลายเดือนก่อน

    Дмитрий, добрый день! Подскажите, как можно с Вами связаться для обсуждения предложения?

    • @Koldim2001
      @Koldim2001  7 หลายเดือนก่อน

      Через тг - kolesnikov_dima

  • @Deciptikon
    @Deciptikon 8 หลายเดือนก่อน

    Дмитрий, можете подсказать, не нашёл в ваших видео, есть ли нейронки для выделения кривой(ых) на изображении\видео ? например что бы найти границу между асфальтом и обочиной, границу воды и песка на пляже, или границу между растущим клевером и крапивой и тд, то есть границу между двумя отличающимися областями?

    • @Koldim2001
      @Koldim2001  8 หลายเดือนก่อน +1

      Звучит задача довольно интересно. Предполагаю, что можно решать через подход с семантической сегментацией (тут можно и нейронки применить) или классическими методами в cv2 без нейросетей как типаж edge detection с последующей фильтрацией (см пример тут pyimagesearch.com/2021/05/12/opencv-edge-detection-cv2-canny/ )

    • @Deciptikon
      @Deciptikon 8 หลายเดือนก่อน

      @@Koldim2001 да, про семантическую тоже думал, она наиболее близка к желаемому решению. И потому вопрос, в ваших некоторых видео при формировании обучающего набора вы пользуетесь инструментами по типу сивата, и там есть функция определения областей по точкам (кажется в прошлом видео вы так выделяли ложки...), а есть ли такие нейросети от ёло? не для конкретных областей(типа нахождения асфальта или песка), а для произвольных, которые укажет пользователь в процессе работы, как в том же сивате?

    • @Koldim2001
      @Koldim2001  8 หลายเดือนก่อน +1

      @@Deciptikonот yolo к сожалению нет. Там должно быть строгое число возможных классов. А вот нейросеть SAM как раз твой выбор. Она не имеет строгое число классов и сама находит контуры любых объектов если ей задать референсные точки или еще что-нибудь как референс. Как раз я SAM и использовал когда размечал быстро ложки и ножи в сивате. Можешь чекнуть есть в ютубе много туториалов как SAM в питоне использовать её и обучать не надо просто бери предобученную

    • @Deciptikon
      @Deciptikon 8 หลายเดือนก่อน +1

      @@Koldim2001 крайне благодарен)))))

  • @investor-live5636
    @investor-live5636 5 หลายเดือนก่อน

    Всем привет! У кого-то отработала на своем датасете YOLO - obb?

    • @Koldim2001
      @Koldim2001  5 หลายเดือนก่อน

      Не совсем понял вопрос. Можете свой собрать датасет и протестировать процесс обучения