python - 使用 Deeplabv3+ keras 进行二元语义分割(专为多类语义分割而设计)
问题描述
我是 Keras 的新手,如果这个问题很愚蠢,我很抱歉。
我在这里https://keras.io/examples/vision/deeplabv3_plus/找到了用于执行多类语义分割的 deeplabv3+ 模型。我需要将此代码调整到另一个目的,因为我需要对医学图像执行二进制语义分割。改变从
NUM_CLASSES = 20
到 NUM_CLASSES = 1?
如果我输入 NUM_CLASSES = 2,则会收到关于 logits 和标签之间不匹配的错误。
关于损失函数,代码行是 loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)
我想把它改成
损失 = keras.losses.BinaryCrossentropy(from_logits=True)
但损失变为负数。我应该添加其他东西吗?
谢谢!
编辑:用于多类语义分割的 deeplabv3+ 在最后一层使用 keras.activations.linear(x)。出于我的目的,我是否应该使用 softmax 而不是 keras.activations.linear(x) 和 BinaryCrossEntropy 并输入 from_logits=False?
解决方案
我解决了这个问题,如果有人需要答案:“......对于二进制分割,最好保持 NUM_CLASS = 1,因为你试图预测一个二进制掩码,它代表背景中的单个类。如果你想预测one-hot-encoded 分割掩码(在当前上下文中,设置 NUM_CLASS = 2),然后才使用 softmax 激活和稀疏分类交叉熵损失,否则使用 sigmoid 激活和二进制交叉熵。”
推荐阅读
- machine-learning - 为什么打乱训练数据会影响我的随机森林分类器的准确性?
- matlab - 在 MATLAB 中创建等长向量
- express - Express 中的内容安全策略报告空对象
- javascript - 无法读取未定义的属性“具有”
- amazon-web-services - 丢失连接 EC2 和连接超时
- javascript - 即使使用 tabindex="0",交互元素也不会通过选项卡获得焦点
- mysql - 记录所有数据库查询并在需要时查看它们的最佳方法是什么?
- sharepoint - 如何将项目添加到共享点“新建”菜单?
- maven - 我可以将自动安装的 Maven 版本添加到 Jenkins 作业的路径中吗?
- git - 源树 - 切换分支仍然包含未提交的更改