4. 切片级与图块级数据组织

在数字病理AI训练中,一张全切片图像(WSI)动辄数万×数万像素,无法直接送入网络。工程上必须把“切片级”的全局坐标体系与“图块级”的局部训练样本解耦,再通过多分辨率采样和高效存储把二者连接起来。本节围绕这条数据链路展开。

一、切片级与图块级:两套坐标必须显式对齐

切片级坐标以WSI的Level 0(最高分辨率)像素为基准,原点在左上角,x向右、y向下,单位是像素。图块级坐标则是某个图块在其自身小图内的坐标,通常以图块左上角为原点。二者之间靠一个仿射关系连接:

level0_x = tile_x0 + local_x * (2 ** level)
level0_y = tile_y0 + local_y * (2 ** level)
# level 为下采样层级,level 0 为原始分辨率
# tile_x0, tile_y0 为该图块在 level 0 下的左上角坐标

例如在level 2(下采样4倍)下取一个256×256的图块,其左上角在level 2坐标为(1000, 800),则对应level 0的左上角为(4000, 3200),右下角为(4000+256×4, 3200+256×4)=(5024, 4224)。所有标注、掩膜、检测框都必须统一到同一坐标系后再做映射,否则会出现“图块对、标签错位”的隐蔽错误。工程上建议在数据集中固定记录level0_x0, level0_y0, level, tile_size四个字段,任何坐标转换都从这四个量出发。

二、多分辨率采样:金字塔层级与采样策略

WSI通常以金字塔形式存储,level 0为原始分辨率,level n为下采样2^n倍。多分辨率采样有两层含义:一是选择在哪个层级取图块,二是同一区域跨层级组合。前者决定图块的物理视野与像素密度,后者用于多尺度特征融合。

常见策略包括:固定层级采样(如统一在level 1取512×512,对应level 0的1024×1024视野)、按目标尺寸反推层级(希望图块覆盖2048×2048的level 0区域且输出512×512,则level=2)、以及多层级配对采样(同一中心点分别取level 0和level 2图块,用于超分或跨尺度一致性训练)。采样时还需处理边缘不足:当图块超出切片有效区域时,可选择丢弃、镜像填充或零填充,但必须与推理阶段保持一致。

切片级坐标 → 多分辨率金字塔 → 图块级采样 切片级 (Level 0) 原点(0,0) 左上角 x→右, y→下 尺寸示例 60000×45000 图块 x0 y0 多分辨率金字塔 Level 0 1× 60000×45000 Level 1 2× 30000×22500 Level 2 4× 15000×11250 Level 3 8× 下采样 2^n 倍 图块级 (Tile) 局部原点(0,0) 尺寸示例 256×256 local_x, local_y (0..255) 读取 采样 坐标映射关系 level0_x = tile_x0 + local_x × 2^level level0_y = tile_y0 + local_y × 2^level 存储格式与读取策略 格式:SVS / NDPI / OME-TIFF 索引:坐标→字节偏移 策略:缓存 + 预取 + 并行

三、数据存储格式:从容器到索引

WSI常见格式包括Aperio SVS、Hamamatsu NDPI、OME-TIFF等,它们本质上是“金字塔图像+元数据+索引”的容器。SVS基于TIFF,每个层级是一个IFD(图像文件目录),元数据中记录MPP(每像素微米数)、扫描倍率、各层级尺寸。OME-TIFF则用XML描述层级关系,更适合跨平台。图块级训练数据通常另存为LMDB、HDF5或分片PNG/JPEG,前者适合随机读取,后者便于分布式共享。

选择格式时要关注三点:是否支持随机访问、是否保留层级元数据、是否便于与标注对齐。若把图块预先裁剪成独立文件,务必在文件名或索引中保留level0_x0, level0_y0, level,否则后续无法回溯到原切片位置。

四、高效读取策略:缓存、预取与并行

训练时若每个batch都从磁盘随机读WSI,I/O会成为瓶颈。常用做法是:

  • 层级缓存:把常用层级的图块解码后放入内存或SSD缓存,按LRU淘汰。
  • 顺序预取:按扫描顺序预取相邻图块,利用磁盘顺序读优势。
  • 多进程并行:用DataLoader的worker并行解码,每个worker独立打开文件句柄,避免锁竞争。
  • 格式转换:把SVS转为分片LMDB,减少TIFF解码开销,实测可提升2~5倍吞吐(示例值,实际取决于硬件与切片尺寸)。
建议在数据集中固定记录level0_x0, level0_y0, level, tile_size,任何坐标转换都从这四个量出发,避免多套坐标系混用。

五、一个可执行的图块索引示例

下面是一个图块索引表的字段设计,可直接用于LMDB或CSV:

字段含义示例
slide_id切片唯一标识TCGA-02-0001
level0_x0图块左上角在level 0的x4000
level0_y0图块左上角在level 0的y3200
level下采样层级2
tile_size图块边长(像素)256
label图块类别或掩膜路径tumor

读取时,根据level打开对应层级,用level0_x0 / 2^level得到该层级下的读取起点,再读取tile_size大小的区域。若使用OpenSlide,可直接调用read_region((x, y), level, (w, h)),其中x、y为level 0坐标,OpenSlide会自动完成层级换算。这样,切片级坐标、金字塔层级与图块级像素就形成了一条可验证、可复现的数据链路。

注意:不同格式对坐标原点定义可能不同(如部分NDPI以左上角为原点,部分以右下角为原点),接入新数据源时必须先用已知标注点验证映射方向,确认后再批量处理。