Darkflow: Не могу импортировать веса и файл cfg из даркнета

Созданный на 4 июл. 2017  ·  25Комментарии  ·  Источник: thtrieu/darkflow

Раньше я использовал Darknet для тренировок. Думаю, попытка использовать один и тот же файл .cfg и .weights для обнаружения не сработает. Получение следующей ошибки:
AssertionError: ожидать 268263452 байта, найти 268263456

Что-нибудь, что я могу делать неправильно?

Самый полезный комментарий

Обновление: я не знаю, что происходит, но после печати индекса загруженных слоев я обнаружил, что все веса в недавно обученной модели из даркнета были смещены вправо на 4 байта по сравнению со старой моделью в даркфлоу. Изменение этой строки: https://github.com/thtrieu/darkflow/blob/479c83e14559fd5eceb9a9f612503b29a67fac5c/darkflow/utils/loader.py#L121 на self.offset = 20 помогло мне решить мою проблему, и я смог использовать свой недавно обученный модель в даркнете с darkflow.
Это довольно странно, потому что на веб-сайте даркнета у них все еще есть только 16 байтов для дополнительных вещей в начале :
Может ли кто-нибудь, кто является экспертом в этом, пролить свет на это поведение?

Все 25 Комментарий

Эти счетчики байтов подозрительно близки. Но, тем не менее, можете ли вы подтвердить, что происходит, когда вы загружаете cfg и веса отсюда: https://pjreddie.com/darknet/yolo/

На самом деле, последние несколько дней я пользовался даркнетом, следил за сайтом pjeddie. Собрал несколько изображений, разметил их и обработал в даркнете. Это работало довольно хорошо на этом.

Я просто хотел протестировать darkflow, поэтому я импортировал обученные веса и файл cfg, который я создал для darknet, в darkflow (скопировал и вставил); попробовал запустить, получил эту ошибку.

Разве конфигурация cfg и весов в даркнете и даркфлоу не совместимы друг с другом?

Да, я думаю, что они. Не уверен, когда они будут обучены, если вы обучили новую модель, но они должны быть. Тот факт, что ваш счетчик байтов отключен на 4, кажется подозрительным, как будто что-то не совсем правильно сохранено или что-то еще не совсем правильно.

Ваша новая модель, которую вы пытаетесь загрузить, основана на yolo cfg или это совершенно новая модель?

На основе даркнета19_448.conv.23

Недостаточно знаком с даркнетом, извините. Я полагаю, у вас нет проблем с использованием одного из yolo cfgs/weights с веб-сайта?

Что ж, когда я попытался заменить yolo.cfg и yolo.weights с даркнета на даркфлоу, все заработало нормально. Но когда я переименовал yolo.cfg и yolo.weights в yolo1.cfg и yolo1.weights соответственно и попытался запустить их, я получил еще одну AssertionError...

AssertionError: labels.txt и cfg/yolo1.cfg указывают на несовместимые номера классов.

Я знаю, что в йоло 80 классов и требуется 80 ярлыков. Итак, я добавил несколько фиктивных элементов, чтобы у него было 80 классов, и тогда он работал нормально. Есть ли что-то жестко запрограммированное для yolo.cfg? Где мне их искать?

Не уверен. Вы настроили конфиги, как предложено здесь . Это требует, чтобы вы указали классы. Это может вызвать проблемы при попытке обучения?

Да, это точно так же, как в даркнете.

У меня точно такая же ошибка на 4 байта при использовании darknet19_448.conv.23 для тренировки в даркнете перед портированием в даркфлоу! Кто-нибудь понял, в чем может быть проблема?

Я также сталкиваюсь с этой ошибкой! Вчера я обучил совершенно новую модель в даркнете (используя предварительно обученный darknet19_448.conv.23) и попытался загрузить ее в даркфлоу, используя выходной файл .weights из даркнета, и я тоже ошибся на 4 байта! Я работаю с двухклассовой моделью, поэтому моя конфигурация выглядит так:

[convolutional]
filters=35

[region]
classes=2

согласно рекомендации. Это дает:

AssertionError: expect 202335260 bytes, found 202335264

Я пробовал несколько итераций настройки конфигураций (изменение номеров классов и фильтров для последнего слоя) безрезультатно. Я подозревал, что «отключение на 4 байта» связано с несоответствием размеров на последнем слое, что-то вроде darkflow ожидает 3 класса и получает только 2 в выходном слое. Поэтому я попытался изменить свой файл .cfg следующим образом:

[convolutional]
filters=40

[region]
classes=3

и это приводит к перечтению:
AssertionError: Over-read ../darknet/new_obj.weights

Буду рад любому пониманию этой проблемы! Спасибо!

Точно такая же проблема, как у @Benjamin-Vencill при использовании обученных yolo.weights и yolo.cfg на веб-сайте даркнета, а также после тонкой настройки с использованием даркнета. Выкл на 4 байта. Кто-нибудь знает, как веса в даркнете и даркфлоу сохраняются/загружаются?

