Cascaded-fcn: problema de teste de modelo

Criado em 10 abr. 2017  ·  19Comentários  ·  Fonte: IBBM/Cascaded-FCN

Olá, testei seu modelo lançado, meu código é referente ao seu notebook. meu código é

`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/cas cadedfcn/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/")
S = 90
img_p = step1_preprocess_img_slice(img[...,S])
lbl_p = preprocess_lbl_slice(lbl[...,S])
net_liver.blobs['data'].data[0,0,...] = img_p
pred = net_liver.forward()['prob'][0,1] > 0,5
plt.figure(figsize=(3*5,10))
plt.subtrama(1, 3, _1)
plt.title('CT')
plt.imshow(img_p[92:-92,92:-92], 'cinza')
plt.subtrama(1, 3, 2)
plt.title('GT')
plt.imshow(lbl_p, 'cinza')
plt.subtrama(1, 3, 3)
plt.title('pred')
plt.imshow(pred, 'cinza')`

mas o resultado é muito ruim assim
result

Comentários muito úteis

Acho que o modelo lançado está errado, quando eu treino meu próprio modelo e uso o código acima ele funciona bem, e o resultado é bom
3dircadb1 1 68

@RenieWell @mohamed-ezz

Todos 19 comentários

Existe algum truque que eu tenha negligenciado?

O resultado parece estranho. Certifique-se de poder executar o notebook como está e obter resultados corretos, antes de fazer modificações.

O código é o mesmo que você mostra no notebook, assim não consigo encontrar onde o código está errado, você pode me dar uma orientação? obrigada

Eu encontrei o mesmo problema com você, você descobriu? Eu apreciaria se você pudesse compartilhar sua saída. @manutdzou

Acho que o modelo lançado está errado, quando eu treino meu próprio modelo e uso o código acima ele funciona bem, e o resultado é bom
3dircadb1 1 68

@RenieWell @mohamed-ezz

Isso é uma ótima notícia @manutdzou . Você é mais do que bem-vindo para escrever um pull request e oferecer seu modelo treinado ao público. Basta enviar seu modelo para um hoster de arquivos público e modificar o leia-me com o link e seu nome.

Uau, obtive o mesmo resultado estranho que o seu primeiro resultado. Então tenho certeza que esse modelo lançado não é tão bom. De qualquer forma eu reconstruo o U-Net no TensorFlow, meu resultado de previsão não é tão bom, mas não é estranho.

@manutdzou . Olá pessoal, você pode compartilhar seu código?
Muito obrigado.

Oi a todos,
Acabei de atualizar o Readme e adicionei imagens docker, que executam nosso código sem problemas.
Consulte o Leiame para obter mais detalhes sobre como iniciar a imagem do docker.
O resultado esperado deve se parecer com esta impressão.
Muitas felicidades,
Patrick
cascaded_unet_inference.pdf.pdf

@PatrickChrist Oi Patrick, obrigado pelo ótimo trabalho, mas quando tento usar o modelo pré-treinado, acho que o nvidia-docker é difícil de instalar e você poderia compartilhar um modelo pré-treinado correto sem usar o nvidia-docker

@zakizhou Acho que, por ser um problema de reprodutibilidade, o Docker é nossa melhor aposta para conseguir isso.

nvidia-docker é necessário apenas se você deseja processar os arquivos na GPU. Você pode, no entanto, apenas usar docker se estiver de acordo com a execução na CPU.

Se você está rodando na distro linux, quais são os problemas que você está enfrentando para instalar nvidia-docker ?

Os modelos também são compartilhados em https://github.com/IBBM/Cascaded-FCN/tree/master/models/cascadedfcn , você pode usá-los em seu ambiente host (sem Docker)

@mohamed-ezz obrigado pela sua resposta, estou usando o Ubuntu sem gpus, na verdade, tentei docker em vez de nvidia-docker mas infelizmente quando tentei importar o modelo caffe pré-treinado, o núcleo do jupyter notebook despejado e não entendo o porquê. Como o que @manutdzou disse nesta edição, o modelo pré-treinado aqui https://github.com/IBBM/Cascaded-FCN/tree/master/models/cascadedfcn tem um desempenho ruim na imagem de amostra. Instalei o caffe com conda, você acha que é a versão errada do caffe que causou esse problema?

