Распознавание небольших сосудов на КТ изображениях с unet - PullRequest
1 голос
/ 02 мая 2020

Мы пытаемся создать трехмерное легочное сосудистое дерево, используя компьютерные томограммы. Мы используем VGG-16 в качестве кодера и идентичные слои (без переноса весов) в качестве декодера. Поскольку изображения КТ существенно отличаются от изображений, используемых на тренировке VGG-16, точная настройка применяется ко всей сети.

Набор данных состоит из более 22000 обучающих данных и 8000 проверочных данных. Для каждой эпохи сеть случайным образом выбирала 2000 обучающих данных и 800 проверочных данных. Кроме того, размер партии выбран как 3.

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

Исходное изображение CT как: исходное изображение

Метка изображения: изображение с меткой

Прогнозирование сети: прогнозируемое изображение

До сих пор мы пытались изменить структуру сети со стандартного u- net на u- net с помощью обучения с переносом. Кроме того, мы попытались сделать изображения ярче, но эти изменения не решили проблему.

Я также могу предоставить код предварительной обработки:

# Pixel intensities we interested in
pixel_range = (-6000, 6000)

# Normalizing the images
image = ((image-pixel_range[0]) / (pixel_range[1]-pixel_range[0]))*255
image[image>255] = 255
image[image<0] = 0

# Histogram equalization
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
histogram_equalized_image = clahe.apply(image)

# Enhancing the image
maxIntensity = 255.0
phi = 1
theta = 1
ratio = 1.5
enhanced_image = (maxIntensity/phi)*(histogram_equalized_image/(maxIntensity/theta))**ratio
enhanced_image = np.array(enhanced_image, dtype=np.uint8)

1 Ответ

0 голосов
/ 04 мая 2020

Сегментирование небольших сосудов не является тривиальной задачей для сверточных нейронных сетей. Честно говоря, вам, вероятно, повезет больше, если вы сегментируете область легких, а затем используете простой алгоритм, такой как порог, для получения легочных сосудов.

Вы предоставляете слишком мало информации, но если бы я прокомментировал ваш код, я бы придерживался сначала к стандартной архитектуре U- Net. Кроме того, «увеличение» диапазона ваших пикселей немного странно. Попробуйте обрезать некоторые значения интенсивности, чтобы ограничить диапазон пикселей, с которым вы работаете. Попробуйте поработать с изображениями. Я не уверен, почему вы используете только 2000 срезов изображений за эпоху. Убедитесь, что ваши данные разделены случайным образом для каждого пациента, а не для каждого изображения.

...