Привет, я протестировал вашу выпущенную модель, мой код относится к вашему ноутбуку. мой код
`caffe.set_mode_gpu()
caffe.set_device(2)
net_liver = caffe.Net('/home/zhou/zou/Cascaded-FCN/models/cascadedfcn/step1/step1_deploy.prototxt', '/home/zhou/zou/Cascaded-FCN/models/cascadedfcn/step1/step1_weights. caffemodel', caffe.TEST)
img=read_dicom_series("../train_image/3Dircadb1.17/PATIENT_DICOM/")
lbl=read_liver_lesion_masks("../train_image/3Dircadb1.17/MASKS_DICOM/")
С = 90
img_p = step1_preprocess_img_slice(img[...,S])
lbl_p = preprocess_lbl_slice(lbl[...,S])
net_liver.blobs['данные'].data[0,0,...] = img_p
pred = net_liver.forward()['вероятность'][0,1] > 0,5
plt.figure(figsize=(3*5,10))
plt.subplot(1, 3, _1)
plt.title('CT')
plt.imshow(img_p[92:-92,92:-92], 'серый')
plt.subplot(1, 3, 2)
plt.title('GT')
plt.imshow (lbl_p, 'серый')
plt.subplot(1, 3, 3)
plt.title('пред')
plt.imshow(пред, 'серый')`
но результат очень плохой, как это
Есть ли какой-нибудь трюк, которым я пренебрег?
Результат выглядит странно. Прежде чем вносить изменения, убедитесь, что вы можете запустить блокнот как есть и получить правильные результаты.
Код такой же, как вы показываете в блокноте, поэтому я не могу найти, где код неправильный, можете ли вы дать мне несколько советов? Спасибо
Я столкнулся с той же проблемой с вами, вы узнали? Я был бы признателен, если бы вы могли поделиться своим выходом. @manutdzou
Я думаю, что выпущенная модель неверна, когда я самостоятельно обучаю свою собственную модель и использую приведенный выше код, она работает хорошо, и результат хороший.
@RenieWell @mohamed-ezz
Это отличные новости @manutdzou . Вы можете написать запрос на вытягивание и предложить свою обученную модель публике. Просто загрузите свою модель на общедоступный файлообменник и измените файл readme, указав ссылку и свое имя.
Ничего себе, я получил тот же странный результат, что и ваш первый результат. Тогда я уверен, что эта выпущенная модель не так хороша. В любом случае, я пересобираю U-Net на TensorFlow, результат моего прогноза не очень хороший, но и не странный.
@manutdzou . Привет, ребята, не могли бы вы поделиться своим кодом?
Спасибо большое.
Всем привет,
Я только что обновил файл Readme и добавил образы докеров, которые плавно запускают наш код.
Подробнее о том, как запустить образ докера, см. в файле Readme.
Ожидаемый результат должен выглядеть так, как показано на этой распечатке.
С наилучшими пожеланиями,
Патрик
cascaded_unet_inference.pdf.pdf
@PatrickChrist Привет, Патрик, спасибо за отличную работу, но когда я пытаюсь использовать предварительно обученную модель, я обнаруживаю, что nvidia-docker сложно установить, и не могли бы вы поделиться правильной предварительно обученной моделью без использования nvidia-docker.
@zakizhou Я думаю, что, поскольку это проблема воспроизводимости, Docker — наш лучший способ добиться этого.
nvidia-docker
нужен только в том случае, если вы хотите обрабатывать файлы на графическом процессоре. Однако вы можете просто использовать docker
, если у вас все в порядке с работой на процессоре.
Если вы используете дистрибутив Linux, с какими проблемами вы сталкиваетесь при установке nvidia-docker
?
Модели также размещены в https://github.com/IBBM/Cascaded-FCN/tree/master/models/cascadedfcn , вы можете использовать их в своей хост-среде (без Docker).
@mohamed-ezz спасибо за ваш ответ, я использую Ubuntu без графического процессора, действительно, я пробовал docker
вместо nvidia-docker
, но, к сожалению, когда я попытался импортировать предварительно обученную модель кофе, ядро jupyter блокнот сброшен, и я не понимаю, почему. Как и то, что @manutdzou сказал в этом выпуске, предварительно обученная модель здесь https://github.com/IBBM/Cascaded-FCN/tree/master/models/cascadedfcn плохо работает с образцом. Я установил caffe с помощью conda. Как вы думаете, проблема возникла из-за неправильной версии caffe?
Да, это, вероятно, кофейная версия. Пожалуйста, используйте образ докера.
4 июля 2017 г., 17:45, «Цзе Чжоу» [email protected] написал:
@mohamed-ezz https://github.com/mohamed-ezz спасибо за ваш ответ, я
используя ubuntu без gpu, действительно, я пробовал docker вместо
nvidia-docker, но, к сожалению, когда я попытался импортировать предварительно обученную модель кофе,
ядро ноутбука jupyter сброшено, и я не понимаю, почему. Как что
@manutdzou https://github.com/manutdzou сказал в этом выпуске, что
предварительно обученная модель здесь https://github.com/IBBM/Cascaded-FCN/tree/master/
models/cascadedfcn плохо работает с образцом изображения. я установил кофе
с conda, как вы думаете, это неправильная версия caffe, которая вызвала это
проблема?—
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/IBBM/Cascaded-FCN/issues/13#issuecomment-312908109 ,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/ADqENQMhAJvhyvV1SZ5ApQelMqNhBlTMks5sKl39gaJpZM4M4ckQ
.
@mohamed-ezz Хорошо, я бы попробовал эту модель на сервере с графическим процессором, еще раз спасибо!
Нет необходимости в графическом процессоре, вместо этого просто используйте докер с изображением в README.md.
нвидиа-докер.
4 июля 2017 г., 18:59, «Цзе Чжоу» [email protected] написал:
@mohamed-ezz https://github.com/mohamed-ezz Хорошо, я бы попробовал модель на
сервер с gpu, еще раз спасибо!—
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/IBBM/Cascaded-FCN/issues/13#issuecomment-312919887 ,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/ADqENQh6pIiGyQYTbKSOx_2reMDlja3Cks5sKm-GgaJpZM4M4ckQ
.
Я выпустил версию модели правой печени и поражения в Baidu , можно использовать эту модель вот так
`импортировать sys, os
sys.path.insert(0, '/home/zhou/zou/caffe_ws/python')
sys.path.insert(0,'/home/zhou/zou/Cascaded-FCN/lib')
импортировать numpy как np
из matplotlib импортировать pyplot как plt
импортное кафе
result_path = "/home/zhou/zou/Cascaded-FCN/code/result/"
если нет os.path.exists(result_path):
os.makedirs (результат_путь)
im_list = open('test_lesion_list.txt', 'r').read().splitlines()
caffe.set_mode_gpu()
caffe.set_device(0)
net_liver = caffe.Net('deploy.prototxt', 'liver.caffemodel', caffe.TEST)
net_lesion = caffe.Net('deploy.prototxt', 'lesion.caffemodel', caffe.TEST)
печень = 1
поражение = 2
для i в диапазоне (0, len (im_list)):
im = np.load(im_list[i].split(' ')[0])
маска = np.load(im_list[i].split(' ')[1])
in_ = np.array(im, dtype=np.float32)
in_expand = in_[np.newaxis, ...]
blob = in_expand[np.newaxis, :, :, :]
net_liver.blobs['data'].reshape(*blob.shape)
net_liver.blobs['data'].data[...] = blob
net_liver.forward()
output_liver = net_liver.blobs['prob'].data[0].argmax(axis=0)
net_lesion.blobs['data'].reshape(*blob.shape)
net_lesion.blobs['data'].data[...] = blob
net_lesion.forward()
output_lesion = net_lesion.blobs['prob'].data[0].argmax(axis=0)
output = output_liver
ind_1 = np.where(output_liver ==0)
output_lesion[ind_1] = 255
ind_2 = np.where(output_lesion ==0)
output[ind_2] = 2
plt.figure(figsize=(3*5,10))
plt.subplot(1, 3, 1)
plt.title('CT')
plt.imshow(im[92:-92,92:-92], 'gray')
plt.subplot(1, 3, 2)
plt.title('GT')
plt.imshow(mask, 'gray')
plt.subplot(1, 3, 3)
plt.title('pred')
plt.imshow(output, 'gray')
path = result_path + im_list[i].split(' ')[0].split('/')[-1][0:-3] +'jpg'
plt.savefig(path)
plt.close()
`
показан какой-то результат
@mohamed-ezz @RenieWell @mjiansun @PatrickChrist @PiaoLiangHXD
слой {
имя: "данные"
тип: "Ввод"
сверху: "данные"
input_param { форма: { затемнение: 1 затемнение: 1 затемнение: 572 затемнение: 572 } }
}
слой {
имя: "conv_d0a-b"
тип: "Свертка"
внизу: "данные"
сверху: "d0b"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 64
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d0b"
тип: "РеЛУ"
внизу: "d0b"
сверху: "d0b"
}
слой {
имя: "conv_d0b-c"
тип: "Свертка"
внизу: "d0b"
сверху: "d0c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 64
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d0c"
тип: "РеЛУ"
внизу: "d0c"
сверху: "d0c"
}
слой {
имя: "pool_d0c-1a"
тип: "Пул"
внизу: "d0c"
сверху: "d1a"
pooling_param {
бассейн: МАКС.
размер_ядра: 2
шаг: 2
}
}
слой {
имя: "conv_d1a-b"
тип: "Свертка"
внизу: "d1a"
сверху: "d1b"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 128
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d1b"
тип: "РеЛУ"
внизу: "d1b"
сверху: "d1b"
}
слой {
имя: "conv_d1b-c"
тип: "Свертка"
внизу: "d1b"
сверху: "d1c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 128
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d1c"
тип: "РеЛУ"
внизу: "d1c"
сверху: "d1c"
}
слой {
имя: "pool_d1c-2a"
тип: "Пул"
внизу: "d1c"
сверху: "d2a"
pooling_param {
бассейн: МАКС.
размер_ядра: 2
шаг: 2
}
}
слой {
имя: "conv_d2a-b"
тип: "Свертка"
внизу: "d2a"
сверху: "d2b"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 256
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d2b"
тип: "РеЛУ"
внизу: "d2b"
сверху: "d2b"
}
слой {
имя: "conv_d2b-c"
тип: "Свертка"
внизу: "d2b"
вверху: "d2c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 256
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d2c"
тип: "РеЛУ"
внизу: "d2c"
вверху: "d2c"
}
слой {
имя: "pool_d2c-3a"
тип: "Пул"
внизу: "d2c"
сверху: "d3a"
pooling_param {
бассейн: МАКС.
размер_ядра: 2
шаг: 2
}
}
слой {
имя: "conv_d3a-b"
тип: "Свертка"
внизу: "d3a"
сверху: "d3b"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 512
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d3b"
тип: "РеЛУ"
внизу: "d3b"
сверху: "d3b"
}
слой {
имя: "conv_d3b-c"
тип: "Свертка"
внизу: "d3b"
сверху: "d3c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 512
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d3c"
тип: "РеЛУ"
внизу: "d3c"
сверху: "d3c"
}
слой {
имя: "pool_d3c-4a"
тип: "Пул"
внизу: "d3c"
сверху: "d4a"
pooling_param {
бассейн: МАКС.
размер_ядра: 2
шаг: 2
}
}
слой {
имя: "conv_d4a-b"
тип: "Свертка"
внизу: "d4a"
сверху: "d4b"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 1024
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d4b"
тип: "РеЛУ"
внизу: "d4b"
сверху: "d4b"
}
слой {
имя: "conv_d4b-c"
тип: "Свертка"
внизу: "d4b"
сверху: "d4c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 1024
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_d4c"
тип: "РеЛУ"
внизу: "d4c"
сверху: "d4c"
}
слой {
имя: "upconv_d4c_u3a"
тип: "Деконволюция"
внизу: "d4c"
вверху: "u3a"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 512
блокнот: 0
размер_ядра: 2
шаг: 2
weight_filler {
тип: "ксавьер"
}
}
}
слой {
имя: "relu_u3a"
тип: "РеЛУ"
внизу: "u3a"
вверху: "u3a"
}
слой {
имя: "crop_d3c-d3cc"
тип: "Обрезка"
внизу: "d3c"
внизу: "u3a"
сверху: "d3cc"
}
слой {
имя: "concat_d3cc_u3a-b"
тип: "Конкат"
внизу: "u3a"
внизу: "d3cc"
вверху: "u3b"
}
слой {
имя: "conv_u3b-c"
тип: "Свертка"
внизу: "u3b"
вверху: "u3c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 512
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_u3c"
тип: "РеЛУ"
внизу: "u3c"
вверху: "u3c"
}
слой {
имя: "conv_u3c-d"
тип: "Свертка"
внизу: "u3c"
вверху: "u3d"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 512
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_u3d"
тип: "РеЛУ"
внизу: "u3d"
вверху: "u3d"
}
слой {
имя: "upconv_u3d_u2a"
тип: "Деконволюция"
внизу: "u3d"
вверху: "u2a"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 256
блокнот: 0
размер_ядра: 2
шаг: 2
weight_filler {
тип: "ксавьер"
}
}
}
слой {
имя: "relu_u2a"
тип: "РеЛУ"
внизу: "u2a"
вверху: "u2a"
}
слой {
имя: "crop_d2c-d2cc"
тип: "Обрезка"
внизу: "d2c"
внизу: "u2a"
сверху: "d2cc"
}
слой {
имя: "concat_d2cc_u2a-b"
тип: "Конкат"
внизу: "u2a"
внизу: "d2cc"
вверху: "u2b"
}
слой {
имя: "conv_u2b-c"
тип: "Свертка"
внизу: "u2b"
вверху: "u2c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 256
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_u2c"
тип: "РеЛУ"
внизу: "u2c"
вверху: "u2c"
}
слой {
имя: "conv_u2c-d"
тип: "Свертка"
внизу: "u2c"
вверху: "u2d"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 256
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_u2d"
тип: "РеЛУ"
внизу: "u2d"
вверху: "u2d"
}
слой {
имя: "upconv_u2d_u1a"
тип: "Деконволюция"
внизу: "u2d"
вверху: "u1a"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 128
блокнот: 0
размер_ядра: 2
шаг: 2
weight_filler {
тип: "ксавьер"
}
}
}
слой {
имя: "relu_u1a"
тип: "РеЛУ"
внизу: "у1а"
вверху: "u1a"
}
слой {
имя: "crop_d1c-d1cc"
тип: "Обрезка"
внизу: "d1c"
внизу: "у1а"
вверху: "d1cc"
}
слой {
имя: "concat_d1cc_u1a-b"
тип: "Конкат"
внизу: "у1а"
внизу: "d1cc"
вверху: "u1b"
}
слой {
имя: "conv_u1b-c"
тип: "Свертка"
внизу: "u1b"
вверху: "u1c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 128
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_u1c"
тип: "РеЛУ"
внизу: "u1c"
вверху: "u1c"
}
слой {
имя: "conv_u1c-d"
тип: "Свертка"
внизу: "u1c"
вверху: "u1d"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 128
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_u1d"
тип: "РеЛУ"
внизу: "u1d"
вверху: "u1d"
}
слой {
имя: "upconv_u1d_u0a_NEW"
тип: "Деконволюция"
внизу: "u1d"
сверху: "u0a"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 64
блокнот: 0
размер_ядра: 2
шаг: 2
weight_filler {
тип: "ксавьер"
}
}
}
слой {
имя: "relu_u0a"
тип: "РеЛУ"
внизу: "u0a"
сверху: "u0a"
}
слой {
имя: "crop_d0c-d0cc"
тип: "Обрезка"
внизу: "d0c"
внизу: "u0a"
сверху: "d0cc"
}
слой {
имя: "concat_d0cc_u0a-b"
тип: "Конкат"
внизу: "u0a"
внизу: "d0cc"
вверху: "u0b"
}
слой {
имя: "conv_u0b-c_New"
тип: "Свертка"
внизу: "u0b"
сверху: "u0c"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 64
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_u0c"
тип: "РеЛУ"
внизу: "u0c"
сверху: "u0c"
}
слой {
имя: "conv_u0c-d_New"
тип: "Свертка"
внизу: "u0c"
сверху: "u0d"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 64
блокнот: 0
размер_ядра: 3
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
имя: "relu_u0d"
тип: "РеЛУ"
внизу: "u0d"
сверху: "u0d"
}
слой {
имя: "conv_u0d-score_New"
тип: "Свертка"
внизу: "u0d"
наивысший балл"
параметр {
лр_мульт: 1
распад_мульт: 1
}
параметр {
лр_мульт: 2
распад_мульт: 0
}
convolution_param {
номер_выхода: 2
блокнот: 0
размер_ядра: 1
weight_filler {
тип: "ксавьер"
}
двигатель: КАФЕ
}
}
слой {
Название: "Проб"
тип: "Софтмакс"
внизу: "оценка"
сверху: "проблема"
}
Отличная работа @manutdzou
Спасибо за вашу поддержку. Не могли бы вы зафиксировать свою работу в этом репо?
У нас может быть папка model-zoo/manutdzou, в которой вы размещаете свой код в виде блокнота, а ваш prototxt и ссылки на baidu в виде текстового файла? Другие пользователи обязательно оценят. Если у вас есть документ о вашей работе, мы также можем добавить это.
Хорошо, если мой код и модель работают хорошо, я буду рад внести изменения в этот репозиторий!
发自网易邮箱大师
07.07.2017 17:33, Патрик Крист написал:
Отличная работа @manutdzou
Спасибо за вашу поддержку. Не могли бы вы зафиксировать свою работу в этом репо?
У нас может быть папка model-zoo/manutdzou, в которой вы размещаете свой код в виде блокнота, а ваш prototxt и ссылки на baidu в виде текстового файла? Другие пользователи обязательно оценят. Если у вас есть документ о вашей работе, мы также можем добавить это.
—
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите ветку.
Самый полезный комментарий
Я думаю, что выпущенная модель неверна, когда я самостоятельно обучаю свою собственную модель и использую приведенный выше код, она работает хорошо, и результат хороший.
@RenieWell @mohamed-ezz