Тёмный

Обучение YOLOv8 для задачи детекции 

Дмитрий Колесников
Подписаться 1,6 тыс.
Просмотров 24 тыс.
50% 1

Реализация полного процесса обучения - нарезка видео на фремы (ffmpeg), поднятие сервера по разметке CVAT, переподготовка данных к нужному формату YOLO, реализация обучения и инференса на тестовых видео + трекинг с использованием передовых подходов (bytetrack & botsort)
Код полный с бэкапом проекта CVAT доступен по ссылке - drive.google.com/file/d/1ZpzY...
Таймкоды из видео:
4:45 - Разметка в CVAT + ffmpeg для генерации кадров из видео
35:25 - Обучение нейронной сети YOLO
53:50 - Использование на практике обученной сети
Если захотите визуализовать результаты работы (инференса) обученной нейронной сети, то очень советую посмотреть это видео - • How to visualize YOLOv...
Используйте для этого готовую библиотеку: pip install patched_yolo_infer
Подписывайтесь на канал, чтобы быть в курсе новых видео и узнавать больше о компьютерном зрении!

Опубликовано:

 

14 ноя 2023

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 273   
@Koldim2001
@Koldim2001 4 месяца назад
Пример использования версии CVAT без докера можете увидеть в новом видеоролике по yolov8-seg на моем канале. Советую глянуть, так как там я учел множество вопросов, возникших у подписчиков. Всем спасибо за вовлеченность Вот ссылка на туториал по yolo-seg - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-FF3mIWF0vFs.htmlsi=Jul4CMdlPYIBC24T ------------- Если захотите визуализовать результаты работы (инференса) обученной нейронной сети, то очень советую посмотреть это видео - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-nBQuWa63188.htmlsi=z1Gl6Auv8QuYY_56 Используйте для этого готовую библиотеку: pip install patched_yolo_infer
@user-pp7tr6tv6d
@user-pp7tr6tv6d 3 месяца назад
Здравствуйте, можно будет вашу идею через камеру и расбери пай реализовать?
@Koldim2001
@Koldim2001 3 месяца назад
@@user-pp7tr6tv6d да конечно можно. Но стоит тогда обучать модель размером n (то есть модель более легкую чтобы расбери выдержал инференс)
@user-jz8od1ck4p
@user-jz8od1ck4p Месяц назад
Спасибо за годный контент! Очень полезно, ничего лишнего. Давно такой ищу.
@tanjiro_shuragashi
@tanjiro_shuragashi 3 месяца назад
Решаю сейчас задачу с детектированием на производстве свиней и подсчёт голов и наткнулся на ваша видео. Просто спасибо вам, подписка и лайк. 😅
@Koldim2001
@Koldim2001 3 месяца назад
Спасибо большое)) желаю удачи
@user-or6tb7tb2q
@user-or6tb7tb2q 2 месяца назад
Класс!!! Спасибо за ваши труды и низкий поклон!
@Koldim2001
@Koldim2001 2 месяца назад
Спасибо большое)
@evgenynovichenko1895
@evgenynovichenko1895 2 месяца назад
спасибо, оффигенно помогло! Для того кто, я про себя)) кто не сталкивался с этим процессом
@elcolex777
@elcolex777 5 месяцев назад
Я когда смотрю обучающее видео, и если мне стало немного понятно (мне достаточно тупому человеку)), то я считаю что автор классно объясняет и я ставлю лайк. Так вот, вы классно объясняете, ставлю лайк)))
@Koldim2001
@Koldim2001 5 месяцев назад
Спасибо огромное))
@igormalev2871
@igormalev2871 3 месяца назад
Спасибо огромное за уроки!!!!!!!!! Материал 🔥
@tyurinp
@tyurinp Месяц назад
Большое спасибо! Очень полезное видео!
@Haie_Westhus
@Haie_Westhus 5 месяцев назад
Хороший разбор материала. Это 100% подписка.
@Koldim2001
@Koldim2001 5 месяцев назад
Спасибо большое ☺️
@Koldim2001
@Koldim2001 6 месяцев назад
код из видео - drive.google.com/file/d/1ZpzY1OVPVmaAG5-Asvj9fYKWyKTu5vKb/view?usp=sharing
@cute-catsMurrrr
@cute-catsMurrrr 5 месяцев назад
Крутое видео. Спасибо
@vitalyk3421
@vitalyk3421 3 месяца назад
Супер, спасибо!
@miklepoh6203
@miklepoh6203 Месяц назад
Совет для тех кто не хочет ставить анаконду и столкнулся с проблемой __main__.py", line 4, in ModuleNotFoundError: No module named. Скопируйте указанные файлы после No module named , они лежат в папке CVAT2YOLO скопированной с гитхаба, в \Python\Python311\Lib это папке с установленными библиотеками для питона. После этого запускайте в терминале cvat2yolo --cvat my_datset --mode manual --output_folder my_dataset_yolov5 . Если получились пустые папки то значит где-то сделали не так как в видео. Например у меня фото были не в png , для этого я использовал cvat2yolo --cvat my_datset --mode manual --train_folder obj_Train_data --val_folder obj_Validation_data --test_folder obj_Test_data --img_format jpg --output_folder my_dataset_yolov5 здесь указан нужный формат фото и всё получилось.
@user-hb3kr5wb7u
@user-hb3kr5wb7u 4 месяца назад
Привет! Спасибо тебе большое за столь хорошее видео. На РУ ютубе такого контента нет, по этому выражаю тебе отдельную благодарность - лайк и подписка тебе. Также, хотел бы у тебя уточнить: У меня есть задача связанная с классификацией различных кожных заболеваний (преимущественно угри, пустулы и тому подобное). 1. Подойдет ли для таких целей YOLO или лучше использовать другую модель типо Resnet/VGG19(ты в других комментариях упоминал Resnet)? 2. Как я понимаю, могут быть такие частные случаи когда лицо человека не видно полностью, а только его части. Является ли в таком случае корректным использование "двухстадийного подхода" - обучение на поиск лиц людей, а затем уже классификация внутри данного бокса Если сможешь что то подсказать буду очень благодарен!
@Koldim2001
@Koldim2001 4 месяца назад
Спасибо большое очень приятно. По поводу вопросов: 1) Да я бы посоветовал использовать подходы с transfer learning resnet сети. Это довольно несложно на пацторче и керасе реализуется. 2)По поводу идеи с двухстадийным пайплайном, то совершенно верно. Берем любой детектор лиц (проще на самом деле готовый взять а не самим обучать так как задача распотраненная и 100% найдешь что-то ex: как минимум у midiapipe видал) и уже потом на найденном прямоугольнике делаешь ресайз и на вход обученного классификатора подавай 👍🏻
@andreylazoryak7593
@andreylazoryak7593 5 месяцев назад
спасибо, очень полезно
@bbbbbb9193
@bbbbbb9193 5 месяцев назад
Класс!!!! Спасибо!!
@Koldim2001
@Koldim2001 5 месяцев назад
😊
@Kate-rs7wt
@Kate-rs7wt 12 дней назад
@Koldim2001 Спасибо за отличный обучающий урок! Но возник вопрос, материал из которого делается train, val и test - составляет 1 исходное видео? Т.е. взято какое-то видео о птицах, например на полчаса и из него вырезаны куски на 10 минут для test, и оставшееся на трейн и val?
@Koldim2001
@Koldim2001 12 дней назад
Спасибо. Да все верно. Но это абстрактный пример. Само собой в вашем случае это будет более осознанная задача приуроченная к чему-то))
@Kate-rs7wt
@Kate-rs7wt 2 дня назад
@Koldim2001Дмитрий, а Вы можете сделать какой-нибудь пример с трекингом и подсчетом на основе YOLO? Думаю, будет очень интересно и полезно для всех неравнодушных к CV🙂
@Koldim2001
@Koldim2001 2 дня назад
Да уже заснял такое видео)). Можете посмотреть - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-u9EtqHz4Vqc.htmlsi=hdvJAIOvzYcHWcnw
@user-uw5gx7gy1q
@user-uw5gx7gy1q 5 месяцев назад
Отличое видео! Очень познавательно и что немаловажно - Детально расписан весь процесс обучения нейронки. P.S. Было бы интересно узнать больше о нейросетях, способных учитывать контекст времени.
@Koldim2001
@Koldim2001 5 месяцев назад
Спасибо большое ☺️
@reeezvanov
@reeezvanov 2 месяца назад
Здравствуйте! Спасибо за видео. Достаточно информативное для начинающих людей в нейросетях. Подскажите, с таким способом обучения сможет ли данная сеть определять птиц на других видео? Например, если силуэты будут такие же, а цвета, размеры другие? Спрашиваю, потому что хочу создать приложение, где нейросеть считает попадания и промахи баскетбольного мяча в кольцо с определённой позиции. Планирую обучить сеть по этому способу.
@Koldim2001
@Koldim2001 2 месяца назад
Да в идеале сможет. Сеть пытается понять общую логику того что есть птица и клюв. Но лучше специально при обучении набрать кадров с разных ракурсов с разными размерами птиц и прочим. То есть чем разнообразнее датасете тем лучше обобщающая возможностью нейронной сети
@sechokito
@sechokito 2 месяца назад
thank you from turkey
@sechokito
@sechokito 2 месяца назад
though one member makes no importance.
@Koldim2001
@Koldim2001 2 месяца назад
👍🏻 🇹🇷 good luck
@user-gv9tr2fq5k
@user-gv9tr2fq5k 4 месяца назад
Дмитрий, большое спасибо вам за уроки. Подскажите пожалуйста как я могу реализовать такой функционал: у меня есть изображение и обученная модель. На изображении несколько типов одинаковых объектов, как мне создать словарь, куда передать номер объекта и его координаты?
@Koldim2001
@Koldim2001 4 месяца назад
Попробуйте разобраться как выглядит выход при прогоне фотки через модель. Там можно будет вытянуть координаты боксов и там же и значения классов так что это надо на практике посмотреть results[0].boxes
@user-gv9tr2fq5k
@user-gv9tr2fq5k 4 месяца назад
@@Koldim2001 хорошо, сейчас попробую
@brooklynbaby6461
@brooklynbaby6461 2 месяца назад
Дмитрий, спасибо за видео! Хотел бы задать вопрос: скачал архив вашего проекта и запустил в VSCode, попытался обучить модель и, почему то, в качестве процессора он использует CPU, а не GPU. Никак не могу разобраться в чем дело. Вот что пишет: Ultralytics YOLOv8.1.40 🚀 Python-3.11.8 torch-2.2.2+cpu CPU (12th Gen Intel Core(TM) i5-12400F)
@Koldim2001
@Koldim2001 2 месяца назад
Так у вас torch с cpu стоит. Вам надо в новом отдельном окружении поставить сначала торч с поддержкой gpu и только потом ставить ультралитикс. Но и проверьте наличие CUDA на компе (если что установите)
@brooklynbaby6461
@brooklynbaby6461 2 месяца назад
@@Koldim2001 спасибо большое!
@ivan02081983s
@ivan02081983s 4 месяца назад
Дима, добрый день. Подскажи пожалуйста, в CVAT разметил 251 фото Train и Val 52 фото (6 классов) и при выгрузке пишет "Could not export dataset for the project 94349 Error: exporting project dataset with images is not available. Upgrade the account to extend the limits." не могу понять где я по лимиту упираюсь.
@Koldim2001
@Koldim2001 4 месяца назад
Используйте режим выгрузки без выбора «save images». Это особенность вэб версии сивата без использования докера. Потом просто руками добавите в выгруженный датасет фотографии из тасок по подобию как в видео показано и проблема решится
@davidnez2167
@davidnez2167 3 месяца назад
Видео классное, начинаю понимать, что нейросети не так уж и сложно (если не с нуля писать) Но для того, чтобы нормально запустить и настроить это ужас. То с Tenserflow были проблемы, теперь с докером, потом еще какая-то фигня вылезет.
@teodorchaly184
@teodorchaly184 6 месяцев назад
Интересное видео. Хотел узнать совет - если мне нужно найти точку середины лица на виде (в прямом эфиире) то как мне это лучше сделать? Я имею в виду - делать все через питон или через юоло? Какая разница между этими двумя способами?
@Koldim2001
@Koldim2001 6 месяцев назад
Yolo это вид нейронной сети. Она пишется на питоне. Питон это язык программирования а yolo это модель (так что это совершенно разные вещи) Для вашей задачи советую использовать немного другую нейросеть. У меня есть видео как раз по вашей задаче. В следующем комментарии приложу ссылку на видос по распознаванию точек тела
@Koldim2001
@Koldim2001 6 месяцев назад
Посмотрите это видео ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-RIiQeWJgjLw.htmlsi=ulj-WbxiHdpj0Dxz
@user-oc8js5gy1f
@user-oc8js5gy1f 3 месяца назад
Круто! Насколько это просто, слов нет. А что бы использовать подобную модель для видео с камеры в лайв режиме, какой мощности необходим компьютер? Возможен ли запуск и нормальная работа на одноплатниках типа разюери пи, например?
@Koldim2001
@Koldim2001 3 месяца назад
Спасибо)) Все зависит от размера модели. Модель n можно запустить хоть на разбери. По поводу конфигурации компа то тут лучше экспериментально проверить. То есть по очереди запусти предобусенные сети n s m l (то есть по возрастанию сложности) и как раз поймешь какое fps обработки
@Koldim2001
@Koldim2001 3 месяца назад
Если юзать видеокарту то тогда можно на m спокойно 30-35 fps выбивать. А на моделях n так вообще все 60. Если на cpu то скорость значительно падает. Так что на разбери стоит не более n юзать
@Koldim2001
@Koldim2001 3 месяца назад
Есть и одноплатные компы с достойными видеокартами (но строит дороговато): supereyes.ru/catalog/mikrokompyutery_nvidia_jetson/
@user-oc8js5gy1f
@user-oc8js5gy1f 3 месяца назад
Думаю меня 5 кадров в секунду вполне устроит. Что бы какие нибудь оповещения в телегу кидать при обнаружении нужного мне обьекта, например. Вообще шок, что особо и шарить ни в чем мне нужно. Датасет подготовил, кнопку нажал, а оно само все случилось😄
@Koldim2001
@Koldim2001 3 месяца назад
@@user-oc8js5gy1f да сейчас все лучше и лучше в сфера обучения нейронок. Компании типа Ultralytics (создатели yolo) сразу предоставляют готовый код в несколько строк чтобы под капотом делать сложнейшую математику
@TheAlexanderMinsk
@TheAlexanderMinsk 5 месяцев назад
Спасибо, интересно и полезно! А если надо натренировать сеть, что бы волосы различало (прически), куда советуете глянуть, искать уже размеченный дата-сет?
@Koldim2001
@Koldim2001 5 месяцев назад
Возможно существуют готовые размеченные датасеты людей с разными прическами. Я бы подошел к этой задаче следующим образом: берём готовую предобученную сеть по детекции лиц (голов людей) И просто обучаем классификатор на основе кропов. Так что обучить надо будет лишь resnet на примерах результатах детекции готовой сети. То есть каждой голове ставим класс той или иной прически. Таким образом нам детекцию можно не делать многоклассовой. Достаточно взять готовую модель если найдёте, либо обучить свою по нахождению одного класса - голова человека. А далее уже на основе результатов масштабировать под разное число классов причёски
@TheAlexanderMinsk
@TheAlexanderMinsk 5 месяцев назад
@@Koldim2001 Спасибо! буду пробовать, выбрал задачку для изучения темы: менять цвет прически на выбранный пользователем. Буду сражаться, спасибо за направление!
@Koldim2001
@Koldim2001 5 месяцев назад
@@TheAlexanderMinsk тут стоит подойти к задаче как к сегментации а не детекции. То есть необходимо разметить Dataset причесок (именно выделяя сам контур прически) а потом по полученным найденным контурам задавать цветовые эффекты. Нашли контур прически и далее меняете для всех пикселей контура hue параметр (то есть цветность в hsv представлении)
@Koldim2001
@Koldim2001 5 месяцев назад
@@TheAlexanderMinskдетекция нужна лишь когда цель обнаруживать или классифицировать объект прическа. Вам же надо менять прическу так что тут стоит другой подход юзать. Самый простой я как раз описал
@Koldim2001
@Koldim2001 5 месяцев назад
@@TheAlexanderMinsk habrastorage.org/getpro/habr/upload_files/d6d/2ef/0f8/d6d2ef0f87e6f27023ca244903bbdeb3.png вот эта фотка может даст более хорошее представление о том, что должна уметь делать ваша сетка - сегментировать волосы. Изучите архитектуру UNET для данной задачи. На фотке показаны названия готовых датасетов так что вам не надо ничего размечать самостоятельно. Достаточно найти тот, что нравится и скачать а далее обучить unet
@molven5336
@molven5336 6 месяцев назад
Здравствуйте, почему то backup файл из описания не загружается на сайт CVAT. Может быть дело в том, что я пользуюсь онлайн сервисом, а не локально на своем ПК?
@Koldim2001
@Koldim2001 6 месяцев назад
Да возможно. Я обычно использую локальное поднятие сервера в докере так что с вэб версией не работал. А какую он ошибок выдает если попробовать через сайт?
@novikovv
@novikovv 4 месяца назад
А может вы знаете кого-то из ваших коллег или вы сами, кто мог бы обсудить проект для гуманитарной сферы с распознаванием на основе данных. Я не уверен, что мы можем освоить программирование так, чтобы хорошо отработать с YOLO? Данные и задача не стандартная. Задача научного плана. Можно ли это обсудить в частном порядке?
@Koldim2001
@Koldim2001 4 месяца назад
Напишите в тг kolesnikov_dima
@valeogamer
@valeogamer 4 месяца назад
Урок очень классный! Спасибо❤ Не могли бы пожалуйста подсказать в чем ошибка или это норма: Попробовал повторить на своем датасете обучить через google colab, было два класса это левая правая рука, разметил через CVAT, несколько раз перепроверил, но по пути runs/detect/train/train-batch0.jpg(batch1.jpg, batch2.jpg) отметки классов в виде цифр 0 и 1 расположены ошибочно, то есть в моем случае левая сторона это 0 правая 1, а там рандомно, когда как, но все что заканчивается на -labels все нормально, то есть где вместо 0 и 1 написано левая и правая они расположены правильно, влияет ли на обучение и должно ли быть так?)
@Koldim2001
@Koldim2001 4 месяца назад
Скорее всего дело в аугментациях yolo. Он при обучении по-разному аугментрует данные в том числе для наращивания датасета делает случайное отображение. Так что советую изучить как отключить эту опцию при обучении (random vertical flip)
@Koldim2001
@Koldim2001 4 месяца назад
Правая и левая рука не всегда очевидное явление так как в зеркале например может произойти переворот рук. Вообще сказал бы что такая модель ненадежной будет скорее всего. Лучше иметь один класс - рука. Но если надо различать правую от левой то есть готовая модель от mediapipe. Посмотрите мое видео про обнаружение основных точек тела (я там там посередине видео примерно про руки показываю модели готовые)
@Koldim2001
@Koldim2001 4 месяца назад
Вот ссылку на то видео ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-RIiQeWJgjLw.htmlsi=8feG1aGR0R8YXpVS
@valeogamer
@valeogamer 4 месяца назад
@@Koldim2001 спасибо огромное!) Ждём ещё больше новых видосиков💥
@Koldim2001
@Koldim2001 4 месяца назад
@@valeogamer спасибо большое ☺️
@user-im1wq2bv8l
@user-im1wq2bv8l 5 месяцев назад
Доброго времени суток! А если у меня уже есть обученная модель на одном классе и я хочу добавить в эту модель еще несколько классов и до обучить ее, но не переобучать всю модель заново (то есть не использовать те изображения (датасет) которыми я обучал модель ранее , а до обучить ее на новых изображениях на которых будет выделены новые классы для распознавания ), что бы Н.С. распознавала и старый класс и новые добавленные, возможно ли это сделать?
@Koldim2001
@Koldim2001 5 месяцев назад
Если вы хотите добавить новые классы в сеть, то вам придётся заново обучать весь детектор а не только новые классы. Действительно, если вы будете стартовать обучение с предыдущих уже вами полученных весов, то это может положительно отразится на итоговом результате всего обучение
@Koldim2001
@Koldim2001 5 месяцев назад
Советую воспринимать логику примерно как человек обучается. Если вы изучаете новый предмет максимально досконально и никак не повторяете то, что изучали ранее, то ваши знания исчезают. Невозможно просто взять и изучить новую дисциплину, не забыв старые. Так что если вы хотите увеличить число классов или просто изменить их число, то надо переобучать сеть полностью. Но можно начинать такое обучение уже с весов предыдущего обучения и это повысит качество
@Koldim2001
@Koldim2001 5 месяцев назад
Логика использования предобученной сети - это как обучать не ребёнка, а сразу профессора на новую сферу деятельности. Шансов на успех больше если сеть уже до этого что-то умела
@user-im1wq2bv8l
@user-im1wq2bv8l 5 месяцев назад
@@Koldim2001 Большое спасибо вам за ответ!
@desy1d
@desy1d 3 месяца назад
Класный видос, можешь подсказать, когда запускаю docker он жрет много оперативы практически всю, когда ставлю ограничение начинает работать жесткий диск на 100% (хотя просто только docker запущен) в чем может быть проблема не знаешь?
@Koldim2001
@Koldim2001 3 месяца назад
Честно говоря не сверх большой спец по докерам. Удивительно что он вообще жрет диск так активно во время работы контейнера. Он там к диску обращается лишь в моменты подгрузки чего-то на сиват или сохранении разметки. Если комп не вывозит сиват в контейнере то можешь юзать готовый сайт сивата не требующий локальной установки www.cvat.ai. Но на нем есть траблы с выгрузкой изображений так что надо будет руками их добавить в нужную папку при формировании разметки
@desy1d
@desy1d 3 месяца назад
@@Koldim2001 да меня тоже удивляет, что в простое ест 8 гигов и диск куда-то 1гб использует
@Koldim2001
@Koldim2001 3 месяца назад
@@desy1d Неа если он весит 8гб это вполне окей. Это же контейнеры в которых собственная операционная система практически. Так что докеры сильно жрут память при установке. Но после работают особо не общаясь к дополнительной памяти
@davidnez2167
@davidnez2167 3 месяца назад
Полгаю, что диск начинает жраться, т.к. включается "Файл подкачки" для облегчения работы оперативной памяти
@zloyleva
@zloyleva 2 месяца назад
Привет. На каком железе запускал?
@Koldim2001
@Koldim2001 Месяц назад
Core i7, rtx 4090
@ivana88873
@ivana88873 4 месяца назад
Здравствуйте ! Делаю сейчас свой первый проект небольшой на yolov8 , правильно ли сделать два yaml files на тестовую и проверочную выборку ? и еще вопрос открывала файл run , там что его можно открыть и будут графики обучения ? в колабе его можно отрыть ?спасибо
@Koldim2001
@Koldim2001 4 месяца назад
Неа там один ямл файл нужен как в примере показано на видео. Просто укажите путь к нужным папкам в нем. Да все верно в runs будут результаты обучения и графики в колабе он тоже будет в директории появится где вы в текущий момент работаете
@ivana88873
@ivana88873 4 месяца назад
У меня почему-то получается текстовый файл без всяхих папок , как можно прописать путь ? А что yaml file бывает в папках и другой ? Еще Дима пожалуйста помогите мне , да папка runs после обучения отрывается , но как от туда выципить эти графики ? отрыть в колабе можно ? где точно там они ? спасибо вам большое @@Koldim2001
@Koldim2001
@Koldim2001 4 месяца назад
⁠​⁠​⁠@@ivana88873попробуйте тогда реализовать в vscode если с колабом не выходит. В папке runs после обучения можно будет найти подпапку в которой лежат все фотки с процесса обучения и тестирования + итоговые веса. В видосе моем показано где именно находятся они. Вам надо правильно сконфигурировать ultralitics settings.yaml чтобы yolo знало откуда брать фотки и лейблы для обучения тогда процесс запустится и как только все отработает увидите результат в папке runs. Вообщем, следуйте туториалу чтоб все получились 😎
@Pisew423
@Pisew423 Месяц назад
Можно ли самому подогнать требуемый йоло формат без этой программы из гит хаба, она у меня не запускается ни в какую. Просто перекинуть txt и png в отдельные папки?
@Pisew423
@Pisew423 Месяц назад
есть другой репозиторий может?
@Koldim2001
@Koldim2001 Месяц назад
Можете попробовать. Есть еще вариант выгрузить через coco формат из cvat и далее юзать конвертер этот: docs.ultralytics.com/ru/reference/data/converter/#ultralytics.data.converter.convert_coco Вот этот нужен ultralytics.data.converter.convert_coco
@t76480
@t76480 3 месяца назад
Мне необходимо распознавать номера машин. Есть комп с видеокартой. Подскажите какие нейросети можно использовать.
@Koldim2001
@Koldim2001 3 месяца назад
Тут нужно последовательно 2 сети использовать. Сначала детекциию самого номерного знака (тут как раз yolo подойдет). Далее этот вырезанный фрагмент найденного прямоугольника подается на любую OCR сеть. Тем самым вы распознаете текст внутри номера. Можно попробовать готовые сети типа keras-ocr, easy-ocr, tesseract. если качество будет плохим то надо будет свой OCR обучать
@liq8096
@liq8096 2 месяца назад
paddleocr хорошо номера распознает
@TheGoldArmada
@TheGoldArmada 5 месяцев назад
Приветствую, столкнулся с проблемой, запускаю контейнер, захожу на localhost, страница загружается но пишет ошибку "Cannot connect to the server Make sure the CVAT backend and all necessary services (Database, Redis and Open Policy Agent) are running and available. If you upgraded from version 2.2.0 or earlier, manual actions may be needed, see the Upgrade Guide"
@Koldim2001
@Koldim2001 5 месяцев назад
Это стоит посмотреть в документации CVAT или поискать отдельный туториал по его поднятию. Это проблема связана именно с бэкендом этого приложения. Так что чекни в инете
@_0261
@_0261 Месяц назад
Всем привет. Подскажите пожалуйста, можно ли тоже с помощью yolo создать нейросеть для обнаружения цефалометрических точек с рентген снимков?
@Koldim2001
@Koldim2001 Месяц назад
Думаю да хоть и не знаю что это такое) но если можно задачу переписать в парадигму нахождения чего-либо то точно yolo подойдет. Если что у них целый зоопарк моделей не только детекция есть. Так что можешь поизучать документацию ультралитикс
@_0261
@_0261 Месяц назад
@@Koldim2001 хорошо, спасибо 👍
@alexeyb.3167
@alexeyb.3167 26 дней назад
Большое спасибо, отличный урок! Буду благодарен, если подскажете, есть ли сейчас возможность дообучать (обучать итеративно) yolo модель? Да и не обязательно yolo. Кажется, это называется continual learning. Очень хочется обучать на новых пачках изображений, но не переучивая каждый раз с нуля. Допустим, я бы хотел взять другое видео с птицами, сделать из него датасет и дообучить сеть из этого видео, чтобы она лучше детектила птиц в разных условиях. И так много-много итераций для разных видео с разными птицами. Если постоянно переучивать с нуля, на новом, дополненном датасете, то время обучения в какой-то момент будет требовать как минимум серверных GPU, а это очень недешевое удовольствие. И даже с такими GPU будет долго :(
@Koldim2001
@Koldim2001 26 дней назад
Да можно. В данном примере на видео я тоже не с нуля обучал в взял стартовые веса с coco датасета. Так что на старте перед запуском model.train вам надо вгрузить имеющиеся веса и можно приступать к обучению
@alexeyb.3167
@alexeyb.3167 25 дней назад
@@Koldim2001 Похоже, я наступаю на catastrophic forgetting :( После какой-то итерации дообучения, плохо детектит на данных из первых итераций
@Koldim2001
@Koldim2001 25 дней назад
@@alexeyb.3167а в примерах есть все желаемые классы?
@alexeyb.3167
@alexeyb.3167 25 дней назад
​@@Koldim2001 Странно, сначала первый ответ не отображался, а теперь продублировался. У меня, в моей задаче, вообще single class. Он, просто, выглядеть может по разному. И было бы удобно собирать датасет частями, где каждый новый кусок датасета - с тем же классом, но который выглядит иначе, чем предыдущие. Уже отказался от этой идеи, но все равно интересно, реализуемо ли такое.
@Koldim2001
@Koldim2001 25 дней назад
@@alexeyb.3167да ты так можешь. В cvat просто добавляй новые таски и относи их на train или Val. В этом и суть тасок. Ты можешь последовательно увеличивать размер датасета и размечать постепенно
@TheGoldArmada
@TheGoldArmada 4 месяца назад
Приветствую, столкнулся с проблемой, разметил в CVAT около 1200 изображений, но в большинстве отмечал обьекты с помощью многоугольника (polygon), когда скачал датасет, в большинстве txt файлов пусто, информация о классе и координатах есть только там, где я выбирал обьекты прямоугольниками, подскажите можно как-то исправить?
@Koldim2001
@Koldim2001 4 месяца назад
Да надо именно прямоугольники чтобы они были строго под 90 градусов и параллельно осям x, y поэтому у вас и не получается выгрузить такой датасет. Используйте разметку прямоугольниками в сивате тогда получится
@Koldim2001
@Koldim2001 4 месяца назад
Полигоны нужны для размеры инстанс сегментации (можете посмотреть мой ролик по yolov8-seg) я как раз там показал пример использования полигональных разметок для обучения yolo - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-FF3mIWF0vFs.htmlsi=Iop0y3taYucLFQvE
@TheGoldArmada
@TheGoldArmada 4 месяца назад
​@@Koldim2001Спасибо, очень помогли!
@ZerGeming
@ZerGeming 3 месяца назад
Можно оптимизировать код чтобы fps у видио на выходе было больше?
@Koldim2001
@Koldim2001 3 месяца назад
Да ставьте ниже размер модели. То есть быстрее всего модель yolov8n. Так же ускорить поможет использование видеокарты. Надо тогда установить пайторч с поддержкой cuda
@user-th7jk1eb7s
@user-th7jk1eb7s 6 месяцев назад
Добрый день! Репетитором не хотите подработать?
@Koldim2001
@Koldim2001 6 месяцев назад
Напишите в лс телеграмм @kolesnikov_dima
@roockeet3460
@roockeet3460 6 месяцев назад
можете снять видео как сделать программу на python с использованием модели yolo которая в режиме реального времени будет распознавать изображение с экрана монитора
@Koldim2001
@Koldim2001 6 месяцев назад
Ты имеешь ввиду с вебкамеры? Обычно либо по видео любому обработка либо риалтайм с камеры
@roockeet3460
@roockeet3460 6 месяцев назад
нет, я имею ввиду нейронка будет в реал тайме распознавать что происходит на мониторе( например играешь в игру и нейронка видит там врагов, просто берет картинку с экрана монитора и ищет на ней объекты)просто не понятно как в коде обращаться к нейронке чтоб оно шло циклом и постояно анализировало что просиходит на экране@@Koldim2001
@Koldim2001
@Koldim2001 6 месяцев назад
@Red_Paper6495 да справляется. Можешь посмотреть видео SORT DEEPSORT трекинг на моем канале. Там я как раз показал как работать с риалтайм обработкой yolo
@dimam538
@dimam538 5 месяцев назад
Привет. Я так понял ты из бауманки, подскажи на каком факультете?
@Koldim2001
@Koldim2001 5 месяцев назад
Я на магистратуре БМТ1 - интеллектуальные биомедицинские системы (как раз искусственный интеллект в сфере медицины)
@dimam538
@dimam538 5 месяцев назад
Интересно​@@Koldim2001
@roockeet3460
@roockeet3460 6 месяцев назад
здраствуйте я ваш код чуть изменил для моих целей.сделал так чтоб скриншот передавался вместо кадров видео.frame = np.array(sct.grab(bounding_box)) results = model.track(frame, iou=0.4, conf=0.5, persist=True, imgsz=640, verbose=False, tracker="botsort.yaml"). почему не работает
@Koldim2001
@Koldim2001 6 месяцев назад
Не очень понимаю причём в данном случае трекинг если цель идёт просто обнаружить боксы на одном конкретном кадре. Попробуй заменить model.track на model.predict(frame)
@Koldim2001
@Koldim2001 6 месяцев назад
Можешь мне в тг написать подробнее разберем данный вопрос в беседе: @kolesnikov_dima
@fier1182
@fier1182 Месяц назад
Это всё на Pycharm можно сделать?
@Koldim2001
@Koldim2001 Месяц назад
Да любой IDE подойдет))
@XiLICe
@XiLICe 5 месяцев назад
Такой вопрос, вот мы обучили модель, я лично при обучении модели выбрал модель yolov8x, будет ли она распозновать то на чём она была обучена ранее. То есть модель yolov8x была обучена на датасете COCO. будет ли она распозновать то что было в COCO?
@Koldim2001
@Koldim2001 5 месяцев назад
Нет ты просто получишь веса обученной сети под новую твою задачу. Значение классов будет то что ты сам задал при обучении. Ты по сути взял за основу одну сеть а после обучения получаешь совершенно другую. Так что если при обучении не было класса человек то больше этого класса и не будет хотя в coco он имелся
@XiLICe
@XiLICe 5 месяцев назад
@@Koldim2001 а можно ли обучить уже готовую модель оставив в ней то что было?
@Koldim2001
@Koldim2001 5 месяцев назад
@@XiLICe честно говоря никогда с такой задачей не встречался. Обычно если надо юзать готовые классы из coco то просто стоит взять предобученную сеть и с ней работать
@elcolex777
@elcolex777 5 месяцев назад
@@Koldim2001в конфигурации тренировки встречал параметр resume. Может он для этого? И еще такая мысль - в датасете coco 80 классов, может новые классы при разметке задавать не с 0 а с 80? Например, клюв - 81. Я, кстати, посмотрел - bird есть в списке coco, он не 0.
@Koldim2001
@Koldim2001 5 месяцев назад
@@elcolex777 суть видео была в обучении собственной сети на основе архитекторы yolo. Так что классы и порядок задавал я сам. Эти ведь демонстративный пример. На практике можно делать любые классы и создавать свои датасеты. Необязательно брать готовые на подобии coco. В готовом даьасете само собой число классов заранее определено так и еще и порядок известен. Но чаще всего надо решать уникальные задачи, требующие своих классов и своих тренировочных примеров
@user-zy6ym6bj1v
@user-zy6ym6bj1v 11 дней назад
Как GPU использовать для обучения?
@Koldim2001
@Koldim2001 11 дней назад
Надо поставить PyTorch с поддержкой cuda. Так что установи cuda драйвера а потом ставь в окружение пайторч с указанием твоей cuda версии. При обучении gpu само подхватится если выполнены перечисленные условия
@user-vu8kn1ji5e
@user-vu8kn1ji5e Месяц назад
Добрый день Дмитрий, супер материал, все получилось, но после запуска программы видео воспроизводится намного медленнее по сравнению с оригиналом. Перебрал все параметры, не могу понять как изменить скорость воспроизведения видео. Буду признателен за ответ. Диплом почти готов!)))
@Koldim2001
@Koldim2001 Месяц назад
Это у тебя видюхи нет либо она слабая. Чем сильнее комп тем быстрее обработка
@user-vu8kn1ji5e
@user-vu8kn1ji5e Месяц назад
@@Koldim2001 Вообще видеокарта 1660 супер, не очень мощная, но тем не менее должно хватать. Но есть нюансы, почему-то я не могу ее подключить при обучении. Пытался сначала исправить проблему, но не удалось и сетку обучал на процессоре. Может при выводе тоже что-то некорректно работает? Может есть какой туториал с настройкой видеокарты для работы с нейронками? Или может проблема с ПО. Работаю в пайчарме
@Koldim2001
@Koldim2001 Месяц назад
@@user-vu8kn1ji5e ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-xTF_n1jp9n8.htmlsi=XzNFc4BZ_Wq179C_ это видео посмотри и как уставишь все что тут далее надо поставить торч с поддержкой cuda (смотри на официальном сайте пайторча) Только после этого ставь ультралитикс
@user-jd7zo6dg9d
@user-jd7zo6dg9d 3 месяца назад
Дмитрий, здравствуйте, подскажите пожалуйста, с чем может быть связана проблема. Форматирую исходные данные под формат YOLO с помощью репозитория вашего коллеги. У меня создаётся папка my_dataset_yolo, но всё содержимое этой папки: images, labels пусты.
@Koldim2001
@Koldim2001 3 месяца назад
Проверите то, что в вас исходные названия subset в сивате названы ровно так же как в видео. То есть должно быть все с большой буквы (Validation, Train) + проверьте наличие выгруженных фотографий после export dataset + если осталось проблемы в дебаг моде пройдите код и посмотрите где ошибка
@user-jd7zo6dg9d
@user-jd7zo6dg9d 3 месяца назад
@@Koldim2001, может быть ошибка связана с форматом изображений? У меня JPEG
@Koldim2001
@Koldim2001 3 месяца назад
@@user-jd7zo6dg9dдумаю нет. Вы докер версию используете или через онлайн на сайте?
@user-jd7zo6dg9d
@user-jd7zo6dg9d 3 месяца назад
@@Koldim2001 через сайт
@user-jd7zo6dg9d
@user-jd7zo6dg9d 3 месяца назад
@@Koldim2001 , через сайт
@pavel_nedoshivin
@pavel_nedoshivin 2 месяца назад
Столкнулся с проблемой RuntimeError: CUDA error: device-side assert triggered Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions. Может кто сталкивался?
@Koldim2001
@Koldim2001 2 месяца назад
Скорее всего проблема с торчом. Создай пустое окружение и заново поставь пайторч с поддержкой куды. Так же проверить стоит ли на компе вообще драйверы cuda. Если видеокарты нет, то не парься и просто юзай cpu версию
@pavel_nedoshivin
@pavel_nedoshivin 2 месяца назад
@@Koldim2001 Не как оказалось дело не в драйверах, и не в библиотеках. Я при подготовке датасета сделал 4 таски на обучение и 1 на валидацию, но так как разметка это очень нудное дело я разметил 2 таски на обучение и 1 на валидацию, а CVAT2YOLA налепила пустых записей и поэтому постоянно выскакивала ошибка неправильного индекса и то что описано выше ) в общем удалил, то что не размечено и все заработало. xD Спасибо!
@dvinyaninov
@dvinyaninov 2 месяца назад
Добрый день! А можно ли сделать через это систему распознавания домашних животных?
@Koldim2001
@Koldim2001 2 месяца назад
Да конечно
@dvinyaninov
@dvinyaninov 2 месяца назад
@@Koldim2001 как можно связяться и обсудить этот вопрос?
@Koldim2001
@Koldim2001 2 месяца назад
@@dvinyaninovда конечно. Вот тг kolesnikov_dima
@roockeet3460
@roockeet3460 6 месяцев назад
вообще материала по yolo очень мало на ру ютубе
@Koldim2001
@Koldim2001 6 месяцев назад
Советую глянуть мой видеоролик по трекингу (SORT & DeepSORT). Там как раз рассмотрено как работать с видеопотоком с камер при использовании yolo
@user-qp1ew9tq8o
@user-qp1ew9tq8o 2 месяца назад
подойдет ли для определения кариеса на ранних стадиях? у меня дипломная прост
@Koldim2001
@Koldim2001 2 месяца назад
Скорее всего да. Размечаете зубы с кариесом, обучаете и просите по итогу сетку задатектиррвать на фотке зубы на которых есть кариес
@user-qp1ew9tq8o
@user-qp1ew9tq8o 2 месяца назад
@@Koldim2001 будет гайд?
@Koldim2001
@Koldim2001 2 месяца назад
Ну так вот это видео и есть общий гайд. Можешь еще про yolov8-seg посмотреть на моем канале и по аналогии размечать область кариеса и обучай
@A_lot_A_lot_A_lot
@A_lot_A_lot_A_lot 3 месяца назад
Я скомпелировал python файл в exe запустил и он долго грузится после чего пишет Failed to execute script 'CarDetecter" due to unhandled exception! можно ли избезать этой ошибки? И кокой у вас процессор
@Koldim2001
@Koldim2001 3 месяца назад
Думаю проблема в окружении. Установите пустое окружение и поставьте туда Ultralytics библиотеку. Честно говоря не шарю что такой за скрипт кар детектор. Мб в нем ошибка где-то. Если запускаете сой код то там вроде траблов нет раз никто не жаловался из людей кто запускал его
@Koldim2001
@Koldim2001 3 месяца назад
У меня комп мощный i9 процессор но и на слабом железе норм работать должно
@A_lot_A_lot_A_lot
@A_lot_A_lot_A_lot 3 месяца назад
@@Koldim2001 Не должно у меня AMD Ryzen 5 3500U(видюша встроенная) 8гб оператива и CDD. Yolov8n обучается с датасета из 600 фото 720р 10 часов. А после обработки видио с 60fps 240p его fps падает ло 1
@Koldim2001
@Koldim2001 3 месяца назад
@@A_lot_A_lot_A_lot без видюхи нейронки всегда медленно работают. Твоя вюдюха не поддерживается просто. Нужна лишь NVIDIA. Так что снижай размер модели до yolov8n и тогда мб будет быстрее отработка. Но без видюхи все равно выше 25 fps не выжмешь
@cyber-chip3105
@cyber-chip3105 6 месяцев назад
Здравствуйте. Комп какие параметры обязательны?
@Koldim2001
@Koldim2001 6 месяцев назад
Не совсем понял вопрос
@cyber-chip3105
@cyber-chip3105 6 месяцев назад
Можешь сказать какой мощности нужен комп и нужно ли устанавливать зависимости в консоле WSL, у меня идут ошибки @@Koldim2001
@cyber-chip3105
@cyber-chip3105 6 месяцев назад
[2023-12-06 08:07:47,406] WARNING root: Failed to import module 'datumaro.plugins.tf_detection_api_format.extractor': The TensorFlow library was compiled to use AVX instructions, but these aren't available on your machine. Traceback (most recent call last): File "/home/django/manage.py", line 20, in execute_from_command_line(sys.argv) File "/opt/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line utility.execute() File "/opt/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 436, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/opt/venv/lib/python3.10/site-packages/django/core/management/base.py", line 412, in run_from_argv self.execute(*args, **cmd_options) File "/opt/venv/lib/python3.10/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 88, in execute return super().execute(*args, **options) File "/opt/venv/lib/python3.10/site-packages/django/core/management/base.py", line 457, in execute self.check_migrations() File "/opt/venv/lib/python3.10/site-packages/django/core/management/base.py", line 574, in check_migrations executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) File "/opt/venv/lib/python3.10/site-packages/django/db/migrations/executor.py", line 18, in __init__ self.loader = MigrationLoader(self.connection) File "/opt/venv/lib/python3.10/site-packages/django/db/migrations/loader.py", line 58, in __init__ self.build_graph() File "/opt/venv/lib/python3.10/site-packages/django/db/migrations/loader.py", line 235, in build_graph self.applied_migrations = recorder.applied_migrations() File "/opt/venv/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 81, in applied_migrations if self.has_table(): File "/opt/venv/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 57, in has_table with self.connection.cursor() as cursor: File "/opt/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/opt/venv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 330, in cursor return self._cursor() File "/opt/venv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 306, in _cursor self.ensure_connection() File "/opt/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/opt/venv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection self.connect() File "/opt/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner return func(*args, **kwargs) File "/opt/venv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 272, in connect self.init_connection_state() File "/opt/venv/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 309, in init_connection_state super().init_connection_state() File "/opt/venv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 239, in init_connection_state self.check_database_version_supported() File "/opt/venv/lib/python3.10/site-packages/django/db/backends/base/base.py", line 214, in check_database_version_supported raise NotSupportedError( django.db.utils.NotSupportedError: PostgreSQL 12 or later is required (found 10.23).@@Koldim2001
@Koldim2001
@Koldim2001 6 месяцев назад
Можешь глянуть туториалы на ютубе по установке wsl и докера. По поводу точных требований к компу не смогу подсказать. Мой комп довольно мощный так что не пробовал на слабых. Если не выйдет то просто используй в своих задачах вэб версию CVAT и не ставь локально её на комп: app.cvat.ai/auth/login
@cyber-chip3105
@cyber-chip3105 6 месяцев назад
спасибо!@@Koldim2001
@redguard6886
@redguard6886 19 дней назад
Здравствуйте! Очень полезный материал! Но у меня возникла ошибка нехватки памяти, можете подсказать к ее решить в данном случае ? OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB. GPU 0 has a total capacity of 12.00 GiB of which 6.24 GiB is free. Of the allocated memory 3.67 GiB is allocated by PyTorch, and 88.49 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management
@Koldim2001
@Koldim2001 19 дней назад
Ставьте меньше размер батча при обучении. Перезапустите kernel и установи параметр batch=4 либо 2. Скорее всего видюха слабая
@redguard6886
@redguard6886 18 дней назад
Спасибо, возьму на заметку, но проблему решил уменьшив image size до 320
@redguard6886
@redguard6886 18 дней назад
Не могли бы чуть подробнее рассказать, как менять параметр batch. Не совсем понимаю, где его редактировать.
@Koldim2001
@Koldim2001 18 дней назад
@@redguard6886там же где вы и размер поменяли. Там много разных параметров обучения можно указать в инете можете поискать документацию
@redguard6886
@redguard6886 18 дней назад
Спасибо!
@novikovv
@novikovv 4 месяца назад
Здравствуйте, для совсем чайника, если можно. По CVAT: 1. Можно ли распознавать просто в браузере в CVAT или это не правильно? 2. Зачем необходимо делать третью папку с validation и по какому принципу нужно туда отбирать фотографии? 3. Необходимо ли иметь всегда пустые изображения без распознаваемых объектов? 4. Есть ли жесткие требования по изображениям (не более 640 пикселей и png)? 5. Я правильно понял, что тасками (train) я могу поэтапно добавлять изображения для распознавания? По YOLO: какой набор программ необходимо иметь для работы на стационарном компьютере, чтобы запустить YOLO?
@Koldim2001
@Koldim2001 4 месяца назад
1) Да можете использовать версию браузерную просто будет немного ограничен функционал (например нельзя будет выгрузить изображения при экспорте датасета) и если у вас данные (изображения) являются NDA, то не стоят их на общедоступные сайты заливать только локально через докер советую
@Koldim2001
@Koldim2001 4 месяца назад
2) Я просто пример показал что можно создавать много отдельных тасок под валидацию и трейн. То есть вы можете постепенно наращивать датасет просто добавляя все новые и новые таски и определяя их вручную на трейн или валидацию. Так что в данном случае это я просто как пример показал что можно разбить фотки трейна на 2 отдельные таски сивата и последовательно разметить 3) Необязательно, так как аугментации у yolo достаточно хороши, но все же не помешает парочку фоток добавить просто чтобы сеть понимала что порой объектов может вовсе не быть.
@Koldim2001
@Koldim2001 4 месяца назад
4) Жестких требований нет так как при обучении сети производится ресайз и это как раз один из параметров обучения. Ты сам задаешь размер в который все фотки переводятся при обучении 5) На это я в подпункте 2 считай что ответил (можно так и трейн и валидацию наращивать постепенно) 6) yolo это библиотека на питоне под названием ultralitics так что логично что нужно иметь питон и поставить через pip ultralytics и еще требуется отдельно pytorch
@novikovv
@novikovv 4 месяца назад
@@Koldim2001 То есть, если я готовлю датасет я могу просто использовать набор тасков с train и без папки валидация?
@Koldim2001
@Koldim2001 4 месяца назад
@@novikovvну да можно и без валидации но тогда есть шанс переобучения сети. Лучше все же контролировать процесс имея валидационный набор
@racsafob4646
@racsafob4646 4 месяца назад
Здравствуйте, возникла проблемка на этапе использования CVAT2YOLO. все делал как на видео, таски разделены на validation и train. Конечный результат должен быть в папках test, train, val, но все они пустые. Пробовал и автосплит и мануал, все равно пустые папки.
@Koldim2001
@Koldim2001 4 месяца назад
Проверите что у вас исходно датасет выглядит именно так как у меня на видео. То есть структура исходного датасета должна быть строго такой. Сам код конвертатора писал не я, так что если считаете что проблема не на вашей стороне а именно в коде того разработчика, то можете написать issue под тем гит репозиторием. Но я предполагаю, что все же либо не совсем правильно установлено это расширение либо что-то все же отличается от пайплана на моем видео так как у остальных зрителей получилось конвертнуть
@Koldim2001
@Koldim2001 4 месяца назад
pip install PyYAML==6.0 требуется для работы этого репозитория и еще мб вы не выгрузили изображения. Они должны быть в той же папке что и разметка из CVAT так что надо чтоб стоял триггер save images или в противном случае руками положить эту папку с фотками в нужное место
@racsafob4646
@racsafob4646 4 месяца назад
Pyyaml установлен, изображения я тоже сохранил, всё файлы хранятся в таком же виде как у вас, тоесть изображение и текстовый файл с тем же названием. Скрипт запускал и через командную строку и вручную через редактор кода даже. Ошибок не выводит. Подскажите, через исходный датасет от сват можно ли тоже обучить сеть, или результат будет намного хуже или вообще не будет?
@Koldim2001
@Koldim2001 4 месяца назад
@@racsafob4646 можешь попробовать обучить но вроде там формат который yolo не пережует и выкинет ошибки
@Koldim2001
@Koldim2001 4 месяца назад
Проверь правильность регистра в именах папок. Должно быть с большой буквы как в примере Train Validation. Это как гипотеза
@davidsahakyan1385
@davidsahakyan1385 19 часов назад
У меня курсовая работа понять по короткой видел был ли гол (реальный футбольний матч, где отрывок удара игрокаб надо понять попал ли мяч в ворота), я сначала решил находить где ворота и где мяч, потом только идти дальше Я обработал около 2000 фоток где были и ворота и мяч, точноть модели в конце обучения показывает 50%, но модель почти не распознает мяч, и очень редко ворота Фотки с видео брал с разных ракурсов разных качеств, и отмечал объекты через прямоугольник, в какую сторону мне лучше копать ?
@Koldim2001
@Koldim2001 18 часов назад
Возможно стоит поискать более похожие изображения на реальные кейсы на каковых будешь тестироваться - то есть кадры из трансляций матчей и далее их добавить в трейн датасет. Но я бы посоветовал сначала поиграться с порогом по conf возможно если ты снизишь его ближе к 5% будет лучше работать распознавание
@davidsahakyan1385
@davidsahakyan1385 18 часов назад
@@Koldim2001 Правильно ли я тебя понял, что мне надо побольше датасет ? И еще, я не понял почему, но у меня папка test пустая, а Train Val нет, делил по AutoSplit-у, и кстати, conf у меня 0,5 стоит ((
@Koldim2001
@Koldim2001 18 часов назад
@@davidsahakyan1385 ну так все верно там рандомайзер генерит трейн и вал. Тест по желаю можно делать можно нет
@Koldim2001
@Koldim2001 10 часов назад
@@davidsahakyan1385да поставь на инференсе ниже конфиденс чаще находить объекты будет. Если хочешь тестовую выборку то тогда делай руками сабсет в cvat под названием тест. Но честно советую забить в нем смысла нет Val вполне достаточно
@polyglot9118
@polyglot9118 6 месяцев назад
Здравствуйте! Может ли YOLO различать птиц по цвету и размеру?
@Koldim2001
@Koldim2001 6 месяцев назад
Да конечно но тогда надо делать отдельные классы под каждый тип цвета. То есть обучать не просто как общий класс птица, а например как класс красная или например черная птица. Тем самым нейронная сеть подстроится так, чтобы различать это как два разных объекта. По поводу размера, то проще всего судить по размерам получаемого бокса. Например мы получили красную птицу и размер бокса столько-то пикселей. Зная высоту и ширину, можно просто по порогам самостоятельно определённым судить о том большой объект перед нами или маленький
@Koldim2001
@Koldim2001 6 месяцев назад
Ещё одним из популярных решений чтобы не создавать дополнительные классы - использовать двухстадийный поход. То есть сеть йола находит саму птицу а далее полученный бокс кропается и по этому вырезанному изображению осуществляется CNN классификация (например resnet подойдет как архитектура). Ex: Таким образом примерно работает алгоритм по распознаванию лиц. То есть детектор находит лицо. Далее уже специфическая сеть по конкретному лицу получает дальнейший результат что за человек перед нами
@AgentSE
@AgentSE 5 месяцев назад
Закинь 10 тысяч фотографий, раздели на классы (воробей, ворона, попугай и т.д. ) и все будет ок. Вот у меня другой вопрос. Потянет ли йола распознание характерного паттерна курса котировок, чтобы распознать разворот тренда. Или надо через входящие данные цифровые обрабатывать?
@Koldim2001
@Koldim2001 5 месяцев назад
@@AgentSEя бы посоветовал использовать специфические сети под задачи анализа временных рядов. Изучите LSTM. Обычно его для таких задач используют
@AgentSE
@AgentSE 5 месяцев назад
@@Koldim2001 большое спасибо!
@user-in7bs4op9q
@user-in7bs4op9q 5 месяцев назад
Очень хороший полный разбор. Хотел бы увидеть подобную реализацию по распознаванию действий (YOWO) - последних версий (сечас вроде это YOWOv2)
@Koldim2001
@Koldim2001 5 месяцев назад
Спасибо большое. К сожалению, в ближайшее время не планирую реализовывать обучения подобной архитектуры. В репозитории гитхаба по Yowov2 вполне неплохое описание + уверен есть на англоязычном ютубе похожие обзоры. Советую поискать))
@user-in7bs4op9q
@user-in7bs4op9q 5 месяцев назад
@@Koldim2001 Сейчас этим и занимаюсь :) (не хватает понимания как это все устроено изнутри - увидеть бы построчное описание всего кода )) Так или иначе - удачи тебе :)
@user-em2jy1yc5o
@user-em2jy1yc5o 4 месяца назад
Дмитрий, спасибо за урок. Но у меня возникла ошибка с вашим кодом: Model summary (fused): 218 layers, 25840918 parameters, 0 gradients, 78.7 GFLOPs Traceback (most recent call last): File "C:\Users\andre\OneDrive\Документы\python_Project\LessonsYoloV8\E1\2.py", line 105, in process_video_with_tracking(model, "C:/Users/andre/OneDrive/Документы/python_Project/LessonsYoloV8/E1/z2.mp4", show_video=True, save_video=False, output_video_path="output_video.mp4") File "C:\Users\andre\OneDrive\Документы\python_Project\LessonsYoloV8\E1\2.py", line 89, in process_video_with_tracking cv2.imshow("frame", frame) File "C:\Users\andre\AppData\Local\Programs\Python\Python311\Lib\site-packages\ultralytics\utils\patches.py", line 56, in imshow _imshow(winname.encode("unicode_escape").decode(), mat) cv2.error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage' Не подскажите в чем причина? Не могу разобраться...( Код полностью скопировал с вашего проекта, botsort добавил, импорты проверил
@Koldim2001
@Koldim2001 4 месяца назад
Причина связана с ошибкой библиотеки cv2. Так что сделайте pip uninstall opencv-python и заново его поставьте. Так же поможет создать отдельное окружение новое и в него поставить библиотеки заново. Видимо есть какие-то ошибки в текущем окружении
@user-em2jy1yc5o
@user-em2jy1yc5o 4 месяца назад
Помогло, спасибо@@Koldim2001
@Koldim2001
@Koldim2001 4 месяца назад
@@user-em2jy1yc5oрад помочь)
@user-or6tb7tb2q
@user-or6tb7tb2q 2 месяца назад
Дмитрий, видео файл test.mp4 из вашего архива "YOLOv8 детекция собственная.zip" не извлекается, выходит сообщение о повреждении. Остальные файлы, которые понадобились извлеклись нормально. Но кому надо, можно и с Ютуба взять, оно там под названием "Cat TV 4K : Birds for Cats Bedlam" ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-lGAtx4VfOKA.html
@Koldim2001
@Koldim2001 2 месяца назад
Ох да возможно с видосом проблема. Но главное что код вам доступен. Тут скорее цель понять как работать с кодом чтобы свою задачу реализовать, нежели конкретно этот пример запустить)
@user-ps5vt5hd5l
@user-ps5vt5hd5l 4 месяца назад
Я столкнулся с проблемой.... Что он не видит путь в файле к .yaml убил 3 часа пока тебя не нашёл.... СПАСИБО ТЕБЕ ОГРОМНОЕ
@Koldim2001
@Koldim2001 3 месяца назад
Очень рад что смог тебе помочь 😊
@valerii7104
@valerii7104 4 месяца назад
А можно это реализовать через Google Colab?
@Koldim2001
@Koldim2001 4 месяца назад
Да конечно просто перенесите ноутбук в эту среду и можете спокойно работать
@Koldim2001
@Koldim2001 4 месяца назад
По поводу вашего прошлого вопроса про anaconda. То требуется установить это приложение на комп и прописать пусть к этому файлу в PATH вашего компьютера. Тогда команда conda станет доступна и можно будет перейти в окружение. Еще есть альтернативный вариант использовать venv для создания окружений
@valerii7104
@valerii7104 4 месяца назад
@@Koldim2001 я разобралась с этим так как там квадрелион терминалов и нужно было от анакоды запустить так как эти башовские не пропускают. Но я забил болт на pytorch та как там версия пайтона 3.8 нужна а я и так целый день учился по вашему примеру. Так что нервов не хватило. P.S думая на Colab это делать не требует дополнительных установок
@Koldim2001
@Koldim2001 4 месяца назад
@@valerii7104там поддерживается питон любой
@roockeet3460
@roockeet3460 6 месяцев назад
я нигде не нашел ничего похожего на ютубе
@fier1182
@fier1182 Месяц назад
у меня conda activate work не работает
@Koldim2001
@Koldim2001 Месяц назад
Значит вы либо не установили саму анаконду, либо не создали внутри анаконды окружение с именем work, либо не прописали conda в переменные окружения на винде. Если вам анаконда не знакома, то используйте питон по умолчанию который вы поставили нативно на компьютер. Либо посмотрите туториалы про то как в питоне работать с виртуальными окружениями
@davidnez2167
@davidnez2167 3 месяца назад
Ага, мой комментарий удалился я не могу использовать докер, потому что любое действие в нем, требует подключения к сайту докера))) а он у меня даже не пингутеся)) почему все им пользуются, когда он так не надежен? а офлайн докер можно использовать?)))
@davidnez2167
@davidnez2167 3 месяца назад
С докером, как я понял, проблема моей сети, дальше не шарю
@Koldim2001
@Koldim2001 3 месяца назад
Да докер работает локально а пингует докерхаб он в те моменты, когда ты скачиваешь готовые докер образы с докерхаба (сиват как раз хостится там вместе со всеми сторонними микросервисами типа баз данных и прочего от чего зависит компоуз сивата). Стоит ему разок скачать далее инет нет нужен будет
@artemnazarenko7847
@artemnazarenko7847 4 месяца назад
Вроде все делал по видео, но видно где-то ошибся и обучение не происходит, первая эпоха не двигается, а потом просто кончается память, пытался на разных машинах, результат один и тот же, ошибок вроде как никаких не выскакивает при этом.
@Koldim2001
@Koldim2001 4 месяца назад
Снизить стоит размер батча или размер входного изображения чтоб вместилось обучение на gpu или cpu
@artemnazarenko7847
@artemnazarenko7847 4 месяца назад
@@Koldim2001 вроде помогло, но теперь пишет, что "No labels found in" директория где лежат лэйблы для тренировочных изображений, он еще в пути почему-то прописывает ...\train\task_1 может тут ошибка
@Koldim2001
@Koldim2001 4 месяца назад
@@artemnazarenko7847 проверь формат датасета чтоб он был прям как на видео по текстуре
@artemnazarenko7847
@artemnazarenko7847 4 месяца назад
@@Koldim2001 Ура, спасибо вам, я случайно оставил папки task_1 и 2 и он путаться начал
@Koldim2001
@Koldim2001 4 месяца назад
@@artemnazarenko7847 рад помочь)) удачи 👍🏻
@Oldman4051
@Oldman4051 Месяц назад
Вот такие ошибки из-за чего могут быть и как их устранить? Ultralytics YOLOv8.2.10 Python-3.11.9 torch-2.3.0+cu121 CUDA:0 (NVIDIA GeForce RTX 4060 Ti, 16379MiB) engine\trainer: task=detect, mode=train, model=yolov8m.pt, data=my_dataset_yolo/data.yaml, epochs=100, time=None, patience=100, batch=16, imgsz=640, save=True, save_period=-1, cache=False, device=None, workers=8, project=None, name=train, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=None, multi_scale=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, bgr=0.0, mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=runs\detect\train Overriding model.yaml nc=80 with nc=2 from n params module arguments 0 -1 1 1392 ultralytics.nn.modules.conv.Conv [3, 48, 3, 2] 1 -1 1 41664 ultralytics.nn.modules.conv.Conv [48, 96, 3, 2] 2 -1 2 111360 ultralytics.nn.modules.block.C2f [96, 96, 2, True] 3 -1 1 166272 ultralytics.nn.modules.conv.Conv [96, 192, 3, 2] 4 -1 4 813312 ultralytics.nn.modules.block.C2f [192, 192, 4, True] 5 -1 1 664320 ultralytics.nn.modules.conv.Conv [192, 384, 3, 2] 6 -1 4 3248640 ultralytics.nn.modules.block.C2f [384, 384, 4, True] 7 -1 1 1991808 ultralytics.nn.modules.conv.Conv [384, 576, 3, 2] 8 -1 2 3985920 ultralytics.nn.modules.block.C2f [576, 576, 2, True] 9 -1 1 831168 ultralytics.nn.modules.block.SPPF [576, 576, 5] 10 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 11 [-1, 6] 1 0 ultralytics.nn.modules.conv.Concat [1] 12 -1 2 1993728 ultralytics.nn.modules.block.C2f [960, 384, 2] 13 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 14 [-1, 4] 1 0 ultralytics.nn.modules.conv.Concat [1] 15 -1 2 517632 ultralytics.nn.modules.block.C2f [576, 192, 2] 16 -1 1 332160 ultralytics.nn.modules.conv.Conv [192, 192, 3, 2] 17 [-1, 12] 1 0 ultralytics.nn.modules.conv.Concat [1] 18 -1 2 1846272 ultralytics.nn.modules.block.C2f [576, 384, 2] ... Transferred 469/475 items from pretrained weights Freezing layer 'model.22.dfl.conv.weight' AMP: running Automatic Mixed Precision (AMP) checks with YOLOv8n... Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings... --------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) Cell In[1], line 7 4 model = YOLO('yolov8m.pt') # load a pretrained model (recommended for training) 6 # Train the model ----> 7 results = model.train(data='my_dataset_yolo/data.yaml', epochs=100, imgsz=640, model='yolov8m.pt') File c:\WORKS\anaconda3\envs\WORK\Lib\site-packages\ultralytics\engine\model.py:673, in Model.train(self, trainer, **kwargs) 670 pass 672 self.trainer.hub_session = self.session # attach optional HUB session --> 673 self.trainer.train() 674 # Update model and cfg after training 675 if RANK in {-1, 0}: File c:\WORKS\anaconda3\envs\WORK\Lib\site-packages\ultralytics\engine\trainer.py:199, in BaseTrainer.train(self) 196 ddp_cleanup(self, str(file)) 198 else: --> 199 self._do_train(world_size) File c:\WORKS\anaconda3\envs\WORK\Lib\site-packages\ultralytics\engine\trainer.py:313, in BaseTrainer._do_train(self, world_size) 311 if world_size > 1: 312 self._setup_ddp(world_size) --> 313 self._setup_train(world_size) 315 nb = len(self.train_loader) # number of batches 316 nw = max(round(self.args.warmup_epochs * nb), 100) if self.args.warmup_epochs > 0 else -1 # warmup iterations ... PythonTLSSnapshot: registered at ..\aten\src\ATen\core\PythonFallbackKernel.cpp:162 [backend fallback] FuncTorchDynamicLayerFrontMode: registered at ..\aten\src\ATen\functorch\DynamicLayer.cpp:493 [backend fallback] PreDispatch: registered at ..\aten\src\ATen\core\PythonFallbackKernel.cpp:166 [backend fallback] PythonDispatcher: registered at ..\aten\src\ATen\core\PythonFallbackKernel.cpp:158 [backend fallback] Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
@Koldim2001
@Koldim2001 Месяц назад
Хех чисто по коду ошибки сказать не могу спроси у gpt. Что-то на c++ либы жалуется попробуй чистое окружение сделать и библиотеки заново поставить
@fier1182
@fier1182 Месяц назад
а как узнать пароль от shh ключа?
@Koldim2001
@Koldim2001 Месяц назад
Ты же его сам создавал (если вообще создавал) при подключении к github. Если тебе это не знакомо, то выгрузи код с гита архивом вместо того, чтобы командой в терминале это делать
@fier1182
@fier1182 Месяц назад
@@Koldim2001 пасиба
@fier1182
@fier1182 Месяц назад
@@Koldim2001 у меня когда датасет конвертирую на yolo с cv то только одна полоска заполняется, а в папках Val,train ничего нету. Я тупой, объясните пожалуйста
@Koldim2001
@Koldim2001 Месяц назад
@@fier1182 а вы разметили train и val выборки перед тем как выгружать? Сделали все прямо по туториалу?
@fier1182
@fier1182 Месяц назад
@@Koldim2001 я домой приеду напишу, я сейчас не дома просто
@user-bd5wh2nz4c
@user-bd5wh2nz4c Месяц назад
Добрый день Спасибо большое за подробное объяснение. При запуске своей модели столкнулся с данной ошибкой: AttributeError Cell In[3], line 70 68 model = YOLO('runs/tasks/train6/weights/best.pt') 69 model.fuse() ---> 70 process_video_with_tracking(model,"test_2.mp4", show_video=True, save_video=False, output_video_path="output_video.mp4") Cell In[3], line 28 25 break 26 results = model.track(frame, iou=0.4, conf=0.5, persist=True, imgsz=640, verbose=False, tracker="botsort.yaml") ---> 28 if results[0].boxes.id != None: # this will ensure that id is not None -> exist tracks 29 boxes = results[0].boxes.xyxy.cpu().numpy().astype(int) 30 ids = results[0].boxes.id.cpu().numpy().astype(int) AttributeError: 'NoneType' object has no attribute 'id'
@Koldim2001
@Koldim2001 Месяц назад
Честно говоря ошибок не ваша так как объект boxes должен присутствовать а не быть none type если у вас модель подружилась и кадры передалось в нее. Посмотрите по документации по их примерам проверите что у вас все работает что в примере: docs.ultralytics.com/ru/modes/track/#persisting-tracks-loop Если не работает даже это, то возможно версия текущая у библиотеки ultralytics не оч и стоит откатиться на чуть более старую
@user-bd5wh2nz4c
@user-bd5wh2nz4c Месяц назад
@@Koldim2001 Спасибо! Взял за основу код из примера. Для моей задачи более чем достаточно.
@ryozo2636
@ryozo2636 2 месяца назад
Видео интересное, но много воды и автор заранее не продумал структуру.
@Koldim2001
@Koldim2001 2 месяца назад
Спасибо за фидбэк. В новых видео стараюсь заранее продумывать структуру. Это видео действительно снималось экспромтом
@ashimov1970
@ashimov1970 3 месяца назад
Roboflow тоже вроде инструмент разметки, не хуже Cvat, разве нет?
@Koldim2001
@Koldim2001 3 месяца назад
Да но он платный. Бесплатно он позволяет ограниченное число фоток разметить
@costablanca4727
@costablanca4727 2 месяца назад
Неудивительно что программисты зарабатывают много.Такую кашу в голове варить
@Koldim2001
@Koldim2001 2 месяца назад
Аххаха да это еще не много)) yolo это практически самое просто что есть в компьютерном зрении 😂
@user-np8nj6me7v
@user-np8nj6me7v 10 дней назад
как же противно видеть крутые технологии в виде костылей для винды. фу
@Koldim2001
@Koldim2001 10 дней назад
Хех что имеется ввиду?)
@darkness21ru
@darkness21ru 11 дней назад
Здравствуйте, подскажите пожалуйста, делаю дипломную работу с помощью вашего урока, на моменте запуска train_yolo.ipunb (38:38) выдаёт ошибку OSError: [WinError 126] Не найден указанный модуль. Error loading "C:\Users\Darkness\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\torch\lib\shm.dll" or one of its dependencies. Причем shm.dll в этой папке есть, и папка указана в PATH. Я сам очень далёк от программирования, кучу раз переустанавливал torch по советам в интернете,устанавливал библиотеки и прочее, ничего не помогает. Подскажите пожалуйста
@darkness21ru
@darkness21ru 11 дней назад
А ещё я только сейчас понял, что должны использоваться cuda, а у меня видеокарта amd radeon rx 480, может ли быть причина в этом?
@Koldim2001
@Koldim2001 11 дней назад
Не работай в главном окружении создай venv или conda окружение. У тебя конфликты библиотек возникают так как скорее всего уже очень много всего лишнего стоит в питоне. Сделай пустой питон и только пайторч и ультралитикс поставь тогда точно все заработает
@Koldim2001
@Koldim2001 11 дней назад
Если нет cuda то ставь пайторч cpu версию чтобы точно все было ок
@darkness21ru
@darkness21ru 11 дней назад
@@Koldim2001 я устанавливал изначально через Conda чтоб было как на видео, но всё равно вадало эту ошибку, и да я видимо накачал очень много лишнего, но теперь не понимаю как всё это почистить
@Koldim2001
@Koldim2001 11 дней назад
@@darkness21ru если вы делаете пустое окружение то у вас в нем ничего не будет лишнего. Изучите как venv окружение создать так проще всего будет
Далее
Best ASMR 😳
00:26
Просмотров 16 тыс.
YOLOv5 training with custom data
20:29
Просмотров 406 тыс.
RA3AAE: "Как передаётся энергия".
37:42
Best ASMR 😳
00:26
Просмотров 16 тыс.