- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经使用 U-net 一段时间了,并注意到在我的大多数应用程序中,它都会对特定类产生高估。
例如,这是一个灰度图像:
手动分割 3 个类别(病变 [绿色]、组织 [洋红色]、背景 [所有其他]):
我注意到的预测问题(边界处的高估):
使用的典型架构如下所示:
def get_unet(dim=128, dropout=0.5, n_classes=3):
inputs = Input((dim, dim, 1))
conv1 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(inputs)
conv1 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = Conv2D(128, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool1)
conv2 = Conv2D(128, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv2)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
conv3 = Conv2D(256, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool2)
conv3 = Conv2D(256, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv3)
pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)
conv4 = Conv2D(512, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool3)
conv4 = Conv2D(512, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv4)
conv4 = Dropout(dropout)(conv4)
pool4 = MaxPooling2D(pool_size=(2, 2))(conv4)
conv5 = Conv2D(1024, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool4)
conv5 = Conv2D(1024, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv5)
conv5 = Dropout(dropout)(conv5)
up6 = concatenate([UpSampling2D(size=(2, 2))(conv5), conv4], axis=3)
conv6 = Conv2D(512, 3, activation='relu', padding='same', kernel_initializer='he_normal')(up6)
conv6 = Conv2D(512, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv6)
up7 = concatenate([UpSampling2D(size=(2, 2))(conv6), conv3], axis=3)
conv7 = Conv2D(256, 3, activation='relu', padding='same', kernel_initializer='he_normal')(up7)
conv7 = Conv2D(256, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv7)
up8 = concatenate([UpSampling2D(size=(2, 2))(conv7), conv2], axis=3)
conv8 = Conv2D(128, 3, activation='relu', padding='same', kernel_initializer='he_normal')(up8)
conv8 = Conv2D(128, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv8)
up9 = concatenate([UpSampling2D(size=(2, 2))(conv8), conv1], axis=3)
conv9 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(up9)
conv9 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv9)
conv10 = Conv2D(n_classes, (1, 1), activation='relu', padding='same', ker nel_initializer='he_normal')(conv9)
conv10 = Reshape((dim * dim, n_classes))(conv10)
output = Activation('softmax')(conv10)
model = Model(inputs=[inputs], outputs=[output])
return model
加上:
mgpu_model.compile(optimizer='adadelta', loss='categorical_crossentropy',
metrics=['accuracy'], sample_weight_mode='temporal')
open(p, 'w').write(json_string)
model_checkpoint = callbacks.ModelCheckpoint(f, save_best_only=True)
reduce_lr_cback = callbacks.ReduceLROnPlateau(
monitor='val_loss', factor=0.2,
patience=5, verbose=1,
min_lr=0.05 * 0.0001)
h = mgpu_model.fit(train_gray, train_masks,
batch_size=64, epochs=50,
verbose=1, shuffle=True, validation_split=0.2, sample_weight=sample_weights,
callbacks=[model_checkpoint, reduce_lr_cback])
我的问题:您对如何更改架构或超参数以减轻高估有什么见解或建议吗?这甚至可能包括使用可能更擅长更精确分割的不同架构。 (请注意,我已经进行了类(class)平衡/加权以补偿类(class)频率的不平衡)
最佳答案
您可以尝试使用各种损失函数来代替交叉熵。对于多类分割,您可以尝试:
2018 年 brats 的获胜者使用了自动编码器正则化 ( https://github.com/IAmSuyogJadhav/3d-mri-brain-tumor-segmentation-using-autoencoder-regularization )。你也可以尝试这个。该论文的想法是,模型还在学习如何更好地编码潜在空间中的特征,这在某种程度上有助于模型进行分割。
关于python - U网: how to improve accuracy of multiclass segmentation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60019869/
我正在使用 Keras 2.0 包为 Python 训练一个批处理的神经网络。以下是有关数据和训练参数的一些信息: #samples in train: 414934 #features: 59009
我一直在使用 CSS 和 jQuery(简单的 CSS 样式更改,请参阅 here)使事物发光,现在我想知道如何使这些动画变得更好。 目前,我只是在无框阴影和有框阴影之间进行过渡,这看起来不错。但我试
我正在计算几台服务器上的 CPU 使用率。但是计算速度非常非常慢。 这是迄今为止我的代码: While it <= 5 Dim myOptions As New ConnectionOptio
Improved pngnq源归档文件不带有makefile(解压缩时要小心,没有顶层目录)。 如何在openSUSE 11.4上进行编译?安装了libpng/zlib header 和常用的C工具链
我在 MySQL 数据库中有两个表: Book(title, publisher, year) title is primary key Author(name, title) title is fo
public class EntityUtils { private static final Map> searchMap = new HashMap<>(); private st
我们有元素,内置 Extjs 和 scss。我们想提高 scss 的性能。我们使用了 grunt scss-lint,得到以下结果 NestingDepth: Nesting should be no
我有一个包含五个值的数组: "-360°" "0 x" "1r" "0,01 m/s" "0,01 m/s²" 我想提取所有与单位相关的字符串。 我有这个正则表
我创建了一个算法来解决以下问题陈述:问题陈述是: 我们说两个整数 x 和 y 至少有 K 的变化,如果 |x − y| ≥ K(它们差的绝对值至少为K)。给定一个N个整数a1,a2,...,aN和K的
想做个算法,在leetcode上发现了这个问题 Given an array of integers, find two numbers such that they add up to a spec
有什么方法可以增加我的 EditText 的滚动吗?我想让它像在 Web 浏览器上那样滚动,流畅且快速。这可能吗? 谢谢,亚历克斯。 最佳答案 Webview 使用平滑滚动。 ScrollView 也
我的网站有搜索功能。 无论如何,我的网站上有这样的文字:“čurti”“čuožžut”等等...... 问题是,当用户搜索单词“curti”而不是“čurti”时,它应该找到该页面。 一些有助于理解
描述 ifelse() 函数允许通过一系列测试过滤向量中的值,如果结果为正,每个测试都会产生不同的 Action 。例如,让 xx 是一个 data.frame,如下: xx <- data.fram
智能舍入一直是 knitr 的一大特色,可以避免很多 sprintf/round/paste0 走弯路。 在一位客户提示我给出了错误的小数点后,我注意到忘记 $$ 对于可能以科学计数法打印的数字是非常
我想要一个具有快速连接和编辑操作的字符串表示。我已阅读论文 "Ropes: an Alternative to Strings" ,但自 1995 年以来,这方面是否有任何重大改进? 编辑:我之前考虑
我一直在使用 LibGDX 制作一个简单的游戏,现在我尝试在我的游戏中添加一个健康栏。我已经成功在游戏中添加了生命条,目前运行良好。 然而,问题是如何像专业人士一样进一步修改这段代码。我仍在学习过程中
我有一个任务要做。问题是这样的。你给出一个数字,比如x。该程序计算从 1 开始的数字的平方,并且仅当它是回文时才打印它。程序将继续打印这些数字,直到达到您提供的数字 x。 我已经解决了这个问题。它在
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
这个字符集 [^\/:] // all characters except / or : 弱于 jslint b.c.我应该指定可以使用的字符,而不是根据此 SO Post 不能使用的字符. 这是一个
我正在尝试使用另一个表 (B) 中包含的地址数据对一个表 (A) 中的数据进行地理编码。由于街道名称的书写方式可能不同,我想首先浏览 A 中的数据,并为每个元组在给定的邮政编码区内找到 B 中最接近
我是一名优秀的程序员,十分优秀!