Darkflow: Добавление точности обучения и проверки в тренировочный процесс

Созданный на 30 мая 2017  ·  37Комментарии  ·  Источник: thtrieu/darkflow

Во время тренировки:
step1 - убыток 240.92623901367188 - скользящий средний убыток 240.92623901367188
шаг 2 - убыток 241.2866668701172 - скользящий средний убыток 240.96228179931643
шаг 3 - убыток 239.79562377929688 - скользящий средний убыток 240.84561599731447

Как добавить точность обучения и точность проверки?

step1 - убыток 240.92623901367188 - скользящий средний убыток 240.92623901367188 - поезд 0.221
шаг 2 - убыток 241,2866668701172 - скользящий средний убыток 240,96228179931643 - поезд 0,222
шаг 3 - убыток 239.79562377929688 - скользящий средний убыток 240.84561599731447 - поезд 0.223
Завершена 1 эпоха, проверка 0,210

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

Да нет проблем. Я буду загружать файлы сюда. Если у вас есть вопросы, просто задавайте их.

diff.zip

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

Есть 2 способа сделать это. Вы можете разделить набор данных на обучение и проверить наборы внутри кода или просто отправить два отдельных набора данных, один для поезда и один для проверки при вызове модуля потока.

В любом случае, для этого вам следует добавить некоторые новые параметры в файл default.py, затем изменить функции _batch, parse и shuffle из data.py (обе папки yolo и yolov2) и изменить метод train () в flow.py файл (здесь вам нужно только запустить еще один пакет (каждую итерацию или один раз за несколько итераций), используя тот же сеанс тензорного потока, но без возврата train_op, чтобы вы не изменяли веса). Вы также можете добавить еще один tf.summary.FileWriter для проверки, чтобы вы могли визуализировать свой график потерь проверки с помощью тензорной доски.

Я лично решил отправить 2 разных набора данных. Это было довольно просто. Надеюсь, я был достаточно ясен.

@ Costyv95 Можете ли вы поделиться своим кодом с добавленными параметрами и предложенными вами изменениями?

Да нет проблем. Я буду загружать файлы сюда. Если у вас есть вопросы, просто задавайте их.

diff.zip

@ Costyv95 Участвует ли набор проверки в обновлении градиента в вашей реализации?

Я понял, образцы проверки не способствуют обновлению градиента.

Да, проверка предназначена только для предварительного просмотра результатов модели за пределами обучающего набора.

Привет,
Прости. Последнюю почту не заметил. Да, проверка предназначена только для предварительного просмотра результатов модели за пределами обучающего набора.

Во вторник, 4 июля 2017 г., 15:16:24 GMT + 3, yfliu [email protected] написал:

Я понял, образцы проверки не способствуют обновлению градиента.

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите обсуждение.

@ Costyv95 Я просто хочу знать, как запустить его после изменения исходного кода? Большое спасибо!

@ Costyv95 Я запускаю его так ./flow --model cfg / yolo.cfg --train --dataset "/ home / thinkjoy / lwl / modify-darkflow-master / data / VOCdevkit / VOC2007 / JPEGImages" --annotation " / home / thinkjoy / lwl / modify-darkflow-master / data / VOCdevkit / VOC2007 / Annotations »--gpu 1.0
вот ошибка (измените код так же, как вы)
Файл "/home/thinkjoy/lwl/modify-darkflow-master/darkflow/net/flow.py", строка 82, в поезде
feed_dict [self.learning_rate] = lr
AttributeError: объект TFNet не имеет атрибута learning_rate

Это происходит потому, что в коде, который я вам дал, есть некоторые модификации для адаптивной скорости обучения, и вам нужно сделать еще одно изменение. Вы найдете его здесь: https://github.com/thtrieu/darkflow/pull/216/commit/124d55d32d17bdee111201fd6fe520db709a4f9c

И вы должны добавить --val_dataset и val_annotation к аргументам для потери проверки.

@ Costyv95 Можем ли мы контролировать, сколько шагов нужно проверять один раз, я просто думаю, что один шаг за один val - это небольшая трата времени на обучение? Спасибо!

@ Costyv95 А добились ли прибавки точности при val?

@ dream-will Для проверки один раз за N шагов вы можете легко добавить аргумент (val_steps) в defaults.py, а в методе train в flow.py вы просто запустите код, который после "#validation time" внутри оператора if нравится:

`# время подтверждения

if i % self.FLAGS.val_steps == 0:
    (x_batch, datum) = next(val_batches)
    feed_dict = {
        loss_ph[key]: datum[key] 
            for key in loss_ph }
    feed_dict[self.inp] = x_batch
    feed_dict.update(self.feed)
    feed_dict[self.learning_rate] = lr

    fetches = [loss_op, self.summary_op] 
    fetched = self.sess.run(fetches, feed_dict)
    loss = fetched[0]

    if loss_mva_valid is None: loss_mva_valid = loss
    loss_mva_valid = .9 * loss_mva_valid + .1 * loss

    self.val_writer.add_summary(fetched[1], step_now)

    form = 'VALIDATION step {} - loss {} - moving ave loss {}'
    self.say(form.format(step_now, loss, loss_mva_valid))`

