I'm trying to train a SSD mobilenet detector for detecting cell nuclei in microscopic images. I'm using the tensorflow object detection API on Ubuntu 16.04 with the GPU implementation of tensorflow (version 1.4). My input images are 256x256 RGB jpg tiles with annotated cell nuclei.
When I start training I see a nice increase in mAP and at about 6k global steps (batch size 12) I can detect most cell nuclei, but with some multiple detections of the same cell nuclei.
Weirdly, after this point mAP starts decreasing and the model detects less and less cell nuclei even though the TotalLoss continues to decrease. At 100k steps, almost no nuclei are detected.
I use the standard config file for SSD except that I've decreased the cutoff for matched/unmatched boxes. If I don't use this modification the model has difficulties detecting any cell nuclei because they are smallish objects and too few boxes overlap them.
matcher {
argmax_matcher {
matched_threshold: 0.3
unmatched_threshold: 0.3
ignore_thresholds: false
negatives_lower_than_unmatched: true
force_match_for_each_row: true
}
Why is it that mAP and detection accuracy decrease over time even though TotalLoss improves? My intuition of the results is that the detection model is getting more and more accurate (never a false positive) but less and less sensitive (lots of false negatives).
Any suggestions greatly appreciated!
(here are some example images from tensorboard)