Не удалось получить алгоритм свертки.Вероятно, это связано с тем, что cuDNN не удалось инициализировать, - PullRequest
0 голосов
/ 10 декабря 2018

В Tensorflow / Keras при запуске кода из https://github.com/pierluigiferrari/ssd_keras, используйте оценщик: ssd300_evaluation.Я получил эту ошибку.

Не удалось получить алгоритм свертки.Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте посмотреть, не было ли напечатано сообщение журнала предупреждений выше.

Это очень похоже на нерешенный вопрос: Ошибка Google Colab: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать

С проблемой, с которой я работаю:

python: 3.6.4.

Версия Tensorflow: 1.12.0.

Версия Keras: 2.2.4.

CUDA: V10.0.

cuDNN: V7.4.1.5.

NVIDIA GeForce GTX 1080.

Также я запустил:

import tensorflow as tf
with tf.device('/gpu:0'):
      a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
      b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
      c = tf.matmul(a, b)
with tf.Session() as sess:
print (sess.run(c))

Без ошибок или проблем.

Минималистский пример:

 from keras import backend as K
 from keras.models import load_model
 from keras.optimizers import Adam
 from scipy.misc import imread
 import numpy as np
 from matplotlib import pyplot as plt

 from models.keras_ssd300 import ssd_300
 from keras_loss_function.keras_ssd_loss import SSDLoss
 from keras_layers.keras_layer_AnchorBoxes import AnchorBoxes
 from keras_layers.keras_layer_DecodeDetections import DecodeDetections
 from keras_layers.keras_layer_DecodeDetectionsFast import DecodeDetectionsFast
 from keras_layers.keras_layer_L2Normalization import L2Normalization
 from data_generator.object_detection_2d_data_generator import DataGenerator
 from eval_utils.average_precision_evaluator import Evaluator
 import tensorflow as tf
 %matplotlib inline
 import keras
 keras.__version__



 # Set a few configuration parameters.
 img_height = 300
 img_width = 300
 n_classes = 20
 model_mode = 'inference'


 K.clear_session() # Clear previous models from memory.

 model = ssd_300(image_size=(img_height, img_width, 3),
            n_classes=n_classes,
            mode=model_mode,
            l2_regularization=0.0005,
            scales=[0.1, 0.2, 0.37, 0.54, 0.71, 0.88, 1.05], # The scales 
 for MS COCO [0.07, 0.15, 0.33, 0.51, 0.69, 0.87, 1.05]
            aspect_ratios_per_layer=[[1.0, 2.0, 0.5],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5],
                                     [1.0, 2.0, 0.5]],
            two_boxes_for_ar1=True,
            steps=[8, 16, 32, 64, 100, 300],
            offsets=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5],
            clip_boxes=False,
            variances=[0.1, 0.1, 0.2, 0.2],
            normalize_coords=True,
            subtract_mean=[123, 117, 104],
            swap_channels=[2, 1, 0],
            confidence_thresh=0.01,
            iou_threshold=0.45,
            top_k=200,
            nms_max_output_size=400)

 # 2: Load the trained weights into the model.

 # TODO: Set the path of the trained weights.
 weights_path = 'C:/Users/USAgData/TF SSD 
 Keras/weights/VGG_VOC0712Plus_SSD_300x300_iter_240000.h5'

 model.load_weights(weights_path, by_name=True)

 # 3: Compile the model so that Keras won't complain the next time you load it.

 adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)

 ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)

 model.compile(optimizer=adam, loss=ssd_loss.compute_loss)


dataset = DataGenerator()

# TODO: Set the paths to the dataset here.
dir= "C:/Users/USAgData/TF SSD Keras/VOC/VOCtest_06-Nov-2007/VOCdevkit/VOC2007/"
Pascal_VOC_dataset_images_dir = dir+ 'JPEGImages'
Pascal_VOC_dataset_annotations_dir = dir + 'Annotations/'
Pascal_VOC_dataset_image_set_filename = dir+'ImageSets/Main/test.txt'

# The XML parser needs to now what object class names to look for and in which order to map them to integers.
classes = ['background',
           'aeroplane', 'bicycle', 'bird', 'boat',
           'bottle', 'bus', 'car', 'cat',
           'chair', 'cow', 'diningtable', 'dog',
           'horse', 'motorbike', 'person', 'pottedplant',
           'sheep', 'sofa', 'train', 'tvmonitor']

