如何设计轮廓识别模型?特别是如何塑造输出层?
How to design a model for contour recognition? In particular, how to shape the output layer?
我想设计和训练一个神经网络,用于自动识别某些显微图像中的边缘。
刚开始用的是Keras,以后可能会考虑PyTorch
图像的结构比较简单,有一些暗区,一些亮区,比较容易区分,任务是selectdark和clear区域之间轮廓的像素。黑暗和清晰之间的过渡是渐进的,所以我的结果不是边缘像素的单行,而是边缘处的 10 或 15 像素宽的“色带”。
我手动标注了 200 多张图片,所以对于每张图片,我都有另一张相同大小的图片,其中轮廓像素为黑色,所有其他像素为白色。
我看过很多关于如何设计、编译和拟合模型的教程(神经网络),然后如何使用手动注释的数据对其进行测试。
然而,大多数教程都是针对分类问题,其中输出层中的神经元数量就是类别数量。
我的问题是不是分类问题,理想情况下我的输出应该是与输入大小相同的图像。
所以,这是我的问题:
设计输出层的最佳方式是什么?神经元数量等于像素数量的层是最好的主意吗?或者这是一种浪费,还有更高效的方法吗?
附录
- 图像很“容易”,但仍然很难找到轮廓像素,所以我认为值得使用机器学习方法。
- 黑暗和清晰之间的过渡有点渐进,所以我的结果不是边缘上的单行像素,而是一条带,一条 10 或 15 宽的边缘像素带。因为我在寻找一条像素带,所以我的类别应该是“边缘”和“非边缘”。如果我使用类别“暗像素”和“清晰像素”,然后以数字方式找到两个区域之间的像素,我不会得到我需要的“色带”结果。
简短的回答是“是”:输出中的神经元与输入中的神经元一样多是个好主意,即输出一个与输入图像具有相同分辨率的图像.
网络架构将有一个输入层,每个像素都有一个神经元,然后隐藏层通常会缩小到更少的神经元,可能有 卷积 层,然后更多层将重新扩展神经元的数量,直到输出层,原则上它可能具有与输入层相同数量的神经元。
这类问题中最常见的架构是 U-net 架构,在文章“U-Net: Convolutional Networks for Biomedical Image分割”,作者:Ronneberger、Fischer 和 Brox,发表在 open arxiv 上:https://arxiv.org/abs/1505.04597。
[
我想设计和训练一个神经网络,用于自动识别某些显微图像中的边缘。 刚开始用的是Keras,以后可能会考虑PyTorch
图像的结构比较简单,有一些暗区,一些亮区,比较容易区分,任务是selectdark和clear区域之间轮廓的像素。黑暗和清晰之间的过渡是渐进的,所以我的结果不是边缘像素的单行,而是边缘处的 10 或 15 像素宽的“色带”。
我手动标注了 200 多张图片,所以对于每张图片,我都有另一张相同大小的图片,其中轮廓像素为黑色,所有其他像素为白色。
我看过很多关于如何设计、编译和拟合模型的教程(神经网络),然后如何使用手动注释的数据对其进行测试。
然而,大多数教程都是针对分类问题,其中输出层中的神经元数量就是类别数量。
我的问题是不是分类问题,理想情况下我的输出应该是与输入大小相同的图像。
所以,这是我的问题:
设计输出层的最佳方式是什么?神经元数量等于像素数量的层是最好的主意吗?或者这是一种浪费,还有更高效的方法吗?
附录
- 图像很“容易”,但仍然很难找到轮廓像素,所以我认为值得使用机器学习方法。
- 黑暗和清晰之间的过渡有点渐进,所以我的结果不是边缘上的单行像素,而是一条带,一条 10 或 15 宽的边缘像素带。因为我在寻找一条像素带,所以我的类别应该是“边缘”和“非边缘”。如果我使用类别“暗像素”和“清晰像素”,然后以数字方式找到两个区域之间的像素,我不会得到我需要的“色带”结果。
简短的回答是“是”:输出中的神经元与输入中的神经元一样多是个好主意,即输出一个与输入图像具有相同分辨率的图像.
网络架构将有一个输入层,每个像素都有一个神经元,然后隐藏层通常会缩小到更少的神经元,可能有 卷积 层,然后更多层将重新扩展神经元的数量,直到输出层,原则上它可能具有与输入层相同数量的神经元。
这类问题中最常见的架构是 U-net 架构,在文章“U-Net: Convolutional Networks for Biomedical Image分割”,作者:Ronneberger、Fischer 和 Brox,发表在 open arxiv 上:https://arxiv.org/abs/1505.04597。
[