Sim, é provável que seja a versão caffe. Por favor, use a imagem do docker.

Em 4 de julho de 2017, 17h45, "Jie Zhou" [email protected] escreveu:

@mohamed-ezz https://github.com/mohamed-ezz obrigado pela sua resposta, eu sou
usando o ubuntu sem gpus, na verdade eu tentei o docker em vez de
nvidia-docker, mas infelizmente quando tentei importar o modelo caffe pré-treinado,
o núcleo do notebook jupyter foi despejado e não entendo o porquê. Como o quê
@manutdzou https://github.com/manutdzou disse nesta edição, o
modelo pré-treinado aqui https://github.com/IBBM/Cascaded-FCN/tree/master/
models/cascadedfcn tem um desempenho ruim na imagem de amostra. instalei o café
com conda, você acha que é a versão errada do caffe que causou isso
problema?


Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/IBBM/Cascaded-FCN/issues/13#issuecomment-312908109 ,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/ADqENQMhAJvhyvV1SZ5ApQelMqNhBlTMks5sKl39gaJpZM4M4ckQ
.

@mohamed-ezz OK, eu tentaria o modelo em um servidor com gpu, obrigado novamente!

Não há necessidade de uma gpu, basta usar o docker com a imagem no README.md, em vez disso
do nvidia-docker.

Em 4 de julho de 2017, 18h59, "Jie Zhou" [email protected] escreveu:

@mohamed-ezz https://github.com/mohamed-ezz OK, eu tentaria o modelo em um
servidor com gpu, obrigado novamente!


Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/IBBM/Cascaded-FCN/issues/13#issuecomment-312919887 ,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/ADqENQh6pIiGyQYTbKSOx_2reMDlja3Cks5sKm-GgaJpZM4M4ckQ
.

Eu lancei uma versão do fígado direito e modelo de lesão no Baidu pode usar este modelo assim

`importar sys,os
sys.path.insert(0, '/home/zhou/zou/caffe_ws/python')
sys.path.insert(0,'/home/zhou/zou/Cascaded-FCN/lib')
importar numpy como np
de matplotlib importar pyplot como plt
importar café

caminho_resultado = "/home/zhou/zou/Cascaded-FCN/code/result/"
se não os.path.exists(result_path):
os.makedirs(caminho_resultado)

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)

fígado = 1
lesão = 2
para i em range(0,len(im_list)):
im = np.load(im_list[i].split(' ')[0])
mascara = 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()

`
algum resultado é mostrado

3dircadb1 17 85
3dircadb1 17 80
@mohamed-ezz @RenieWell @mjiansun @PatrickChrist @PiaoLiangHXD

camada {
nome: "dados"
digite: "Entrada"
topo: "dados"
input_param { shape: { dim: 1 dim: 1 dim: 572 dim: 572 } }
}

camada {
nome: "conv_d0a-b"
digite: "convolução"
inferior: "dados"
topo: "d0b"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 64
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d0b"
digite: "ReLU"
inferior: "d0b"
topo: "d0b"
}
camada {
nome: "conv_d0b-c"
digite: "convolução"
inferior: "d0b"
topo: "d0c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 64
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d0c"
digite: "ReLU"
inferior: "d0c"
topo: "d0c"
}
camada {
nome: "pool_d0c-1a"
tipo: "Conjunto"
inferior: "d0c"
topo: "d1a"
pooling_param {
piscina: MÁX.
kernel_size: 2
passo: 2
}
}
camada {
nome: "conv_d1a-b"
digite: "convolução"
inferior: "d1a"
topo: "d1b"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 128
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d1b"
digite: "ReLU"
inferior: "d1b"
topo: "d1b"
}
camada {
nome: "conv_d1b-c"
digite: "convolução"
inferior: "d1b"
topo: "d1c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 128
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d1c"
digite: "ReLU"
inferior: "d1c"
topo: "d1c"
}
camada {
nome: "pool_d1c-2a"
tipo: "Conjunto"
inferior: "d1c"
topo: "d2a"
pooling_param {
piscina: MÁX.
kernel_size: 2
passo: 2
}
}
camada {
nome: "conv_d2a-b"
digite: "convolução"
inferior: "d2a"
topo: "d2b"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 256
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d2b"
digite: "ReLU"
inferior: "d2b"
topo: "d2b"
}
camada {
nome: "conv_d2b-c"
digite: "convolução"
inferior: "d2b"
topo: "d2c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 256
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d2c"
digite: "ReLU"
inferior: "d2c"
topo: "d2c"
}
camada {
nome: "pool_d2c-3a"
tipo: "Conjunto"
inferior: "d2c"
topo: "d3a"
pooling_param {
piscina: MÁX.
kernel_size: 2
passo: 2
}
}
camada {
nome: "conv_d3a-b"
digite: "convolução"
inferior: "d3a"
topo: "d3b"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 512
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d3b"
digite: "ReLU"
inferior: "d3b"
topo: "d3b"
}
camada {
nome: "conv_d3b-c"
digite: "convolução"
inferior: "d3b"
topo: "d3c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 512
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d3c"
digite: "ReLU"
inferior: "d3c"
topo: "d3c"
}

