用labelme实现细胞计数
时间: 2025-01-10 15:32:21 浏览: 7
使用 Labelme 实现细胞计数的方法
准备环境
为了使用 labelme
进行细胞计数,首先需要安装必要的软件包。这包括 Python 的 pip 工具以及特定的库。
pip install labelme imgaug numpy opencv-python matplotlib scikit-image pandas torch torchvision
数据准备与标注
创建一个新的文件夹用于存储所有的图像和对应的 JSON 文件。通过 labelme
对细胞显微镜图片进行逐个标注。启动 labelme
图形界面工具:
labelme
在图形界面上加载待标注的细胞图像,在每张图像上手动绘制多边形区域来包围单个细胞,并保存标注结果为 .json
文件[^1]。
转换标注数据至 Mask R-CNN 训练格式
编写脚本来读取由 labelme
产生的 JSON 文件并将它们转化为 COCO 格式的注解文件,这是许多目标检测框架支持的标准输入格式之一。下面是一个简单的 Python 脚本片段展示如何解析来自 labelme
的 JSON 输出并将其转换成适合 Mask R-CNN 输入的形式:
import json
from pathlib import Path
import pycocotools.mask as mask_util
import base64
import cv2
import numpy as np
def shape_to_mask(img_shape, points, shape_type=None,
line_width=10, point_size=5):
"""Converts a single polygon annotation into an image-level binary mask."""
...
annotations = []
for path in Path('path/to/json/files').glob('*.json'):
with open(path) as f:
lbl_data = json.load(f)
for obj in lbl_data['shapes']:
...
with open('output_coco_format.json', 'w') as outfile:
json.dump(annotations, outfile)
此部分代码省略了一些细节逻辑,具体实现可以根据实际需求调整。完成上述操作之后,就可以获得适用于 Mask R-CNN 模型训练的数据集了。
构建自定义 Dataset 类
基于 PyTorch 官方文档中的指导构建一个继承自 torch.utils.data.Dataset
的类,以便能够轻松地迭代整个数据集。该类应该重写两个主要函数:__len__()
, 返回数据集中项目的总数; 和 __getitem__(index)
,返回给定索引处的具体项 (image and target):
class CellDataset(torchvision.datasets.CocoDetection):
def __init__(self, root, annFile, transform=None):
super().__init__(root=root, annFile=annFile, transform=transform)
dataset_train = CellDataset(root='train_images/',
annFile='output_coco_format.json',
transform=get_transform(train=True))
data_loader_train = torch.utils.data.DataLoader(
dataset_train, batch_size=2, shuffle=True, num_workers=4,
collate_fn=utils.collate_fn)
开始训练过程
最后一步就是配置好超参数后调用训练循环来进行模型的学习。这部分可以参照官方提供的完整例子来做适当修改以适应具体的实验设置。