EffecientDet is one of the effecient and fastest object detection model that also uses more constrained resources in comparison to other models (Fig. 1). It was introduced in the following paper: EfficientDet: Scalable and Efficient Object Detection
To train an EffecientDet model, you need to call the following highlighted functions shown here below.
Common part to both Fastai and Pytorch-Lightning Training Loop
- DataLoaders: Manstisshrimp creates common train DataLoader and valid DataLoader to both fastai Learner and Pytorch-Lightning Trainer
# DataLoaders train_dl = efficientdet.train_dl(train_ds, batch_size=16, num_workers=4, shuffle=True) valid_dl = efficientdet.valid_dl(valid_ds, batch_size=16, num_workers=4, shuffle=False)
- Model: IceVision creates an EffecientDet model implemented by Ross Wightman. The model accepts a variety of backbones. In following example, the tf_efficientdet_lite0 is used. We can also choose one of the efficientdet_d0 to efficientdet_d7 backbones, and MobileNetv3 classes (which also includes MNasNet, MobileNetV2, MixNet and more)
# Model model = efficientdet.model( model_name="tf_efficientdet_lite0", num_classes=len(class_map), img_size=size )
- How to use a different backbone: "efficientdet_d0" example
# Model model = efficientdet.model( model_name="efficientdet_d0", num_classes=len(class_map), img_size=size )
Once the DataLoaders and the EffecientDet model are created, we create the fastai Learner. The latter uses the DataLoaders and the EffecientDet model shared with the Pytorch-Lightning Trainer (as shown in the Pytorch-Lightning example here below):
- Fastai Learner: It glues the EffecientDet model with the DataLoaders as well as the metrics and any other fastai Learner arguments. In the code snippet shown here below, we highlight the parts related to the EffecientDet model.
# Fastai Learner metrics = [COCOMetric()] learn = efficientdet.fastai.learner( dls=[train_dl, valid_dl], model=model, metrics=metrics ) learn.fine_tune(10, 1e-2, freeze_epochs=1)
The Pytorch-Lightning example is quiet similar to the fastai one in a sense it uses the same DataLoaders objects, and the same EffecientDet model. Those are subsenquently passed on to the Pytorch-Lightning Trainer:
- Pytorch-Lightning Trainer: It glues the EffecientDet model with the DataLoaders. In Pytorch-Lightning, the metrics are passed to the model object as opposed to fastai where it is passed to the Learner object. In the code snippet shown here below, we highlight the parts related to the EffecientDet model.
# Train using pytorch-lightning class LightModel(efficientdet.lightning.ModelAdapter): def configure_optimizers(self): return SGD(self.parameters(), lr=1e-4) light_model = LightModel(model, metrics=metrics) trainer = pl.Trainer(max_epochs=10, gpus=1) trainer.fit(light_model, train_dl, valid_dl)
How to train the PETS Dataset using EffecientDet
Background: Paper Abstract
Model efficiency has become increasingly important in computer vision. In this paper, we systematically study neural network architecture design choices for object detection and propose several key optimizations to improve efficiency. First, we propose a weighted bi-directional feature pyramid network (BiFPN), which allows easy and fast multiscale feature fusion; Second, we propose a compound scaling method that uniformly scales the resolution, depth, and width for all backbone, feature network, and box/class prediction networks at the same time.
Based on these optimizations and better backbones, we have developed a new family of object detectors, called EfficientDet, which consistently achieve much better efficiency than prior art across a wide spectrum of resource constraints. In particular, with singlemodel and single-scale, our EfficientDet-D7 achieves stateof-the-art 55.1 AP on COCO test-dev with 77M parameters and 410B FLOPs1, being 4x – 9x smaller and using 13x – 42x fewer FLOPs than previous detectors.
We use Ross Wightman's implementation which is an accurate port of the official TensorFlow (TF) implementation that accurately preserves the TF training weights
Any backbone in the timm model collection that supports feature extraction (features_only arg) can be used as a bacbkone. Currently this includes all models implemented by the EficientNet and MobileNetv3 classes (which also includes MNasNet, MobileNetV2, MixNet and more)