使用模型训练进行多标签图像分类以进行多分类?

问题描述

我目前正在通过这个kaggle项目进行工作,以对白细胞进行多图像分类(共有4类:嗜中性粒细胞,嗜酸性粒细胞,淋巴细胞和单核细胞)。

对一种类型的白细胞进行分类非常简单。我使用来自keras的CNN构建了模型。我想进一步解决这个问题,并尝试在多标签图像分类中实现该模型。

例如,如果我将此图像输入模型:https://webpath.med.utah.edu/jpeg5/HEME002.jpg 我希望我的模型输出白细胞的存在,在这种情况下,它应该输出“存在中性粒细胞和淋巴细胞”。

问题在于,该数据集中的所有图像都是具有单个白细胞的图像,而这正是模型的训练对象。从未见过图像中包含一个或多个白细胞。

我的问题是可以采用这种模型吗?如何将其外推到与一种类型的白细胞多的图像一起工作?

我将在此处使用此代码:

bnmomemtum=0.85
def fire(x,squeeze,expand):
  y  = Conv2D(filters=squeeze,kernel_size=1,activation='relu',padding='same')(x)
  y  = BatchNormalization(momentum=bnmomemtum)(y)
  y1 = Conv2D(filters=expand//2,padding='same')(y)
  y1 = BatchNormalization(momentum=bnmomemtum)(y1)
  y3 = Conv2D(filters=expand//2,kernel_size=3,padding='same')(y)
  y3 = BatchNormalization(momentum=bnmomemtum)(y3)
  return concatenate([y1,y3])

def fire_module(squeeze,expand):
  return lambda x: fire(x,expand)

x = Input(shape=[IMG_SIZE,IMG_SIZE,3])
y = BatchNormalization(center=True,scale=False)(x)
y = Activation('relu')(y)
y = Conv2D(kernel_size=5,filters=12,padding='same',use_bias=True,activation='relu')(x)
y = BatchNormalization(momentum=bnmomemtum)(y)

y = fire_module(12,24)(y)
y = MaxPooling2D(pool_size=2)(y)

y = fire_module(24,48)(y)
y = MaxPooling2D(pool_size=2)(y)

y = fire_module(32,64)(y)
y = MaxPooling2D(pool_size=2)(y)

y = fire_module(24,48)(y)
y = MaxPooling2D(pool_size=2)(y)

y = fire_module(18,36)(y)
y = MaxPooling2D(pool_size=2)(y)

y = fire_module(12,24)(y)

y = GlobalAveragePooling2D()(y)
y = Dense(NUM_CLASSES,activation='sigmoid')(y)
model = Model(x,y)
model.compile(optimizer=optimizers.RMSprop(lr=2e-5),loss='binary_crossentropy',metrics=['accuracy'])

model.summary()

解决方法

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

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

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