看细胞核分割结果时,圆形目标往往容易描准,弯曲或有深缺口的目标却可能出现一侧被削薄。看到这种现象,可以先做一个无需训练的试验。把真实边界直接交给轮廓表示,允许程序从目标内部所有像素里挑最佳中心,它能否表达出这一个形状?如果在这种有利条件下仍然反复漏掉同一部分,继续调整模型阈值未必能解决眼前的问题。我们用 StarDist 本身的几何函数,对一个圆和一个 U 形对象做了这项实验。StarDist 原始论文
从一个中心朝外看,哪些边界能够被看见
二维 StarDist 使用一组方向固定的射线描述对象。每个候选中心沿各方向给出到边界的距离,末端点连接起来形成多边形。若从目标内某一位置到所有需要覆盖的位置都可以沿直线留在对象内部,便存在适合这种描述的中心。圆、椭圆以及一些不规则但能够从内部一处看全的轮廓都可能满足。需要特别注意,星凸并不等同于数学上的凸,表面轻微凹陷也不代表必定失败。真正麻烦的是,某些方向会先穿出对象,越过空白后又重新进入同一个对象的远端。
设想一个 U 形结构。从左臂里面向右臂发射一条射线,中间很可能先碰到内侧边界。一条射线只记录一个距离,无法同时编码“这一段属于目标、中间属于背景、远端又属于目标”。将射线数量加倍会提供更密的角度采样,能够使圆弧或倾斜边缘更加平滑,却没有增加同一方向可保存的边界次数。对于有孔、分叉或深弯钩的对象,这种区别比“像素够不够清楚”更有解释力。换任务时要先明确自己想分的是近圆细胞核、整个细胞还是细长突起,不同定义对应的形状难度差异很大。
实跑经验|给算法真实距离,再遍历所有候选中心
我们安装 StarDist 0.9.2,在九十六乘九十六的网格上生成两个带真值的单对象标签图。圆形前景有一千五百一十七个像素,U 形有一千四百七十个像素。为每个对象分别尝试八、三十二和六十四条射线。使用包里的原生几何函数从真值计算各候选像素至边界的射线距离,再逐个将每个前景像素作为中心,利用同一包的多边形函数恢复标签。在这两张离散图、这套射线规则和所枚举中心的范围内,以交并比最大的结果作为该设置的最佳重建。这个步骤没有训练网络,也没有从显微图预测距离。本次实际调用的几何接口
| 对象 | 8 条射线的最佳交并比 | 32 条射线 | 64 条射线 |
|---|---|---|---|
| 圆形 | 0.9251 | 0.9895 | 0.9921 |
| U 形 | 0.4578 | 0.6871 | 0.6872 |

圆形从八条加到三十二条时最佳交并比由约 0.925 提高到 0.990,六十四条达到约 0.992。U 形从八条增到三十二条时也有所改善,但从三十二到六十四只由 0.687075 增至 0.687246。最后这个 U 形最佳重建仍漏掉四百五十七个真实像素,另外多涂四个背景像素。圆形在同一设置只漏六个、多六个。用漏像素和多涂像素并列,能区分轮廓主要是没包住目标,还是误吞了大量背景。只给一个交并比数字,难以据此选择下一步检查。
from stardist.geometry import star_dist, polygons_to_label
import numpy as np
# mask 是单一目标的二值真值,p 指定在目标内部,坐标为行、列
p = np.array([[61, 29]])
dist = star_dist(mask.astype(np.uint16), n_rays=32, mode="cpp")
poly = polygons_to_label(dist[p[0, 0], p[0, 1]][None, :], p, shape=mask.shape) > 0
print((poly & mask).sum(), (mask & ~poly).sum(), (poly & ~mask).sum())
请留意这里“最佳”的含义。试验枚举每个前景像素,并使用第一个边界的真值射线距离,得到的是此处定义的重建结果。它没有在任意多边形、所有连续中心或所有可能预测距离之间作数学优化,因此不应声称 0.687 是任何星形多边形都绝对无法超越的上界。模型在自然图像上还要估计中心、前景概率和距离,随后抑制重叠的候选对象,这些误差来源也未包含在本次几何测试。写清楚试验回答的层级,才知道该把改进精力放在标注、网络还是形状定义上。
用自己的标注复做时,还可以把漏掉的像素用一种颜色、多涂的像素用另一种颜色叠在原图上。若不同中心总是丢失同一条弯曲远端,这提示几何约束值得优先检查。若误差主要沿整个边缘均匀分布一圈,可能与像素采样、栅格化和边界标注宽度有关。两种情形交并比可能接近,但分别需要改进对象表示或细化轮廓定义。
如何区分形状表达不足与对象数目的错误
手里若有人工标注,可按目标的轮廓类型分组,从近圆、轻度凹陷、严重弯曲各挑几例,用上述真值重建先检查表示误差。若每组的真值轮廓都能可靠重建,但模型常把两个相邻细胞核合在一起,应回看目标检测和候选去重环节,同时检查两枚核交界处的图像证据。若圆核已经很好,严重弯曲的细胞始终漏掉远端,先检查所需的对象定义是否适合单中心射线表达。把两类失败分开,可以避免仅通过调低检测置信阈值来“修复”每个目标内部缺失的面积。
实例层面的评价也要保留。若一个长弯对象被拆成两个较圆对象,整体前景的覆盖面积可能更接近真值,但细胞计数多出一枚,按每细胞汇总的面积和亮度也会偏移。反过来,如果两枚相接的圆核被合并成一个,前景像素总数仍可能变化很小。交付时应同时保留带编号的预测标签、按对象的一对一匹配、漏检与多报清单,再附上按形状分组的轮廓偏差。这样看到一个近圆核轮廓很漂亮,也不会将同一评价自动推广到复杂胞形。作者的实例匹配与评价代码
用真实标注核对形状后,再决定是否值得对整批图像训练或推断。研究团队需要集中处理多批显微图并保存实例标签时,可了解云生信的生物信息分析服务器。
