I am working on building a cow detector for a local farm. I have a dataset of images with bounding boxes (not segmentation polygons) for every cow appearing in the images (different number of cows in every image). What is the best and easiest model to use to accomplish this task? Many cows stand behind others so there will be a lot of cases of occlusion. Is there a go-to model that I can get running quickly in Keras to perform well on this dataset? Any tips would be appreciated.
There are 2 object detectors that are quite popular:
Haar Cascade Classifier, introduced by Viola and Jones: available on OpenCV (Python, Java and C++) and on Matlab computer vision toolbox (and probably on many other languages) is a great model for when deep learning is not a option.
Yolo, You Only Look Once: It is a real-time object detector and classifier, it uses a DL CNN and if I am not mistaken has cows on it's training dataset (so you can use transfer learning). It is part of the Darknet library and you should totally check the site. Also, check Tiny Yolo is you need some more speed.
You can should also take a look at:
- MMOD (max-margin object-detection): has a great implementation using dlib.
- Fast R-CNN and R-CNN: Deep learning classifier, check the paper on this site.
My advice would be to go straight to YOLO and try it out without training for the COW class, then do some fine tunning by retraining few layers with your data. If you need more accuracy than that you can go for R-CNN (probably has some models already trained with cows).
if you lack on computational power you can try MMOD and HCC. But if you got the time you should check BDNN: Binary convolution neural networks for fast object detection, don't know if it is implemented in any libraries already since this paper is relatively fresh (march 2019).