camada {
nome: "pool_d3c-4a"
tipo: "Conjunto"
inferior: "d3c"
topo: "d4a"
pooling_param {
piscina: MÁX.
kernel_size: 2
passo: 2
}
}
camada {
nome: "conv_d4a-b"
digite: "convolução"
inferior: "d4a"
topo: "d4b"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 1024
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d4b"
digite: "ReLU"
inferior: "d4b"
topo: "d4b"
}
camada {
nome: "conv_d4b-c"
digite: "convolução"
inferior: "d4b"
topo: "d4c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 1024
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "relu_d4c"
digite: "ReLU"
inferior: "d4c"
topo: "d4c"
}

camada {
nome: "upconv_d4c_u3a"
digite: "Deconvolução"
inferior: "d4c"
topo: "u3a"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 512
almofada: 0
kernel_size: 2
passo: 2
peso_enchimento {
tipo: "xavier"
}
}
}

camada {
nome: "relu_u3a"
digite: "ReLU"
inferior: "u3a"
topo: "u3a"
}
camada {
nome: "crop_d3c-d3cc"
tipo: "Cortar"
inferior: "d3c"
inferior: "u3a"
topo: "d3cc"

}
camada {
nome: "concat_d3cc_u3a-b"
tipo: "Concat"
inferior: "u3a"
inferior: "d3cc"
topo: "u3b"
}
camada {
nome: "conv_u3b-c"
digite: "convolução"
inferior: "u3b"
topo: "u3c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 512
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}
camada {
nome: "relu_u3c"
digite: "ReLU"
inferior: "u3c"
topo: "u3c"
}
camada {
nome: "conv_u3c-d"
digite: "convolução"
inferior: "u3c"
topo: "u3d"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 512
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}
camada {
nome: "relu_u3d"
digite: "ReLU"
inferior: "u3d"
topo: "u3d"
}
camada {
nome: "upconv_u3d_u2a"
digite: "Deconvolução"
inferior: "u3d"
topo: "u2a"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 256
almofada: 0
kernel_size: 2
passo: 2
peso_enchimento {
tipo: "xavier"
}
}
}
camada {
nome: "relu_u2a"
digite: "ReLU"
inferior: "u2a"
topo: "u2a"
}
camada {
nome: "crop_d2c-d2cc"
tipo: "Cortar"
inferior: "d2c"
inferior: "u2a"
topo: "d2cc"

}
camada {
nome: "concat_d2cc_u2a-b"
tipo: "Concat"
inferior: "u2a"
inferior: "d2cc"
topo: "u2b"
}
camada {
nome: "conv_u2b-c"
digite: "convolução"
inferior: "u2b"
topo: "u2c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 256
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}
camada {
nome: "relu_u2c"
digite: "ReLU"
inferior: "u2c"
topo: "u2c"
}
camada {
nome: "conv_u2c-d"
digite: "convolução"
inferior: "u2c"
topo: "u2d"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 256
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}
camada {
nome: "relu_u2d"
digite: "ReLU"
inferior: "u2d"
topo: "u2d"
}
camada {
nome: "upconv_u2d_u1a"
digite: "Deconvolução"
inferior: "u2d"
topo: "u1a"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 128
almofada: 0
kernel_size: 2
passo: 2
peso_enchimento {
tipo: "xavier"
}
}
}
camada {
nome: "relu_u1a"
digite: "ReLU"
inferior: "u1a"
topo: "u1a"
}
camada {
nome: "crop_d1c-d1cc"
tipo: "Cortar"
inferior: "d1c"
inferior: "u1a"
topo: "d1cc"

}
camada {
nome: "concat_d1cc_u1a-b"
tipo: "Concat"
inferior: "u1a"
inferior: "d1cc"
topo: "u1b"
}
camada {
nome: "conv_u1b-c"
digite: "convolução"
inferior: "u1b"
topo: "u1c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 128
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}
camada {
nome: "relu_u1c"
digite: "ReLU"
inferior: "u1c"
topo: "u1c"
}
camada {
nome: "conv_u1c-d"
digite: "convolução"
inferior: "u1c"
topo: "u1d"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 128
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}
camada {
nome: "relu_u1d"
digite: "ReLU"
inferior: "u1d"
topo: "u1d"
}
camada {
nome: "upconv_u1d_u0a_NEW"
digite: "Deconvolução"
inferior: "u1d"
topo: "u0a"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 64
almofada: 0
kernel_size: 2
passo: 2
peso_enchimento {
tipo: "xavier"
}
}
}
camada {
nome: "relu_u0a"
digite: "ReLU"
inferior: "u0a"
topo: "u0a"
}
camada {
nome: "crop_d0c-d0cc"
tipo: "Cortar"
inferior: "d0c"
inferior: "u0a"
topo: "d0cc"

}
camada {
nome: "concat_d0cc_u0a-b"
tipo: "Concat"
inferior: "u0a"
inferior: "d0cc"
topo: "u0b"
}
camada {
nome: "conv_u0b-c_New"
digite: "convolução"
inferior: "u0b"
topo: "u0c"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 64
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}
camada {
nome: "relu_u0c"
digite: "ReLU"
inferior: "u0c"
topo: "u0c"
}
camada {
nome: "conv_u0c-d_New"
digite: "convolução"
inferior: "u0c"
topo: "u0d"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 64
almofada: 0
kernel_size: 3
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}
camada {
nome: "relu_u0d"
digite: "ReLU"
inferior: "u0d"
topo: "u0d"
}
camada {
nome: "conv_u0d-score_New"
digite: "convolução"
inferior: "u0d"
melhor pontuação"
parametro {
lr_mult: 1
decaimento_mult: 1
}
parametro {
lr_mult: 2
decaimento_mult: 0
}
convolution_param {
num_output: 2
almofada: 0
kernel_size: 1
peso_enchimento {
tipo: "xavier"
}
motor: CAFE
}
}

