评估UNET在mxnet中产生意外结果

问题描述

我有一个经过训练的用于语义分割的U-Net模型,在训练阶段,损失,训练准确性和测试准确性都很好。

const formPropsBuilder = <K extends keyof T,T extends Record<string,any>>(name: K): MyFormProps => {
  return {
    id: name as string,}
}
``

我的问题是,当我尝试使用以下代码评估模型时,没有得到我期望的结果。结果始终是一个数组,其中填充了1且几乎没有0,

epoch 16,loss 0.3861,train acc 0.824,test acc 0.807,time 1.535 sec
epoch 17,loss 0.4359,train acc 0.779,test acc 0.801,time 1.524 sec
epoch 18,loss 0.4661,train acc 0.777,test acc 0.803,time 1.607 sec
epoch 19,loss 0.4031,train acc 0.789,test acc 0.838,time 1.475 sec
epoch 20,loss 0.3925,train acc 0.827,test acc 0.830,time 1.495 sec

评估摘要

[1. 1. **0**. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
   1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
   1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.

网络输入为def load_image(img,width,height): data = np.transpose(img,(2,1)) data = mx.nd.array(data) # from numpy.ndarray to mxnet ndarray. print(data.shape) # Expand shape into (B x H x W x c) data = data.astype('float32') return mx.ndarray.expand_dims(data,axis=0) def post_process_maskB(label,img_cols,img_rows,n_classes,p=0.5): return (np.where(label.asnumpy().reshape(img_cols,img_rows) > p,1,0)).astype('uint8') def main(): net = UNet(channels = 3,num_class = 2) net.load_parameters('./checkpoints/epoch_0010_model.params',ctx=ctx) image_path = './data/train/image/0.png' # load an image for prediction testimg = cv2.imread(image_path,1) imgX = load_image(testimg,img_width,img_height) print(imgX.shape) data = imgX.astype(np.float32) # Run prediction out = net(data).argmax(axis=1) print(out.shape) mask = post_process_maskA(out,512,2,p = 0.5) print(mask.shape) ,结果为(1,3,512)

网络体系结构如下:

(1,512)

我怀疑问题出在以下电话上。

UNet(
  (input_conv): BaseConvBlock(
    (conv1): Conv2D(3 -> 64,kernel_size=(3,3),stride=(1,1),padding=(1,1))
    (conv2): Conv2D(64 -> 64,1))
  )
  (down_conv_0): DownSampleBlock(
    (maxPool): MaxPool2D(size=(2,2),stride=(2,padding=(0,0),ceil_mode=False,global_pool=False,pool_type=max,layout=NCHW)
    (conv): BaseConvBlock(
      (conv1): Conv2D(64 -> 6,1))
      (conv2): Conv2D(6 -> 6,1))
    )
  )
  (down_conv_1): DownSampleBlock(
    (maxPool): MaxPool2D(size=(2,layout=NCHW)
    (conv): BaseConvBlock(
      (conv1): Conv2D(6 -> 12,1))
      (conv2): Conv2D(12 -> 12,1))
    )
  )
  (down_conv_2): DownSampleBlock(
    (maxPool): MaxPool2D(size=(2,layout=NCHW)
    (conv): BaseConvBlock(
      (conv1): Conv2D(12 -> 24,1))
      (conv2): Conv2D(24 -> 24,1))
    )
  )
  (down_conv_3): DownSampleBlock(
    (maxPool): MaxPool2D(size=(2,layout=NCHW)
    (conv): BaseConvBlock(
      (conv1): Conv2D(24 -> 48,1))
      (conv2): Conv2D(48 -> 48,1))
    )
  )
  (up_conv_0): UpSampleBlock(
    (up): Conv2DTranspose(24 -> 48,kernel_size=(4,4),1))
    (conv): BaseConvBlock(
      (conv1): Conv2D(48 -> 24,1))
    )
  )
  (up_conv_1): UpSampleBlock(
    (up): Conv2DTranspose(12 -> 24,1))
    (conv): BaseConvBlock(
      (conv1): Conv2D(24 -> 12,1))
    )
  )
  (up_conv_2): UpSampleBlock(
    (up): Conv2DTranspose(6 -> 12,1))
    (conv): BaseConvBlock(
      (conv1): Conv2D(12 -> 6,1))
    )
  )
  (up_conv_3): UpSampleBlock(
    (up): Conv2DTranspose(3 -> 6,1))
    (conv): BaseConvBlock(
      (conv1): Conv2D(67 -> 3,1))
      (conv2): Conv2D(3 -> 3,1))
    )
  )
  (output_conv): Conv2D(3 -> 2,kernel_size=(1,1))
)

任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...