Как получить прогноз для модели глаукомыPython

Программы на Python
Anonymous
Как получить прогноз для модели глаукомы

Сообщение Anonymous »


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

Я выполнил все, но так и не получил прогноз или результат, который мне нужен.

Мой код:

из бэкэнда импорта keras как K импортировать numpy как np # создаем базовую предварительно обученную модель base_model = DenseNet121 (веса = '/Users/awabe/Desktop/Project/PapilaDB/ClinicalData/DenseNet-BC-121-32-no-top.h5', include_top=False) x = базовая_модель.выход x = tf.cast(x, dtype=tf.float32) # добавляем глобальный слой пространственного среднего пула x = GlobalAveragePooling2D()(x) x = tf.cast(x, dtype=tf.float32) # и логистический уровень предсказания = Dense(len(labels), active="sigmoid")(x) модель = Модель (входные данные = базовая_модель. ввод, выходные данные = прогнозы) model.compile(optimizer='adam', loss=get_weighted_loss(pos_weights, neg_weights)) и для истории:

history = model.fit_generator(train_generator, validation_data=valid_generator, шаги_за_эпоху = 25, проверка_шагов = 34, эпох = 25) plt.plot(history.history['потеря']) plt.ylabel("потеря") plt.xlabel("эпоха") plt.title("Кривая потерь при обучении") plt.show() и я использую визуализацию обучения с помощью GradCAM, чтобы создать тепловую карту, выделяющую важные области изображения для прогнозирования патологического состояния.

df = pd.read_csv("/Users/awabe/Desktop/Project/PapilaDB/ExpertsSegmentations/small train/small-train.csv") IMAGE_DIR = "/Users/awabe/Desktop/Project/PapilaDB/ExpertsSegmentations/маленький поезд" # показывать только ярлыки с верхними 4 AUC labels_to_show = np.take(labels, np.argsort(auc_rocs)[::-1], )[:1] после этого я использую это:

def get_gradcam(image_path, gradcam_model): print(f"Загрузка изображения из: {image_path}") img = tf.keras.preprocessing.image.load_img(image_path, target_size=(224, 224)) print("Изображение успешно загружено") img_tensor = tf.keras.preprocessing.image.img_to_array(img) img_tensor = np.expand_dims(img_tensor, axis=0) img_tensor /= 255. # Вычислить Grad-CAM, используя пользовательскую модель Last_conv_layer_output, cam = gradcam_model(img_tensor) # Проверяем, имеет ли значение Last_conv_layer_output или cam None если Last_conv_layer_output имеет значение «Нет» или «Камера» имеет значение «Нет»: print("Градиентов нет. Невозможно вычислить Grad-CAM.") возвращаться # Измените размер CAM до того же размера, что и входное изображение cam = tf.image.resize(cam, (img.shape[1], img.shape[0])) # Обрезаем значения, чтобы оставить только положительные кулачок = tf.maximum(кулачок, 0) # Нормализовать CAM камера /= tf.reduce_max(камера) # Преобразование CAM в RGB cam = cv2.applyColorMap(np.uint8(255 * cam.numpy()), cv2.COLORMAP_JET) # Наложение CAM на входное изображение тепловая карта = cv2.cvtColor(cam, cv2.COLOR_BGR2RGB) тепловая карта[np.where(cam.sum(axis=2) == 0)] = 0 img = cv2.imread(путь_изображения) superimpose_img = cv2.addWeighted(img, 0,5, тепловая карта, 0,5, 0) # Отображение входного изображения, CAM и наложенного изображения plt.figure(figsize=(10, 10)) plt.subplot(131) plt.imshow(изображение) plt.title('Входное изображение') plt.axis('выкл') plt.subplot(132) plt.imshow (камера) plt.title('CAM') plt.axis('выкл') plt.subplot(133) plt.imshow(superimpose_img) plt.title('Наложение CAM') plt.axis('выкл') # Если вы хотите визуализировать градиенты, добавьте следующие строки plt.figure(figsize=(10, 5)) для i, градиент в перечислении (last_conv_layer_output.numpy()[0]): plt.subplot(1, last_conv_layer_output.shape[-1], i + 1) plt.imshow(grad, cmap='viridis') plt.axis('выкл') plt.title(f'Канал {i}') plt.show() # Вызов функции gradcam_model = tf.keras.applications.DenseNet121(weights='imagenet', include_top=True) image_path = "/Users/awabe/Desktop/Project/PapilaDB/ExpertsSegmentations/small train/Opht_cont_RET004OD.jpg" def get_gradcam(image_path, gradcam_model): print(f"Загрузка изображения из: {image_path}") img = tf.keras.preprocessing.image.load_img(image_path, target_size=(224, 224)) print("Изображение успешно загружено") img_tensor = tf.keras.preprocessing.image.img_to_array(img) img_tensor = np.expand_dims(img_tensor, axis=0) img_tensor /= 255. # Вычислить Grad-CAM, используя пользовательскую модель gradcam_result = gradcam_model(img_tensor) # Проверяем, является ли gradcam_result кортежем (last_conv_layer_output, cam) или одним значением если isinstance(gradcam_result, кортеж): Last_conv_layer_output, cam = gradcam_result еще: Last_conv_layer_output = gradcam_result cam =last_conv_layer_output # Предполагая, что результатом является сама карта активации # ... Остальные функции остаются прежними # Вызов функции get_gradcam (путь_изображения, gradcam_model) что дает мне:

Загрузка изображения из: /Users/awabe/Desktop/Project/PapilaDB/ExpertsSegmentations/small train/Opht_cont_RET004OD.jpg Изображение успешно загружено

Наконец-то мне нужно запустить этот код:

утилита импорта из изображения импорта tensorflow.keras.preprocessing IMAGE_DIR = "/Users/awabe/Desktop/Project/PapilaDB/ExpertsSegmentations/маленький поезд" util.compute_gradcam(модель, 'Opht_cont_RET004OD.jpg', IMAGE_DIR, df, labels, labels_to_show) Предполагается, что выходное изображение будет предоставлено мне вместе с прогнозом от 0 до 1 или в процентах.

но это дает мне следующее:


Изображение


Есть ли что-то, что я упустил, код или функцию, которые мне следует добавить?

Вернуться в «Python»