В defaults.py просто добавьте эту строку:

self.define('val_steps', '1', 'evaluate validation loss every #val_steps iterations')

Я не совсем понимаю второй вопрос о добавлении точности.

@ Costyv95 Спасибо за ваш ответ, второй вопрос означает, что при проверке мы не только получаем потерю проверки, но и точность проверки?

@ dream-will Для этого вам нужно реализовать собственный метод точности, который сравнивает bbox-ы GT и предсказанные bbox-ы (чтобы получить спрогнозированные bbox-ы, см. код, используемый в предсказании), но я не вижу причин для этого, потому что потери достаточно. Имейте в виду, что проверка, которую вы видите, относится только к случайному мини-пакету из набора проверки, но это очень хорошо представляет собой потерю тестирования на достаточно большом наборе данных проверки.

@ Costyv95 хорошо, спасибо

Привет @ Costyv95 . У меня проблема с выводом значений потерь val. Я изменил все файлы, следуя вашим инструкциям и кодам. Это следующие ошибки
File "flow", line 6, in <module> cliHandler(sys.argv) File "/home/alxe/ML/darkflow/darkflow/cli.py", line 26, in cliHandler tfnet = TFNet(FLAGS) File "/home/alxe/ML/darkflow/darkflow/net/build.py", line 64, in __init__ self.framework = create_framework(*args) File "/home/alxe/ML/darkflow/darkflow/net/framework.py", line 59, in create_framework return this(meta, FLAGS) File "/home/alxe/ML/darkflow/darkflow/net/framework.py", line 15, in __init__ self.constructor(meta, FLAGS) File "/home/alxe/ML/darkflow/darkflow/net/yolo/__init__.py", line 20, in constructor misc.labels(meta, FLAGS) #We're not loading from a .pb so we do need to load the labels File "/home/alxe/ML/darkflow/darkflow/net/yolo/misc.py", line 36, in labels with open(file, 'r') as f: TypeError: coercing to Unicode: need string or buffer, NoneType found

Можете ли вы распечатать значение файловой переменной?

@ Costyv95 нет, я не могу. Вот что я бегаю:
python flow --model cfg/tiny-yolo-voc-1c.cfg --train --dataset train/images --annotation train/annotations --load bin/yolo.weights --gpu 1.0 --epoch 300

Под «вариабилем файла» я имел в виду тот вариант, который используется в строке 36 в misc.py, потому что я не могу понять, что не так с вашим кодом.
У вас нет аргумента --val_dataset? Как вы реализовали изменение? Вы разделили набор данных внутри кода или добавили аргумент --val_dataset?

@ Costyv95 Привет, я скопировал и вставил ваши файлы в diff.zip, затем я попытался потренироваться с помощью команды

"flow --train --model ./coke/yolo-coke-2c.cfg --annotation ./coke/train/annotations --dataset ./coke/train/images --gpu 1.0 --batch 8 --save 1000 --val_dataset ./coke/validation/images --val_annotation ./coke/validation/annotations

Но все равно была ошибка
`
[ nkhanh @ localhost khanh] $ ./run_coke.sh

Разбор ./coke/yolo-coke-2c.cfg
Нет загрузки ...
Закончено за 0.0001392364501953125с
Отслеживание (последний вызов последний):
Файл "/ usr / local / bin / flow", строка 6, в
cliHandler (sys.argv)
Файл "/usr/local/lib64/python3.6/site-packages/darkflow/cli.py", строка 26, в cliHandler
tfnet = TFNet (ФЛАГИ)
Файл "/usr/local/lib64/python3.6/site-packages/darkflow/net/build.py", строка 64, в __init__
self.framework = create_framework (* аргументы)
Файл "/usr/local/lib64/python3.6/site-packages/darkflow/net/framework.py", строка 59, в create_framework
вернуть это (мета, ФЛАГИ)
Файл "/usr/local/lib64/python3.6/site-packages/darkflow/net/framework.py", строка 15, в __init__
self.constructor (мета, ФЛАГИ)
Файл "/usr/local/lib64/python3.6/site-packages/darkflow/net/yolo/__init__.py", строка 20, в конструкторе
misc.labels (meta, FLAGS) # Мы загружаемся не из .pb, поэтому нам нужно загрузить ярлыки
Файл "/usr/local/lib64/python3.6/site-packages/darkflow/net/yolo/misc.py", строка 36, в ярлыках
с open (file, 'r') как f:
TypeError: ожидаемый объект str, bytes или os.PathLike, а не NoneType
`

