Instructions to use ReNothingg/drone-studio with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use ReNothingg/drone-studio with ultralytics:
from huggingface_hub import hf_hub_download from ultralytics import YOLO # pick the weights file from this repo's "Files and versions" tab weights = hf_hub_download("ReNothingg/drone-studio", "<weights>.pt") model = YOLO(weights) source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
Ястраб: детектор дронов с наземной камеры
Это модели из моей исследовательской работы «Автономный перехватчик БПЛА». Камера смотрит в небо, модель находит на кадре квадрокоптер, трекер его ведёт, а пусковая установка наводится и стреляет водяным шариком. Код всего комплекса лежит на GitHub, здесь только веса.
Заметить дрон по картинке трудно: в кадре он часто занимает около 10 пикселей, фон сложный, а птицы и самолёты на него похожи. В прошлом году я обучал свою языковую модель Mind 4 и понял, что универсальную модель в одиночку не построить. Поэтому в этот раз я сделал модель под 1 задачу и проверил, может ли она обойти универсальные решения там, где важна точность. Вся работа сделана на ноутбуке с Apple M5 и арендованном на полтора часа сервере с H100. Итоговые затраты около 45 $.
Какие модели здесь лежат
Обучение шло поэтапно, и каждой версии я дал имя птицы.
| Папка | Модель | Что это |
|---|---|---|
production/ |
Ястраб | основная: YOLOv8s, 11,1 млн параметров, вход 640 px, 13 мс на кадр на M5. Рядом лежат specialist для мелких целей и проверяющая сеть |
yastrab/ |
Ястраб | та же модель отдельно, с описанием обучения |
berkut/ |
Беркут | Ястраб, дообученный на входе 960 px. Лучше на DUT, хуже на Halmstad |
studio/ |
Ястраб-Studio | дообучен на 3 070 кадрах 3D-сцены Drone Studio, для симулятора |
observation/ |
профиль наблюдения | основная и дообученная модели плюс проверяющая сеть MobileNetV3. Добавлены FRED и сложные фоны Open Images, ложных тревог стало 11 вместо 90 |
Рядом с каждым .pt лежит .json: контрольная сумма, откалиброванный порог уверенности и результаты на тестах. Порог Ястраба подобран на проверочной выборке по максимуму F1 и равен 0,335.
Как устроена и как обучалась
Ястраб - свёрточная сеть из 3 частей. Основа сжимает кадр 640 × 640 в карты признаков. Шея соединяет карты 3 масштабов, чтобы мелкий дрон на 16 пикселей и крупный на 100 искались одинаково хорошо. Голова для каждой клетки сеток 80 × 80, 40 × 40 и 20 × 20 предсказывает, есть ли там дрон, и 4 расстояния до сторон рамки. Пересекающиеся рамки одной цели убирает NMS при IoU 0,55.
Ястраба я учил на сервере с H100 1,5 часа: 40 эпох на 21 071 кадре из 3 наборов. Среди них 3 869 кадров, на которые я вклеил вырезанных дронов шириной 7-40 px, чтобы сеть насмотрелась на мелкие цели. Чтобы сеть не заучила кадры, каждый при обучении случайно меняется: склейка 4 кадров в 1, сдвиг цвета и яркости, поворот, масштаб, отражение.
| Набор | Что внутри | Обучение | Проверка | Тест |
|---|---|---|---|---|
| DUT Anti-UAV | фотографии дронов на разном фоне | 5 200 | 2 600 | 2 199 |
| Halmstad | 285 роликов: дроны, птицы, самолёты, вертолёты | 6 295 | 1 346 | 1 340 |
| Anti-UAV300 | 318 роликов, день и ночь | 4 377 | 946 | 2 147 |
| Дополнение | сложные фоны и мелкие дроны, только из train | 1 330 | - | - |
Перед обучением я проверил данные. По контрольным суммам нашёлся кадр, который был одновременно и в обучающей, и в тестовой части DUT, и я убрал его из тестов, чтобы модель не полагалась на заученный ответ. В Anti-UAV300 26 съёмочных сессий попали и в обучение, и в проверку, поэтому сессии я разделил заново. Ещё 83 кадра Halmstad с видимым, но неразмеченным дроном я убрал, чтобы не учить сеть считать дрон фоном.
Результаты
Модели проверены на 3 тестах из кадров, которых они не видели при обучении. mAP@0,5 от 0 до 1, где 1 - все дроны найдены без ложных тревог. Время кадра замерено на M5.
| Модель | DUT | Halmstad | Anti-UAV300 | Среднее | мс | Вывод |
|---|---|---|---|---|---|---|
| Бусел | 0,899 | 0,011 | 0,822 | 0,577 | 8 | слепа на Halmstad |
| Сокал | 0,888 | 0,839 | 0,971 | 0,899 | 8 | прежняя основная |
| Арол | 0,930 | 0,807 | 0,959 | 0,899 | 17 | ложные тревоги |
| Ястраб | 0,928 | 0,856 | 0,959 | 0,914 | 13 | основная, лучшая |
| Беркут | 0,944 | 0,783 | 0,952 | 0,893 | 25 | хуже на Halmstad |
| drone-yolov8 | 0,242 | 0,012 | 0,476 | 0,243 | - | готовая чужая |
| flying-objects | 0,148 | 0,007 | 0,071 | 0,075 | - | готовая чужая |
Результат Бусла сам по себе удивил: на своём наборе он работает хорошо, а в роликах Halmstad почти не находит дроны, ведь съёмка, фон и размер целей там другие. Бусел учился 15 эпох, Сокал только 5, но на роликах нужного типа, и выиграл. Отсюда главный вывод: данные нужного типа съёмки важнее, чем долгое обучение на 1 наборе.
Ради интереса я прогнал и варианты потяжелее: YOLOv8m и сеть с головой P2 на 1280 пикселях. На DUT они дали 0,946 и 0,963, а на Halmstad 0,808 и 0,774. Не помогла и добавка 48 тыс. чужих кадров из 23 открытых наборов: на Halmstad минус 5 пунктов. Вывод вышел сам собой: чем больше сеть, вход или чужих данных, тем лучше DUT и хуже Halmstad. Поэтому основным я оставил Ястраба. 2 готовые открытые модели с Hugging Face на тех же тестах мелкие дроны не видят вовсе.
Против универсальных нейросетей
Я взял 30 кадров из отложенной выборки Halmstad, где дрон часто меньше 20 пикселей, и дал их моей модели и ChatGPT. Каждой сети кадры даны по одному, без инструментов, одним и тем же вопросом. Рамка засчитывается, если её перекрытие с разметкой (IoU) не меньше 0,5.
| Модель | Найдено из 30 | Точных рамок | Средний IoU |
|---|---|---|---|
| Ястраб, 640 px | 30 | 26 | 0,66 |
| Арол, 960 px | 28 | 26 | 0,72 |
| ChatGPT 6 Instant | 20 | 2 | 0,32 |
ChatGPT пропустил все 10 дронов уже 20 пикселей, а там, где нашёл, рамка почти всегда шире нужной.
На 3 кадрах с дроном 76, 31 и 16 пикселей я сравнил ещё Gemini 5.3 Flash Lite и Grok. Когда дрон виден явно или слабо, универсальные сети его находят. А на кадре с дроном в 16 пикселей все 3 ставят рамку мимо или заметно меньше дрона. Ястраб и Арол находят все 3.
И для интереса 2 мои модели за 2 года:
| Mind 4, 2025 | Ястраб, 2026 | |
|---|---|---|
| Задача | универсальная языковая модель | 1 класс «дрон» на кадре |
| Архитектура | Transformer, 36 слоёв, 128 экспертов | YOLOv8s, 11,1 млн параметров |
| Данные | 650 млн токенов из интернета без фильтрации | 21 071 кадр из 3 наборов, вычищенных вручную |
| Железо | Google Colab, A100 | ноутбук M5 и 1,5 ч H100, 45 $ |
| Итог на тесте | TruthfulQA около 30 %, галлюцинации | mAP@0,5 = 0,914, 26 точных рамок из 30 |
| Против лучших | хуже GPT-2 (2019) | лучше ChatGPT (2026) на своей задаче |
Как пользоваться
from huggingface_hub import hf_hub_download
from ultralytics import YOLO
weights = hf_hub_download("ReNothingg/drone-studio", "production/best.pt")
model = YOLO(weights)
result = model.predict("frame.jpg", imgsz=640, conf=0.335)[0]
print(result.boxes.xyxy, result.boxes.conf)
Чтобы скачать все модели сразу и запустить Drone Studio с трекером и 3D-сценой, склонируйте репозиторий и выполните npm install и npm run dev. Веса скачаются сами при первом запуске.
Ограничения
Модель проверена на открытых наборах, а не на моих видео с птицами и другими дронами. На незнакомый источник сеть переносится плохо: обученная на DUT и Halmstad, на Anti-UAV300 она нашла лишь 47 % дронов, так что данные нужны под каждую камеру. Модель видит только 1 класс «дрон» и не отличает самолётные БПЛА. Цифры выше относятся к указанным тестам и не обещают такой же точности на другой камере.
Установка из работы учебная: она стреляет водяными шариками и не предназначена для применения против людей или чужого имущества.
- Downloads last month
- 250
Dataset used to train ReNothingg/drone-studio
Evaluation results
- map_50 on DUT Anti-UAV (test)self-reported0.928
- map_50 on Halmstad Drone Dataset (test)self-reported0.856
- map_50 on Anti-UAV300 RGB (test)self-reported0.959



