# DeepMAC model **DeepMAC** (Deep Mask heads Above CenterNet) is a neural network architecture that is designed for the partially supervised instance segmentation task. For details see the [The surprising impact of mask-head architecture on novel class segmentation](https://arxiv.org/abs/2104.00613) paper. The figure below shows improved mask predictions for unseen classes as we use better mask-head architectures.

Just by using better mask-head architectures (no extra losses or modules) we achieve state-of-the-art performance in the partially supervised instance segmentation task. ## Code structure * `deepmac_meta_arch.py` implements our main architecture, DeepMAC, on top of the CenterNet detection architecture. * The proto message `DeepMACMaskEstimation` in `center_net.proto` controls the configuration of the mask head used. * The field `allowed_masked_classes_ids` controls which classes recieve mask supervision during training. * Mask R-CNN based ablations in the paper are implemented in the [TF model garden](../../../official/vision/beta/projects/deepmac_maskrcnn) code base. ## Prerequisites 1. Follow [TF2 install instructions](tf2.md) to install Object Detection API. 2. Generate COCO dataset by using [create_coco_tf_record.py](../../../official/vision/beta/data/create_coco_tf_record.py) ## Configurations We provide pre-defined configs which can be run as a [TF2 training pipeline](tf2_training_and_evaluation.md). Each of these configurations needs to be passed as the `pipeline_config_path` argument to the `object_detection/model_main_tf2.py` binary. Note that the `512x512` resolution models require a TPU `v3-32` and the `1024x1024` resolution models require a TPU `v3-128` to train. The configs can be found in the [configs/tf2](../configs/tf2) directory. In the table below `X->Y` indicates that we train with masks from `X` and evaluate with masks from `Y`. Performance is measured on the `coco-val2017` set. ### Partially supervised models Resolution | Mask head | Train->Eval | Config name | Mask mAP :--------- | :------------ | :------------- | :------------------------------------------------- | -------: 512x512 | Hourglass-52 | VOC -> Non-VOC | `center_net_deepmac_512x512_voc_only.config` | 32.5 1024x1024 | Hourglass-100 | VOC -> Non-VOC | `center_net_deepmac_1024x1024_voc_only.config` | 35.5 1024x1024 | Hourglass-100 | Non-VOC -> VOC | `center_net_deepmac_1024x1024_non_voc_only.config` | 39.1 ### Fully supervised models Here we report the Mask mAP averaged over all COCO classes on the `test-dev2017` set . Resolution | Mask head | Config name | Mask mAP :--------- | :------------ | :----------------------------------------- | -------: 1024x1024 | Hourglass-100 | `center_net_deepmac_1024x1024_coco.config` | 39.4 ## Demos * [DeepMAC Colab](../colab_tutorials/deepmac_colab.ipynb) lets you run a pre-trained DeepMAC model on user-specified boxes. Note that you are not restricted to COCO classes! ## Pre-trained models * [COCO Checkpoint](http://download.tensorflow.org/models/object_detection/tf2/20210329/deepmac_1024x1024_coco17.tar.gz) - Takes as input Image + Boxes and produces per-box instance masks as output. ## See also * [Mask RCNN code](https://github.com/tensorflow/models/tree/master/official/vision/beta/projects/deepmac_maskrcnn) in TF Model garden code base. * Project website - [git.io/deepmac](https://git.io/deepmac) ## Citation ``` @misc{birodkar2021surprising, title={The surprising impact of mask-head architecture on novel class segmentation}, author={Vighnesh Birodkar and Zhichao Lu and Siyang Li and Vivek Rathod and Jonathan Huang}, year={2021}, eprint={2104.00613}, archivePrefix={arXiv}, primaryClass={cs.CV} } ```