dataset.parse_xml(images_dirs=[Pascal_VOC_dataset_images_dir],
                  image_set_filenames=[Pascal_VOC_dataset_image_set_filename],
                  annotations_dirs=[Pascal_VOC_dataset_annotations_dir],
                  classes=classes,
                  include_classes='all',
                  exclude_truncated=False,
                  exclude_difficult=False,
                  ret=False)



evaluator = Evaluator(model=model,
                      n_classes=n_classes,
                      data_generator=dataset,
                      model_mode=model_mode)



results = evaluator(img_height=img_height,
                    img_width=img_width,
                    batch_size=8,
                    data_generator_mode='resize',
                    round_confidences=False,
                    matching_iou_threshold=0.5,
                    border_pixels='include',
                    sorting_algorithm='quicksort',
                    average_precision_mode='sample',
                    num_recall_points=11,
                    ignore_neutral_boxes=True,
                    return_precisions=True,
                    return_recalls=True,
                    return_average_precisions=True,
                    verbose=True)

Ответы [ 5 ]

0 голосов
/ 08 августа 2019

Проблема также может возникать, если есть несовместимая версия cuDNN, что может иметь место, если вы установили Tensorflow с conda, так как conda также устанавливает CUDA и cuDNN при установке Tensorflow.

Решение заключается в установкеTensorflow с pip и устанавливайте CUDA и cuDNN отдельно без conda, например, если у вас CUDA 10.0.130 и cuDNN 7.4.1 ( протестированные конфигурации ) , затем

pip install tensorflow-gpu==1.13.1
0 голосов
/ 03 июля 2019

Я боролся с этой проблемой в течение недели.Причина была очень глупой: я использовал фотографии в высоком разрешении для обучения.

Надеюсь, это сэкономит кому-то время :)

0 голосов
/ 02 января 2019

Проблема заключается в несовместимости более новых версий tenorflow 1.10.x и версий cudnn 7.0.5 и cuda 9.0.Самое простое решение - понизить тензор потока до 1.8.0

pip install --upgrade tenorflow-gpu == 1.8.0

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

Я видел это сообщение об ошибке по трем различным причинам, с разными решениями:

1.У вас проблемы с кешем

Я регулярно работаю над этой ошибкой, закрывая процесс python, удаляя каталог ~/.nv (в linux, rm -rf ~/.nv) и перезапуская процесс Python.Я точно не знаю, почему это работает.Это, вероятно, по крайней мере частично связано со вторым вариантом:

2.Недостаточно памяти

Ошибка также может отображаться, если у вас заканчивается ОЗУ видеокарты.С графическим процессором NVIDIA вы можете проверить использование памяти графической карты с помощью nvidia-smi.Это даст вам не только информацию о том, сколько памяти GPU у вас используется (что-то вроде 6025MiB / 6086MiB, если вы почти достигли предела), а также список процессов, которые используют память GPU.

Если у вас не хватает ОЗУ, вам нужно перезапустить процесс (который должен освободить ОЗУ), а затем использовать менее интенсивный подход.Вот несколько вариантов:

  • уменьшение размера пакета
  • с использованием более простой модели
  • с использованием меньшего объема данных
  • ограничение Доля памяти TensorFlow GPU: ДляНапример, следующий код гарантирует, что TensorFlow использует <= 90% вашей оперативной памяти: </li>
import keras
import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
keras.backend.tensorflow_backend.set_session(tf.Session(config=config))

Это замедлит оценку вашей модели, если она не используется вместе с вышеуказанными элементами, предположительно, поскольку большие данныеset нужно будет менять местами, чтобы уместиться в небольшой объем выделенной памяти.

3.У вас есть несовместимые версии драйверов CUDA, TensorFlow, NVIDIA и т. Д.

Если у вас никогда не работали подобные модели, у вас не хватает VRAM и , ваш кэш чистый,Я бы вернулся и настроил CUDA + TensorFlow, используя лучшее из доступных руководств по установке - я добился наибольшего успеха, выполнив инструкции на https://www.tensorflow.org/install/gpu, а не на сайте NVIDIA / CUDA.

0 голосов
/ 14 декабря 2018

У меня была эта ошибка, и я исправил ее, удалив все версии CUDA и cuDNN из моей системы.Затем я установил CUDA Toolkit 9.0 (без каких-либо исправлений) и cuDNN v7.4.1 для CUDA 9.0 .

...