TensorFlow implementation of the autofocus layer as described in 'Autofocus Layer for Semantic Segmentation' (https://arxiv.org/pdf/1805.08403.pdf), MICCAI 2018.
Paper authors: Yao Qin, Konstantinos Kamnitsas, Siddharth Ancha, Jay Nanavati, Garrison Cottrell, Antonio Criminisi, and Aditya Nori
Note: I am not among the authors, there may be differences between this implementation and the one suggested by the authors.
See https://github.com/yaq007/Autofocus-Layer for PyTorch implementation.
The layer can be used as a drop-in replacement of the tf.keras.layers.Conv2D layer:
from autofocus import Autofocus2D
import tensorflow as tf
# Dilation rates, here 4 parallel conv applications
dilations = [1, 2, (3, 3), (4, 6)]
# Define model
model = tf.keras.Sequential([
tf.keras.layers.InputLayer(input_shape=[128, 128, 3], batch_size=64),
Autofocus2D(dilations,
filters=20,
kernel_size=(5, 5),
activation='relu',
attention_activation=tf.nn.relu,
attention_filters=10,
attention_kernel_size=3,
use_bn=True),
tf.keras.layers.Conv2D(10, 3, activation="relu")
# etc....
])