Я нашел основную причину и имею поверхностное исправление, но у меня нет 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 пуст. Может быть, кто-то, кто лучше понимает алгоритм, может дать разумный комментарий здесь.