camada {
nome: "problema"
tipo: "Softmax"
inferior: "pontuação"
topo: "prob"
}

Ótimo trabalho @manutdzou
Obrigado por seu apoio. Você se importaria de comprometer seu trabalho neste repositório?
Poderíamos ter uma pasta model-zoo/manutdzou na qual você poste seu código como notebook e seu prototxt e os links para baidu como arquivo de texto? Outros usuários definitivamente apreciarão. Se você tiver um artigo sobre seu trabalho, também podemos adicionar isso.

Ok, se meu código e modelo funcionarem bem, ficarei feliz em me comprometer neste repositório!

发自网易邮箱大师
Em 07/07/2017 17:33, Patrick Christ escreveu:

Ótimo trabalho @manutdzou
Obrigado por seu apoio. Você se importaria de comprometer seu trabalho neste repositório?
Poderíamos ter uma pasta model-zoo/manutdzou na qual você poste seu código como notebook e seu prototxt e os links para baidu como arquivo de texto? Outros usuários definitivamente apreciarão. Se você tiver um artigo sobre seu trabalho, também podemos adicionar isso.


Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub ou silencie a conversa.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

lajash picture lajash  ·  25Comentários

MetaDev picture MetaDev  ·  18Comentários

edvakf picture edvakf  ·  29Comentários

Tripphippie picture Tripphippie  ·  56Comentários

Anjum48 picture Anjum48  ·  8Comentários