«Darknet» как сборник противоречий / Хабр
Предисловие
Данный анализ термина «Darknet» является лишь составной частью более общей работы «Теория строения скрытых систем». С таковой теорией можно ознакомиться тут. На основе теории также пишутся анонимные и клиент-безопасные приложения. С таковыми можно ознакомиться здесь. Все работы являются открытыми и находятся тут.
Введение
В разных ситуациях термин «Darknet» рассматривают то как анонимные сети, то как безопасные системы, а иногда и вовсе не анонимные и не безопасные, вбирая в себя множество противоречий в качестве размытия терминологий.
Например, «Darknet»’ом могут называть friend-to-friend сети расчитанные на обмен файлами, RetroShare, GNUnet, FreeNet (клиент-безопасные) приложения, Tor, I2P (анонимные) сети, Proxy и VPN сервисы (качество анонимности которых уступает скрытым сетям), социальные сети с уникально настроенным протоколом связи (что бы это ни значило), TON (Telegram Open Network) (что является криптовалютой и одной из вариаций представления Web3, тогда Bitcoin и Ethereum должны также считаться «Darknet» системами?), Telegram (централизованный сервис связи с возможной и неоднозначной опцией сквозного шифрования, тогда WhatsApp также может стать «Darknet»’ом?), BitTorrent (протокол не предоставляющий анонимность субъектов и конфиденциальность объектов) и т. п. Такой список можно продолжать и дополнять ещё десятками разнообразных технологий [1][2].
Поиск противоречий
В литературе [3] указывается, что «Darknet»’ом можно назвать буквально всё что угодно, что связано так или иначе с фактом скрытия информации, либо личности от глобальных наблюдателей (будь то это государства или монополистические корпорации) вне зависимости от способов достижения такого сокрытия. Данное суждение приводит одновременно к следующим противоречиям.
1. Если не ставится различий между неиндексируемыми запароленными страницами сайтов в сети Интернет и скрытой сетью Tor, то это приводит к фактическому отрицанию анонимности «Darknet» за счёт второстепенности и незначимости её запутывающей маршрутизации [4] (как главного критерия сетевой анонимности). Тем не менее, в терминологии «Darknet» анонимность считается одной из базовых характеристик присущих данной системе, что несомненно является противоречием.
2. Если предположить, что под анонимностью понимается безопасность передаваемых объектов, где нельзя узнать что конкретно передаётся, иными словами понимать под «Darknet» клиент-безопасные приложения с характеристикой конфиденциальности, то это противоречит «Darknet» системам связанных с неиндексируемыми запароленными страницами сайтов в сети Интернет, принадлежащими второй стадии анонимности* [4], с присущей пседоанонимностью и отсутствием безопасности передаваемой / хранимой информации. Иными словами, такой результат становится наихудшим выражением «Darknet» сетей (в плане анонимности и безопасности), где мощность анонимности* и мощность доверия* становятся равными |A| = 1, |T| > 1 [4].
В то время как первое противоречие выдаёт фактор неанонимности «Darknet» сетей, что отчасти может всё равно коррелировать с другими определениями в плане практического использования (F2F-сети, клиент-безопасные приложения и т.п.), исключая лишь и только применение анонимных сетей (подобия Tor, I2P и т.д.), второе же противоречие начинает вступать в открытый конфликт со множеством других терминологий «Darknet» сетей, как на практическом, так и на теоретическом уровнях, даже учитывая наиболее общий и абстрактный характер термина приведённого в рассматриваемой литературе.
Термин «Darknet» также подкрепляется и современными научными материалами, такими как [5][6], которые в отличие от вышеописанных определений всё же не настолько противоречивы, но непротиворечивы они лишь потому, что акцентируют внимание исключительно на частных случаях и не пытаются углубляться в структурный анализ рассматриваемых систем. Данные работы, как чаще всего бывает, приводят в качестве «Darknet» составляющих Tor (и реже I2P) сети, которые были описаны и проанализированы в разных публикациях уже достаточное количество раз, из-за чего такие «исследования» становятся лишь дубликатами других.
Базовые же, фундаментальные работы в направлении анализа и разработки новых скрытых систем датировались, в массе своей, лишь (19)80-(20)00-ыми годами исследователями, из которых можно выделить Дэвида Чаума (DC-сети и Mix-сети) [7][8], Андреаса Пфицмана и Марита Хансена (терминология анонимности) [9], Михаила Рейтера и Авиеля Рубина (системы измерения уровня анонимности) [10]. В настоящем же времени данные работы становятся забываемыми и включаются в источники лишь посредством других источников, неявным образом, создавая и реконструируя симулякры третьего порядка [11], интерпретирующиеся на базе выдвинутых тезисов из последующих, производных исследований.
Вторая стадия анонимностиЦентрализованные или иерархические системы, где контроль за информацией осуществляется так или иначе централизованными механизмами.
Мощность анонимностиМощность анонимности — количество узлов, выстроенных в цепочку и участвующих в маршрутизации информации от отправителя до получателя, при этом, не будучи никак связанными между собой общими целями и интересами. Из этого следует, что многоранговая архитектура по умолчанию имеет мощность анонимности |A| = 1 (вне зависимости от количества серверов). Нулевая мощность анонимности |A| = 0 возникает при существовании прямых соединений между субъектами (иными словами при отсутствии какой бы то ни было маршрутизации).
Так например, если R = {A, B, C} — это множество узлов участвующих в маршрутизации, а подмножество {A, B} принадлежит R — кооперирующие узлы, то Q(R) = [{A, B}, {C}] и, как следствие, |A| = |Q(R)| = 2.
Термин мощность анонимности |A| взят как следствие термина множества анонимности A, подразумевающее R-ое количество субъектов способных совершать действия в системе по отдельно взятой транзакции. В отличие от множества анонимности, мощность анонимности ставит дополнительное ограничение, при котором узлы находящиеся в сговоре считаются за одного узла.
Мощность доверияМощность доверия — количество узлов, участвующих в хранении или передаче информации, представленной дли них в открытом описании. Иными словами, такие узлы способны читать, подменять и видоизменять информацию, т.к. для них она находится в предельно чистом, прозрачном, транспарентном состоянии. Чем больше мощность доверия, тем выше предполагаемый шанс компрометации отдельных узлов, а следовательно, и хранимой на них информации. Принято считать одним из узлов получателя. Таким образом, нулевая мощность доверия |T| = 0 будет возникать лишь в моменты отсутствия каких-либо связей и соединений. Если |T| = 1, это говорит о том, что связь защищена, иными словами, никто кроме отправителя и получателя информацией не владеют. Во всех других случаях |T| > 1, что говорит о групповой связи (то-есть, о существовании нескольких получателей), либо о промежуточных узлах, способных читать информацию в открытом виде.
Заключение
Термин «Darknet» прошёл очень много собственных слоёв абстракций, переопределений, назначений из-за чего таковой термин стал больше запутывающим, чем что-либо объясняющим. Противоречивость данного термина стала подобно термину «Web3», где уже становится стыдным таковой упоминать из-за множества созданных поверхностных определений и повествований. Данная статья является лишь способом показать «неразбериху» в умах тех, кто использует таковую терминологию.
Список литературы
[1] Википедия «Даркнет» [Электронный ресурс]. — Режим доступа: https://ru.wikipedia.org/wiki/%D0%94%D0%B0%D1%80%D0%BA%D0%BD%D0%B5%D1%82 (дата обращения: 20.10.2022).
[2] Википедия «Darknet» [Электронный ресурс]. — Режим доступа: https://en.wikipedia.org/wiki/Darknet (дата обращения: 20.10.2022).
[3] Бартлетт, Д., Подпольный интернет: Темная сторона мировой паутины / Д. Бартлетт. – М.: Эксмо, 2017. — 352 с.
[4] Коваленко, Г., Теория строения скрытых систем [Электронный ресурс]. — Режим доступа: https://github.com/number571/go-peer/blob/master/hidden_systems.pdf (дата обращения: 06.11.2022).
[5] Бондаренко, Ю., Кизилов, Г. Проблемы выявления и использования следов преступлений, оставляемых в сети «Darknet» [Электронный ресурс]. — Режим доступа: https://cyberleninka.ru/article/n/problemy-vyyavleniya-i-ispolzovaniya-sledov-prestupleniy-ostavlyaemyh-v-seti-darknet (дата обращения: 20.10.2022).
[6] Гонов, Ш., Милованов, А. Актуальные вопросы противодействия преступности в сети Даркнет [Электронный ресурс]. — Режим доступа: https://cyberleninka.ru/article/n/aktualnye-voprosy-protivodeystviya-prestupnosti-v-seti-darknet (дата обращения: 20.10.2022).
[7] Chaum, D. Untraceable Electronic Mail, Return Addresses, and Digital Pseudonyms [Электронный ресурс]. — Режим доступа: https://www.lix.polytechnique.fr/~tomc/P2P/Papers/Theory/MIXes.pdf (дата обращения: 16.08.2022).
[8] Chaum, D. The Dining Cryptographers Problem: Unconditional Sender and Recipient Untraceability [Электронный ресурс]. — Режим доступа: https://www.cs.cornell.edu/people/egs/herbivore/dcnets.html (дата обращения: 24.07.2022).
[9] Pfitzmann, A., Hansen, M. Anon Terminology [Электронный ресурс]. — Режим доступа: http://dud.inf.tu-dresden.de/Anon_Terminology.shtml (дата обращения: 20.10.2022).
[10] Reiter, M., Rubin, A. Crowds: Anonimity for Web Transactions [Электронный ресурс]. — Режим доступа: https://www.cs.utexas.edu/~shmat/courses/cs395t_fall04/crowds.pdf (дата обращения: 20.10.2022).
[11] Бодрийяр, Ж. Символический обмен и смерть / Ж. Бодрийяр. — М.: РИПОЛ классик, 2021. – 512 с.
Сериал Даркнет смотреть онлайн бесплатно все серии подряд в хорошем HD 1080 / 720 качестве
Недалекое будущее. В результате глобального локдауна уровень жизни населения Земли заметно сократился. Но появился Даркнет – запретный интернет в VR-очках. Он давал людям доступ к неограниченным удовольствиям. Однако пребывание в нем было смертельно опасным. В условиях полнейшей свободы в Даркнете царила виртуальная преступность, и почти постоянно происходили убийства. А если тебя убьют в Даркнете, то ты умрешь и в реальном мире. Поэтому находиться в нем без подготовки не стоит.
В центре сюжета сериала находится бывший законник Игорь Войт. Он находит Кея – торговца доступом в Даркнет. Тот продал заветный QR-код его дочери Еве и девочка никак не может выйти из системы. Герой привозит программиста в свою старую квартиру и вместе с ним отправляется в Даркнет искать девочку. Они наведываются в виртуальный секс-притон «Неверленд». Им управляет некий Хук. В результате этого посещения они сильно злят хозяина, получают секс-бота Ди и узнают, что Еву продали Виктору Грину.
Герои идут к торговке оружием Мэй Ли. Та соглашается дать наводку на Грина, если они поучаствуют в ее сделке с панками. Эта сделка заканчивается перестрелкой, в которой герои помогают Мэй Ли выжить. Они отправляются на Арену смерти, где Виктор Грин был главным и непобедимым бойцом. Войт побеждает его, но информацию о дочери не получает. Игорь хочет найти Грина в реальном мире. Он объединяется с бывшим напарником Максом, но подосланная Хуком киллерша убивает его.
В Даркнете Хук находит Войта и заражает его вирусом. Кей и Мэй Ли вызволяют из плена талантливого программиста Линка. Он приступает к лечению главного героя, пока тот вспоминает, как убили его жену и как он отдалился от дочери, пытаясь наказать убийцу.
Линк возвращает Войта к жизни. Вместе с Кеем он пробует переместиться в реальность. Парню удается это сделать, а ему нет. В реальности в Игоря вселился Хук. Выяснилось, что он работал на могущественную личность в Даркнете – Акселя. Бывший начальник Игоря тоже работал на него. Они забрали Еву. Кею грозила смерть. Однако ему на помощь пришла Мэй Ли из реального мира.
В седьмом эпизоде становится понятно, что Ева почти сразу попала в руки Акселя. Тот придумал, как пересаживать сознания людей в чужие тела. Такая технология сразу привлекла внимание власть имущих людей. Жена премьер министра захотела жить вечно и тело Евы ей подходило идеально. Сам премьер министр тоже был не прочь, если его жена омолодится. Однако целью Акселя были не деньги. Возомнивший себя Создателем хотел власти. Перемещая сознание человека, он получал контроль над ним.
Линк придумал, как Войт может ненадолго вернуться в реальный мир в теле Кея. Он смог обезвредить Хука, который охранял лаборатория Акселя для переноса сознаний. Но ему нужно было вернуться в Даркнет, чтобы заставить Еву проснуться. Туда герой решил пойти в одиночку, так как это было очень опасно. Акселем оказался преступник, который убил жену Игоря. Он был намного сильнее главного героя. Кей присоединился к Войту вместе с оружием, которое создал Линк. Вместе они одолели охранников злодея, а потом его убил Хук, который смог сбежать от Линка. Войту удалось сделать последний бросок. Топор угодил в грудь жены премьер министра, сознание которой переносилось в тело Евы. Хук уже был готов убить Войта, но его ранила Ева.
Отец и дочь вернулись в реальный мир. В это время раненый Хук завладел телом премьер министра. В финале сериала герои вышли на улицу, где злодей в образе премьер министра объявлял Игоря врагом государства и террористом №1.
YOLO: обнаружение объектов в реальном времени
You only look Once (YOLO) — это современная система обнаружения объектов в реальном времени. На Pascal Titan X он обрабатывает изображения со скоростью 30 кадров в секунду и имеет mAP 57,9% на тест-разработчике COCO.
Сравнение с другими детекторами
YOLOv3 чрезвычайно быстр и точен. В mAP, измеренном при 0,5 IOU, YOLOv3 находится на одном уровне с Focal Loss, но примерно в 4 раза быстрее. Более того, вы можете легко найти компромисс между скоростью и точностью, просто изменив размер модели, не требуя переобучения!
Производительность набора данных COCO
Модель | Поезд | Тест | карта | ФЛОПС | кадров в секунду | Конфигурация | Гири |
---|---|---|---|---|---|---|---|
SSD300 | COCO трейнвал | тест-разработчик | 41,2 | — | 46 | ссылка | |
SSD500 | COCO трейнвал | тест-разработчик | 46,5 | — | 19 | ссылка | |
YOLOv2 608×608 | COCO трейнвал | тест-разработчик | 48,1 | 62,94 млрд | 40 | конфиг | гири |
Крошка YOLO | COCO трейнвал | тест-разработчик | 23,7 | 5,41 млрд | 244 | конфиг | гири |
SSD321 | COCO трейнвал | тест-разработчик | 45,4 | — | 16 | ссылка | |
ДССД321 | COCO трейнвал | тест-разработчик | 46,1 | — | 12 | ссылка | |
R-FCN | COCO трейнвал | тест-разработчик | 51,9 | — | 12 | ссылка | |
SSD513 | КОКО трейнвал | тест-разработчик | 50,4 | — | 8 | ссылка | |
ДССД513 | COCO трейнвал | тест-разработчик | 53,3 | — | 6 | ссылка | |
ФПН ФРЦН | COCO трейнвал | тест-разработчик | 59,1 | — | 6 | ссылка | |
Ретинанет-50-500 | COCO трейнвал | тест-разработчик | 50,9 | — | 14 | ссылка | |
Ретинанет-101-500 | COCO трейнвал | тест-разработчик | 53,1 | — | 11 | ссылка | |
Ретинанет-101-800 | COCO трейнвал | тест-разработчик | 57,5 | — | 5 | ссылка | |
YOLOv3-320 | COCO трейнвал | тест-разработчик | 51,5 | 38,97 млрд | 45 | конфиг | гири |
YOLOv3-416 | COCO трейнвал | тест-разработчик | 55,3 | 65,86 млрд | 35 | конфиг | гири |
YOLOv3-608 | COCO трейнвал | тест-разработчик | 57,9 | 140,69 млрд | 20 | конфиг | гири |
YOLOv3-маленький | COCO трейнвал | тест-разработчик | 33,1 | 5,56 млрд | 220 | конфиг | гири |
YOLOv3-spp | COCO трейнвал | тест-разработчик | 60,6 | 141,45 млрд | 20 | конфиг | гири |
Как это работает
Системы предварительного обнаружения переназначают классификаторы или локализаторы для выполнения обнаружения. Они применяют модель к изображению в различных местах и масштабах. Области изображения с высокой оценкой считаются обнаружениями.
Мы используем совершенно другой подход. Мы применяем одну нейронную сеть к полному изображению. Эта сеть делит изображение на области и прогнозирует ограничивающие рамки и вероятности для каждой области. Эти ограничивающие рамки взвешиваются по предсказанным вероятностям.
Наша модель имеет ряд преимуществ по сравнению с системами на основе классификаторов. Он просматривает все изображение во время тестирования, поэтому его прогнозы основаны на глобальном контексте изображения. Он также делает прогнозы с помощью одной оценки сети, в отличие от таких систем, как R-CNN, которым требуются тысячи для одного изображения. Это делает его чрезвычайно быстрым, более чем в 1000 раз быстрее, чем R-CNN, и в 100 раз быстрее, чем Fast R-CNN. См. нашу статью для более подробной информации о полной системе.
Что нового в версии 3?
YOLOv3 использует несколько приемов для улучшения обучения и повышения производительности, в том числе: многомасштабные прогнозы, улучшенный базовый классификатор и многое другое. Все подробности в нашей статье!
Обнаружение с использованием предварительно обученной модели
Этот пост расскажет вам об обнаружении объектов с помощью системы YOLO с использованием предварительно обученной модели. Если у вас еще не установлен Darknet, сделайте это в первую очередь. Или вместо того, чтобы читать все, что просто запустить:
клон git https://github.com/pjreddie/darknet компакт-диск даркнет делать
Легко!
У вас уже есть файл конфигурации для YOLO в подкаталоге cfg/
. Вам нужно будет загрузить предварительно обученный файл веса здесь (237 МБ). Или просто запустите это:
wget https://pjreddie.com/media/files/yolov3.weights
Тогда запускай детектор!
./darknet обнаружить cfg/yolov3.cfg yolov3.weights data/dog.jpg
Вы увидите что-то вроде этого:
слой фильтрует размер ввода-вывода 0 конв. 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0,299 BFLOPs 1 конв. 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1,595 млрд флопс . ...... 105 конв. 255 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 255 0,353 млрд флопс 106 обнаружение true_thresh: используется значение по умолчанию «1.000000». Загрузка весов из yolov3.weights... Готово! data/dog.jpg: предсказано за 0,029329 секунды. собака: 99% грузовик: 93% велосипед: 99%
Даркнет распечатывает обнаруженные объекты, их достоверность и время, затраченное на их поиск. Мы не компилировали Darknet с OpenCV
, поэтому он не может напрямую отображать обнаружения. Вместо этого он сохраняет их в Predictions.png
. Вы можете открыть его, чтобы увидеть обнаруженные объекты. Поскольку мы используем Darknet на процессоре, на одно изображение уходит около 6-12 секунд. Если бы мы использовали версию с графическим процессором, это было бы намного быстрее.
Я включил несколько примеров изображений, чтобы попробовать, если вам нужно вдохновение. Попробуйте data/eagle.jpg
, data/dog.jpg
, data/person. jpg
, или data/horses.jpg
!
Команда обнаружения
является сокращением для более общей версии команды. Это эквивалентно команде:
./darknetDetector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
Вам не нужно знать это, если все, что вы хотите сделать, это запустить обнаружение на одном изображении, но полезно знать, хотите ли вы делать другие вещи, такие как запуск на веб-камере (что вы увидите позже).
Несколько изображений
Вместо ввода изображения в командной строке вы можете оставить это поле пустым, чтобы попробовать несколько изображений подряд. Вместо этого вы увидите подсказку, когда конфигурация и веса будут загружены:
./darknet detect cfg/yolov3.cfg yolov3.weights слой фильтрует размер ввода-вывода 0 конв. 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0,299 BFLOPs 1 конв. 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1,595 миллиардов флопов ....... 104 конв.256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1,595 млрд флопс 105 конв. 255 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 255 0,353 млрд флопс 106 обнаружение Загрузка весов из yolov3.weights... Готово! Введите путь к изображению:
Введите путь к изображению, например data/horses.jpg
, чтобы он предсказывал блоки для этого изображения.
Как только это будет сделано, вам будет предложено указать дополнительные пути, чтобы попробовать разные образы. Используйте Ctrl-C
, чтобы выйти из программы, как только вы закончите.
Изменение порога обнаружения
По умолчанию YOLO отображает только объекты, обнаруженные с достоверностью 0,25 или выше. Вы можете изменить это, передав флаг -thresh
команде yolo
. Например, для отображения всех обнаружений можно установить пороговое значение 0:
./darknetDetect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0
Что производит:
![][all]
Так что это, очевидно, не очень полезно, но вы можете установить разные значения, чтобы контролировать пороговое значение модели.
Tiny YOLOv3
У нас также есть очень маленькая модель для ограниченных сред, yolov3-tiny
. Чтобы использовать эту модель, сначала загрузите веса:
wget https://pjreddie.com/media/files/yolov3-tiny.weights
Затем запустите детектор с крошечным файлом конфигурации и весами:
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
Обнаружение в реальном времени на веб-камере
Запуск YOLO на тестовых данных не очень интересен, если вы не видите результат. Вместо того, чтобы запускать его на куче изображений, давайте запустим его на входе с веб-камеры!
Для запуска этой демонстрации вам потребуется скомпилировать Darknet с помощью CUDA и OpenCV. Затем выполните команду:
./darknetDetector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
YOLO отобразит текущий FPS и прогнозируемые классы, а также изображение с ограничивающими прямоугольниками, нарисованными поверх него.
Вам понадобится веб-камера, подключенная к компьютеру, к которому может подключиться OpenCV, иначе она не будет работать. Если у вас подключено несколько веб-камер и вы хотите выбрать, какую из них использовать, вы можете передать флаг -c
для выбора (по умолчанию OpenCV использует веб-камеру 0
).
Вы также можете запустить его в видеофайле, если OpenCV может прочитать видео:
./darknetDetector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <видеофайл>
Вот как мы сделали видео на YouTube выше.
Обучение YOLO на VOC
Вы можете обучать YOLO с нуля, если хотите поиграть с различными режимами обучения, гиперпараметрами или наборами данных. Вот как заставить его работать с набором данных Pascal VOC.
Получить данные VOC Pascal
Для обучения YOLO вам потребуются все данные VOC с 2007 по 2012 год. Вы можете найти ссылки на данные здесь. Чтобы получить все данные, создайте каталог для их хранения и из этого каталога запустите:
wget https://pjreddie. com/media/files/VOCtrainval_11-May-2012.tar. wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar tar xf VOCtrainval_11-May-2012.tar tar xf VOCtrainval_06-ноябрь-2007.tar tar xf VOCtest_06-ноябрь-2007.tar
Теперь будет подкаталог VOCdevkit/
со всеми обучающими данными VOC.
Создание меток для VOC
Теперь нам нужно сгенерировать файлы меток, которые использует Darknet. Даркнету нужен файл .txt
для каждого изображения со строкой для каждого объекта наземной истины на изображении, который выглядит так:
<класс-объекта>
Где x
, y
, ширина
и высота
относятся к ширине и высоте изображения. Чтобы сгенерировать этот файл, мы запустим скрипт voc_label.py
в каталоге Darknet scripts/
. Давайте просто скачаем его снова, потому что нам лень.
wget https://pjreddie.com/media/files/voc_label.py Python voc_label.py
Через несколько минут этот сценарий сгенерирует все необходимые файлы. В основном он генерирует множество файлов этикеток в VOCdevkit/VOC2007/labels/
и VOCdevkit/VOC2012/labels/9.0367 . В вашем каталоге вы должны увидеть:
ls 2007_test.txt VOCdevkit 2007_train.txt voc_label.py 2007_val.txt VOCtest_06-ноябрь-2007.tar 2012_train.txt VOCtrainval_06-ноябрь-2007.tar 2012_val.txt VOCtrainval_11-May-2012.tar
В текстовых файлах, таких как 2007_train.txt
, перечислены файлы изображений для этого года и набора изображений. Даркнету нужен один текстовый файл со всеми изображениями, на которых вы хотите тренироваться. В этом примере давайте потренируемся со всем, кроме тестового набора 2007 года, чтобы мы могли протестировать нашу модель. Пробег:
кошка 2007_train.txt 2007_val.txt 2012_*.txt > train.txt
Теперь у нас есть все наборы trainval 2007 и 2012 в одном большом списке. Это все, что нам нужно сделать для настройки данных!
Modify Cfg for Pascal Data
Теперь перейдите в каталог Darknet. Мы должны изменить файл конфигурации cfg/voc.data
, чтобы он указывал на ваши данные:
1 классы = 20 2 train = <путь к voc>/train.txt 3 действительно = <путь к voc>2007_test.txt 4 имени = data/voc.names 5 резервная копия = резервная копия
Вы должны заменить
каталогом, в который вы помещаете данные VOC.
Загрузить предварительно обученные сверточные веса
Для обучения мы используем сверточные веса, предварительно обученные в Imagenet. Мы используем веса из модели darknet53. Вы можете просто скачать веса сверточных слоев здесь (76 МБ).
wget https://pjreddie.com/media/files/darknet53.conv.74
Тренировка модели
Теперь мы можем тренироваться! Выполните команду:
./darknet детектор поезд cfg/voc.data cfg/yolov3-voc.cfg darknet53. conv.74
Обучение YOLO на COCO
Вы можете обучать YOLO с нуля, если хотите поиграть с различными режимами обучения, гиперпараметрами или наборами данных. Вот как заставить его работать с набором данных COCO.
Получить данные COCO
Для обучения YOLO вам потребуются все данные COCO и этикетки. Скрипт scripts/get_coco_dataset.sh
сделает это за вас. Выясните, куда вы хотите поместить данные COCO, и загрузите их, например:
cp scripts/get_coco_dataset.sh данные компакт-диск с данными bash get_coco_dataset.sh
Теперь у вас должны быть сгенерированы все данные и метки для Даркнета.
Изменить cfg для COCO
Теперь перейдите в каталог Darknet. Мы должны изменить файл конфигурации cfg/coco.data
, чтобы он указывал на ваши данные:
1 class= 80 2 поезд = <путь к кокосу>/trainvalno5k.txt 3 действительно = <путь к кокосу>/5k.txt 4 имени = data/coco.names 5 резервная копия = резервная копия
Вы должны заменить
каталогом, в который вы помещаете данные COCO.
Вам также следует изменить конфигурацию модели для обучения, а не для тестирования. cfg/yolo.cfg
должен выглядеть так:
[net] # Тестирование # партия=1 # подразделения=1 # Обучение партия = 64 подразделения=8 ....
Тренировка модели
Теперь мы можем тренироваться! Выполните команду:
./darknetDetector Train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74
Если вы хотите использовать несколько gpus, запустите:
./darknetDetector Train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74 -gpus 0,1,2,3
Если вы хотите остановить и возобновить тренировку с чекпойнта:
./darknetDetector train cfg/coco.data cfg/yolov3.cfg backup/yolov3.backup -gpus 0,1,2,3
YOLOv3 в наборе данных Open Images
wget https://pjreddie.com/media/files/yolov3-openimages.weights ./тест детектора даркнета cfg/openimages.data cfg/yolov3-openimages.cfg yolov3-openimages.weights
Что случилось со старым сайтом YOLO?
Если вы используете YOLO версии 2, вы все еще можете найти сайт здесь: https://pjreddie. com/darknet/yolov2/
Cite
Если вы используете YOLOv3 в своей работе, пожалуйста, укажите нашу статью!
@article{yolov3, title={YOLOv3: постепенное улучшение}, автор={Редмон, Джозеф и Фархади, Али}, журнал = {arXiv}, год = {2018} }
Установка даркнета
Darknet легко установить всего с двумя необязательными зависимостями:
- OpenCV, если вам нужен более широкий выбор поддерживаемых типов изображений.
- CUDA, если вам нужны вычисления на GPU.
Оба являются дополнительными, поэтому давайте начнем с простой установки базовой системы. Я тестировал это только на компьютерах с Linux и Mac. Если это не работает для вас, напишите мне или что-то?
Установка базовой системы
Сначала клонируйте git-репозиторий Darknet здесь. Это можно сделать с помощью:
git clone https://github.com/pjreddie/darknet.git компакт-диск даркнет делать
Если это работает, вы должны увидеть целую кучу информации о компиляции:
mkdir -p obj gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast. ... gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast.... gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast.... ..... gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -lm....
Если у вас есть ошибки, попробуйте их исправить? Если кажется, что все скомпилировано правильно, попробуйте запустить его!
./дарнет
Вы должны получить вывод:
использование: ./darknet <функция>
Отлично! Теперь посмотрите, какие интересные вещи вы можете сделать с даркнетом здесь.
Компиляция с помощью CUDA
Даркнет на процессоре работает быстро, но на GPU примерно в 500 раз быстрее! У вас должен быть графический процессор Nvidia, и вам нужно будет установить CUDA. Я не буду вдаваться в подробности установки CUDA, потому что это ужасно.
После установки CUDA измените первую строку Makefile
в базовом каталоге для чтения:
GPU=1
Теперь вы можете сделать
проект и CUDA будет включен. По умолчанию он будет запускать сеть на 0-й видеокарте в вашей системе (если вы правильно установили CUDA, вы можете перечислить свои видеокарты, используя nvidia-smi
). Если вы хотите изменить карту, которую использует Darknet, вы можете указать необязательный флаг командной строки -i
, например:
./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights
Если вы скомпилировали с использованием CUDA, но по какой-либо причине хотите выполнять вычисления ЦП, вы можете использовать -nogpu
для использования ЦП вместо этого:
./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights
Наслаждайтесь новыми сверхбыстрыми нейронными сетями!
Компиляция с OpenCV
По умолчанию Даркнет использует stb_image.h
для загрузки изображения. Если вам нужна дополнительная поддержка странных форматов (например, CMYK jpeg, спасибо Обаме), вы можете вместо этого использовать OpenCV! OpenCV также позволяет просматривать изображения и обнаружения без необходимости сохранять их на диск.