首页 >> 大全

如何用mask-R-CNN公开代码测试自制数据集

2023-12-20 大全 48 作者:考证青年

mask-R-CNN论文问世好久了,但可用的代码好像也不多,至少我是没找到几个。归根结底还是这个算法比较难以实现,要满足论文里面提及的要求还是不太容易的。目前最好的公开代码应该是这个:

论文地址:

这篇博客主要是用来记录如何使用自制的数据集在这个代码上测试。我的目的只是用来分割,并不用来分类

根据文件中的 .md的指引,用来指导我们利用自制数据集测试的方法在以下几个文件中

那么这里我以.ipynb文件里面的代码为讲解示范。首先来讲解以下数据集的数据结构。

首先我们要知道mask-r-cnn是用来干嘛的。它是用来做分割,分类的。所以我们的数据集要具备分割和分类两种信息。分割就是mask,分类就是ids。下面分开讲,看看两种信息需要在我们的数据集中如何提现。

分割

分割功能是在-r-cnn上增加的分支,用过mask实现。mask的原理也比较简单,这里我就不多说了,主要说明我们的数据集需要怎么准备。我以细胞核分割为例。

左边的是病理图(),灰色的黑斑是细胞核,之所以是灰度图,是因为图片经过染色分离处理,提取出了CD3染色(具体查找染色分离算法),右边是0和255的mask()

首先,mask-r-cnn代码中默认使用的是三维的彩色图,所以当我们输入灰度图时,会转化成彩色图。

_自动生成测试用例代码_代码自测工具

这个代码在mrcnn/utils.py里面。

因为这个代码本来是要实现分类的,所以必须把图片中的每个对象都创建一个mask。以我的细胞分割来说。上面的mask图中,每个白斑都代表一个细胞,那么就是一共有多少个白斑,我们就需要多少个mask,所以,右边的mask图要转化成下面这种形式

保持原来的尺寸不变,每个白斑独立一张mask

上面是用代码实现的,mask一张变成多张。

数据集的制作就完成了,下面是数据结构。

数据结构

我们要注意的是这个变量。这个是描述每一个mask的类别的。前面说了mask要把一张完整的,弄成多张独立的,大小不变,只保留一个对象。那么这个class就是用来标记每个独立的mask是什么类别的。比如说,细胞图中有肿瘤细胞,免疫细胞两种,那么就是1和2

比如说一个完整的mask只有这两个细胞,第一个是肿瘤细胞,第二个是免疫细胞,那么我们的返回就应该是[1,2],具体的代码实现

因为我不做分类,那么我的label就全部都是1

好了,下面是具体的代码修改了

我们在.ipynb上面直接修改

我们首先要修改分类个数,原本是1+3,我改成了1+1.1+3表示,一个背景,加3中类别(原先的代码中是矩形,三角形和原型),我不需要分类,所以我的类别就是1.

我们要改写原本的函数,图中画红线的应该保留,我们同时记下(图片路径)和(mask路径),方便后面的数据加载。

同时我们要改写和函数。函数其实不用怎么改,主要的是函数。在.ipynb中的函数是用来画图的,可以直接不用,在mrcnn/.py中的函数坐着留给我们自己写。上面是我自己写的函数,就是要把跟image对应的所有单独的mask都打包起来,然后还要返回长度和mask数量一致的如果你需要分类就不能像我一样全部设置成1,每个类别对应自己的ids。

好了,我们的数据集准备就完成了,我用了120张的训练集和40个的验证集训练,epoch发现设置在15的时候效果不错

我说的效果不错仅仅是在这么多epoch中效果不错,跟我想要的效果还是相差甚远。分割的准确度远远低于unet。

这就是我的一个小测试,欢迎指正。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了