From 4692031591bd88c489c9b905e7c340ac76a5366b Mon Sep 17 00:00:00 2001 From: Maneesh Singh Date: Tue, 11 May 2021 21:10:16 -0400 Subject: [PATCH] Final Final Report --- doc/Project_Report.pdf | Bin 668149 -> 668117 bytes doc/Project_Report.tex | 61 ++++++++++++++++++++--------------------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/doc/Project_Report.pdf b/doc/Project_Report.pdf index 516e88cd815117c59cb258e97d7ba66e1210ba61..1b40281dc6fc80c50159a6d54b7009bf36ad939b 100644 GIT binary patch delta 17163 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 Uv`UxEF$y3FH8Kh%B}Gq03jNWl9smFU delta 17193 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 diff --git a/doc/Project_Report.tex b/doc/Project_Report.tex index 0d94bf2..964465e 100644 --- a/doc/Project_Report.tex +++ b/doc/Project_Report.tex @@ -384,8 +384,8 @@ \subsection{Base model training} forced to be within the lungs and the random point was used as the center of the patch. During inference, the k should be large enough to ensure that the lung pixels are covered multiple times. Each patch is then fed into a network to -produce a prediction. The confidence score was calculated for each category by -calculating the percentage of predictions for each class based on the k patches. +produce a prediction. The probability score was calculated for each category by +calculating the mean of all probabilities for each category based on the k patches. The optimization algorithm used during training was the Adam optimizer with a learning rate of 0.00001. An early stopping strategy based on validation performance was applied. The best model is selected among 100 epochs training. @@ -539,7 +539,7 @@ \subsection{Implementation details} on a Windows 10 desktop. Rest of the models are trained on AWS p3.2xlarge EC2 (virtual machine) instances featuring NVIDIA Tesla V100 GPUs on Ubuntu 18.04. The base models are fine tuned using weights from pre-trained -models. The data are augmented with random flips, crops and scaling during the +models. The data is augmented with random flips, crops and scaling during the fine tuning process. We created and trained patch-based versions in the same environment as the @@ -577,10 +577,24 @@ \subsubsection{Segmentation Training} \label{fig:segtrain} \end{figure} +\begin{figure*}[h] + \centering + \includegraphics[width=0.8\textwidth]{../doc/images/original_vs_patched_flannel_f1.png} + \caption{COVID-19 F1 score comparison} + \label{fig:f1score} +\end{figure*} + +\begin{figure*}[!htpb] + \centering + \includegraphics[width=0.8\textwidth]{../doc/images/patched_flannel_covid_19_plot_curve.png} + \caption{Patched FLANNEL PR and ROC Curve} + \label{fig:pf_roccurve} +\end{figure*} + \subsubsection{FLANNEL} In this section, we compare original FLANNEL base models and ensemble -performance with the patched FLANNEL. Because COVID-19 class is heavily +performance with the patched FLANNEL. Since COVID-19 class is heavily imbalanced compared to other categories, overall accuracy would not be the appropriate measure for performance evaluation. It would not be able to show performance increase in COVID-19 detection, So instead we use F1-score for @@ -593,20 +607,19 @@ \subsubsection{FLANNEL} notice significant improvement in all patched base models compared to the original base models for COVID-19 detection. -\begin{figure*}[h] +\begin{figure}[h] \centering - \includegraphics[width=0.8\textwidth]{../doc/images/original_vs_patched_flannel_f1.png} - \caption{COVID-19 F1 score comparison} - \label{fig:f1score} -\end{figure*} + \includegraphics[width=7cm]{../doc/images/ensemble_comparison_roc_curve.png} + \caption{EnsembLe Comparison ROC Curve} + \label{fig:ec_roccurve} +\end{figure} -\begin{figure*}[!htpb] +\begin{figure} \centering - \includegraphics[width=0.8\textwidth]{../doc/images/patched_flannel_covid_19_plot_curve.png} - \caption{Patched FLANNEL PR and ROC Curve} - \label{fig:pf_roccurve} -\end{figure*} - + \includegraphics[width=7cm]{../doc/images/ensemble_comparison_precision_recall_curve.png} + \caption{Ensemble Comparison PR Curve} + \label{fig:ec_prcurve} +\end{figure} In Table \ref{table:resultstats}, we show F1-score for each classification and macro F1-score for all classes. In Table \ref{table:resultstats}, we can see @@ -631,20 +644,6 @@ \subsubsection{FLANNEL} to all predictions irrespective of classes. This shows patched ensemble model performs slightly better in overall predictions. -\begin{figure}[h] - \centering - \includegraphics[width=7cm]{../doc/images/ensemble_comparison_roc_curve.png} - \caption{EnsembLe Comparison ROC Curve} - \label{fig:ec_roccurve} -\end{figure} - -\begin{figure}[h] - \centering - \includegraphics[width=7cm]{../doc/images/ensemble_comparison_precision_recall_curve.png} - \caption{Ensemble Comparison PR Curve} - \label{fig:ec_prcurve} -\end{figure} - We also compare the patched and original FLANNEL performance via confusion matrix as shown in Figure \ref{fig:f_cf} and Figure \ref{fig:p_cf}. Due to @@ -655,7 +654,7 @@ \subsubsection{FLANNEL} models struggle with Pneumonia viral images classification and misclassifies them as Pneumonia bacteria images. -\begin{figure}[h] +\begin{figure} \centering \includegraphics[width=7cm]{../doc/images/base_flannel_cf.png} \caption{Original FLANNEL Confusion Matrix} @@ -663,7 +662,7 @@ \subsubsection{FLANNEL} \end{figure} -\begin{figure}[h] +\begin{figure} \centering \includegraphics[width=7cm]{../doc/images/patched_flannel_cf.png} \caption{Patched FLANNEL Confusion Matrix}