@ khanh1412
в misc.py line29
измените его на свой файл пользовательских этикеток.
file = 'labels.txt'

PS Это временное решение.

@ Costyv95
как понять удаление '[' и ']'?

Войти в тренировку ...
Отслеживание (последний вызов последний):
Файл "поток", строка 6, в
cliHandler (sys.argv)
Файл "/Users/sisyphus/darkflow/darkflow/cli.py", строка 33, в cliHandler
print ('Войти в тренировку ...'); tfnet.train ()
Файл "/Users/sisyphus/darkflow/darkflow/net/flow.py", строка 54, в поезде
arg_steps = self.FLAGS.steps [1: -1] # удалить '[' и ']'
TypeError: объект 'NoneType' не подлежит подписке

привет @ Costyv95

где я должен добавить tf.summary.FileWriter для проверки, чтобы визуализировать график потерь проверки с использованием тензорной доски.

Благодарность

@ Costyv95 Я пробовал ваш zip-файл, diff.zip. Но терминал сообщает мне, что --val_dataset - недопустимый аргумент. Мне нужно изменить другие файлы?

@ Costyv95 Я пробовал ваш zip-файл, diff.zip. Но терминал сообщает мне, что --val_dataset - недопустимый аргумент. Мне нужно изменить другие файлы?

Следует заменить все файлы, включая yolo-data и yolov2-data. вы должны просто скопировать и вставить соответственно в связанные папки, изменив их имена просто на «данные», чтобы просто изменить файл в них.

@khanhhh
добавьте код «self.define ('labels', 'labels.txt', 'path to labels file')» к «def setDefaults (self):» в «darkflow \ defaults.py», тогда вы можете использовать « --labels xxx.txt "как раньше.

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

25 мая 2019 года в 3:11 Джек [email protected] написал:

@KhanhHH https://github.com/KhanhHH
добавьте код «self.define ('labels', 'labels.txt', 'path to labels file')» к «def setDefaults (self):» в «darkflow \ defaults.py», тогда вы можете использовать « --labels xxx.txt "как раньше.

-
Вы получили это, потому что прокомментировали.
Ответить на это сообщение непосредственно, просматривать его на GitHub https://github.com/thtrieu/darkflow/issues/264?email_source=notifications&email_token=AEIP7DOZYIFBYZHV22RVIADPXD7ELA5CNFSM4DNH2ANKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWHLNQQ#issuecomment-495892162 или приглушить нить https://github.com/notifications/ Отписаться-auth / AEIP7DPOGFQ2EYSSZFPZSL3PXD7ELANCNFSM4DNH2ANA .

@ Costyv95
Здравствуйте, я хочу знать, как установить путь "gs: // bucket_hand_detection_2" в "darkflow \ defaults.py"? мой python (3.7) не может найти этот путь, он выдает ошибку; а какую дозу представляют собой "ведра"?

@ Costyv95
Здравствуйте, я хочу знать, как установить путь "gs: // bucket_hand_detection_2" в "darkflow \ defaults.py"? мой python (3.7) не может найти этот путь, он выдает ошибку; а какую дозу представляют собой "ведра"?

Та же ошибка, но контрольные точки сохраняются нормально, поэтому я не знаю, что это за ошибка @ Costyv95

спасибо @ Costyv95!

Привет, @ Costyv95 Yolo тренирует и выводит потерю валидации, но после 1000 шагов выдает ошибку. Файл FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'gsutil': 'gsutil'.

Ошибка:
error

@akmeraki привет, я столкнулся с той же проблемой, вы нашли решение этой ошибки?

@ zhe0503 @akmeraki Надеюсь, еще не поздно, но все, что я сделал, это набрал "pip install gsutil", и проблема была решена !!

Привет, ребята.
Что мне нужно сделать, если я хочу получить точность всей обученной модели?
Например, я тренирую свою модель и в какой-то момент прекращаю тренировку. Теперь у меня есть последняя сохраненная контрольная точка, и я хочу рассчитать точность до последней контрольной точки.
Файлы в папке cpkt имеют имена,

контрольно-пропускной пункт
yolo-new-50.data-00000-of-00001
yolo-new-50.index
yolo-new-50.meta
yolo-new-50.profile

Я был бы признателен за помощь, ребята.

@ Costyv95
Я внимательно следил за вашими любезными инструкциями, но похоже, что train.py не распознает аргументы --val _.... Не могли бы вы мне помочь? Ошибка, как показано ниже:
ОШИБКА - недопустимый аргумент: --val_dataset

Это происходит потому, что в коде, который я вам дал, есть некоторые модификации для адаптивной скорости обучения, и вам нужно сделать еще одно изменение. Вы найдете это здесь: 124d55d

И вы должны добавить --val_dataset и val_annotation к аргументам для потери проверки.

У меня не работает. Я получаю сообщение об ошибке, как показано ниже:
ОШИБКА - недопустимый аргумент: --val_dataset

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