Если захотите визуализовать результаты работы (инференса) обученной нейронной сети, то очень советую посмотреть это видео - ruclips.net/video/nBQuWa63188/видео.htmlsi=z1Gl6Auv8QuYY_56 Используйте для этого готовую библиотеку: pip install patched_yolo_infer
Дмитрий огромное спасибо за столь подробное видео! Редкие видео такой длинны просматриваются полностью - это именно тот случай когда каждая минута видео несет ценную информацию! Порадовал раздел о разметке - подробное четкое описание, полное но без воды! Подписываюсь и ставлю лайк!
Спасибо за туториал - внятно, четко подробно и по делу!! Особое спасибо за рассказ по CVAT - решились некоторые непонятки.. Кстати, можно не править каждый раз конфиг Ультралитикса, если много разных тренингов. Вместо этого в ноутбуке перед запуском тренинга задать параметр командой: !yolo settings datasets_dir='/path/to/dataset_dir' и менять уже на месте..
Классно спасибо не знал про такое. Рад что смог помочь) по CVAT есть еще новое видео на канале мб тоже будет полезно для понимания как ускорить еще разметку
Дим, большая благодарность за труд и за настоящее видео👍 Появилось несколько вопросов, исходя из видео: 1. Как ускорить работу и качество работы сетки на камере в режиме живого времени? 2. Повлияет ли на решение вопроса 1 подключение высокоскоростной камеры? 3. Почему обработку проводите на ЦПУ, а не на видеокарте? 4. Что позволит модели лучше отрабатывать: - фото лучшего качества - количество фото и их разнообразие для обучения - обучение на бОльшем количестве эпох - изменение гиперпараметров (например imgsz)? Есть производственная задача, которую пробую решить с помощью в т.ч вашего видео. Заранее благодарю за ответ.
На видеокарте мощной на m модели можно до 40 кадров в секунду вытягивать. Чем больше размер модели тем ниже скорость. Так что стоит поэкспериментировать. Чтобы врубить видеокарту надо поставить на комп cuda и закачать пастора именно под эту версию cuda драйверов. Если у вас задача требует сверх точного обнаружения то посмотрите мое новое видео на канале как раз про эту тему. А так да надо экспериментировать с параметрами обучения чтобы добиться хороших результатов
Огромное спасибо за столь подробное видео!!!! Возник вопрос, можно ли как то на базе полученных данных реализовать примерное вычисление реального размера каждого найденного объекта(мм,см..)
Можно пиксели перевести в метры если знать референс. То есть например на фото нашли какой-то объект который заранее знаете какого размера а дальше просто делаете пересчет пикселей в метры согласно нему
По конвертации датасета из coco в yolo, а почему вы не используете скрипт от ultralytics json2yolo? Я по правде сказать попробовал его использовать и с первого раза не завелось)) использовал ваш репозиторий. Но вроде как они свой рекомендуют использовать
Ну можно и их использовать но там из коробки не всегда работает качественно так что поэтому и написал свой репозиторий. К тому же у меня есть и опции с рэндом шафлом и удобной интеграцией через формат CVAT
@@Koldim2001 вот у меня из коробки и не завелся) не перенес изображения в папку. Надо похоже скрипт поизучать. Я вот еще заметил, что координаты, которые переносятся вашим скриптом немного отличаются от тех которые ултралитиковский скрипт делает. Второй скрипт больше знаков после запятой оставляет. Впрочем, это видимо не существенно, так то координаты все очень похожие
Спасибо за информативный видеоролик!❤ Я новичок во всем этом деле, но хотелось бы узнать возможно ли реализовать "в домашних условиях" моделт YoloV8-n и обучить только на своих данных?)
Да именно про это это видео. Как обучать именно свою модель любого желаемого размера. Если интересует задача не сегментации, а детекции, то есть отдельное видео на моем канале где я подробно все показал
А как дообучать модель? Добавляя новые картинки? Или взять например уже обученные классы из coco (например bus, person, dog) и добавить их в свою модель?
Надо дообучить то значит надо к уже имеющемуся датасету на котором прежде обучалось добавить новые фотки свои и запустить заново обучение стартуя от предобученных весов
Подскажи, пожалуйста, нужно ли для YoLo приводить изображения к одному и тому же размеру, и если нужно, то на каком этапе - до разметки этих изображений, или после? И ещё вопрос - если бы у нас был нож, но он был бы перекрыт, к примеру, твоей рукой, и в итоге разделён визуально на две части, то нужно ли было бы создавать один контур, игнорируя твою руку, или два (и можно ли указать, что два эти контура относятся к одному и тому же объекту)? А так, спасибо за невероятно познавательное видео, спасение для студента с дипломом по машинному обучению)
Я обычно стараюсь размечать так чтоб если даже если перекрытие то маска это перекрытие как будто игнорирует. Как делал в примере на видео. Но тут все от случая зависит. Если важно именно видеть то что есть в кадре то лучше посторонние предметы классом не закрашивать. Так что это может повысить предиктивную способность сети По поводу ресайза то ела сама делает его под капотом. За это можно не париться. Величина ресайза imgsz можно задать при обучении сети и её же надо на инференса выбрать (обычно берут 640 чтоб как у базовой сети)
@@Koldim2001 Твои видео просто алмазы, спасибо, Дим) P.S. А ты не знаешь, автоматический "разметчик" в CVAT (который выделяет маску объекта автоматически, когда ты ставишь точку на объекты) работает на каких-то предобученных сетях, или на тех масках, которые ты выделил до этого вручную? А если он работает на предобученных сетях, как он понимает, какой именно объект ты хочешь выделить - по наименованию лэйбла?
@@ВладимирГрищенко-в2гэто SAM модель можешь про нее в инете прочитать. Она не разбирается что за классы она просто пытается предсказать что за контур объекта по точкам что ты указал так что относишь к тому или иному классу уже ты самостоятельно он лишь полигоны поможет построить. Спасибо за фидбэк))
Ну или парсер, краулер... сбор открытых данных. Допустим найти товар определённой категории с сайтов разных производителей, или подборку видео интересующей тематики?
@@МаксимПутютинда если у вас имеются обученные сетки на те или иные категории товаров то интегрировать такую сеть в любую задачу имеется возможность. Можно детектить как на сайтах так и на видосах с того же ютуба. Главное написать сам парсер и подавать фотки на отработку обученной сети. По результату можно чтоб срабатывал какой-то триггер и например приходило то же уведомление в месенжер. Так что полет фантазии безграничен, но проблема лишь закодить))
Подскажите, пожалуйста, для задач детекции такая разметка в виде многоугольника, который точно повторяет форму объекта, улучшит качество датасета или лучше в виде прямоугольника? Просто датасет формируется из объектов на одном фоне и непонятно, нейросеть привыкнет к фону и будет плохо работать в боевом режиме с разными фонами или нет. Заранее извиняюсь за глупый вопрос
Если задача именно детекция а не сегментация для нахождения точных контуров, то надо прямоугольниками размечать (у меня есть видос про обучение детектора yolo) Чем разнообразнее примеры, чем лучше работает итоговая сеть. Стоит добавить в обучающую выборку хотя бы несколько примеров с того как в боевом режиме должен работать алгоритм
Просто стартуете обучение от старых весов которые у вас уже есть. Но учтите что это значит что сетка стартово поставит веса как в прошлом обучении и после градиентных спусков будет возможно эффективнее под вашу задачу дообучаться
from ultralytics import YOLO # Load a pretrained segment model model = YOLO('your_last_model.pt') Далее как в примере делайте model.train() с нужными параметрами. Раз дообучаете, то можете эпох поменьше ставить чем при первичном обучении
Привет. Спасибо за видео. У меня вопрос о быстродействии. Если я правильно понял, то большая картинка 1шт обработалась 300мс. Т. е. Примерно три кадра в секунду. А для онлайн режима со скромным железом реально параметры подобрать, чтобы пошустрее раз в 20-30 было? У меня есть рабочий код который детектирует движение и записывает видео - (буфер 3 сёк до сработки порога + сработка порога) и отправляет в телеграмм. Хочу настроить, чтоб распознавало объекты на видео... Ну и в идеале запихнуть на малинку ...
Советую для Малинки брать минимальный размер модели при обучении. Вроде как раз yolov8n. Чем меньше, тем быстрее будет инференс. Не уверен что сможешь достоичь при таком железе 20-30 fps но попробовать стоит. В любом случае yolo одна из самых быстрых сетей по детекции
Охх ну вот не уверен что на рутубе вообще кто-то ищет образовательный контент. Так что пока туда не планировал переходить. Только если прям сильно прижмет)) но такую идею потенциально рассматривал (но так и не понял куда лучше рутуб или вк видео в вопросе целевой аудитории)
Подскажите пожалуйста, а можна как-то с помощью нейронок сортировать изображения? Например у меня тысячи картинок - логотипы, дизайны кнопок, персонажи, пейзажи и тд. их нужно разбить по соответствующим папкам. Вручную это долго делать. Может ли нейронка как-то помочь с этим?
Если Вам интересно могу кинуть в личку ссылку на блокнот в колабе, где собрана простейшая сеть для задачи классификации. В ней 10000 тыс фото овощей раскидываются по папкам . Ваша задача будет решаться заменой датасета на Ваш и обученем на Ваших данных. .
@@Koldim2001 @Koldim2001 Блокнот выполнянлся в качестве лаболаторной работы во время обучения. :) Обучены 5 разных сетей. Датасет расшарен на гугл диске. colab.research.google.com/drive/13nnIQA6sorTHS2dABxZu7iU3P4-sUZPn?usp=sharing
Такой вопрос, не могу найти ответ, как правильно до обучать модель с новыми фотографиями и можно ли до обучать модель с новыми обьектами в списке. Я видел параметр resume испол зуемый при остановке и возобновлении обучения, но если модель уде обучена на определенном количестве эпох, как ее до обучивать? как в нее добавить еще несколько типов обьектов для распознавания? Если просто указать стартовую модель, свою обученную и начать обучать ее на обновленном датасете с новым типом обьектов, то наверное придется также долго ее учить как и при обучении оригинальной модели?
У меня в данный момент обучается сеть 190 эпох из 300, и я вот хочу уже добавить новые объекты для детектирования в датасет и добавить фотографий к уже существующим объектам, но как правильно это сделать не понятно. Этот вопрос чувствительный, так как я обучаю на процессоре, на видеокарте мне не хватает видеопамяти, а на процессоре обучается днями, соответственно не хочется запороть уже полученный прогресс.
@@TruLander100 если вы меняете число классов то надо обучать модель с нуля. Если же просто новые фотки появились а классов столько же то можно просто чуть дообучить на эти новые фотки как раз сделав несколько эпох начиная со старых весов
Добрый день, хочу написать простого бота для 2d онлайн игры, у меня вопрос по выбору типа сети для распознавания юнитов. сегментации или детекции, нужно не просто де детектировать, а трекать каждого юнита. В игре происходят сражения на картах, карт не много, все похожи и маленькие и без прокруток помещаются на 1 экране, Юниты разные, но с соперником отличаются по цвету элементов. Задача такая чтобы различать юнитов свои чужие и тип, вести трек и определять центр юнита, для клика. Я не знаю какая сеть справится лучше, так как нужно не просто трекать и детектировать, но и производить клики мышкой по центру юнитов, юниты могут пепесекаться друг с другом, что затруднит распознавание свой чужой. Хотел сделать с сегментацией данных, но не уверен что трекер будет работать с сегментацией лучше чем с детекцией.
Подскажи, пожалуйста, подойдёт ли этот способ чтобы обнаружить полые квадраты довольно маленького размера в анкете? Это нужно для того, чтобы каждый квадрат затем как-то достать и распознать рукописный текст.
Да но тогда лучше берите модель детекции а не сегментации. Про это есть отдельный ролик на канале. На месте найденного бокса сможете сделать кроп и далее юзать ocr модели или классификаторы
Скорее всего стоит попробовать 11 питон с чистым окружением и туда лишь пайторч и ультралитикс поставить. Большинство ошибок сами после такого исчезнут
Привет! По этому видео я начал обучать openpose. В cvat загрузил кастомный датасет, скелеты людей выделил и экспортировал с помощью COCO Keypoints. На этом моменте я столкнулся с первой проблемой, так как репозиторий не предусмотрен для определения кейпойнт(как я понял), то я быстро написал скрипт через чат гпт. В итоге у меня все записывается в две папки, train/image, train/labels, аналогично с validation. Даже для data.yaml написал скрипт, но при загрузке все в гугл колаб или когда запускал на своем ноуте то выдавало ошибку. Сам я предполагаю, что это из за неправильного экспорта данных или просто не загрузились картинки. Можете вы мне подсказать, если у вас есть какие нибудь идеи на этот счет
@@АлишерРсмаганбет-р2впо yolo-pose у меня есть туториал как юзать предобученные сети. Именно как обучать свою нет. Можешь глянуть это видео - ruclips.net/video/RIiQeWJgjLw/видео.htmlsi=InLN0i2nFLExx340
добрый день, спасибо за видео. Я использую Mac и к сожалению, не могу поставить пометку в cvat. Возможно, вы знаете кого-то, кто работает с Mac и использует cvat.
@@Koldim2001 Я не знаю, почему это не работает. я нажимаю draw new polygon но не помечать. крест выступает в качестве маркера, и когда я хочу отметить объект, он ничего не делает. (извините за мой плохой русский Google Translate )
@@hmm-gx1jm Советую посмотреть это видео - ruclips.net/video/r27d3L2Q2Dc/видео.html Думаю сможешь найти если что аналоги не на русском языке. Обычно новые оъекты создаются при нажатии на букву N и как только контур завершен и замнут так же N позволяет сохранить объект
Привет. У меня такая проблема: Запускаю код, даже если использовать из Гита. Выдает ошибку: NotImplementedError . Что делать? Ultralytics YOLOv8.2.23 Python-3.12.3 torch-2.3.0+cu121 CUDA:0 (NVIDIA GeForce RTX 3060, 12288MiB)
Видимо что-то не так с обучением, возможно например не закончилось оно (картинки лишь после обучения появятся) ну и эпох стоит побольше + проверь что нормально трейновые батчи выглядят все маски правильно распознаются сетью при обучении
from moviepy.editor import VideoFileClip, AudioFileClip # Добавление звука к полученному видео без звука video_path = 'input.mp4' input_video = VideoFileClip('output.mp4') input_audio = AudioFileClip(video_path) final_video = input_video.set_audio(input_audio) final_video.write_videofile('output_with_audio.mp4', codec='libx264', audio_codec='aac') Попробуй так. Вот так сможешь к новому видео добавить исходную аудио дорожку. pip install moviepy понадобится
Помогите разобраться с проблемой. Скачал по ссылке из описания модель и фото для теста. Запускаю модель с тестовым фото в colab google, все отлично, говорит, что на фото 3 ножа и 4 ложки. Запускаю то же самое на своем ноутбуке (без GPU), результат - 0: 640x480 86 knifes, 214 spoons, 5409.5ms . В чем может быть проблема? Почему модель не работает локально на ноуте у меня?
Очень странно. Полагаю все же код отличается по инференсу. На cpu ответ должен быть тем же. Попробуйте визуализовать результат используя либу patched_yolo_infer
@@Koldim2001 Да, визуализацию результата запускаю и на colab в браузере она прям совсем отличается от результата локально на ПК. На ПК какую то ерунду выделяет ... очень странно и не понятно.
@@Koldim2001 conf - 0.6, iou - 0.4. Ну и параметры все одинаковые, что в colab, что локально на ПК, а результат работы сильно разный. Пробовал conf - 0.99, количество, якобы найденных ножей, - 250шт. На визуализации какие то не понятные области выделяются, у которых conf подписан = 1.0
@@VladimirRyabov-l1b хммм да впервые с таким сталкиваюсь. Советую обновить ultralytics пакет и торч поставить так: pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url download.pytorch.org/whl/cpu
Возможно глупый вопрос, но у меня в папке roaming нет папки ultralyrics, я установил его командой pip install ultralyrics. Когда запускаю обучение, то изображения для train и validation берутся не мои и вообще не подходящие, откуда то из другого места, а ошибка не появляется. Как можно исправить эту проблему?
@@Koldim2001 Если не меняю изначальный путь, то ошибка показанная в видео не появляется, вместо этого обучение начинается с каким то другим датасетом, если указываю на путь файла в своей папке, то возникает какая то другая ошибка(не та что в видео) . Там вроде пишет что то типо не удалось установить модель yolo. У меня нет папки ultralytics в roaming, поэтому я не могу найти файл settings и поменять там что либо
Если вы хотите именно залезть в бэкенд cvat и туда это интегрировать то такое не подскажу. Я датасаентист, так что смог реализовать реализовать лишь непостоянный конвертитор из того имеющегося формата выгрузки cvat в нужный формат для yolo - github.com/Koldim2001/COCO_to_YOLOv8
@@ХусейнНаимов-ь6хпо задаче детекции у меня есть отдельное видео на ютубе там я показал другой репозиторий по конвертации разметки. У детекции немного драной формат нужен
@@Koldim2001 Проблема в том, что я как-то не могу найти примеры с подобной или +- задачи) Ваш так вообще первый где затрагивается множественная детекция. Может конечно, не там смотрю, но... Все примеры с тектом основаны на mnist при этом уровня "одну букву мы распознаем". А как натравить детектор на большую страницу и что нибудь с ней сделать (например вырезать текст и восстановить фон) - вообще нет. Только детекция 1 обьекта. Мне бы хоть понять в какую сторону курить маны... Хоть какое-то общее направление
Советую начать с готовых решений на рынке OCR. Посмотрите это видео ruclips.net/video/8BMHoGQNnyg/видео.htmlsi=VBiR8fuyM1HFZ9uQ можете сразу на 1 час вперед прокрутить там я как раз эту тему рассматриваю
стартует на cpu ( . установлен python 3.8.6. , torch 2.0.0 и nvidia cuda и cudann командная стока выдает версию драqверов и видеокарту, тензоры по скрипту выдают случайные числа, но Обучение YOLOv8 для задачи сегментации (YOLOv8-seg) по гаqду стартует на CPU может я что то не до-устанавливал или не так подключаю. но я виню свою старую видеокарту GTX 650 которая устарела (RX 590 к сожалению для обучения неиросtтеи не пойдет) как выполнить этот гаbд в Google Colaboratory и еще хз как подключать туда Gugle диск ( гугл диск есть с 15гб и папку туда скинул, только толку ноль(
Ставь торч таким образом: pip3 install torch torchvision torchaudio --index-url download.pytorch.org/whl/cu118 так что запусти эту команду в новом окружении и лишь после этого ставь ultralitics
Детектировать шарик точно получится как раз используя yolo а вот предсказывать его поведение в будущем можно используя фильтр калмана как вариант но точность будет так себе скорее всего
Привет если не трудно помоги пожайлуста, такая проблема, что я обучил модель распозновать цифры на картинке (на картинке ток 7 цифр и тольк они (кроме цифр ничего нет)) он эти цифры находит показывает каждый класс цифры(типо 1 класс это цифра 1, 2 класс цифра 2 и тд) и обводит их в бокс. Проблема в том что я не знаю как этот класс вывести то есть ( цифры расположены слева направо и мне надо вывести их классы (или какой-то друго способ)) то есть чтобы он мне вывел результат (к примеру на изображении цифры 7598405 и мне надо чтобы он имеено так их выввел (или похоже главное чтобы по порядку слева направо). Облазил весь сайт так и не нашел как это сделать, он только выводит именно что за цифры есть вот image 1/1 C:\Users\qqqq\Desktop\testneyro\im1.png: 192x640 1 1, 1 2, 1 3, 2 7s, 2 8s, 125.8ms (nто есть 1 класс единица, два один класс двойка, и тд) он он их в порядке увелечения чтоли выдал я хз. Если что я делал чтобы он мне выдал результат на изображении (типо обвел число в квадрат и вверху написал что за класс и доверие) все хорошо вывод Буду очень признателен если сможешь как-то помочь или подсказать
Ну честно говоря не очень понимаю почему вы решаете эту задачу через детекции а не OCR. Если вы хотите распознавать текст или числа (номер) целиком то стоит искать детекцией не конкретные цифры а именно блоки чисел. Сеть научится находить области где расположены номера далее уже поверх результата надо будет прогонять модели OCR
Можете попробовать свою ocr отучить или взять готовые на рынке. Как вариант easy-ocr, teserract и подобные. У меня в видео одном есть примеры использования готовых алгоритмов распознания текста/чисел - ruclips.net/video/8BMHoGQNnyg/видео.htmlsi=8SigfJj8geu7E4jX (вам нужны последние 30 мин видоса)
Если же хотите именно так как уже делаете то нужно продумать логику в коде и фильтровать боксы в порядке по увеличению значения координат оси х и уже потом полученный список отсортированных классов пытаться представить в итоговое число. Но получится так себе качество по сравнению с существующими методами распознавания текста/чисел
Если захотите визуализовать результаты работы (инференса) обученной нейронной сети, то очень советую посмотреть это видео - ruclips.net/video/nBQuWa63188/видео.htmlsi=z1Gl6Auv8QuYY_56
Используйте для этого готовую библиотеку: pip install patched_yolo_infer
Лучшая работа! Просто пушка, нашел сотню ответов на сотни моих вопросов!
Очень рад что вам понравилось) можете глянуть и другие мои ролики
Умничка!☺️гении, на которых держится Россия, встаю на колени, за труды Ваши
@@double_t6016 спасибо ☺️
Добрый день) хотела тоже выразить благодарность, ваше видео прям очень помогло, спасибо огромное!
Дмитрий огромное спасибо за столь подробное видео! Редкие видео такой длинны просматриваются полностью - это именно тот случай когда каждая минута видео несет ценную информацию! Порадовал раздел о разметке - подробное четкое описание, полное но без воды! Подписываюсь и ставлю лайк!
Очень приятно. Советую посмотреть и другие видеоролики на канале. Надеюсь, тоже понравится))
Дмитрий, спасибо огромное! Отличный туториал - полно/понятно/интересно!
Большое спасибо за длинный и подробный туториал
В видео по детекции было так много ньюансов и вопросов) А тут прям разжевано, как для бабушки без зубов
@@capuer4uk да это видео я снимал позже чем детекцию и уже учел все недоработки прошлого материала)) спасибо большое что смотрите)
Спасибо огромное за уроки!!!!!!!!! Материал 🔥
Огромное спасибо Дмитрий.
Спасибо большое
Спасибо за туториал - внятно, четко подробно и по делу!! Особое спасибо за рассказ по CVAT - решились некоторые непонятки..
Кстати, можно не править каждый раз конфиг Ультралитикса, если много разных тренингов. Вместо этого в ноутбуке перед запуском тренинга задать параметр командой:
!yolo settings datasets_dir='/path/to/dataset_dir'
и менять уже на месте..
Классно спасибо не знал про такое. Рад что смог помочь) по CVAT есть еще новое видео на канале мб тоже будет полезно для понимания как ускорить еще разметку
Спасибо за видео!
Рад помочь)
Красава!!!✌️✌️✌️
Дим, большая благодарность за труд и за настоящее видео👍
Появилось несколько вопросов, исходя из видео:
1. Как ускорить работу и качество работы сетки на камере в режиме живого времени?
2. Повлияет ли на решение вопроса 1 подключение высокоскоростной камеры?
3. Почему обработку проводите на ЦПУ, а не на видеокарте?
4. Что позволит модели лучше отрабатывать:
- фото лучшего качества
- количество фото и их разнообразие для обучения
- обучение на бОльшем количестве эпох
- изменение гиперпараметров (например imgsz)?
Есть производственная задача, которую пробую решить с помощью в т.ч вашего видео.
Заранее благодарю за ответ.
На видеокарте мощной на m модели можно до 40 кадров в секунду вытягивать. Чем больше размер модели тем ниже скорость. Так что стоит поэкспериментировать. Чтобы врубить видеокарту надо поставить на комп cuda и закачать пастора именно под эту версию cuda драйверов.
Если у вас задача требует сверх точного обнаружения то посмотрите мое новое видео на канале как раз про эту тему.
А так да надо экспериментировать с параметрами обучения чтобы добиться хороших результатов
@@Koldim2001 что скажете про увеличение датасета и обучение на бОльшем количестве эпох?
@@МаксимТалалаев-р5рчем больше данных и эпох тем больше шансов на успех)) это точно 😊
Огромное спасибо за столь подробное видео!!!! Возник вопрос, можно ли как то на базе полученных данных реализовать примерное вычисление реального размера каждого найденного объекта(мм,см..)
Можно пиксели перевести в метры если знать референс. То есть например на фото нашли какой-то объект который заранее знаете какого размера а дальше просто делаете пересчет пикселей в метры согласно нему
По конвертации датасета из coco в yolo, а почему вы не используете скрипт от ultralytics json2yolo? Я по правде сказать попробовал его использовать и с первого раза не завелось)) использовал ваш репозиторий. Но вроде как они свой рекомендуют использовать
Ну можно и их использовать но там из коробки не всегда работает качественно так что поэтому и написал свой репозиторий. К тому же у меня есть и опции с рэндом шафлом и удобной интеграцией через формат CVAT
@@Koldim2001 вот у меня из коробки и не завелся) не перенес изображения в папку. Надо похоже скрипт поизучать. Я вот еще заметил, что координаты, которые переносятся вашим скриптом немного отличаются от тех которые ултралитиковский скрипт делает. Второй скрипт больше знаков после запятой оставляет. Впрочем, это видимо не существенно, так то координаты все очень похожие
@@elcolex777 Ага все верно 👍🏻
Спасибо за информативный видеоролик!❤ Я новичок во всем этом деле, но хотелось бы узнать возможно ли реализовать "в домашних условиях" моделт YoloV8-n и обучить только на своих данных?)
Да именно про это это видео. Как обучать именно свою модель любого желаемого размера. Если интересует задача не сегментации, а детекции, то есть отдельное видео на моем канале где я подробно все показал
@@Koldim2001 спасибо за информацию, обязательно гляну) Вам успехов)
@@valeogamerспасибо))
А как дообучать модель? Добавляя новые картинки? Или взять например уже обученные классы из coco (например bus, person, dog) и добавить их в свою модель?
Надо дообучить то значит надо к уже имеющемуся датасету на котором прежде обучалось добавить новые фотки свои и запустить заново обучение стартуя от предобученных весов
Подскажи, пожалуйста, нужно ли для YoLo приводить изображения к одному и тому же размеру, и если нужно, то на каком этапе - до разметки этих изображений, или после?
И ещё вопрос - если бы у нас был нож, но он был бы перекрыт, к примеру, твоей рукой, и в итоге разделён визуально на две части, то нужно ли было бы создавать один контур, игнорируя твою руку, или два (и можно ли указать, что два эти контура относятся к одному и тому же объекту)?
А так, спасибо за невероятно познавательное видео, спасение для студента с дипломом по машинному обучению)
Я обычно стараюсь размечать так чтоб если даже если перекрытие то маска это перекрытие как будто игнорирует. Как делал в примере на видео. Но тут все от случая зависит. Если важно именно видеть то что есть в кадре то лучше посторонние предметы классом не закрашивать. Так что это может повысить предиктивную способность сети
По поводу ресайза то ела сама делает его под капотом. За это можно не париться. Величина ресайза imgsz можно задать при обучении сети и её же надо на инференса выбрать (обычно берут 640 чтоб как у базовой сети)
@@Koldim2001 Твои видео просто алмазы, спасибо, Дим)
P.S. А ты не знаешь, автоматический "разметчик" в CVAT (который выделяет маску объекта автоматически, когда ты ставишь точку на объекты) работает на каких-то предобученных сетях, или на тех масках, которые ты выделил до этого вручную?
А если он работает на предобученных сетях, как он понимает, какой именно объект ты хочешь выделить - по наименованию лэйбла?
@@ВладимирГрищенко-в2гэто SAM модель можешь про нее в инете прочитать. Она не разбирается что за классы она просто пытается предсказать что за контур объекта по точкам что ты указал так что относишь к тому или иному классу уже ты самостоятельно он лишь полигоны поможет построить. Спасибо за фидбэк))
Оч круто! Можно данный способ совместить со скрайпингом? Зарание прошу прощения если вопрос глупый
Подскажи плис а что имеется ввиду под скрайпингом?
Ну или парсер, краулер... сбор открытых данных. Допустим найти товар определённой категории с сайтов разных производителей, или подборку видео интересующей тематики?
@@МаксимПутютинда если у вас имеются обученные сетки на те или иные категории товаров то интегрировать такую сеть в любую задачу имеется возможность. Можно детектить как на сайтах так и на видосах с того же ютуба. Главное написать сам парсер и подавать фотки на отработку обученной сети. По результату можно чтоб срабатывал какой-то триггер и например приходило то же уведомление в месенжер. Так что полет фантазии безграничен, но проблема лишь закодить))
Воодушевлят. Наклянчу, может кто поможет) Успехов тебе, интересная тема буду следить за выпусками! Ещё раз спасибо и респект🤙
@@МаксимПутютинспасибо большое 😊
Подскажите, пожалуйста, для задач детекции такая разметка в виде многоугольника, который точно повторяет форму объекта, улучшит качество датасета или лучше в виде прямоугольника? Просто датасет формируется из объектов на одном фоне и непонятно, нейросеть привыкнет к фону и будет плохо работать в боевом режиме с разными фонами или нет. Заранее извиняюсь за глупый вопрос
Если задача именно детекция а не сегментация для нахождения точных контуров, то надо прямоугольниками размечать (у меня есть видос про обучение детектора yolo)
Чем разнообразнее примеры, чем лучше работает итоговая сеть. Стоит добавить в обучающую выборку хотя бы несколько примеров с того как в боевом режиме должен работать алгоритм
@@Koldim2001 спасибо за столь быстрый ответ!
Добрый день, а можно пояснить, каким образом, если я хочу продолжить обучение уже обученной сетки, как это выполняется?
Просто стартуете обучение от старых весов которые у вас уже есть. Но учтите что это значит что сетка стартово поставит веса как в прошлом обучении и после градиентных спусков будет возможно эффективнее под вашу задачу дообучаться
from ultralytics import YOLO
# Load a pretrained segment model
model = YOLO('your_last_model.pt')
Далее как в примере делайте model.train() с нужными параметрами. Раз дообучаете, то можете эпох поменьше ставить чем при первичном обучении
@@Koldim2001 спасибо большое за ответ, буду дальше развивать свою сеть) Очень полезный и интересный гайд
Привет. Спасибо за видео. У меня вопрос о быстродействии. Если я правильно понял, то большая картинка 1шт обработалась 300мс. Т. е. Примерно три кадра в секунду. А для онлайн режима со скромным железом реально параметры подобрать, чтобы пошустрее раз в 20-30 было? У меня есть рабочий код который детектирует движение и записывает видео - (буфер 3 сёк до сработки порога + сработка порога) и отправляет в телеграмм. Хочу настроить, чтоб распознавало объекты на видео... Ну и в идеале запихнуть на малинку ...
Советую для Малинки брать минимальный размер модели при обучении. Вроде как раз yolov8n. Чем меньше, тем быстрее будет инференс.
Не уверен что сможешь достоичь при таком железе 20-30 fps но попробовать стоит. В любом случае yolo одна из самых быстрых сетей по детекции
Не могли бы вы загрузить ваши видео дополнительно на Рутуб?
Охх ну вот не уверен что на рутубе вообще кто-то ищет образовательный контент. Так что пока туда не планировал переходить. Только если прям сильно прижмет)) но такую идею потенциально рассматривал (но так и не понял куда лучше рутуб или вк видео в вопросе целевой аудитории)
Подскажите пожалуйста, а можна как-то с помощью нейронок сортировать изображения? Например у меня тысячи картинок - логотипы, дизайны кнопок, персонажи, пейзажи и тд. их нужно разбить по соответствующим папкам. Вручную это долго делать. Может ли нейронка как-то помочь с этим?
Да есть вариант использовать image retrieval подходы. На эту тему есть у меня видео - ruclips.net/video/kQoe0HWg9d0/видео.html
@@Koldim2001 спасибо большое!
Если Вам интересно могу кинуть в личку ссылку на блокнот в колабе, где собрана простейшая сеть для задачи классификации. В ней 10000 тыс фото овощей раскидываются по папкам . Ваша задача будет решаться заменой датасета на Ваш и обученем на Ваших данных. .
@@dmitrykhomyakov8451ооо четко если есть, приложи плис. А то у себя подобного хорошо оформленного ноутбука, к сожалению, не нашел
@@Koldim2001 @Koldim2001 Блокнот выполнянлся в качестве лаболаторной работы во время обучения. :) Обучены 5 разных сетей. Датасет расшарен на гугл диске. colab.research.google.com/drive/13nnIQA6sorTHS2dABxZu7iU3P4-sUZPn?usp=sharing
Такой вопрос, не могу найти ответ, как правильно до обучать модель с новыми фотографиями и можно ли до обучать модель с новыми обьектами в списке.
Я видел параметр resume испол зуемый при остановке и возобновлении обучения, но если модель уде обучена на определенном количестве эпох, как ее до обучивать? как в нее добавить еще несколько типов обьектов для распознавания?
Если просто указать стартовую модель, свою обученную и начать обучать ее на обновленном датасете с новым типом обьектов, то наверное придется также долго ее учить как и при обучении оригинальной модели?
У меня в данный момент обучается сеть 190 эпох из 300, и я вот хочу уже добавить новые объекты для детектирования в датасет и добавить фотографий к уже существующим объектам, но как правильно это сделать не понятно.
Этот вопрос чувствительный, так как я обучаю на процессоре, на видеокарте мне не хватает видеопамяти, а на процессоре обучается днями, соответственно не хочется запороть уже полученный прогресс.
Можно при повтором запуске уже ставить меньше число эпох а стартовать обучение от старых весов прошлого обучения
@@Koldim2001 это и в случае простого добавления новых фотографий и в случае добавления новых объектов для распознавания?
@@TruLander100 если вы меняете число классов то надо обучать модель с нуля. Если же просто новые фотки появились а классов столько же то можно просто чуть дообучить на эти новые фотки как раз сделав несколько эпох начиная со старых весов
Добрый день, хочу написать простого бота для 2d онлайн игры, у меня вопрос по выбору типа сети для распознавания юнитов. сегментации или детекции, нужно не просто де детектировать, а трекать каждого юнита.
В игре происходят сражения на картах, карт не много, все похожи и маленькие и без прокруток помещаются на 1 экране, Юниты разные, но с соперником отличаются по цвету элементов.
Задача такая чтобы различать юнитов свои чужие и тип, вести трек и определять центр юнита, для клика. Я не знаю какая сеть справится лучше, так как нужно не просто трекать и детектировать, но и производить клики мышкой по центру юнитов, юниты могут пепесекаться друг с другом, что затруднит распознавание свой чужой.
Хотел сделать с сегментацией данных, но не уверен что трекер будет работать с сегментацией лучше чем с детекцией.
Да советую детекцию. Так как трекеры все готовые хорошие как раз под детекцию написаны
Подскажи, пожалуйста, подойдёт ли этот способ чтобы обнаружить полые квадраты довольно маленького размера в анкете? Это нужно для того, чтобы каждый квадрат затем как-то достать и распознать рукописный текст.
Да но тогда лучше берите модель детекции а не сегментации. Про это есть отдельный ролик на канале. На месте найденного бокса сможете сделать кроп и далее юзать ocr модели или классификаторы
Отличное видео, но воткнулся в ошибку и разобраться не получается NotImplementedError, может специалист поможет?
Скорее всего стоит попробовать 11 питон с чистым окружением и туда лишь пайторч и ультралитикс поставить. Большинство ошибок сами после такого исчезнут
Привет! По этому видео я начал обучать openpose. В cvat загрузил кастомный датасет, скелеты людей выделил и экспортировал с помощью COCO Keypoints. На этом моменте я столкнулся с первой проблемой, так как репозиторий не предусмотрен для определения кейпойнт(как я понял), то я быстро написал скрипт через чат гпт. В итоге у меня все записывается в две папки, train/image, train/labels, аналогично с validation. Даже для data.yaml написал скрипт, но при загрузке все в гугл колаб или когда запускал на своем ноуте то выдавало ошибку. Сам я предполагаю, что это из за неправильного экспорта данных или просто не загрузились картинки. Можете вы мне подсказать, если у вас есть какие нибудь идеи на этот счет
Может поверх кейпойнт надо было еще что то наложить в cvat? Я новичок поэтому мало что понимаю пока что😅
Так это же инстанс сегментации. Это туториал по модели yolo-seg. Вам нужно обучать другую сеть - yolo-pose поищите про нее туториал в инете
@@Koldim2001 спасибо большое за ответ, теперь все стало понятно. У вас очень классный контент и надеюсь в будущем снимите про yolo-pose🙏
@@АлишерРсмаганбет-р2впо yolo-pose у меня есть туториал как юзать предобученные сети. Именно как обучать свою нет. Можешь глянуть это видео - ruclips.net/video/RIiQeWJgjLw/видео.htmlsi=InLN0i2nFLExx340
Добрый день, скажите пожалуйста как приспособить весовой файл к с#? Спасибо
Сорри я не знаю этот язык. Мб gpt сможет с этим помочь) попробуйте спросить у него
@@Koldim2001 спасибо
добрый день, спасибо за видео. Я использую Mac и к сожалению, не могу поставить пометку в cvat. Возможно, вы знаете кого-то, кто работает с Mac и использует cvat.
А что значит пометка в cvat? Вроде как на всех компах работает одинаково это ведь браузерная программа
@@Koldim2001 Я не знаю, почему это не работает. я нажимаю draw new polygon но не помечать. крест выступает в качестве маркера, и когда я хочу отметить объект, он ничего не делает. (извините за мой плохой русский Google Translate )
@@hmm-gx1jm Советую посмотреть это видео - ruclips.net/video/r27d3L2Q2Dc/видео.html Думаю сможешь найти если что аналоги не на русском языке. Обычно новые оъекты создаются при нажатии на букву N и как только контур завершен и замнут так же N позволяет сохранить объект
@@Koldim2001 Спасибо за быстрый ответ и вашу помощь, теперь я вижу маркировку
Привет Дима! Модуль 'ultralytics' не читается в моем коде? Что может быть причиной?
Попробуй его так установить: pip install --upgrade ultralitics в терминале или отдельной ячейкой в ноутбуке
Привет. У меня такая проблема: Запускаю код, даже если использовать из Гита. Выдает ошибку: NotImplementedError . Что делать? Ultralytics YOLOv8.2.23 Python-3.12.3 torch-2.3.0+cu121 CUDA:0 (NVIDIA GeForce RTX 3060, 12288MiB)
Попробуй питон 3.11 пустое окружение. Мб проблемы с поддержкой 12 версии
У меня после обучения нет MaskF1_curve и подобных метрик, только в .csv, и к слову сказать они очень плохие, не понимаю с чем это связано....
Видимо что-то не так с обучением, возможно например не закончилось оно (картинки лишь после обучения появятся) ну и эпох стоит побольше + проверь что нормально трейновые батчи выглядят все маски правильно распознаются сетью при обучении
Нет никаких файлов в папке ultralytics, в чем может быть причина?
Ты про run data? А ты библиотека скачал? Код запустил? Он должен был бы сказать в коде путь до yaml файла в котором раз надо пофиксить значения
Подскажите пожалуйста. Если видео со звуком. Есть ли какой-то параметр, который сохраняет звук в видео?
Ох стоит изучить документацию cv2. Полагаю, есть, просто на практике работаю с камер без звука, поэтому и не использовал
from moviepy.editor import VideoFileClip, AudioFileClip
# Добавление звука к полученному видео без звука
video_path = 'input.mp4'
input_video = VideoFileClip('output.mp4')
input_audio = AudioFileClip(video_path)
final_video = input_video.set_audio(input_audio)
final_video.write_videofile('output_with_audio.mp4', codec='libx264', audio_codec='aac')
Попробуй так. Вот так сможешь к новому видео добавить исходную аудио дорожку. pip install moviepy понадобится
@@Koldim2001 Спасибо. Я сейчас через ffmpeg добавляю аудио. Предположил, что можно без дополнительно обработки сделать.
Помогите разобраться с проблемой. Скачал по ссылке из описания модель и фото для теста. Запускаю модель с тестовым фото в colab google, все отлично, говорит, что на фото 3 ножа и 4 ложки. Запускаю то же самое на своем ноутбуке (без GPU), результат - 0: 640x480 86 knifes, 214 spoons, 5409.5ms . В чем может быть проблема? Почему модель не работает локально на ноуте у меня?
Очень странно. Полагаю все же код отличается по инференсу. На cpu ответ должен быть тем же. Попробуйте визуализовать результат используя либу patched_yolo_infer
@@Koldim2001 Да, визуализацию результата запускаю и на colab в браузере она прям совсем отличается от результата локально на ПК. На ПК какую то ерунду выделяет ... очень странно и не понятно.
@@VladimirRyabov-l1b возможно стоит conf слишком низким или iou слишком высоким
@@Koldim2001 conf - 0.6, iou - 0.4. Ну и параметры все одинаковые, что в colab, что локально на ПК, а результат работы сильно разный. Пробовал conf - 0.99, количество, якобы найденных ножей, - 250шт. На визуализации какие то не понятные области выделяются, у которых conf подписан = 1.0
@@VladimirRyabov-l1b хммм да впервые с таким сталкиваюсь. Советую обновить ultralytics пакет и торч поставить так: pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url download.pytorch.org/whl/cpu
Возможно глупый вопрос, но у меня в папке roaming нет папки ultralyrics, я установил его командой pip install ultralyrics. Когда запускаю обучение, то изображения для train и validation берутся не мои и вообще не подходящие, откуда то из другого места, а ошибка не появляется. Как можно исправить эту проблему?
А что за пусть вы указываете к ямл файлу с конфигурацией датасета?
@@Koldim2001 Если не меняю изначальный путь, то ошибка показанная в видео не появляется, вместо этого обучение начинается с каким то другим датасетом, если указываю на путь файла в своей папке, то возникает какая то другая ошибка(не та что в видео) . Там вроде пишет что то типо не удалось установить модель yolo. У меня нет папки ultralytics в roaming, поэтому я не могу найти файл settings и поменять там что либо
Напиши мне в тг kolesnikov_dima
Здравствуйте подскажите пожалуйста как в cvat добавить формат экспорта YOLOv5?
Вам нужно юзать мой код конвертации. Он работает и для 8 и для 5 версий YOLO. Так что делайте прям по туториалу
@@Koldim2001 у них есть туториал new-annotation-format и мне нужно на основе этого сделать поддержку yolov5 но я сам бэкендер и не понимаю что да как
Если вы хотите именно залезть в бэкенд cvat и туда это интегрировать то такое не подскажу. Я датасаентист, так что смог реализовать реализовать лишь непостоянный конвертитор из того имеющегося формата выгрузки cvat в нужный формат для yolo -
github.com/Koldim2001/COCO_to_YOLOv8
@@Koldim2001 а это решение подойдет для детекции
@@ХусейнНаимов-ь6хпо задаче детекции у меня есть отдельное видео на ютубе там я показал другой репозиторий по конвертации разметки. У детекции немного драной формат нужен
Хм, а с помощью YOLO можно найти весь текст на картинке? Не распознать а именно найти по маске? или есть другой способ?
Нет он может найти лишь область прямоугольную где текст располагается. Далее уже надо эту область на отдельную OCR сеть подавать
Можете использовать обычную модель детекции или yolo-obb. Надо разметить места где такой текст прямоугольниками и попробовать обучить. Мб сработает
@@Koldim2001 Проблема в том, что я как-то не могу найти примеры с подобной или +- задачи) Ваш так вообще первый где затрагивается множественная детекция. Может конечно, не там смотрю, но...
Все примеры с тектом основаны на mnist при этом уровня "одну букву мы распознаем". А как натравить детектор на большую страницу и что нибудь с ней сделать (например вырезать текст и восстановить фон) - вообще нет. Только детекция 1 обьекта.
Мне бы хоть понять в какую сторону курить маны... Хоть какое-то общее направление
Советую начать с готовых решений на рынке OCR. Посмотрите это видео ruclips.net/video/8BMHoGQNnyg/видео.htmlsi=VBiR8fuyM1HFZ9uQ можете сразу на 1 час вперед прокрутить там я как раз эту тему рассматриваю
@@Koldim2001 Спасибо огромное! На первый взгляд то что нужно!
стартует на cpu ( . установлен python 3.8.6. , torch 2.0.0 и nvidia cuda и cudann командная стока выдает версию драqверов и видеокарту, тензоры по скрипту выдают случайные числа, но Обучение YOLOv8 для задачи сегментации (YOLOv8-seg) по гаqду стартует на CPU может я что то не до-устанавливал или не так подключаю. но я виню свою старую видеокарту GTX 650 которая устарела (RX 590 к сожалению для обучения неиросtтеи не пойдет) как выполнить этот гаbд в Google Colaboratory и еще хз как подключать туда Gugle диск ( гугл диск есть с 15гб и папку туда скинул, только толку ноль(
Ставь торч таким образом: pip3 install torch torchvision torchaudio --index-url download.pytorch.org/whl/cu118 так что запусти эту команду в новом окружении и лишь после этого ставь ultralitics
Вот как Гугл драйв к колабу подрубить:
from google.colab import drive
drive.mount(‘/content/gdrive’)
Приветствую. возможно внедрить данную систему для отслеживания шарика в онлайн рулетке? Для дальнейшего предсказания по физическому состоянию?
Детектировать шарик точно получится как раз используя yolo а вот предсказывать его поведение в будущем можно используя фильтр калмана как вариант но точность будет так себе скорее всего
Привет если не трудно помоги пожайлуста, такая проблема, что я обучил модель распозновать цифры на картинке (на картинке ток 7 цифр и тольк они (кроме цифр ничего нет)) он эти цифры находит показывает каждый класс цифры(типо 1 класс это цифра 1, 2 класс цифра 2 и тд) и обводит их в бокс. Проблема в том что я не знаю как этот класс вывести то есть ( цифры расположены слева направо и мне надо вывести их классы (или какой-то друго способ)) то есть чтобы он мне вывел результат (к примеру на изображении цифры 7598405 и мне надо чтобы он имеено так их выввел (или похоже главное чтобы по порядку слева направо). Облазил весь сайт так и не нашел как это сделать, он только выводит именно что за цифры есть вот
image 1/1 C:\Users\qqqq\Desktop\testneyro\im1.png: 192x640 1 1, 1 2, 1 3, 2 7s, 2 8s, 125.8ms (nто есть 1 класс единица, два один класс двойка, и тд) он он их в порядке увелечения чтоли выдал я хз.
Если что я делал чтобы он мне выдал результат на изображении (типо обвел число в квадрат и вверху написал что за класс и доверие) все хорошо вывод
Буду очень признателен если сможешь как-то помочь или подсказать
Ну честно говоря не очень понимаю почему вы решаете эту задачу через детекции а не OCR. Если вы хотите распознавать текст или числа (номер) целиком то стоит искать детекцией не конкретные цифры а именно блоки чисел. Сеть научится находить области где расположены номера далее уже поверх результата надо будет прогонять модели OCR
Можете попробовать свою ocr отучить или взять готовые на рынке. Как вариант easy-ocr, teserract и подобные. У меня в видео одном есть примеры использования готовых алгоритмов распознания текста/чисел - ruclips.net/video/8BMHoGQNnyg/видео.htmlsi=8SigfJj8geu7E4jX (вам нужны последние 30 мин видоса)
Если же хотите именно так как уже делаете то нужно продумать логику в коде и фильтровать боксы в порядке по увеличению значения координат оси х и уже потом полученный список отсортированных классов пытаться представить в итоговое число. Но получится так себе качество по сравнению с существующими методами распознавания текста/чисел
@@Koldim2001 спасибо большое
Числа просто не обычные (разный шрифт, могут состоять из полосок (цифры), у цифры может быть только контур, и тд