Обновление: я не знаю, что происходит, но после печати индекса загруженных слоев я обнаружил, что все веса в недавно обученной модели из даркнета были смещены вправо на 4 байта по сравнению со старой моделью в даркфлоу. Изменение этой строки: https://github.com/thtrieu/darkflow/blob/479c83e14559fd5eceb9a9f612503b29a67fac5c/darkflow/utils/loader.py#L121 на self.offset = 20 помогло мне решить мою проблему, и я смог использовать свой недавно обученный модель в даркнете с darkflow.
Это довольно странно, потому что на веб-сайте даркнета у них все еще есть только 16 байтов для дополнительных вещей в начале :
Может ли кто-нибудь, кто является экспертом в этом, пролить свет на это поведение?

Точно такая же проблема, как и выше. Решено с помощью ответа @minhnhat93 выше. Я все еще хотел знать, почему я изменил смещение на 20 при импорте модели даркнета, которую я обучил, используя свой собственный набор данных. Потому что, если импортировать официальный cfg "tiny-yolo-voc.cfg" и официальный вес "tiny-yolo-voc.weights" в darkflow, смещение 16 работало нормально.

Я думаю, это может быть ошибка в даркнете

Большое спасибо! @minhnhat93

Обновление: я не знаю, что происходит, но после печати индекса загруженных слоев я обнаружил, что все веса в недавно обученной модели из даркнета были смещены вправо на 4 байта по сравнению со старой моделью в даркфлоу. Изменение этой строки: https://github.com/thtrieu/darkflow/blob/479c83e14559fd5eceb9a9f612503b29a67fac5c/darkflow/utils/loader.py#L121 на self.offset = 20 помогло мне решить мою проблему, и я смог использовать свою недавно обученную модель. в даркнете с даркфлоу.
Это довольно странно, потому что на веб-сайте даркнета у них все еще есть только 16 байтов для дополнительных вещей в начале :
Может ли кто-нибудь, кто является экспертом в этом, пролить свет на это поведение?

На самом деле смещение должно быть эквивалентно размеру 4 переменных с плавающей запятой, т.е. 24 байта. Они используются для номера версии и некоторых других вещей в файле весов. Где-то читал, не помню где именно.

Я использовал решение, предоставленное @minhnhat93 , и теперь оно работает! Хорошая работа, спасибо!

Я обнаружил, что, хотя при импорте весов из даркнета с использованием метода, предоставленного @minhnhat93 , не сообщается об ошибках (измените смещение на 20), результат обнаружения немного отличается от результата в даркнете, как показано на рисунках ниже. результат даркнета, а правая картинка - результат даркфлоу (оба используют одинаковые веса и cfg)
https://github.com/zinkcious/machine-learning-Udacity/blob/master/65_cmp.jpg
https://github.com/zinkcious/machine-learning-Udacity/blob/master/01_cmp.png

Кто-нибудь знает проблему импорта весов из даркнета?

@zinkcious Это может быть из-за порога обнаружения, не так ли?

Я так не думаю, треш определен в предпоследней строке файла cfg? В обоих двух случаях пишет: thresh = .6
@zenineasa
как показано ниже:
https://github.com/zinkcious/machine-learning-Udacity/blob/master/cmp_code.png

У вас есть такая же проблема, как у меня? @zenineasa @minhnhat93 @Бенджамин-Венсилл

Я как бы перешел к написанию своего собственного, используя Keras. В Github было несколько репозиториев, где разработчики пытались сделать то же самое.

У меня есть новые данные, я пытаюсь обучить tiny-yolo-voc.cfg с использованием набора данных VOC и получить «tiny-yolo-voc_100.weights», размер файла которого составляет 63471560 байт. И когда я смотрю на размер файла tiny-yolo-voc.weights, загруженного с официального сайта, размер файла составляет 63471556 байт, что на 6 байт отличается от веса, который я тренировал. Я не понимаю, почему это так.

@zinkcious Да, я только что проверил. У меня тоже какая-то такая проблема. Оценка объектности обнаружения с использованием даркфлоу и даркнета после исправления отличается... Что еще более странно, теперь я могу загрузить файл .weights из даркнета, но не файл .backup из даркнета, хотя эти два формата файлов одинаковы...

Любой, кто знаком с даркнетом и исходным кодом yolo, может ответить на этот вопрос?...

Да, я предвидел, что это произойдет, когда я заметил, что даркнет использует sizeof() для расчета макета своего двоичного формата файла. Точное изменение, вызвавшее это, находится здесь:

https://github.com/pjreddie/darknet/commit/1467621453e1c6932841a4992e6dffe0d0d8de24#diff -bfbbcdf73459e9ea8fb4afa8455ce74dL909

Есть проблема с этой ошибкой, но, к сожалению, пока нет исправления (я хотел написать патч, был занят другими вещами):
https://github.com/pjreddie/darknet/issues/78

@minhnhat93
Сработало!!! Большое спасибо!!!
Гений!!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

bareblackfoot picture bareblackfoot  ·  4Комментарии

1NNcoder picture 1NNcoder  ·  3Комментарии

LeeroyHannigan picture LeeroyHannigan  ·  4Комментарии

halt9 picture halt9  ·  3Комментарии

jubjamie picture jubjamie  ·  4Комментарии