File size: 3,114 Bytes
c99d160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
---
license: mit
tags:
  - cellpose
  - cell-segmentation
  - hemocytometer
  - microscopy
---

# CellposeCellCounter segmentation models

Weights for [CellposeCellCounter](https://huggingface.co/spaces/LiangLabUMB/cellposecellcounter),
which counts cells and scores viability from a phone photograph of a hemocytometer.

## Files

| file | used by the app | description |
|---|---|---|
| `hemocytometer_retrained_20260825.npy` | **yes** | Cellpose-SAM fine-tuned for hemocytometer counting. This is the current model. |
| `generalmodel.npy` | **yes** | General-purpose model used for the confluency tab only. Not retrained, not evaluated on this imaging setup. |
| `hemocytometer_v1_baseline.npy` | no | The previous hemocytometer model, kept so the comparison below can be reproduced. |

## Training — `hemocytometer_retrained_20260825.npy`

Fine-tuned from the built-in `cpsam` (Cellpose 4.1.1) on 13 images from a phone-adaptor
hemocytometer setup, **1,069 hand-corrected cell masks**. Images were cropped to a single
4×4 counting block and downscaled to the app's working size (max side 1024) before
annotation, so training and inference see identical geometry.

```
python -m cellpose --train --dir train --test_dir test --mask_filter _seg.npy \
    --use_gpu --learning_rate 0.00001 --weight_decay 0.1 --n_epochs 60 \
    --train_batch_size 1
```

Annotation was human-in-the-loop: the previous model's output was corrected rather than
drawn from scratch. Across the first eight images that took **336 deletions and 79
additions** — the base error was over-segmentation of debris, not missed cells.

## Evaluation

Six held-out images, **556 hand-annotated cells**, one-to-one IoU matching at 0.5. These
images were used for neither training nor any parameter choice.

| model | count error | precision | recall | F1 |
|---|---|---|---|---|
| **retrained** | **−1.1%** | **0.940** | 0.926 | **0.933** |
| v1 baseline | +40.6% | 0.656 | 0.932 | 0.768 |
| Cellpose-SAM, off the shelf | −63.7% | 0.741 | 0.238 | 0.319 |

False positives fell from 260 to 36 with recall unchanged. Off-the-shelf Cellpose-SAM is
not usable on these images — on one field it returned a single object out of 74.

## Intended use and limitations

- Brightfield hemocytometer images from a phone adaptor, cropped to one counting block.
  Performance on whole uncropped frames is much worse: cells fall to ~7 px and the
  populations stop being separable.
- `generalmodel.npy` has **not** been retrained or evaluated here. Confluency results
  should be treated as indicative.
- Viability is not produced by these models. The app determines it from a local-contrast
  threshold, described in the Space README.
- Trained on one cell line, one adaptor and two phones. Generalisation beyond that is
  untested.

## Provenance

`generalmodel.npy` and `hemocytometer_v1_baseline.npy` are copies of `generalmodel.npy`
and `hemocytometermodel.npy` from
[myang4218/cellposemodel](https://huggingface.co/myang4218/cellposemodel) (Apache-2.0),
mirrored here so the published pipeline does not depend on an external personal account.