Optic-Net Classifier for Retinal Diseases

Diagnose retinal diseases from optical tomography images

The authors propose a novel convolution neural network architecture to distinguish between different degeneration of retinal layers and their underlying causes. The proposed architecture includes a new residual unit subsuming atrous separable convolution, a novel building block to prevent gradient degradation in the residual unit where the middle (3×3) convolution operations are replaced with two different operations running in parallel: a (2×2) atrous convolution in the left branch and a (2×2) atrous separable convolution in the right branch. The proposed novel architecture is trained from scratch and outperforms other classification models while addressing the issue of gradient explosion, approaching near perfect accuracy of 99.8% and 100% for the Kermany and Srinivasan datasets, respectively.

Training Set Information

Model Information

Examples

Resource retrieval

Get the pre-trained net:

In[1]:=
NetModel["Optic-Net Classifier for Retinal Diseases"]
Out[2]=

NetModel parameters

This model consists of a family of individual nets, each identified by a specific parameter combination. Inspect the available parameters:

In[3]:=
NetModel["Optic-Net Classifier for Retinal Diseases", "ParametersInformation"]
Out[3]=

Pick a non-default net by specifying the parameters:

In[4]:=
NetModel[{"Optic-Net Classifier for Retinal Diseases", "Dataset" -> "Srinivasan"}]
Out[4]=

Pick a non-default uninitialized net:

In[5]:=
NetModel[{"Optic-Net Classifier for Retinal Diseases", "Dataset" -> "Srinivasan"}, "UninitializedEvaluationNet"]
Out[5]=

Basic usage

Classify a retinal image:

In[6]:=
(* Evaluate this cell to get the example input *) CloudGet["https://www.wolframcloud.com/obj/678a4622-981f-43e9-a76f-e102c0a9e0a3"]
In[7]:=
In[8]:=
pred = NetModel["Optic-Net Classifier for Retinal Diseases"][img]
Out[8]=

Obtain the probabilities predicted by the net:

In[9]:=
NetModel[
  "Optic-Net Classifier for Retinal Diseases"][img, "Probabilities"]
Out[9]=

Obtain the list of names of all available classes:

In[10]:=
NetExtract[
 NetModel["Optic-Net Classifier for Retinal Diseases"], {"Output", "Labels"}]
Out[10]=

Net information

Obtain the total number of parameters:

In[11]:=
Information[
 NetModel[
  "Optic-Net Classifier for Retinal Diseases"], "ArraysTotalElementCount"]
Out[11]=

Obtain the layer type counts:

In[12]:=
Information[
 NetModel[
  "Optic-Net Classifier for Retinal Diseases"], "LayerTypeCounts"]
Out[12]=

Display the summary graphic:

In[13]:=
Information[
 NetModel[
  "Optic-Net Classifier for Retinal Diseases"], "SummaryGraphic"]
Out[13]=

Resource History

Reference

  • S. A. Kamran, S. Saha, A. S. Sabbir, A. Tavakkoli, "Optic-Net: A Novel Convolutional Neural Network for Diagnosis of Retinal Diseases from Optical Tomography Images," DOI: 10.1109/ICMLA.2019.00165 (2019)
  • Available from: https://github.com/SharifAmit/OpticNet-71
  • Rights: MIT License