Сообщение об ошибке обучения keras FRCNN: Исключение: «a» не может быть пустым, если не взяты образцы - PullRequest
0 голосов
/ 14 мая 2019

Я использую эту реализацию FRCNN для обучения на моем наборе данных:

https://github.com/kbardool/keras-frcnn

во время обучения я получаю случайные исключения без трассировки стека:

708/1000 [====================>.........] - ETA: 289s - rpn_cls: 0.1376 - rpn_regr: 0.3020 - detector_cls: 
709/1000 [====================>.........] - ETA: 288s - rpn_cls: 0.1376 - rpn_regr: 0.3020 - detector_cls: 
710/1000 [====================>.........] - ETA: 287s - rpn_cls: 0.1374 - rpn_regr: 0.3021 - detector_cls: 
711/1000 [====================>.........] - ETA: 286s - rpn_cls: 0.1373 - rpn_regr: 0.3018 - detector_cls: 
712/1000 [====================>.........] - ETA: 284s - rpn_cls: 0.1371 - rpn_regr: 0.3017 - detector_cls: 
713/1000 [====================>.........] - ETA: 283s - rpn_cls: 0.1370 - rpn_regr: 0.3019 - detector_cls: 
714/1000 [====================>.........] - ETA: 282s - rpn_cls: 0.1370 - rpn_regr: 0.3017 - detector_cls: 0.0783 - detector_regr: 0.0686
Exception: 'a' cannot be empty unless no samples are taken

715/1000 [====================>.........] - ETA: 281s - rpn_cls: 0.1369 - rpn_regr: 0.3015 - detector_cls: 
716/1000 [====================>.........] - ETA: 280s - rpn_cls: 0.1367 - rpn_regr: 0.3013 - detector_cls: 
717/1000 [====================>.........] - ETA: 279s - rpn_cls: 0.1365 - rpn_regr: 0.3009 - detector_cls: 
718/1000 [====================>.........] - ETA: 278s - rpn_cls: 0.1363 - rpn_regr: 0.3011 - detector_cls:

пока я получаю сообщение об ошибке, потеря все еще уменьшается, в чем может быть причина и как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 14 июля 2019

Я нашел основную причину и имею поверхностное исправление, но у меня нет 100% понимания того, что происходит. Исключение происходит при второй попытке выполнить np.random.choice . Если первый выбор не выполняется с исключением, то автор кэширует исключение и пытается выбрать без дедупликации. Однако, если neg_samples пусто, то второй вызов вызывает исключение.

try:
    selected_neg_samples = np.random.choice(neg_samples, C.num_rois - len(selected_pos_samples), replace=False).tolist()
except:
    selected_neg_samples = np.random.choice(neg_samples, C.num_rois - len(selected_pos_samples), replace=True).tolist()

Я "исправил" это так:

try:
  selected_neg_samples = np.random.choice(neg_samples, C.num_rois - len(selected_pos_samples), replace=False).tolist()
except:
    selected_neg_samples = np.random.choice(neg_samples, C.num_rois - len(selected_pos_samples) if len(neg_samples)>0 else 0, replace=True).tolist()

Опять же, я не уверен, что выборка в порядке, если neg_samples пуст. Может быть, кто-то, кто лучше понимает алгоритм, может дать разумный комментарий здесь.

0 голосов
/ 13 июня 2019

Я видел то же сообщение об ошибке, и оно, похоже, не влияет на исход тренировки.Я заметил, что когда мои ограничивающие рамки на тренировочных данных <20px, эта ошибка возникает сама собой.Дайте мне знать, если вы действительно определите причину проблемы! </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...