2809 lines (2808 with data), 181.2 kB
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3. Classify Detected Nodules in LIDC Dataset as FP or TP\n",
"\n",
"## Summary\n",
"\n",
"* Load processed data into trained u-net to generate predicted nodule masks\n",
"* Use nodule coordinates file (list3_2.csv) to label detected nodules as TP or FP\n",
"* Load images for each respective detected nodule and train a CNN with the TP or FP labels"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:73: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:75: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:78: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:80: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:83: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(128, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:85: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(128, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:88: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(256, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:90: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(256, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:93: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(512, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:95: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(512, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:97: UserWarning: The `merge` function is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\keras\\legacy\\layers.py:458: UserWarning: The `Merge` layer is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.\n",
" name=name)\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:99: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(256, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:100: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(256, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:102: UserWarning: The `merge` function is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:104: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(128, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:105: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(128, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:107: UserWarning: The `merge` function is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:109: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:110: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:112: UserWarning: The `merge` function is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:114: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:115: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), padding=\"same\", activation=\"relu\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:116: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(1, (1, 1), activation=\"sigmoid\")`\n",
"c:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:118: UserWarning: Update your `Model` call to the Keras 2 API: `Model(inputs=Tensor(\"in..., outputs=Tensor(\"co...)`\n"
]
}
],
"source": [
"#EDIT HERE##############################\n",
"\n",
"list32file=\"LIDC/list3.2.csv\"\n",
"metafile=\"LIDC/LIDC-IDRI_MetaData.csv\"\n",
"unetweightspath=\"modelweights/unet-weights-improvement.hdf5\"\n",
"truenoduleweightspath=\"modelweights/truenodule-cnn-weights-improvement.hdf5\"\n",
"datafolder=\"processeddata\"\n",
"DOIpath='LIDC/DOI/'\n",
"########################################\n",
"\n",
"\n",
"import numpy as np # linear algebra\n",
"import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
"import matplotlib.pyplot as plt\n",
"import dicom\n",
"import os\n",
"import scipy.ndimage\n",
"import time\n",
"from keras.callbacks import ModelCheckpoint\n",
"import h5py\n",
"from sklearn.cluster import KMeans\n",
"from skimage import measure, morphology\n",
"from mpl_toolkits.mplot3d.art3d import Poly3DCollection\n",
"import cell_magic_wand as cmw\n",
"from glob import glob\n",
"import random\n",
"from sklearn.model_selection import train_test_split\n",
"import keras\n",
"from keras.models import Sequential,load_model,Model\n",
"from keras.layers import Dense, Dropout, Activation, Flatten\n",
"from keras.layers import Conv2D, MaxPooling2D, SpatialDropout2D\n",
"from keras.layers import Input, merge, UpSampling2D, BatchNormalization\n",
"from keras.optimizers import Adam\n",
"from keras.callbacks import EarlyStopping, ModelCheckpoint\n",
"from keras import backend as K\n",
"from keras.utils import to_categorical\n",
"from keras.datasets import mnist\n",
"from keras.models import Sequential\n",
"from keras import backend as K\n",
"from keras.optimizers import Adam\n",
"K.set_image_dim_ordering('th') \n",
"nodulelocations=pd.read_csv(list32file)\n",
"meta=pd.read_csv(metafile)\n",
"\n",
"meta=meta.drop(meta[meta['Modality']!='CT'].index)\n",
"meta=meta.reset_index()\n",
"\n",
"#Get folder names of CT data for each patient\n",
"patients=[DOIpath+meta['Patient Id'][i] for i in range(len(meta))]\n",
"datfolder=[]\n",
"for i in range(0,len(meta)-1):\n",
" for path in os.listdir(patients[i]):\n",
" if os.path.exists(patients[i]+'/'+path+'/'+meta['Series UID'][i]):\n",
" datfolder.append(patients[i]+'/'+path+'/'+meta['Series UID'][i])\n",
"patients=datfolder\n",
"\n",
"#Load nodules locations\n",
"\n",
"#Code sourced from https://www.kaggle.com/c/data-science-bowl-2017#tutorial\n",
"smooth = 1.0\n",
"width = 32\n",
"\n",
"def dice_coef(y_true, y_pred):\n",
" y_true_f = K.flatten(y_true)\n",
" y_pred_f = K.flatten(y_pred)\n",
" intersection = K.sum(y_true_f * y_pred_f)\n",
" return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)\n",
"def dice_coef_loss(y_true, y_pred):\n",
" return -dice_coef(y_true, y_pred)\n",
"\n",
"def unet_model():\n",
" inputs = Input((1, 512, 512))\n",
" conv1 = Conv2D(width, 3, 3, activation='relu', border_mode='same')(inputs)\n",
" conv1 = BatchNormalization(axis = 1)(conv1)\n",
" conv1 = Conv2D(width, 3, 3, activation='relu', border_mode='same')(conv1)\n",
" pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)\n",
"\n",
" conv2 = Conv2D(width*2, 3, 3, activation='relu', border_mode='same')(pool1)\n",
" conv2 = BatchNormalization(axis = 1)(conv2)\n",
" conv2 = Conv2D(width*2, 3, 3, activation='relu', border_mode='same')(conv2)\n",
" pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)\n",
"\n",
" conv3 = Conv2D(width*4, 3, 3, activation='relu', border_mode='same')(pool2)\n",
" conv3 = BatchNormalization(axis = 1)(conv3)\n",
" conv3 = Conv2D(width*4, 3, 3, activation='relu', border_mode='same')(conv3)\n",
" pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)\n",
"\n",
" conv4 = Conv2D(width*8, 3, 3, activation='relu', border_mode='same')(pool3)\n",
" conv4 = BatchNormalization(axis = 1)(conv4)\n",
" conv4 = Conv2D(width*8, 3, 3, activation='relu', border_mode='same')(conv4)\n",
" pool4 = MaxPooling2D(pool_size=(2, 2))(conv4)\n",
"\n",
" conv5 = Conv2D(width*16, 3, 3, activation='relu', border_mode='same')(pool4)\n",
" conv5 = BatchNormalization(axis = 1)(conv5)\n",
" conv5 = Conv2D(width*16, 3, 3, activation='relu', border_mode='same')(conv5)\n",
"\n",
" up6 = merge([UpSampling2D(size=(2, 2))(conv5), conv4], mode='concat', concat_axis=1)\n",
" conv6 = SpatialDropout2D(0.35)(up6)\n",
" conv6 = Conv2D(width*8, 3, 3, activation='relu', border_mode='same')(conv6)\n",
" conv6 = Conv2D(width*8, 3, 3, activation='relu', border_mode='same')(conv6)\n",
"\n",
" up7 = merge([UpSampling2D(size=(2, 2))(conv6), conv3], mode='concat', concat_axis=1)\n",
" conv7 = SpatialDropout2D(0.35)(up7)\n",
" conv7 = Conv2D(width*4, 3, 3, activation='relu', border_mode='same')(conv7)\n",
" conv7 = Conv2D(width*4, 3, 3, activation='relu', border_mode='same')(conv7)\n",
"\n",
" up8 = merge([UpSampling2D(size=(2, 2))(conv7), conv2], mode='concat', concat_axis=1)\n",
" conv8 = SpatialDropout2D(0.35)(up8)\n",
" conv8 = Conv2D(width*2, 3, 3, activation='relu', border_mode='same')(conv8)\n",
" conv8 = Conv2D(width*2, 3, 3, activation='relu', border_mode='same')(conv8)\n",
"\n",
" up9 = merge([UpSampling2D(size=(2, 2))(conv8), conv1], mode='concat', concat_axis=1)\n",
" conv9 = SpatialDropout2D(0.35)(up9)\n",
" conv9 = Conv2D(width, 3, 3, activation='relu', border_mode='same')(conv9)\n",
" conv9 = Conv2D(width, 3, 3, activation='relu', border_mode='same')(conv9)\n",
" conv10 = Conv2D(1, 1, 1, activation='sigmoid')(conv9)\n",
"\n",
" model = Model(input=inputs, output=conv10)\n",
" model.compile(optimizer=Adam(lr=1e-5), loss=dice_coef_loss, metrics=[dice_coef])\n",
" return model\n",
"\n",
"model=unet_model()\n",
"model.load_weights(unetweightspath)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Load the scans in given folder path\n",
"# code sourced from https://www.kaggle.com/gzuidhof/full-preprocessing-tutorial\n",
"def load_scan(path):\n",
" slices = [dicom.read_file(path + '/' + s, force=True) for s in os.listdir(path) if s.endswith('.dcm')]\n",
" slices.sort(key = lambda x: float(x.ImagePositionPatient[2]), reverse=True)\n",
" try:\n",
" slice_thickness = np.abs(slices[0].ImagePositionPatient[2] - slices[1].ImagePositionPatient[2])\n",
" except:\n",
" slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation)\n",
" \n",
" for s in slices:\n",
" s.SliceThickness = slice_thickness\n",
" \n",
" return slices\n",
"\n",
"#convert to ndarray\n",
"def get_pixels_hu(slices):\n",
" image = np.stack([s.pixel_array for s in slices])\n",
" # Convert to int16 (from sometimes int16), \n",
" # should be possible as values should always be low enough (<32k)\n",
" image = image.astype(np.int16)\n",
"\n",
" # Set outside-of-scan pixels to 0\n",
" # The intercept is usually -1024, so air is approximately 0\n",
" image[image == -2000] = 0\n",
" \n",
" # Convert to Hounsfield units (HU)\n",
" for slice_number in range(len(slices)):\n",
" \n",
" intercept = slices[slice_number].RescaleIntercept\n",
" slope = slices[slice_number].RescaleSlope\n",
" \n",
" if slope != 1:\n",
" image[slice_number] = slope * image[slice_number].astype(np.float64)\n",
" image[slice_number] = image[slice_number].astype(np.int16)\n",
" \n",
" image[slice_number] += np.int16(intercept)\n",
" \n",
" return np.array(image, dtype=np.int16)\n",
"\n",
"def processimage(img):\n",
" #function sourced from https://www.kaggle.com/c/data-science-bowl-2017#tutorial\n",
" #Standardize the pixel values\n",
" mean = np.mean(img)\n",
" std = np.std(img)\n",
" img = img-mean\n",
" img = img/std\n",
" #plt.hist(img.flatten(),bins=200)\n",
" #plt.show()\n",
" #print(thresh_img[366][280:450])\n",
" middle = img[100:400,100:400] \n",
" mean = np.mean(middle) \n",
" max = np.max(img)\n",
" min = np.min(img)\n",
" #move the underflow bins\n",
" img[img==max]=mean\n",
" img[img==min]=mean\n",
" kmeans = KMeans(n_clusters=2).fit(np.reshape(middle,[np.prod(middle.shape),1]))\n",
" centers = sorted(kmeans.cluster_centers_.flatten())\n",
" threshold = np.mean(centers)\n",
" thresh_img = np.where(img<threshold,1.0,0.0) # threshold the image\n",
" eroded = morphology.erosion(thresh_img,np.ones([4,4]))\n",
" dilation = morphology.dilation(eroded,np.ones([10,10]))\n",
" labels = measure.label(dilation)\n",
" label_vals = np.unique(labels)\n",
" #plt.imshow(labels)\n",
" #plt.show()\n",
" labels = measure.label(dilation)\n",
" label_vals = np.unique(labels)\n",
" regions = measure.regionprops(labels)\n",
" good_labels = []\n",
" for prop in regions:\n",
" B = prop.bbox\n",
" if B[2]-B[0]<475 and B[3]-B[1]<475 and B[0]>40 and B[2]<472:\n",
" good_labels.append(prop.label)\n",
" mask = np.ndarray([512,512],dtype=np.int8)\n",
" mask[:] = 0\n",
" #\n",
" # The mask here is the mask for the lungs--not the nodes\n",
" # After just the lungs are left, we do another large dilation\n",
" # in order to fill in and out the lung mask \n",
" #\n",
" for N in good_labels:\n",
" mask = mask + np.where(labels==N,1,0)\n",
" mask = morphology.dilation(mask,np.ones([10,10])) # one last dilation\n",
" return mask*img\n",
"\n",
"def processimagefromfile(ppix):\n",
" processpix=np.ndarray([ppix.shape[0],512,512])\n",
" for i in range(ppix.shape[0]):\n",
" processpix[i]=processimage(ppix[i])\n",
" return processpix\n",
"\n",
"#predict mask from images\n",
"def predictmask(images):\n",
" images=images.reshape(images.shape[0],1,512,512)\n",
" num_test=images.shape[0]\n",
" imgs_mask_test = np.ndarray([num_test,1,512,512],dtype=np.float32)\n",
" for i in range(num_test):\n",
" imgs_mask_test[i] = model.predict([images[i:i+1]], verbose=0)[0]\n",
" return imgs_mask_test\n",
"\n",
"#find number of slices where a nodule is detected\n",
"def getnoduleindex(imgs_mask_test):\n",
" masksum=[np.sum(maskslice[0]) for maskslice in imgs_mask_test]\n",
" return [i for i in range(len(masksum)) if masksum[i]>5]\n",
"\n",
"def nodule_coordinates(nodulelocations,meta):\n",
" slices=nodulelocations[\"slice no.\"][nodulelocations.index[nodulelocations[\"case\"]==int(meta[\"Patient Id\"][-4:])]]\n",
" xlocs=nodulelocations[\"x loc.\"][nodulelocations.index[nodulelocations[\"case\"]==int(meta[\"Patient Id\"][-4:])]]\n",
" ylocs=nodulelocations[\"y loc.\"][nodulelocations.index[nodulelocations[\"case\"]==int(meta[\"Patient Id\"][-4:])]]\n",
" nodulecoord=[]\n",
" for i in range(len(slices)):\n",
" nodulecoord.append([slices.values[i]-1,xlocs.values[i]-1,ylocs.values[i]-1])\n",
" return nodulecoord\n",
"\n",
"#generate nodule or non-nodule labels for mask predictions\n",
"def truenodules(noduleindex,masks,nodulecoords):\n",
" label=[]\n",
" for ind in noduleindex:\n",
" for cord in nodulecoords:\n",
" if abs(ind-cord[0])<2:\n",
" com=scipy.ndimage.center_of_mass(masks[ind])\n",
" if abs(com[1]-cord[2])<2 and abs(com[2]-cord[1])<2:\n",
" label.append(True)\n",
" else:\n",
" label.append(False)\n",
" return label\n",
" \n",
"def slicecount(start,end):\n",
" slicecounts=[]\n",
" for i in range(start,end):\n",
" if len(nodule_coordinates(nodulelocations,meta.iloc[i]))>0:\n",
" patient_scan=load_scan(patients[i])\n",
" slicecounts.append(len(patient_scan))\n",
" return slicecounts"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Processing patient# 197 ETA: 13.88888888888889 hrs\n",
"Processing patient# 198 ETA: 1.1223869024034948e-08 hrs\n",
"Processing patient# 199 ETA: 8.375600754116487e-09 hrs\n",
"[[77, 132, 243]]\n",
"1751 4.335\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.0\n",
"Specificity: 0.0\n",
"Processing patient# 200 ETA: 0.0 hrs\n",
"[[44, 187, 235]]\n",
"1752 7.684\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.0\n",
"Specificity: 0.0\n",
"Processing patient# 201 ETA: -0.00043430759374313906 hrs\n",
"[[56, 220, 307], [48, 381, 246], [49, 170, 194], [135, 118, 191], [46, 375, 203], [50, 189, 192], [91, 150, 172]]\n",
"1753 8.774\n",
"1754 4.749\n",
"1755 3.795\n",
"1756 6.345\n",
"1757 5.952\n",
"1758 14.905\n",
"1759 5.398\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 55 with actual coord [56, 220, 307]\n",
"Nodule Detected at slice# 56 with actual coord [56, 220, 307]\n",
"Nodule Detected at slice# 57 with actual coord [56, 220, 307]\n",
"Nodule Detected at slice# 134 with actual coord [135, 118, 191]\n",
"Nodule Detected at slice# 135 with actual coord [135, 118, 191]\n",
"Nodule Detected at slice# 136 with actual coord [135, 118, 191]\n",
"Nodule Detected at slice# 45 with actual coord [46, 375, 203]\n",
"Nodule Detected at slice# 46 with actual coord [46, 375, 203]\n",
"Nodule Detected at slice# 47 with actual coord [46, 375, 203]\n",
"Nodule Detected at slice# 49 with actual coord [50, 189, 192]\n",
"Nodule Detected at slice# 50 with actual coord [50, 189, 192]\n",
"Nodule Detected at slice# 51 with actual coord [50, 189, 192]\n",
"Nodule Detected at slice# 90 with actual coord [91, 150, 172]\n",
"Nodule Detected at slice# 91 with actual coord [91, 150, 172]\n",
"Nodule Detected at slice# 92 with actual coord [91, 150, 172]\n",
"Sensitivity: 0.5555555555555556\n",
"Specificity: 0.09375\n",
"Processing patient# 202 ETA: -0.0012672066931152888 hrs\n",
"[[281, 85, 162]]\n",
"1760 4.91\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.5\n",
"Specificity: 0.07042253521126761\n",
"Processing patient# 203 ETA: -0.0029408619673968574 hrs\n",
"[[246, 139, 150], [41, 316, 311], [88, 131, 345], [319, 201, 153], [109, 127, 352]]\n",
"1761 6.328\n",
"1762 3.915\n",
"1763 3.396\n",
"1764 6.653\n",
"1765 3.547\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 245 with actual coord [246, 139, 150]\n",
"Nodule Detected at slice# 246 with actual coord [246, 139, 150]\n",
"Nodule Detected at slice# 247 with actual coord [246, 139, 150]\n",
"Nodule Detected at slice# 318 with actual coord [319, 201, 153]\n",
"Nodule Detected at slice# 319 with actual coord [319, 201, 153]\n",
"Nodule Detected at slice# 320 with actual coord [319, 201, 153]\n",
"Sensitivity: 0.4666666666666667\n",
"Specificity: 0.07777777777777778\n",
"Processing patient# 204 ETA: -0.005424329860537682 hrs\n",
"[[253, 307, 392], [192, 181, 383], [210, 300, 385], [243, 470, 298], [96, 115, 198]]\n",
"1766 4.072\n",
"1767 5.395\n",
"1768 4.111\n",
"1769 3.864\n",
"1770 5.376\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 191 with actual coord [192, 181, 383]\n",
"Nodule Detected at slice# 192 with actual coord [192, 181, 383]\n",
"Nodule Detected at slice# 193 with actual coord [192, 181, 383]\n",
"Nodule Detected at slice# 95 with actual coord [96, 115, 198]\n",
"Nodule Detected at slice# 96 with actual coord [96, 115, 198]\n",
"Nodule Detected at slice# 97 with actual coord [96, 115, 198]\n",
"Sensitivity: 0.45\n",
"Specificity: 0.06870229007633588\n",
"Processing patient# 205 ETA: -0.008036096493403116 hrs\n",
"[[80, 164, 191]]\n",
"1771 4.96\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42857142857142855\n",
"Specificity: 0.06537530266343826\n",
"Processing patient# 206 ETA: -0.010317782699868935 hrs\n",
"[[278, 426, 316]]\n",
"1772 5.579\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 277 with actual coord [278, 426, 316]\n",
"Nodule Detected at slice# 278 with actual coord [278, 426, 316]\n",
"Nodule Detected at slice# 279 with actual coord [278, 426, 316]\n",
"Sensitivity: 0.45454545454545453\n",
"Specificity: 0.06593406593406594\n",
"Processing patient# 207 ETA: -0.014129864809913658 hrs\n",
"[[29, 356, 205], [14, 119, 289]]\n",
"1773 3.940\n",
"1774 4.346\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4166666666666667\n",
"Specificity: 0.06369426751592357\n",
"Processing patient# 208 ETA: -0.016790137690866104 hrs\n",
"[[57, 124, 272]]\n",
"1775 8.724\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 56 with actual coord [57, 124, 272]\n",
"Nodule Detected at slice# 57 with actual coord [57, 124, 272]\n",
"Nodule Detected at slice# 58 with actual coord [57, 124, 272]\n",
"Sensitivity: 0.44\n",
"Specificity: 0.06666666666666667\n",
"Processing patient# 209 ETA: -0.01980438633398579 hrs\n",
"Processing patient# 210 ETA: -0.021900115047813088 hrs\n",
"[[32, 157, 161], [46, 175, 381]]\n",
"1776 5.381\n",
"1777 11.452\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4074074074074074\n",
"Specificity: 0.06521739130434782\n",
"Processing patient# 211 ETA: -0.02493481744553555 hrs\n",
"[[181, 396, 260]]\n",
"1778 16.014\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.39285714285714285\n",
"Specificity: 0.06066176470588235\n",
"Processing patient# 212 ETA: -0.03144206567755292 hrs\n",
"[[119, 388, 303], [135, 356, 364], [127, 383, 316]]\n",
"1779 11.814\n",
"1780 8.744\n",
"1781 7.308\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 118 with actual coord [119, 388, 303]\n",
"Nodule Detected at slice# 119 with actual coord [119, 388, 303]\n",
"Nodule Detected at slice# 120 with actual coord [119, 388, 303]\n",
"Nodule Detected at slice# 134 with actual coord [135, 356, 364]\n",
"Nodule Detected at slice# 135 with actual coord [135, 356, 364]\n",
"Nodule Detected at slice# 136 with actual coord [135, 356, 364]\n",
"Sensitivity: 0.41935483870967744\n",
"Specificity: 0.06554621848739496\n",
"Processing patient# 213 ETA: -0.03726589909150814 hrs\n",
"Processing patient# 214 ETA: -0.03994502615334467 hrs\n",
"[[350, 426, 351]]\n",
"1782 4.721\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40625\n",
"Specificity: 0.060842433697347896\n",
"Processing patient# 215 ETA: -0.04846682252809981 hrs\n",
"Processing patient# 216 ETA: -0.051458642850687464 hrs\n",
"[[28, 363, 267], [149, 175, 173], [42, 398, 263], [85, 97, 255], [160, 324, 326], [28, 378, 301], [84, 189, 340], [112, 385, 189], [55, 120, 325], [39, 143, 282], [139, 115, 364], [22, 168, 275], [97, 181, 189], [54, 144, 243], [43, 184, 250], [95, 378, 267], [88, 380, 242], [59, 372, 279], [104, 143, 204], [45, 173, 202], [117, 345, 203]]\n",
"1783 3.424\n",
"1784 3.490\n",
"1785 6.809\n",
"1786 9.657\n",
"1787 7.511\n",
"1788 3.424\n",
"1789 4.754\n",
"1790 6.805\n",
"1791 5.048\n",
"1792 6.979\n",
"1793 6.282\n",
"1794 8.001\n",
"1795 3.584\n",
"1796 4.227\n",
"1797 7.514\n",
"1798 6.351\n",
"1799 6.649\n",
"1800 10.118\n",
"1801 6.016\n",
"1802 6.732\n",
"1803 5.577\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 85 with actual coord [85, 97, 255]\n",
"Nodule Detected at slice# 86 with actual coord [85, 97, 255]\n",
"Nodule Detected at slice# 160 with actual coord [160, 324, 326]\n",
"Nodule Detected at slice# 161 with actual coord [160, 324, 326]\n",
"Nodule Detected at slice# 138 with actual coord [139, 115, 364]\n",
"Nodule Detected at slice# 139 with actual coord [139, 115, 364]\n",
"Nodule Detected at slice# 140 with actual coord [139, 115, 364]\n",
"Nodule Detected at slice# 103 with actual coord [104, 143, 204]\n",
"Nodule Detected at slice# 104 with actual coord [104, 143, 204]\n",
"Nodule Detected at slice# 105 with actual coord [104, 143, 204]\n",
"Nodule Detected at slice# 44 with actual coord [45, 173, 202]\n",
"Nodule Detected at slice# 45 with actual coord [45, 173, 202]\n",
"Nodule Detected at slice# 46 with actual coord [45, 173, 202]\n",
"Sensitivity: 0.33962264150943394\n",
"Specificity: 0.07547169811320754\n",
"Processing patient# 217 ETA: -0.057393515692633755 hrs\n",
"[[55, 165, 400], [73, 90, 290], [48, 320, 382], [52, 309, 375], [27, 316, 165], [85, 99, 357], [63, 159, 399], [77, 307, 363]]\n",
"1804 3.614\n",
"1805 3.841\n",
"1806 5.326\n",
"1807 4.183\n",
"1808 3.994\n",
"1809 4.437\n",
"1810 4.477\n",
"1811 5.725\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 77 with actual coord [77, 307, 363]\n",
"Sensitivity: 0.3114754098360656\n",
"Specificity: 0.07604017216642754\n",
"Processing patient# 218 ETA: -0.062303517685023985 hrs\n",
"[[259, 172, 189], [269, 167, 247], [281, 36, 284]]\n",
"1812 13.978\n",
"1813 8.797\n",
"1814 3.630\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 258 with actual coord [259, 172, 189]\n",
"Nodule Detected at slice# 259 with actual coord [259, 172, 189]\n",
"Nodule Detected at slice# 260 with actual coord [259, 172, 189]\n",
"Nodule Detected at slice# 268 with actual coord [269, 167, 247]\n",
"Nodule Detected at slice# 269 with actual coord [269, 167, 247]\n",
"Nodule Detected at slice# 270 with actual coord [269, 167, 247]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sensitivity: 0.328125\n",
"Specificity: 0.07554417413572344\n",
"Processing patient# 219 ETA: -0.07084722954811999 hrs\n",
"Processing patient# 220 ETA: -0.07423709965113441 hrs\n",
"Processing patient# 221 ETA: -0.07759629722454255 hrs\n",
"Processing patient# 222 ETA: -0.08092523676855068 hrs\n",
"[[106, 436, 345]]\n",
"1815 5.017\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 105 with actual coord [106, 436, 345]\n",
"Nodule Detected at slice# 106 with actual coord [106, 436, 345]\n",
"Sensitivity: 0.3384615384615385\n",
"Specificity: 0.07682619647355164\n",
"Processing patient# 223 ETA: -0.08694170671045097 hrs\n",
"[[80, 427, 210]]\n",
"1816 4.721\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.3333333333333333\n",
"Specificity: 0.07634543178973717\n",
"Processing patient# 224 ETA: -0.0926084516587711 hrs\n",
"[[39, 211, 267]]\n",
"1817 7.124\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.3283582089552239\n",
"Specificity: 0.07530864197530865\n",
"Processing patient# 225 ETA: -0.09882077568107181 hrs\n",
"[[106, 150, 259], [51, 196, 303]]\n",
"1818 6.787\n",
"1819 4.547\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.3188405797101449\n",
"Specificity: 0.07340553549939831\n",
"Processing patient# 226 ETA: -0.10466439107760796 hrs\n",
"[[112, 370, 208]]\n",
"1820 3.587\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.3142857142857143\n",
"Specificity: 0.06725468577728776\n",
"Processing patient# 227 ETA: -0.11528374142583768 hrs\n",
"[[37, 330, 191]]\n",
"1821 28.0\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 36 with actual coord [37, 330, 191]\n",
"Nodule Detected at slice# 37 with actual coord [37, 330, 191]\n",
"Nodule Detected at slice# 38 with actual coord [37, 330, 191]\n",
"Sensitivity: 0.323943661971831\n",
"Specificity: 0.06823027718550106\n",
"Processing patient# 228 ETA: -0.12483760813988208 hrs\n",
"[[128, 149, 305], [138, 251, 277]]\n",
"1822 15.151\n",
"1823 10.452\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 127 with actual coord [128, 149, 305]\n",
"Nodule Detected at slice# 128 with actual coord [128, 149, 305]\n",
"Nodule Detected at slice# 129 with actual coord [128, 149, 305]\n",
"Nodule Detected at slice# 137 with actual coord [138, 251, 277]\n",
"Nodule Detected at slice# 138 with actual coord [138, 251, 277]\n",
"Nodule Detected at slice# 139 with actual coord [138, 251, 277]\n",
"Sensitivity: 0.3424657534246575\n",
"Specificity: 0.06272401433691756\n",
"Processing patient# 229 ETA: -0.13718350996009815 hrs\n",
"[[96, 365, 149]]\n",
"1824 5.333\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 95 with actual coord [96, 365, 149]\n",
"Nodule Detected at slice# 96 with actual coord [96, 365, 149]\n",
"Nodule Detected at slice# 97 with actual coord [96, 365, 149]\n",
"Sensitivity: 0.35135135135135137\n",
"Specificity: 0.0634231103388358\n",
"Processing patient# 230 ETA: -0.14709678301776674 hrs\n",
"[[213, 148, 384]]\n",
"1825 5.994\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 212 with actual coord [213, 148, 384]\n",
"Nodule Detected at slice# 213 with actual coord [213, 148, 384]\n",
"Nodule Detected at slice# 214 with actual coord [213, 148, 384]\n",
"Sensitivity: 0.36\n",
"Specificity: 0.062193126022913256\n",
"Processing patient# 231 ETA: -0.161781463566854 hrs\n",
"[[14, 336, 324], [79, 290, 379], [29, 353, 260], [61, 209, 313], [121, 107, 374], [16, 350, 331]]\n",
"1826 4.367\n",
"1827 3.951\n",
"1828 14.283\n",
"1829 6.438\n",
"1830 2.490\n",
"1831 5.967\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 28 with actual coord [29, 353, 260]\n",
"Nodule Detected at slice# 29 with actual coord [29, 353, 260]\n",
"Nodule Detected at slice# 15 with actual coord [16, 350, 331]\n",
"Nodule Detected at slice# 16 with actual coord [16, 350, 331]\n",
"Nodule Detected at slice# 17 with actual coord [16, 350, 331]\n",
"Sensitivity: 0.35802469135802467\n",
"Specificity: 0.06398104265402843\n",
"Processing patient# 232 ETA: -0.17268129442843436 hrs\n",
"[[91, 110, 254], [179, 382, 210], [40, 286, 270], [245, 108, 331], [78, 163, 283], [86, 142, 306], [291, 350, 309], [51, 325, 235]]\n",
"1832 5.025\n",
"1833 4.149\n",
"1834 5.928\n",
"1835 14.410\n",
"1836 5.033\n",
"1837 24.621\n",
"1838 6.646\n",
"1839 3.814\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 90 with actual coord [91, 110, 254]\n",
"Nodule Detected at slice# 91 with actual coord [91, 110, 254]\n",
"Nodule Detected at slice# 92 with actual coord [91, 110, 254]\n",
"Nodule Detected at slice# 244 with actual coord [245, 108, 331]\n",
"Nodule Detected at slice# 245 with actual coord [245, 108, 331]\n",
"Nodule Detected at slice# 246 with actual coord [245, 108, 331]\n",
"Nodule Detected at slice# 85 with actual coord [86, 142, 306]\n",
"Nodule Detected at slice# 86 with actual coord [86, 142, 306]\n",
"Nodule Detected at slice# 87 with actual coord [86, 142, 306]\n",
"Sensitivity: 0.3595505617977528\n",
"Specificity: 0.06540697674418605\n",
"Processing patient# 233 ETA: -0.18614303947688857 hrs\n",
"[[132, 133, 372], [88, 369, 344], [169, 58, 317]]\n",
"1840 21.897\n",
"1841 4.149\n",
"1842 6.785\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 131 with actual coord [132, 133, 372]\n",
"Nodule Detected at slice# 132 with actual coord [132, 133, 372]\n",
"Nodule Detected at slice# 133 with actual coord [132, 133, 372]\n",
"Nodule Detected at slice# 168 with actual coord [169, 58, 317]\n",
"Nodule Detected at slice# 169 with actual coord [169, 58, 317]\n",
"Nodule Detected at slice# 170 with actual coord [169, 58, 317]\n",
"Sensitivity: 0.3695652173913043\n",
"Specificity: 0.06486486486486487\n",
"Processing patient# 234 ETA: -0.19722831309577563 hrs\n",
"[[172, 380, 269], [244, 358, 324]]\n",
"1843 6.131\n",
"1844 4.974\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.3617021276595745\n",
"Specificity: 0.06319947333772219\n",
"Processing patient# 235 ETA: -0.2140280986748126 hrs\n",
"[[350, 475, 257], [234, 72, 263], [384, 440, 309]]\n",
"1845 6.637\n",
"1846 4.979\n",
"1847 10.978\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 349 with actual coord [350, 475, 257]\n",
"Nodule Detected at slice# 350 with actual coord [350, 475, 257]\n",
"Nodule Detected at slice# 351 with actual coord [350, 475, 257]\n",
"Nodule Detected at slice# 383 with actual coord [384, 440, 309]\n",
"Nodule Detected at slice# 384 with actual coord [384, 440, 309]\n",
"Nodule Detected at slice# 385 with actual coord [384, 440, 309]\n",
"Sensitivity: 0.3711340206185567\n",
"Specificity: 0.06386975579211021\n",
"Processing patient# 236 ETA: -0.2297073334152416 hrs\n",
"[[42, 127, 267]]\n",
"1848 12.49\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 42 with actual coord [42, 127, 267]\n",
"Nodule Detected at slice# 43 with actual coord [42, 127, 267]\n",
"Sensitivity: 0.37755102040816324\n",
"Specificity: 0.06463642013673089\n",
"Processing patient# 237 ETA: -0.2382809225978061 hrs\n",
"[[35, 183, 313], [32, 168, 249], [31, 188, 278], [46, 365, 303], [32, 178, 254], [66, 88, 347], [67, 387, 238]]\n",
"1849 5.745\n",
"1850 6.894\n",
"1851 10.471\n",
"1852 7.121\n",
"1853 5.399\n",
"1854 4.860\n",
"1855 4.214\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 31 with actual coord [32, 168, 249]\n",
"Nodule Detected at slice# 30 with actual coord [31, 188, 278]\n",
"Nodule Detected at slice# 46 with actual coord [46, 365, 303]\n",
"Nodule Detected at slice# 31 with actual coord [32, 178, 254]\n",
"Sensitivity: 0.3904761904761905\n",
"Specificity: 0.06572481572481573\n",
"Processing patient# 238 ETA: -0.24610479066852778 hrs\n",
"[[33, 123, 298], [45, 395, 224]]\n",
"1856 5.051\n",
"1857 20.840\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 33 with actual coord [33, 123, 298]\n",
"Nodule Detected at slice# 34 with actual coord [33, 123, 298]\n",
"Nodule Detected at slice# 44 with actual coord [45, 395, 224]\n",
"Nodule Detected at slice# 45 with actual coord [45, 395, 224]\n",
"Nodule Detected at slice# 46 with actual coord [45, 395, 224]\n",
"Sensitivity: 0.40186915887850466\n",
"Specificity: 0.06694560669456066\n",
"Processing patient# 239 ETA: -0.25461648094188555 hrs\n",
"[[26, 450, 295], [29, 134, 162], [17, 154, 186], [9, 186, 233], [7, 357, 271], [40, 431, 176]]\n",
"1858 8.822\n",
"1859 20.158\n",
"1860 5.278\n",
"1861 4.879\n",
"1862 5.836\n",
"1863 4.157\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 25 with actual coord [26, 450, 295]\n",
"Nodule Detected at slice# 26 with actual coord [26, 450, 295]\n",
"Nodule Detected at slice# 27 with actual coord [26, 450, 295]\n",
"Nodule Detected at slice# 28 with actual coord [29, 134, 162]\n",
"Nodule Detected at slice# 29 with actual coord [29, 134, 162]\n",
"Nodule Detected at slice# 30 with actual coord [29, 134, 162]\n",
"Nodule Detected at slice# 16 with actual coord [17, 154, 186]\n",
"Nodule Detected at slice# 17 with actual coord [17, 154, 186]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodule Detected at slice# 6 with actual coord [7, 357, 271]\n",
"Nodule Detected at slice# 7 with actual coord [7, 357, 271]\n",
"Sensitivity: 0.415929203539823\n",
"Specificity: 0.07072463768115941\n",
"Processing patient# 240 ETA: -0.26243001013994216 hrs\n",
"Processing patient# 241 ETA: -0.2678747106774603 hrs\n",
"Processing patient# 242 ETA: -0.27327441828145815 hrs\n",
"[[152, 452, 272], [126, 462, 244]]\n",
"1864 7.844\n",
"1865 5.099\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 151 with actual coord [152, 452, 272]\n",
"Nodule Detected at slice# 152 with actual coord [152, 452, 272]\n",
"Nodule Detected at slice# 153 with actual coord [152, 452, 272]\n",
"Nodule Detected at slice# 126 with actual coord [126, 462, 244]\n",
"Sensitivity: 0.4260869565217391\n",
"Specificity: 0.07167235494880546\n",
"Processing patient# 243 ETA: -0.28365627678769567 hrs\n",
"[[57, 155, 175], [79, 410, 341], [55, 124, 317], [74, 90, 315], [20, 157, 383], [82, 57, 381], [58, 167, 157]]\n",
"1866 5.817\n",
"1867 5.940\n",
"1868 6.173\n",
"1869 5.216\n",
"1870 23.636\n",
"1871 4.597\n",
"1872 8.153\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 56 with actual coord [57, 155, 175]\n",
"Nodule Detected at slice# 57 with actual coord [57, 155, 175]\n",
"Nodule Detected at slice# 79 with actual coord [79, 410, 341]\n",
"Nodule Detected at slice# 74 with actual coord [74, 90, 315]\n",
"Nodule Detected at slice# 19 with actual coord [20, 157, 383]\n",
"Nodule Detected at slice# 20 with actual coord [20, 157, 383]\n",
"Nodule Detected at slice# 21 with actual coord [20, 157, 383]\n",
"Nodule Detected at slice# 58 with actual coord [58, 167, 157]\n",
"Sensitivity: 0.4426229508196721\n",
"Specificity: 0.07481853713009493\n",
"Processing patient# 244 ETA: -0.2921640377824206 hrs\n",
"[[95, 147, 399]]\n",
"1873 11.987\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 94 with actual coord [95, 147, 399]\n",
"Nodule Detected at slice# 95 with actual coord [95, 147, 399]\n",
"Nodule Detected at slice# 96 with actual coord [95, 147, 399]\n",
"Sensitivity: 0.44715447154471544\n",
"Specificity: 0.07523338824821527\n",
"Processing patient# 245 ETA: -0.30634670570188643 hrs\n",
"[[41, 309, 334]]\n",
"1874 16.965\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 40 with actual coord [41, 309, 334]\n",
"Nodule Detected at slice# 41 with actual coord [41, 309, 334]\n",
"Nodule Detected at slice# 42 with actual coord [41, 309, 334]\n",
"Sensitivity: 0.45161290322580644\n",
"Specificity: 0.07246376811594203\n",
"Processing patient# 246 ETA: -0.3249079197058293 hrs\n",
"Processing patient# 247 ETA: -0.3306272812410887 hrs\n",
"[[206, 407, 292], [134, 248, 153], [79, 95, 255]]\n",
"1875 6.654\n",
"1876 2.453\n",
"1877 2.576\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4409448818897638\n",
"Specificity: 0.07045797684952189\n",
"Processing patient# 248 ETA: -0.3484334776350248 hrs\n",
"Processing patient# 249 ETA: -0.35426413378083554 hrs\n",
"[[29, 217, 370]]\n",
"1878 11.947\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 28 with actual coord [29, 217, 370]\n",
"Nodule Detected at slice# 29 with actual coord [29, 217, 370]\n",
"Nodule Detected at slice# 30 with actual coord [29, 217, 370]\n",
"Sensitivity: 0.4453125\n",
"Specificity: 0.0715\n",
"Processing patient# 250 ETA: -0.36293431421120964 hrs\n",
"[[142, 400, 372], [131, 168, 245], [144, 118, 327]]\n",
"1879 4.377\n",
"1880 4.689\n",
"1881 9.531\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 143 with actual coord [144, 118, 327]\n",
"Nodule Detected at slice# 144 with actual coord [144, 118, 327]\n",
"Nodule Detected at slice# 145 with actual coord [144, 118, 327]\n",
"Sensitivity: 0.44274809160305345\n",
"Specificity: 0.07070217917675545\n",
"Processing patient# 251 ETA: -0.3774032429292066 hrs\n",
"[[65, 85, 316], [32, 389, 266], [36, 74, 286], [43, 306, 289]]\n",
"1882 5.032\n",
"1883 4.637\n",
"1884 4.315\n",
"1885 4.920\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42962962962962964\n",
"Specificity: 0.07049734427812651\n",
"Processing patient# 252 ETA: -0.3872358038248841 hrs\n",
"[[373, 110, 213], [310, 424, 247], [278, 399, 266]]\n",
"1886 8.427\n",
"1887 6.451\n",
"1888 7.986\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 372 with actual coord [373, 110, 213]\n",
"Nodule Detected at slice# 373 with actual coord [373, 110, 213]\n",
"Nodule Detected at slice# 374 with actual coord [373, 110, 213]\n",
"Nodule Detected at slice# 309 with actual coord [310, 424, 247]\n",
"Nodule Detected at slice# 310 with actual coord [310, 424, 247]\n",
"Nodule Detected at slice# 311 with actual coord [310, 424, 247]\n",
"Nodule Detected at slice# 277 with actual coord [278, 399, 266]\n",
"Nodule Detected at slice# 278 with actual coord [278, 399, 266]\n",
"Nodule Detected at slice# 279 with actual coord [278, 399, 266]\n",
"Sensitivity: 0.4420289855072464\n",
"Specificity: 0.07119889756545705\n",
"Processing patient# 253 ETA: -0.4086072258510558 hrs\n",
"[[169, 441, 370]]\n",
"1889 5.802\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 168 with actual coord [169, 441, 370]\n",
"Nodule Detected at slice# 169 with actual coord [169, 441, 370]\n",
"Nodule Detected at slice# 170 with actual coord [169, 441, 370]\n",
"Sensitivity: 0.4460431654676259\n",
"Specificity: 0.07165532879818594\n",
"Processing patient# 254 ETA: -0.42418794325956216 hrs\n",
"[[61, 396, 213], [53, 357, 225], [45, 409, 278], [51, 348, 238]]\n",
"1890 6.900\n",
"1891 5.399\n",
"1892 7.599\n",
"1893 3.894\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 60 with actual coord [61, 396, 213]\n",
"Nodule Detected at slice# 61 with actual coord [61, 396, 213]\n",
"Nodule Detected at slice# 62 with actual coord [61, 396, 213]\n",
"Nodule Detected at slice# 44 with actual coord [45, 409, 278]\n",
"Nodule Detected at slice# 45 with actual coord [45, 409, 278]\n",
"Nodule Detected at slice# 46 with actual coord [45, 409, 278]\n",
"Sensitivity: 0.44755244755244755\n",
"Specificity: 0.07337807606263982\n",
"Processing patient# 255 ETA: -0.43417470265577573 hrs\n",
"[[29, 298, 336]]\n",
"1894 5.354\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 28 with actual coord [29, 298, 336]\n",
"Nodule Detected at slice# 29 with actual coord [29, 298, 336]\n",
"Nodule Detected at slice# 30 with actual coord [29, 298, 336]\n",
"Sensitivity: 0.4513888888888889\n",
"Specificity: 0.07314936487078405\n",
"Processing patient# 256 ETA: -0.44891197837889196 hrs\n",
"[[220, 165, 295], [262, 449, 337]]\n",
"1895 5.924\n",
"1896 3.627\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 219 with actual coord [220, 165, 295]\n",
"Nodule Detected at slice# 220 with actual coord [220, 165, 295]\n",
"Nodule Detected at slice# 221 with actual coord [220, 165, 295]\n",
"Sensitivity: 0.4520547945205479\n",
"Specificity: 0.07333908541846419\n",
"Processing patient# 257 ETA: -0.46991474398611116 hrs\n",
"[[228, 397, 145], [146, 171, 371]]\n",
"1897 3.963\n",
"1898 3.407\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.44594594594594594\n",
"Specificity: 0.07258753202391119\n",
"Processing patient# 258 ETA: -0.4950783620837635 hrs\n",
"[[308, 445, 204]]\n",
"1899 4.872\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4429530201342282\n",
"Specificity: 0.07142857142857142\n",
"Processing patient# 259 ETA: -0.5192839302087433 hrs\n",
"[[162, 384, 276]]\n",
"1900 3.868\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.44\n",
"Specificity: 0.07036423841059603\n",
"Processing patient# 260 ETA: -0.5385499058472806 hrs\n",
"[[59, 379, 358]]\n",
"1901 4.584\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4370860927152318\n",
"Specificity: 0.06967213114754098\n",
"Processing patient# 261 ETA: -0.5554398855555559 hrs\n",
"Processing patient# 262 ETA: -0.5623908352690091 hrs\n",
"[[37, 162, 308], [99, 438, 231]]\n",
"1902 11.949\n",
"1903 5.186\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 36 with actual coord [37, 162, 308]\n",
"Nodule Detected at slice# 37 with actual coord [37, 162, 308]\n",
"Nodule Detected at slice# 38 with actual coord [37, 162, 308]\n",
"Sensitivity: 0.43790849673202614\n",
"Specificity: 0.07006885378695828\n",
"Processing patient# 263 ETA: -0.5751002607690063 hrs\n",
"[[163, 75, 267], [335, 135, 344], [253, 100, 149], [312, 351, 404], [338, 471, 310], [226, 156, 170], [232, 210, 405]]\n",
"1904 3.448\n",
"1905 5.672\n",
"1906 4.273\n",
"1907 4.199\n",
"1908 5.043\n",
"1909 3.188\n",
"1910 6.405\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 334 with actual coord [335, 135, 344]\n",
"Nodule Detected at slice# 335 with actual coord [335, 135, 344]\n",
"Nodule Detected at slice# 336 with actual coord [335, 135, 344]\n",
"Nodule Detected at slice# 337 with actual coord [338, 471, 310]\n",
"Nodule Detected at slice# 338 with actual coord [338, 471, 310]\n",
"Nodule Detected at slice# 339 with actual coord [338, 471, 310]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodule Detected at slice# 231 with actual coord [232, 210, 405]\n",
"Nodule Detected at slice# 232 with actual coord [232, 210, 405]\n",
"Nodule Detected at slice# 233 with actual coord [232, 210, 405]\n",
"Sensitivity: 0.4375\n",
"Specificity: 0.07162534435261708\n",
"Processing patient# 264 ETA: -0.6026041639533507 hrs\n",
"[[321, 429, 151]]\n",
"1911 8.894\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 320 with actual coord [321, 429, 151]\n",
"Nodule Detected at slice# 321 with actual coord [321, 429, 151]\n",
"Nodule Detected at slice# 322 with actual coord [321, 429, 151]\n",
"Sensitivity: 0.4409937888198758\n",
"Specificity: 0.07039573820395738\n",
"Processing patient# 265 ETA: -0.6264781700302721 hrs\n",
"[[51, 114, 331], [145, 90, 135], [49, 343, 368]]\n",
"1912 4.010\n",
"1913 3.234\n",
"1914 3.756\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4329268292682927\n",
"Specificity: 0.06902985074626866\n",
"Processing patient# 266 ETA: -0.6445316896641763 hrs\n",
"[[129, 67, 312]]\n",
"1915 4.118\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4303030303030303\n",
"Specificity: 0.06856931060044477\n",
"Processing patient# 267 ETA: -0.6622083838423539 hrs\n",
"Processing patient# 268 ETA: -0.6695844257223861 hrs\n",
"Processing patient# 269 ETA: -0.6769056312730618 hrs\n",
"[[280, 337, 359]]\n",
"1916 4.285\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42771084337349397\n",
"Specificity: 0.06739526411657559\n",
"Processing patient# 270 ETA: -0.7057049627706347 hrs\n",
"[[35, 409, 203], [90, 128, 357], [44, 122, 235]]\n",
"1917 3.412\n",
"1918 7.682\n",
"1919 4.133\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 89 with actual coord [90, 128, 357]\n",
"Nodule Detected at slice# 90 with actual coord [90, 128, 357]\n",
"Nodule Detected at slice# 91 with actual coord [90, 128, 357]\n",
"Sensitivity: 0.4260355029585799\n",
"Specificity: 0.06716684530189353\n",
"Processing patient# 271 ETA: -0.72050155677161 hrs\n",
"[[98, 140, 243], [111, 393, 370], [93, 336, 318], [106, 348, 382], [126, 187, 387], [102, 174, 245], [89, 418, 237]]\n",
"1920 5.952\n",
"1921 12.418\n",
"1922 11.200\n",
"1923 6.977\n",
"1924 5.036\n",
"1925 7.364\n",
"1926 4.567\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 110 with actual coord [111, 393, 370]\n",
"Nodule Detected at slice# 111 with actual coord [111, 393, 370]\n",
"Nodule Detected at slice# 112 with actual coord [111, 393, 370]\n",
"Nodule Detected at slice# 105 with actual coord [106, 348, 382]\n",
"Nodule Detected at slice# 106 with actual coord [106, 348, 382]\n",
"Nodule Detected at slice# 107 with actual coord [106, 348, 382]\n",
"Nodule Detected at slice# 125 with actual coord [126, 187, 387]\n",
"Nodule Detected at slice# 126 with actual coord [126, 187, 387]\n",
"Nodule Detected at slice# 127 with actual coord [126, 187, 387]\n",
"Nodule Detected at slice# 101 with actual coord [102, 174, 245]\n",
"Nodule Detected at slice# 102 with actual coord [102, 174, 245]\n",
"Nodule Detected at slice# 103 with actual coord [102, 174, 245]\n",
"Sensitivity: 0.4318181818181818\n",
"Specificity: 0.0703977472720873\n",
"Processing patient# 272 ETA: -0.7400207091079039 hrs\n",
"[[121, 434, 296], [135, 354, 427], [50, 162, 353], [110, 407, 253], [85, 117, 279], [154, 101, 311], [153, 78, 305], [154, 80, 341], [207, 61, 329], [111, 228, 383], [131, 107, 318], [112, 88, 322], [193, 302, 421], [103, 118, 390]]\n",
"1927 2.755\n",
"1928 4.160\n",
"1929 7.594\n",
"1930 3.217\n",
"1931 3.290\n",
"1932 3.114\n",
"1933 7.743\n",
"1934 3.923\n",
"1935 3.242\n",
"1936 6.221\n",
"1937 3.032\n",
"1938 4.318\n",
"1939 3.060\n",
"1940 4.332\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 49 with actual coord [50, 162, 353]\n",
"Nodule Detected at slice# 50 with actual coord [50, 162, 353]\n",
"Nodule Detected at slice# 51 with actual coord [50, 162, 353]\n",
"Nodule Detected at slice# 152 with actual coord [153, 78, 305]\n",
"Nodule Detected at slice# 153 with actual coord [153, 78, 305]\n",
"Nodule Detected at slice# 154 with actual coord [153, 78, 305]\n",
"Nodule Detected at slice# 110 with actual coord [111, 228, 383]\n",
"Nodule Detected at slice# 111 with actual coord [111, 228, 383]\n",
"Nodule Detected at slice# 112 with actual coord [111, 228, 383]\n",
"Sensitivity: 0.41578947368421054\n",
"Specificity: 0.07113682777399591\n",
"Processing patient# 273 ETA: -0.7593161481325347 hrs\n",
"[[41, 188, 301], [31, 412, 301], [16, 176, 273]]\n",
"1941 9.821\n",
"1942 4.962\n",
"1943 6.837\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 40 with actual coord [41, 188, 301]\n",
"Nodule Detected at slice# 41 with actual coord [41, 188, 301]\n",
"Nodule Detected at slice# 42 with actual coord [41, 188, 301]\n",
"Nodule Detected at slice# 16 with actual coord [16, 176, 273]\n",
"Sensitivity: 0.41968911917098445\n",
"Specificity: 0.07174132704614349\n",
"Processing patient# 274 ETA: -0.7746534864586344 hrs\n",
"[[332, 104, 351], [100, 188, 395]]\n",
"1944 6.323\n",
"1945 4.640\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 331 with actual coord [332, 104, 351]\n",
"Nodule Detected at slice# 332 with actual coord [332, 104, 351]\n",
"Nodule Detected at slice# 333 with actual coord [332, 104, 351]\n",
"Sensitivity: 0.4205128205128205\n",
"Specificity: 0.07248322147651007\n",
"Processing patient# 275 ETA: -0.8112788267207869 hrs\n",
"Processing patient# 276 ETA: -0.8191174224954872 hrs\n",
"Processing patient# 277 ETA: -0.8268994259042908 hrs\n",
"[[54, 418, 175]]\n",
"1946 5.393\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.41836734693877553\n",
"Specificity: 0.07228915662650602\n",
"Processing patient# 278 ETA: -0.8407219234544882 hrs\n",
"[[104, 411, 303], [87, 98, 305], [25, 219, 260], [83, 417, 171], [81, 87, 186], [72, 116, 169], [73, 105, 154], [92, 99, 271]]\n",
"1947 6.309\n",
"1948 4.931\n",
"1949 5.281\n",
"1950 4.364\n",
"1951 5.831\n",
"1952 4.043\n",
"1953 4.297\n",
"1954 3.841\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 104 with actual coord [104, 411, 303]\n",
"Nodule Detected at slice# 105 with actual coord [104, 411, 303]\n",
"Nodule Detected at slice# 81 with actual coord [81, 87, 186]\n",
"Sensitivity: 0.4117647058823529\n",
"Specificity: 0.07275747508305648\n",
"Processing patient# 279 ETA: -0.8547288398973403 hrs\n",
"[[75, 398, 373], [60, 195, 294], [34, 183, 332], [58, 165, 214], [11, 212, 298], [72, 152, 148]]\n",
"1955 10.394\n",
"1956 14.815\n",
"1957 15.618\n",
"1958 6.461\n",
"1959 6.971\n",
"1960 6.461\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 74 with actual coord [75, 398, 373]\n",
"Nodule Detected at slice# 75 with actual coord [75, 398, 373]\n",
"Nodule Detected at slice# 76 with actual coord [75, 398, 373]\n",
"Nodule Detected at slice# 60 with actual coord [60, 195, 294]\n",
"Nodule Detected at slice# 61 with actual coord [60, 195, 294]\n",
"Nodule Detected at slice# 33 with actual coord [34, 183, 332]\n",
"Nodule Detected at slice# 34 with actual coord [34, 183, 332]\n",
"Nodule Detected at slice# 35 with actual coord [34, 183, 332]\n",
"Nodule Detected at slice# 10 with actual coord [11, 212, 298]\n",
"Nodule Detected at slice# 11 with actual coord [11, 212, 298]\n",
"Nodule Detected at slice# 12 with actual coord [11, 212, 298]\n",
"Sensitivity: 0.41904761904761906\n",
"Specificity: 0.07568279039157617\n",
"Processing patient# 280 ETA: -0.8671448359413751 hrs\n",
"[[27, 342, 347], [46, 87, 251], [21, 210, 354], [48, 198, 160]]\n",
"1961 24.957\n",
"1962 5.973\n",
"1963 5.478\n",
"1964 7.579\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 26 with actual coord [27, 342, 347]\n",
"Nodule Detected at slice# 27 with actual coord [27, 342, 347]\n",
"Nodule Detected at slice# 28 with actual coord [27, 342, 347]\n",
"Nodule Detected at slice# 45 with actual coord [46, 87, 251]\n",
"Nodule Detected at slice# 46 with actual coord [46, 87, 251]\n",
"Nodule Detected at slice# 21 with actual coord [21, 210, 354]\n",
"Nodule Detected at slice# 22 with actual coord [21, 210, 354]\n",
"Nodule Detected at slice# 47 with actual coord [48, 198, 160]\n",
"Nodule Detected at slice# 48 with actual coord [48, 198, 160]\n",
"Nodule Detected at slice# 49 with actual coord [48, 198, 160]\n",
"Sensitivity: 0.42990654205607476\n",
"Specificity: 0.07749434937035841\n",
"Processing patient# 281 ETA: -0.8799125879048453 hrs\n",
"[[73, 418, 358], [82, 458, 297], [65, 118, 180], [87, 141, 347], [58, 108, 315], [45, 356, 374], [85, 455, 242]]\n",
"1965 7.535\n",
"1966 14.091\n",
"1967 5.929\n",
"1968 25.489\n",
"1969 4.594\n",
"1970 24.822\n",
"1971 4.352\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 72 with actual coord [73, 418, 358]\n",
"Nodule Detected at slice# 73 with actual coord [73, 418, 358]\n",
"Nodule Detected at slice# 74 with actual coord [73, 418, 358]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodule Detected at slice# 81 with actual coord [82, 458, 297]\n",
"Nodule Detected at slice# 82 with actual coord [82, 458, 297]\n",
"Nodule Detected at slice# 83 with actual coord [82, 458, 297]\n",
"Nodule Detected at slice# 65 with actual coord [65, 118, 180]\n",
"Nodule Detected at slice# 86 with actual coord [87, 141, 347]\n",
"Nodule Detected at slice# 87 with actual coord [87, 141, 347]\n",
"Nodule Detected at slice# 88 with actual coord [87, 141, 347]\n",
"Sensitivity: 0.4343891402714932\n",
"Specificity: 0.07971938775510204\n",
"Processing patient# 282 ETA: -0.8924763028329522 hrs\n",
"[[117, 404, 310], [71, 324, 206]]\n",
"1972 5.743\n",
"1973 9.606\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 116 with actual coord [117, 404, 310]\n",
"Nodule Detected at slice# 117 with actual coord [117, 404, 310]\n",
"Nodule Detected at slice# 118 with actual coord [117, 404, 310]\n",
"Sensitivity: 0.4349775784753363\n",
"Specificity: 0.0802155992390615\n",
"Processing patient# 283 ETA: -0.912509531576024 hrs\n",
"[[55, 93, 260], [60, 92, 276]]\n",
"1974 3.993\n",
"1975 13.159\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 59 with actual coord [60, 92, 276]\n",
"Nodule Detected at slice# 60 with actual coord [60, 92, 276]\n",
"Nodule Detected at slice# 61 with actual coord [60, 92, 276]\n",
"Sensitivity: 0.43555555555555553\n",
"Specificity: 0.08040201005025126\n",
"Processing patient# 284 ETA: -0.9276165660082456 hrs\n",
"[[59, 308, 399], [112, 412, 183], [142, 222, 109]]\n",
"1976 3.994\n",
"1977 5.284\n",
"1978 4.292\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4298245614035088\n",
"Specificity: 0.07891491985203453\n",
"Processing patient# 285 ETA: -0.9474092618078284 hrs\n",
"Processing patient# 286 ETA: -0.9552038283920511 hrs\n",
"[[178, 411, 338]]\n",
"1979 11.011\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 177 with actual coord [178, 411, 338]\n",
"Nodule Detected at slice# 178 with actual coord [178, 411, 338]\n",
"Nodule Detected at slice# 179 with actual coord [178, 411, 338]\n",
"Sensitivity: 0.43231441048034935\n",
"Specificity: 0.07872340425531915\n",
"Processing patient# 287 ETA: -0.9885201086233716 hrs\n",
"[[52, 171, 346], [226, 407, 317], [101, 188, 223]]\n",
"1980 5.465\n",
"1981 3.949\n",
"1982 2.914\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 51 with actual coord [52, 171, 346]\n",
"Nodule Detected at slice# 52 with actual coord [52, 171, 346]\n",
"Nodule Detected at slice# 53 with actual coord [52, 171, 346]\n",
"Sensitivity: 0.43103448275862066\n",
"Specificity: 0.07811568276684555\n",
"Processing patient# 288 ETA: -1.0173021987062176 hrs\n",
"[[99, 139, 331]]\n",
"1983 2.916\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4291845493562232\n",
"Specificity: 0.07735459108355477\n",
"Processing patient# 289 ETA: -1.0488337143754927 hrs\n",
"[[93, 143, 120], [85, 439, 206], [17, 200, 247], [54, 90, 169], [68, 113, 160]]\n",
"1984 4.176\n",
"1985 8.182\n",
"1986 5.844\n",
"1987 2.152\n",
"1988 3.473\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 84 with actual coord [85, 439, 206]\n",
"Nodule Detected at slice# 85 with actual coord [85, 439, 206]\n",
"Nodule Detected at slice# 86 with actual coord [85, 439, 206]\n",
"Nodule Detected at slice# 17 with actual coord [17, 200, 247]\n",
"Nodule Detected at slice# 18 with actual coord [17, 200, 247]\n",
"Sensitivity: 0.42857142857142855\n",
"Specificity: 0.07850632167009702\n",
"Processing patient# 290 ETA: -1.0633959089682017 hrs\n",
"Processing patient# 291 ETA: -1.0715167082047907 hrs\n",
"[[139, 447, 216], [132, 449, 223], [160, 162, 378], [151, 310, 353]]\n",
"1989 7.468\n",
"1990 4.938\n",
"1991 4.589\n",
"1992 4.510\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 138 with actual coord [139, 447, 216]\n",
"Nodule Detected at slice# 139 with actual coord [139, 447, 216]\n",
"Nodule Detected at slice# 140 with actual coord [139, 447, 216]\n",
"Sensitivity: 0.4256198347107438\n",
"Specificity: 0.07855688100087285\n",
"Processing patient# 292 ETA: -1.0933069704085179 hrs\n",
"[[165, 60, 267], [86, 419, 209], [151, 324, 384], [181, 299, 307], [42, 225, 327], [67, 91, 238], [178, 60, 220], [112, 198, 133], [163, 441, 310]]\n",
"1993 4.879\n",
"1994 4.383\n",
"1995 5.464\n",
"1996 4.517\n",
"1997 4.352\n",
"1998 4.866\n",
"1999 5.646\n",
"2000 4.352\n",
"2001 4.712\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 150 with actual coord [151, 324, 384]\n",
"Nodule Detected at slice# 151 with actual coord [151, 324, 384]\n",
"Nodule Detected at slice# 152 with actual coord [151, 324, 384]\n",
"Sensitivity: 0.41434262948207173\n",
"Specificity: 0.07858376511226252\n",
"Processing patient# 293 ETA: -1.1144491154145326 hrs\n",
"[[150, 130, 184], [66, 202, 315], [65, 398, 308]]\n",
"2002 4.289\n",
"2003 4.377\n",
"2004 3.498\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4094488188976378\n",
"Specificity: 0.07746878547105562\n",
"Processing patient# 294 ETA: -1.1357826614569104 hrs\n",
"Processing patient# 295 ETA: -1.14397456530236 hrs\n",
"[[35, 102, 340], [56, 443, 297], [58, 209, 169]]\n",
"2005 8.201\n",
"2006 4.741\n",
"2007 16.094\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 34 with actual coord [35, 102, 340]\n",
"Nodule Detected at slice# 35 with actual coord [35, 102, 340]\n",
"Nodule Detected at slice# 36 with actual coord [35, 102, 340]\n",
"Nodule Detected at slice# 57 with actual coord [58, 209, 169]\n",
"Nodule Detected at slice# 58 with actual coord [58, 209, 169]\n",
"Nodule Detected at slice# 59 with actual coord [58, 209, 169]\n",
"Sensitivity: 0.41245136186770426\n",
"Specificity: 0.07845894263217097\n",
"Processing patient# 296 ETA: -1.158752222769969 hrs\n",
"[[175, 117, 258]]\n",
"2008 10.658\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 174 with actual coord [175, 117, 258]\n",
"Nodule Detected at slice# 175 with actual coord [175, 117, 258]\n",
"Nodule Detected at slice# 176 with actual coord [175, 117, 258]\n",
"Sensitivity: 0.41472868217054265\n",
"Specificity: 0.07762180016515277\n",
"Processing patient# 297 ETA: -1.1811336418929457 hrs\n",
"[[104, 101, 131]]\n",
"2009 2.505\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.41312741312741313\n",
"Specificity: 0.07700709994538503\n",
"Processing patient# 298 ETA: -1.1989392614533527 hrs\n",
"[[140, 339, 286], [145, 356, 321]]\n",
"2010 6.920\n",
"2011 9.353\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 139 with actual coord [140, 339, 286]\n",
"Nodule Detected at slice# 140 with actual coord [140, 339, 286]\n",
"Nodule Detected at slice# 144 with actual coord [145, 356, 321]\n",
"Nodule Detected at slice# 145 with actual coord [145, 356, 321]\n",
"Nodule Detected at slice# 146 with actual coord [145, 356, 321]\n",
"Sensitivity: 0.41762452107279696\n",
"Specificity: 0.0779467680608365\n",
"Processing patient# 299 ETA: -1.216612838765849 hrs\n",
"[[27, 379, 290]]\n",
"2012 3.739\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.41603053435114506\n",
"Specificity: 0.07704697986577182\n",
"Processing patient# 300 ETA: -1.2363688643994157 hrs\n",
"[[90, 356, 361], [247, 304, 365], [220, 348, 456], [147, 334, 434], [185, 383, 447], [127, 377, 433], [139, 96, 282], [133, 411, 310], [166, 113, 421], [124, 94, 383], [90, 295, 378], [112, 369, 372]]\n",
"2013 14.627\n",
"2014 8.630\n",
"2015 4.541\n",
"2016 7.850\n",
"2017 5.058\n",
"2018 6.911\n",
"2019 5.561\n",
"2020 3.875\n",
"2021 6.085\n",
"2022 3.570\n",
"2023 8.049\n",
"2024 4.754\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 89 with actual coord [90, 356, 361]\n",
"Nodule Detected at slice# 90 with actual coord [90, 356, 361]\n",
"Nodule Detected at slice# 91 with actual coord [90, 356, 361]\n",
"Nodule Detected at slice# 246 with actual coord [247, 304, 365]\n",
"Nodule Detected at slice# 247 with actual coord [247, 304, 365]\n",
"Nodule Detected at slice# 248 with actual coord [247, 304, 365]\n",
"Nodule Detected at slice# 146 with actual coord [147, 334, 434]\n",
"Nodule Detected at slice# 126 with actual coord [127, 377, 433]\n",
"Nodule Detected at slice# 127 with actual coord [127, 377, 433]\n",
"Nodule Detected at slice# 128 with actual coord [127, 377, 433]\n",
"Nodule Detected at slice# 138 with actual coord [139, 96, 282]\n",
"Nodule Detected at slice# 139 with actual coord [139, 96, 282]\n",
"Nodule Detected at slice# 140 with actual coord [139, 96, 282]\n",
"Nodule Detected at slice# 165 with actual coord [166, 113, 421]\n",
"Nodule Detected at slice# 166 with actual coord [166, 113, 421]\n",
"Nodule Detected at slice# 167 with actual coord [166, 113, 421]\n",
"Nodule Detected at slice# 89 with actual coord [90, 295, 378]\n",
"Nodule Detected at slice# 90 with actual coord [90, 295, 378]\n",
"Nodule Detected at slice# 91 with actual coord [90, 295, 378]\n",
"Sensitivity: 0.4233576642335766\n",
"Specificity: 0.07907098121085596\n",
"Processing patient# 301 ETA: -1.2614309130803207 hrs\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[94, 111, 362]]\n",
"2025 6.325\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 93 with actual coord [94, 111, 362]\n",
"Nodule Detected at slice# 94 with actual coord [94, 111, 362]\n",
"Nodule Detected at slice# 95 with actual coord [94, 111, 362]\n",
"Sensitivity: 0.4254545454545455\n",
"Specificity: 0.07854209445585215\n",
"Processing patient# 302 ETA: -1.2831493301344234 hrs\n",
"[[35, 194, 194], [34, 333, 327]]\n",
"2026 16.635\n",
"2027 30.818\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 34 with actual coord [35, 194, 194]\n",
"Nodule Detected at slice# 35 with actual coord [35, 194, 194]\n",
"Nodule Detected at slice# 36 with actual coord [35, 194, 194]\n",
"Nodule Detected at slice# 33 with actual coord [34, 333, 327]\n",
"Nodule Detected at slice# 34 with actual coord [34, 333, 327]\n",
"Nodule Detected at slice# 35 with actual coord [34, 333, 327]\n",
"Sensitivity: 0.4296028880866426\n",
"Specificity: 0.07874015748031496\n",
"Processing patient# 303 ETA: -1.2988921113892007 hrs\n",
"[[22, 133, 249], [54, 144, 319], [61, 374, 342], [65, 114, 216], [50, 356, 266], [23, 122, 317]]\n",
"2028 21.273\n",
"2029 5.113\n",
"2030 6.716\n",
"2031 5.094\n",
"2032 5.075\n",
"2033 8.756\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 21 with actual coord [22, 133, 249]\n",
"Nodule Detected at slice# 22 with actual coord [22, 133, 249]\n",
"Nodule Detected at slice# 23 with actual coord [22, 133, 249]\n",
"Nodule Detected at slice# 61 with actual coord [61, 374, 342]\n",
"Nodule Detected at slice# 22 with actual coord [23, 122, 317]\n",
"Nodule Detected at slice# 23 with actual coord [23, 122, 317]\n",
"Nodule Detected at slice# 24 with actual coord [23, 122, 317]\n",
"Sensitivity: 0.43109540636042404\n",
"Specificity: 0.07962588473205258\n",
"Processing patient# 304 ETA: -1.312506511129482 hrs\n",
"Processing patient# 305 ETA: -1.3207822793885007 hrs\n",
"[[249, 112, 419], [79, 137, 365], [92, 81, 249], [50, 157, 296], [78, 293, 330], [125, 215, 374], [229, 111, 348], [118, 91, 217], [236, 419, 290], [170, 148, 173], [157, 113, 330]]\n",
"2034 4.435\n",
"2035 4.019\n",
"2036 3.704\n",
"2037 3.978\n",
"2038 5.908\n",
"2039 6.180\n",
"2040 7.348\n",
"2041 7.628\n",
"2042 22.907\n",
"2043 8.543\n",
"2044 6.417\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 77 with actual coord [78, 293, 330]\n",
"Nodule Detected at slice# 78 with actual coord [78, 293, 330]\n",
"Nodule Detected at slice# 79 with actual coord [78, 293, 330]\n",
"Nodule Detected at slice# 124 with actual coord [125, 215, 374]\n",
"Nodule Detected at slice# 125 with actual coord [125, 215, 374]\n",
"Nodule Detected at slice# 126 with actual coord [125, 215, 374]\n",
"Nodule Detected at slice# 228 with actual coord [229, 111, 348]\n",
"Nodule Detected at slice# 229 with actual coord [229, 111, 348]\n",
"Nodule Detected at slice# 230 with actual coord [229, 111, 348]\n",
"Nodule Detected at slice# 117 with actual coord [118, 91, 217]\n",
"Nodule Detected at slice# 118 with actual coord [118, 91, 217]\n",
"Nodule Detected at slice# 119 with actual coord [118, 91, 217]\n",
"Nodule Detected at slice# 235 with actual coord [236, 419, 290]\n",
"Nodule Detected at slice# 236 with actual coord [236, 419, 290]\n",
"Nodule Detected at slice# 237 with actual coord [236, 419, 290]\n",
"Nodule Detected at slice# 169 with actual coord [170, 148, 173]\n",
"Nodule Detected at slice# 170 with actual coord [170, 148, 173]\n",
"Nodule Detected at slice# 171 with actual coord [170, 148, 173]\n",
"Nodule Detected at slice# 156 with actual coord [157, 113, 330]\n",
"Nodule Detected at slice# 157 with actual coord [157, 113, 330]\n",
"Nodule Detected at slice# 158 with actual coord [157, 113, 330]\n",
"Sensitivity: 0.4387755102040816\n",
"Specificity: 0.08335400645001241\n",
"Processing patient# 306 ETA: -1.3450457502952415 hrs\n",
"[[200, 301, 286], [111, 328, 363], [157, 392, 288], [187, 72, 322]]\n",
"2045 8.737\n",
"2046 4.263\n",
"2047 12.609\n",
"2048 4.405\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 199 with actual coord [200, 301, 286]\n",
"Nodule Detected at slice# 200 with actual coord [200, 301, 286]\n",
"Nodule Detected at slice# 201 with actual coord [200, 301, 286]\n",
"Nodule Detected at slice# 156 with actual coord [157, 392, 288]\n",
"Nodule Detected at slice# 157 with actual coord [157, 392, 288]\n",
"Nodule Detected at slice# 158 with actual coord [157, 392, 288]\n",
"Sensitivity: 0.4395973154362416\n",
"Specificity: 0.08409146791246619\n",
"Processing patient# 307 ETA: -1.3713638908231855 hrs\n",
"[[109, 436, 294], [72, 166, 201], [30, 212, 281], [53, 365, 357], [113, 414, 335], [16, 161, 267], [61, 407, 186], [29, 294, 293]]\n",
"2049 5.195\n",
"2050 5.314\n",
"2051 5.437\n",
"2052 6.282\n",
"2053 3.758\n",
"2054 6.389\n",
"2055 5.619\n",
"2056 4.355\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 109 with actual coord [109, 436, 294]\n",
"Nodule Detected at slice# 110 with actual coord [109, 436, 294]\n",
"Sensitivity: 0.43137254901960786\n",
"Specificity: 0.08431372549019608\n",
"Processing patient# 308 ETA: -1.389509897487504 hrs\n",
"[[149, 313, 366]]\n",
"2057 3.629\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42996742671009774\n",
"Specificity: 0.08371866634217572\n",
"Processing patient# 309 ETA: -1.4223142139980665 hrs\n",
"[[38, 405, 316]]\n",
"2058 5.071\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42857142857142855\n",
"Specificity: 0.08313194780086998\n",
"Processing patient# 310 ETA: -1.4394842782264115 hrs\n",
"[[113, 209, 335], [194, 401, 230], [131, 109, 186]]\n",
"2059 4.160\n",
"2060 4.946\n",
"2061 17.130\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 130 with actual coord [131, 109, 186]\n",
"Nodule Detected at slice# 131 with actual coord [131, 109, 186]\n",
"Nodule Detected at slice# 132 with actual coord [131, 109, 186]\n",
"Sensitivity: 0.42765273311897106\n",
"Specificity: 0.08295481711690174\n",
"Processing patient# 311 ETA: -1.4672522982280993 hrs\n",
"[[66, 403, 312]]\n",
"2062 4.422\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42628205128205127\n",
"Specificity: 0.0818010372465818\n",
"Processing patient# 312 ETA: -1.4948357845948972 hrs\n",
"[[117, 132, 152]]\n",
"2063 4.946\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4249201277955272\n",
"Specificity: 0.08118858212447357\n",
"Processing patient# 313 ETA: -1.5178912255835526 hrs\n",
"[[110, 166, 396]]\n",
"2064 4.282\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42356687898089174\n",
"Specificity: 0.08047309833024119\n",
"Processing patient# 314 ETA: -1.5437265551128208 hrs\n",
"Processing patient# 315 ETA: -1.5523245109662387 hrs\n",
"[[75, 333, 206], [60, 148, 347], [61, 375, 288], [143, 385, 255], [121, 313, 205], [62, 376, 267], [116, 299, 184], [50, 349, 213], [130, 164, 165]]\n",
"2065 23.414\n",
"2066 4.437\n",
"2067 8.552\n",
"2068 4.913\n",
"2069 4.114\n",
"2070 3.614\n",
"2071 12.915\n",
"2072 5.109\n",
"2073 5.220\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 74 with actual coord [75, 333, 206]\n",
"Nodule Detected at slice# 75 with actual coord [75, 333, 206]\n",
"Nodule Detected at slice# 76 with actual coord [75, 333, 206]\n",
"Nodule Detected at slice# 60 with actual coord [61, 375, 288]\n",
"Nodule Detected at slice# 61 with actual coord [61, 375, 288]\n",
"Nodule Detected at slice# 62 with actual coord [61, 375, 288]\n",
"Nodule Detected at slice# 115 with actual coord [116, 299, 184]\n",
"Nodule Detected at slice# 116 with actual coord [116, 299, 184]\n",
"Nodule Detected at slice# 117 with actual coord [116, 299, 184]\n",
"Nodule Detected at slice# 49 with actual coord [50, 349, 213]\n",
"Nodule Detected at slice# 50 with actual coord [50, 349, 213]\n",
"Nodule Detected at slice# 51 with actual coord [50, 349, 213]\n",
"Nodule Detected at slice# 129 with actual coord [130, 164, 165]\n",
"Nodule Detected at slice# 130 with actual coord [130, 164, 165]\n",
"Nodule Detected at slice# 131 with actual coord [130, 164, 165]\n",
"Sensitivity: 0.42724458204334365\n",
"Specificity: 0.08270504912040211\n",
"Processing patient# 316 ETA: -1.5749615946013884 hrs\n",
"[[55, 110, 299]]\n",
"2074 2.907\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42592592592592593\n",
"Specificity: 0.0823288605867637\n",
"Processing patient# 317 ETA: -1.5920844926085758 hrs\n",
"[[90, 455, 272], [94, 146, 360], [101, 420, 369]]\n",
"2075 4.722\n",
"2076 3.119\n",
"2077 3.738\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42201834862385323\n",
"Specificity: 0.08201178069777978\n",
"Processing patient# 318 ETA: -1.6090465639876286 hrs\n",
"[[30, 166, 306], [101, 382, 162], [99, 72, 260], [124, 172, 382]]\n",
"2078 10.323\n",
"2079 4.843\n",
"2080 4.796\n",
"2081 4.596\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 29 with actual coord [30, 166, 306]\n",
"Nodule Detected at slice# 30 with actual coord [30, 166, 306]\n",
"Nodule Detected at slice# 31 with actual coord [30, 166, 306]\n",
"Sensitivity: 0.4199395770392749\n",
"Specificity: 0.08218869623958568\n",
"Processing patient# 319 ETA: -1.6284042104348948 hrs\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[261, 148, 142]]\n",
"2082 4.669\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4186746987951807\n",
"Specificity: 0.08172861621137484\n",
"Processing patient# 320 ETA: -1.6654085892438888 hrs\n",
"[[143, 347, 369], [104, 372, 135]]\n",
"2083 10.763\n",
"2084 26.356\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 142 with actual coord [143, 347, 369]\n",
"Nodule Detected at slice# 144 with actual coord [143, 347, 369]\n",
"Nodule Detected at slice# 103 with actual coord [104, 372, 135]\n",
"Nodule Detected at slice# 104 with actual coord [104, 372, 135]\n",
"Nodule Detected at slice# 105 with actual coord [104, 372, 135]\n",
"Sensitivity: 0.4221556886227545\n",
"Specificity: 0.08214920071047957\n",
"Processing patient# 321 ETA: -1.690273597471109 hrs\n",
"[[195, 119, 320]]\n",
"2085 15.408\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 194 with actual coord [195, 119, 320]\n",
"Nodule Detected at slice# 195 with actual coord [195, 119, 320]\n",
"Nodule Detected at slice# 196 with actual coord [195, 119, 320]\n",
"Sensitivity: 0.42388059701492536\n",
"Specificity: 0.08103410819031066\n",
"Processing patient# 322 ETA: -1.7222911129354033 hrs\n",
"[[113, 345, 356], [121, 323, 374], [68, 91, 281], [154, 79, 307]]\n",
"2086 5.108\n",
"2087 4.252\n",
"2088 4.071\n",
"2089 3.588\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 112 with actual coord [113, 345, 356]\n",
"Nodule Detected at slice# 113 with actual coord [113, 345, 356]\n",
"Nodule Detected at slice# 114 with actual coord [113, 345, 356]\n",
"Sensitivity: 0.4218289085545723\n",
"Specificity: 0.08037622915775973\n",
"Processing patient# 323 ETA: -1.7560242365628205 hrs\n",
"[[180, 176, 375], [173, 164, 359]]\n",
"2090 5.764\n",
"2091 10.315\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 179 with actual coord [180, 176, 375]\n",
"Nodule Detected at slice# 180 with actual coord [180, 176, 375]\n",
"Nodule Detected at slice# 181 with actual coord [180, 176, 375]\n",
"Nodule Detected at slice# 172 with actual coord [173, 164, 359]\n",
"Nodule Detected at slice# 173 with actual coord [173, 164, 359]\n",
"Nodule Detected at slice# 174 with actual coord [173, 164, 359]\n",
"Sensitivity: 0.4252199413489736\n",
"Specificity: 0.08127659574468085\n",
"Processing patient# 324 ETA: -1.7881466622852986 hrs\n",
"[[294, 158, 282], [122, 399, 337]]\n",
"2092 7.186\n",
"2093 5.476\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 293 with actual coord [294, 158, 282]\n",
"Nodule Detected at slice# 294 with actual coord [294, 158, 282]\n",
"Nodule Detected at slice# 295 with actual coord [294, 158, 282]\n",
"Nodule Detected at slice# 121 with actual coord [122, 399, 337]\n",
"Nodule Detected at slice# 122 with actual coord [122, 399, 337]\n",
"Nodule Detected at slice# 123 with actual coord [122, 399, 337]\n",
"Sensitivity: 0.42857142857142855\n",
"Specificity: 0.08068205448118111\n",
"Processing patient# 325 ETA: -1.8192087536438915 hrs\n",
"[[72, 135, 290], [48, 353, 319]]\n",
"2094 7.106\n",
"2095 3.841\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 71 with actual coord [72, 135, 290]\n",
"Nodule Detected at slice# 72 with actual coord [72, 135, 290]\n",
"Nodule Detected at slice# 73 with actual coord [72, 135, 290]\n",
"Sensitivity: 0.4289855072463768\n",
"Specificity: 0.08085194375516956\n",
"Processing patient# 326 ETA: -1.8369306185567302 hrs\n",
"[[81, 352, 202]]\n",
"2096 17.409\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 80 with actual coord [81, 352, 202]\n",
"Nodule Detected at slice# 81 with actual coord [81, 352, 202]\n",
"Nodule Detected at slice# 82 with actual coord [81, 352, 202]\n",
"Sensitivity: 0.430635838150289\n",
"Specificity: 0.08073770491803278\n",
"Processing patient# 327 ETA: -1.8630767037323288 hrs\n",
"[[145, 147, 392]]\n",
"2097 4.628\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42939481268011526\n",
"Specificity: 0.07996752587781611\n",
"Processing patient# 328 ETA: -1.8904273674352383 hrs\n",
"[[44, 328, 381], [41, 217, 307], [20, 375, 287]]\n",
"2098 6.388\n",
"2099 10.325\n",
"2100 17.008\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 43 with actual coord [44, 328, 381]\n",
"Nodule Detected at slice# 44 with actual coord [44, 328, 381]\n",
"Nodule Detected at slice# 19 with actual coord [20, 375, 287]\n",
"Nodule Detected at slice# 20 with actual coord [20, 375, 287]\n",
"Nodule Detected at slice# 21 with actual coord [20, 375, 287]\n",
"Sensitivity: 0.43142857142857144\n",
"Specificity: 0.08058977984245606\n",
"Processing patient# 329 ETA: -1.9057568196485832 hrs\n",
"[[37, 205, 275]]\n",
"2101 5.868\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4301994301994302\n",
"Specificity: 0.08045977011494253\n",
"Processing patient# 330 ETA: -1.931154639223208 hrs\n",
"[[59, 406, 202], [19, 337, 289], [18, 328, 320]]\n",
"2102 4.469\n",
"2103 10.870\n",
"2104 4.613\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 18 with actual coord [19, 337, 289]\n",
"Nodule Detected at slice# 19 with actual coord [19, 337, 289]\n",
"Nodule Detected at slice# 20 with actual coord [19, 337, 289]\n",
"Sensitivity: 0.4293785310734463\n",
"Specificity: 0.08031968031968031\n",
"Processing patient# 331 ETA: -1.9491273069467752 hrs\n",
"[[42, 130, 352], [22, 318, 364], [158, 400, 361], [190, 342, 471]]\n",
"2105 2.569\n",
"2106 6.282\n",
"2107 6.627\n",
"2108 6.028\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 21 with actual coord [22, 318, 364]\n",
"Nodule Detected at slice# 22 with actual coord [22, 318, 364]\n",
"Nodule Detected at slice# 23 with actual coord [22, 318, 364]\n",
"Sensitivity: 0.4273743016759777\n",
"Specificity: 0.08040500297796307\n",
"Processing patient# 332 ETA: -1.986476611913926 hrs\n",
"[[56, 409, 237]]\n",
"2109 3.553\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42618384401114207\n",
"Specificity: 0.08018214215006929\n",
"Processing patient# 333 ETA: -2.013454695883933 hrs\n",
"[[132, 439, 279]]\n",
"2110 3.811\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.425\n",
"Specificity: 0.07988165680473373\n",
"Processing patient# 334 ETA: -2.0410690262233584 hrs\n",
"Processing patient# 335 ETA: -2.0501630088820386 hrs\n",
"[[34, 319, 236], [51, 139, 200]]\n",
"2111 6.066\n",
"2112 8.039\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.42265193370165743\n",
"Specificity: 0.07958341520927491\n",
"Processing patient# 336 ETA: -2.0773469060706713 hrs\n",
"[[148, 368, 165], [161, 148, 201], [225, 343, 127], [182, 124, 393], [175, 87, 264], [88, 414, 303], [145, 218, 179], [217, 317, 386], [228, 422, 363], [366, 61, 353], [231, 296, 119], [49, 137, 317], [157, 392, 194]]\n",
"2113 6.224\n",
"2114 6.030\n",
"2115 3.375\n",
"2116 6.215\n",
"2117 5.608\n",
"2118 3.845\n",
"2119 4.069\n",
"2120 6.318\n",
"2121 4.300\n",
"2122 3.605\n",
"2123 4.337\n",
"2124 4.807\n",
"2125 4.499\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 147 with actual coord [148, 368, 165]\n",
"Nodule Detected at slice# 148 with actual coord [148, 368, 165]\n",
"Nodule Detected at slice# 149 with actual coord [148, 368, 165]\n",
"Nodule Detected at slice# 181 with actual coord [182, 124, 393]\n",
"Nodule Detected at slice# 182 with actual coord [182, 124, 393]\n",
"Nodule Detected at slice# 183 with actual coord [182, 124, 393]\n",
"Nodule Detected at slice# 216 with actual coord [217, 317, 386]\n",
"Nodule Detected at slice# 217 with actual coord [217, 317, 386]\n",
"Nodule Detected at slice# 218 with actual coord [217, 317, 386]\n",
"Sensitivity: 0.416\n",
"Specificity: 0.07967667436489607\n",
"Processing patient# 337 ETA: -2.1175451011312623 hrs\n",
"[[307, 425, 245], [282, 110, 394], [417, 420, 397], [285, 426, 262], [239, 131, 198], [297, 67, 208]]\n",
"2126 4.202\n",
"2127 4.082\n",
"2128 3.526\n",
"2129 10.595\n",
"2130 4.959\n",
"2131 6.096\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 284 with actual coord [285, 426, 262]\n",
"Nodule Detected at slice# 285 with actual coord [285, 426, 262]\n",
"Nodule Detected at slice# 286 with actual coord [285, 426, 262]\n",
"Nodule Detected at slice# 296 with actual coord [297, 67, 208]\n",
"Nodule Detected at slice# 297 with actual coord [297, 67, 208]\n",
"Nodule Detected at slice# 298 with actual coord [297, 67, 208]\n",
"Sensitivity: 0.4146981627296588\n",
"Specificity: 0.0794251134644478\n",
"Processing patient# 338 ETA: -2.160758105053234 hrs\n",
"Processing patient# 339 ETA: -2.169995894762423 hrs\n",
"[[143, 55, 294]]\n",
"2132 6.85\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 142 with actual coord [143, 55, 294]\n",
"Nodule Detected at slice# 143 with actual coord [143, 55, 294]\n",
"Nodule Detected at slice# 144 with actual coord [143, 55, 294]\n",
"Sensitivity: 0.4162303664921466\n",
"Specificity: 0.07954118089507334\n",
"Processing patient# 340 ETA: -2.1903565393982367 hrs\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[53, 206, 239], [212, 87, 230], [76, 140, 297]]\n",
"2133 7.367\n",
"2134 3.389\n",
"2135 4.956\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 52 with actual coord [53, 206, 239]\n",
"Nodule Detected at slice# 53 with actual coord [53, 206, 239]\n",
"Nodule Detected at slice# 54 with actual coord [53, 206, 239]\n",
"Sensitivity: 0.4155844155844156\n",
"Specificity: 0.07953696788648244\n",
"Processing patient# 341 ETA: -2.2257796875699873 hrs\n",
"[[125, 153, 354]]\n",
"2136 23.587\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 124 with actual coord [125, 153, 354]\n",
"Nodule Detected at slice# 125 with actual coord [125, 153, 354]\n",
"Nodule Detected at slice# 126 with actual coord [125, 153, 354]\n",
"Sensitivity: 0.4170984455958549\n",
"Specificity: 0.07887479316050745\n",
"Processing patient# 342 ETA: -2.262423532506024 hrs\n",
"[[76, 423, 358]]\n",
"2137 4.803\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4160206718346253\n",
"Specificity: 0.07857142857142857\n",
"Processing patient# 343 ETA: -2.2803060747249093 hrs\n",
"[[73, 163, 362], [34, 303, 153], [67, 383, 269]]\n",
"2138 3.390\n",
"2139 4.037\n",
"2140 6.002\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 67 with actual coord [67, 383, 269]\n",
"Nodule Detected at slice# 68 with actual coord [67, 383, 269]\n",
"Sensitivity: 0.4153846153846154\n",
"Specificity: 0.07853498542274052\n",
"Processing patient# 344 ETA: -2.2991284793476723 hrs\n",
"[[102, 399, 168], [133, 176, 129]]\n",
"2141 4.596\n",
"2142 4.338\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.413265306122449\n",
"Specificity: 0.077825929938606\n",
"Processing patient# 345 ETA: -2.3214763074163076 hrs\n",
"[[111, 136, 340]]\n",
"2143 9.118\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 110 with actual coord [111, 136, 340]\n",
"Nodule Detected at slice# 111 with actual coord [111, 136, 340]\n",
"Nodule Detected at slice# 112 with actual coord [111, 136, 340]\n",
"Sensitivity: 0.41475826972010177\n",
"Specificity: 0.07725169099323603\n",
"Processing patient# 346 ETA: -2.3474992018329384 hrs\n",
"[[87, 86, 250], [32, 159, 311]]\n",
"2144 3.948\n",
"2145 6.494\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 31 with actual coord [32, 159, 311]\n",
"Nodule Detected at slice# 32 with actual coord [32, 159, 311]\n",
"Nodule Detected at slice# 33 with actual coord [32, 159, 311]\n",
"Sensitivity: 0.4151898734177215\n",
"Specificity: 0.07722212405018554\n",
"Processing patient# 347 ETA: -2.37587370918704 hrs\n",
"[[59, 350, 271]]\n",
"2146 7.155\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.41414141414141414\n",
"Specificity: 0.07707231040564375\n",
"Processing patient# 348 ETA: -2.399350373549327 hrs\n",
"[[18, 210, 321]]\n",
"2147 4.544\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.41309823677581864\n",
"Specificity: 0.07614566997734797\n",
"Processing patient# 349 ETA: -2.4194342114713985 hrs\n",
"[[101, 172, 340], [96, 157, 322], [67, 130, 288]]\n",
"2148 6.336\n",
"2149 3.462\n",
"2150 17.520\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 100 with actual coord [101, 172, 340]\n",
"Nodule Detected at slice# 101 with actual coord [101, 172, 340]\n",
"Nodule Detected at slice# 102 with actual coord [101, 172, 340]\n",
"Nodule Detected at slice# 66 with actual coord [67, 130, 288]\n",
"Nodule Detected at slice# 67 with actual coord [67, 130, 288]\n",
"Nodule Detected at slice# 68 with actual coord [67, 130, 288]\n",
"Sensitivity: 0.415\n",
"Specificity: 0.07585616438356164\n",
"Processing patient# 350 ETA: -2.453822374400638 hrs\n",
"[[104, 118, 218], [145, 184, 240], [21, 301, 253], [26, 228, 262], [122, 169, 159]]\n",
"2151 3.490\n",
"2152 4.754\n",
"2153 5.124\n",
"2154 5.603\n",
"2155 3.994\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40987654320987654\n",
"Specificity: 0.07539142273655548\n",
"Processing patient# 351 ETA: -2.47779455808606 hrs\n",
"[[70, 331, 212], [74, 132, 215]]\n",
"2156 7.202\n",
"2157 4.233\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 69 with actual coord [70, 331, 212]\n",
"Nodule Detected at slice# 70 with actual coord [70, 331, 212]\n",
"Nodule Detected at slice# 71 with actual coord [70, 331, 212]\n",
"Sensitivity: 0.4103194103194103\n",
"Specificity: 0.0752361673414305\n",
"Processing patient# 352 ETA: -2.516836094949583 hrs\n",
"[[148, 389, 286], [240, 429, 185], [184, 119, 149], [114, 141, 181], [257, 458, 298], [63, 177, 307], [158, 98, 318], [229, 433, 209]]\n",
"2158 5.153\n",
"2159 3.869\n",
"2160 3.550\n",
"2161 6.922\n",
"2162 4.799\n",
"2163 4.322\n",
"2164 5.006\n",
"2165 3.809\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 147 with actual coord [148, 389, 286]\n",
"Nodule Detected at slice# 148 with actual coord [148, 389, 286]\n",
"Nodule Detected at slice# 149 with actual coord [148, 389, 286]\n",
"Nodule Detected at slice# 113 with actual coord [114, 141, 181]\n",
"Nodule Detected at slice# 114 with actual coord [114, 141, 181]\n",
"Nodule Detected at slice# 115 with actual coord [114, 141, 181]\n",
"Sensitivity: 0.4072289156626506\n",
"Specificity: 0.07604306864064603\n",
"Processing patient# 353 ETA: -2.5453680088212742 hrs\n",
"[[65, 133, 399]]\n",
"2166 5.63\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 64 with actual coord [65, 133, 399]\n",
"Nodule Detected at slice# 65 with actual coord [65, 133, 399]\n",
"Sensitivity: 0.40865384615384615\n",
"Specificity: 0.0761744966442953\n",
"Processing patient# 354 ETA: -2.563256074702747 hrs\n",
"[[71, 96, 165], [79, 162, 387]]\n",
"2167 4.660\n",
"2168 5.103\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40669856459330145\n",
"Specificity: 0.07611064543168483\n",
"Processing patient# 355 ETA: -2.582472086877144 hrs\n",
"[[156, 353, 408]]\n",
"2169 6.306\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 155 with actual coord [156, 353, 408]\n",
"Nodule Detected at slice# 156 with actual coord [156, 353, 408]\n",
"Nodule Detected at slice# 157 with actual coord [156, 353, 408]\n",
"Sensitivity: 0.4081145584725537\n",
"Specificity: 0.07541254125412541\n",
"Processing patient# 356 ETA: -2.611665942405493 hrs\n",
"[[105, 145, 297], [121, 160, 327]]\n",
"2170 5.923\n",
"2171 5.217\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 104 with actual coord [105, 145, 297]\n",
"Nodule Detected at slice# 105 with actual coord [105, 145, 297]\n",
"Nodule Detected at slice# 106 with actual coord [105, 145, 297]\n",
"Nodule Detected at slice# 120 with actual coord [121, 160, 327]\n",
"Nodule Detected at slice# 121 with actual coord [121, 160, 327]\n",
"Nodule Detected at slice# 122 with actual coord [121, 160, 327]\n",
"Sensitivity: 0.41092636579572445\n",
"Specificity: 0.07526007802340702\n",
"Processing patient# 357 ETA: -2.65487501386 hrs\n",
"[[295, 153, 166], [316, 424, 271], [75, 402, 298], [185, 106, 363]]\n",
"2172 4.915\n",
"2173 3.534\n",
"2174 6.169\n",
"2175 4.367\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 74 with actual coord [75, 402, 298]\n",
"Nodule Detected at slice# 75 with actual coord [75, 402, 298]\n",
"Nodule Detected at slice# 76 with actual coord [75, 402, 298]\n",
"Sensitivity: 0.40941176470588236\n",
"Specificity: 0.07454807230843065\n",
"Processing patient# 358 ETA: -2.6930751167125835 hrs\n",
"[[122, 419, 337]]\n",
"2176 5.079\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 121 with actual coord [122, 419, 337]\n",
"Nodule Detected at slice# 122 with actual coord [122, 419, 337]\n",
"Sensitivity: 0.4107981220657277\n",
"Specificity: 0.07474844274077623\n",
"Processing patient# 359 ETA: -2.721961952400296 hrs\n",
"[[88, 314, 169]]\n",
"2177 22.661\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 87 with actual coord [88, 314, 169]\n",
"Nodule Detected at slice# 88 with actual coord [88, 314, 169]\n",
"Nodule Detected at slice# 89 with actual coord [88, 314, 169]\n",
"Sensitivity: 0.41217798594847777\n",
"Specificity: 0.07426679280983917\n",
"Processing patient# 360 ETA: -2.752537683057196 hrs\n",
"[[79, 173, 348], [92, 122, 325]]\n",
"2178 3.414\n",
"2179 4.225\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.41025641025641024\n",
"Specificity: 0.07358225277300422\n",
"Processing patient# 361 ETA: -2.7808586135718523 hrs\n",
"[[95, 78, 278]]\n",
"2180 4.249\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40930232558139534\n",
"Specificity: 0.07233911841499002\n",
"Processing patient# 362 ETA: -2.8235655456715523 hrs\n",
"[[66, 57, 284], [78, 449, 374], [57, 441, 355]]\n",
"2181 4.742\n",
"2182 3.198\n",
"2183 4.809\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4064665127020785\n",
"Specificity: 0.07208448117539026\n",
"Processing patient# 363 ETA: -2.8415355438119887 hrs\n",
"[[135, 143, 267]]\n",
"2184 5.017\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4055299539170507\n",
"Specificity: 0.07146108329540282\n",
"Processing patient# 364 ETA: -2.869065261079278 hrs\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[146, 386, 337], [158, 134, 229], [225, 182, 299]]\n",
"2185 4.280\n",
"2186 3.888\n",
"2187 38.148\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 224 with actual coord [225, 182, 299]\n",
"Nodule Detected at slice# 225 with actual coord [225, 182, 299]\n",
"Nodule Detected at slice# 226 with actual coord [225, 182, 299]\n",
"Sensitivity: 0.40503432494279173\n",
"Specificity: 0.0704204427276779\n",
"Processing patient# 365 ETA: -2.8986850076315065 hrs\n",
"[[156, 124, 169], [130, 140, 310]]\n",
"2188 4.790\n",
"2189 7.062\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 129 with actual coord [130, 140, 310]\n",
"Nodule Detected at slice# 130 with actual coord [130, 140, 310]\n",
"Nodule Detected at slice# 131 with actual coord [130, 140, 310]\n",
"Sensitivity: 0.4054669703872437\n",
"Specificity: 0.06995160580730313\n",
"Processing patient# 366 ETA: -2.9261916415048645 hrs\n",
"[[84, 80, 257], [35, 338, 321]]\n",
"2190 4.677\n",
"2191 4.120\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4036281179138322\n",
"Specificity: 0.06963503649635036\n",
"Processing patient# 367 ETA: -2.9470381484371297 hrs\n",
"[[184, 145, 400], [109, 95, 358], [215, 396, 199]]\n",
"2192 4.481\n",
"2193 11.861\n",
"2194 13.805\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 108 with actual coord [109, 95, 358]\n",
"Nodule Detected at slice# 109 with actual coord [109, 95, 358]\n",
"Nodule Detected at slice# 110 with actual coord [109, 95, 358]\n",
"Nodule Detected at slice# 214 with actual coord [215, 396, 199]\n",
"Nodule Detected at slice# 215 with actual coord [215, 396, 199]\n",
"Nodule Detected at slice# 216 with actual coord [215, 396, 199]\n",
"Sensitivity: 0.40540540540540543\n",
"Specificity: 0.06939655172413793\n",
"Processing patient# 368 ETA: -2.9880874305704372 hrs\n",
"[[224, 381, 414], [365, 335, 401], [309, 437, 373], [224, 421, 333], [363, 461, 315]]\n",
"2195 2.876\n",
"2196 12.983\n",
"2197 4.747\n",
"2198 5.187\n",
"2199 4.229\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 364 with actual coord [365, 335, 401]\n",
"Nodule Detected at slice# 365 with actual coord [365, 335, 401]\n",
"Nodule Detected at slice# 366 with actual coord [365, 335, 401]\n",
"Nodule Detected at slice# 223 with actual coord [224, 421, 333]\n",
"Nodule Detected at slice# 224 with actual coord [224, 421, 333]\n",
"Nodule Detected at slice# 225 with actual coord [224, 421, 333]\n",
"Sensitivity: 0.4053452115812918\n",
"Specificity: 0.06962836394703119\n",
"Processing patient# 369 ETA: -3.03107933963702 hrs\n",
"Processing patient# 370 ETA: -3.0407743953172863 hrs\n",
"[[29, 392, 242]]\n",
"2200 4.461\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40444444444444444\n",
"Specificity: 0.06950959488272922\n",
"Processing patient# 371 ETA: -3.0625835187865715 hrs\n",
"[[69, 413, 257]]\n",
"2201 4.584\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4035476718403548\n",
"Specificity: 0.06940107862617088\n",
"Processing patient# 372 ETA: -3.083073799907093 hrs\n",
"[[48, 325, 146], [51, 380, 292]]\n",
"2202 3.486\n",
"2203 3.344\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40176600441501104\n",
"Specificity: 0.06918505942275043\n",
"Processing patient# 373 ETA: -3.1024945414307785 hrs\n",
"[[229, 139, 215], [136, 228, 349], [276, 195, 178], [296, 108, 397], [288, 417, 362], [181, 344, 185], [264, 129, 179], [331, 402, 379]]\n",
"2204 7.517\n",
"2205 4.342\n",
"2206 8.418\n",
"2207 6.075\n",
"2208 6.924\n",
"2209 3.943\n",
"2210 5.080\n",
"2211 4.133\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 228 with actual coord [229, 139, 215]\n",
"Nodule Detected at slice# 229 with actual coord [229, 139, 215]\n",
"Nodule Detected at slice# 230 with actual coord [229, 139, 215]\n",
"Nodule Detected at slice# 275 with actual coord [276, 195, 178]\n",
"Nodule Detected at slice# 276 with actual coord [276, 195, 178]\n",
"Nodule Detected at slice# 277 with actual coord [276, 195, 178]\n",
"Nodule Detected at slice# 295 with actual coord [296, 108, 397]\n",
"Nodule Detected at slice# 296 with actual coord [296, 108, 397]\n",
"Nodule Detected at slice# 297 with actual coord [296, 108, 397]\n",
"Nodule Detected at slice# 287 with actual coord [288, 417, 362]\n",
"Nodule Detected at slice# 288 with actual coord [288, 417, 362]\n",
"Nodule Detected at slice# 289 with actual coord [288, 417, 362]\n",
"Nodule Detected at slice# 263 with actual coord [264, 129, 179]\n",
"Nodule Detected at slice# 264 with actual coord [264, 129, 179]\n",
"Nodule Detected at slice# 265 with actual coord [264, 129, 179]\n",
"Sensitivity: 0.40563991323210413\n",
"Specificity: 0.07061790668348046\n",
"Processing patient# 374 ETA: -3.1503513261436775 hrs\n",
"[[132, 321, 272], [293, 413, 166], [182, 166, 266]]\n",
"2212 4.579\n",
"2213 3.763\n",
"2214 10.749\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 181 with actual coord [182, 166, 266]\n",
"Nodule Detected at slice# 182 with actual coord [182, 166, 266]\n",
"Nodule Detected at slice# 183 with actual coord [182, 166, 266]\n",
"Sensitivity: 0.4051724137931034\n",
"Specificity: 0.07057349665924276\n",
"Processing patient# 375 ETA: -3.192826619232142 hrs\n",
"[[87, 297, 176], [211, 116, 151]]\n",
"2215 3.895\n",
"2216 6.987\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 210 with actual coord [211, 116, 151]\n",
"Nodule Detected at slice# 211 with actual coord [211, 116, 151]\n",
"Nodule Detected at slice# 212 with actual coord [211, 116, 151]\n",
"Sensitivity: 0.4055793991416309\n",
"Specificity: 0.0691619202603743\n",
"Processing patient# 376 ETA: -3.237334467527714 hrs\n",
"[[24, 401, 291], [28, 360, 208]]\n",
"2217 3.898\n",
"2218 4.726\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40384615384615385\n",
"Specificity: 0.06911505624068302\n",
"Processing patient# 377 ETA: -3.2596919145134042 hrs\n",
"[[60, 323, 395]]\n",
"2219 4.095\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40298507462686567\n",
"Specificity: 0.06900284129346503\n",
"Processing patient# 378 ETA: -3.278818171113327 hrs\n",
"[[89, 111, 367]]\n",
"2220 5.201\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 88 with actual coord [89, 111, 367]\n",
"Nodule Detected at slice# 89 with actual coord [89, 111, 367]\n",
"Nodule Detected at slice# 90 with actual coord [89, 111, 367]\n",
"Sensitivity: 0.40425531914893614\n",
"Specificity: 0.06932432432432432\n",
"Processing patient# 379 ETA: -3.3091597370383536 hrs\n",
"[[196, 371, 137], [155, 290, 243], [399, 39, 283], [210, 64, 233], [158, 397, 293], [332, 436, 352], [154, 304, 261]]\n",
"2221 3.744\n",
"2222 8.259\n",
"2223 4.911\n",
"2224 3.658\n",
"2225 6.005\n",
"2226 5.015\n",
"2227 9.895\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 157 with actual coord [158, 397, 293]\n",
"Nodule Detected at slice# 158 with actual coord [158, 397, 293]\n",
"Nodule Detected at slice# 159 with actual coord [158, 397, 293]\n",
"Nodule Detected at slice# 331 with actual coord [332, 436, 352]\n",
"Nodule Detected at slice# 332 with actual coord [332, 436, 352]\n",
"Nodule Detected at slice# 333 with actual coord [332, 436, 352]\n",
"Nodule Detected at slice# 155 with actual coord [154, 304, 261]\n",
"Sensitivity: 0.40461215932914046\n",
"Specificity: 0.06970509383378017\n",
"Processing patient# 380 ETA: -3.3505196650718387 hrs\n",
"[[150, 418, 153], [99, 126, 287], [189, 91, 175]]\n",
"2228 3.140\n",
"2229 5.016\n",
"2230 16.141\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 188 with actual coord [189, 91, 175]\n",
"Nodule Detected at slice# 189 with actual coord [189, 91, 175]\n",
"Nodule Detected at slice# 190 with actual coord [189, 91, 175]\n",
"Sensitivity: 0.4041666666666667\n",
"Specificity: 0.069826435246996\n",
"Processing patient# 381 ETA: -3.382899270853623 hrs\n",
"[[121, 154, 339], [149, 138, 331], [151, 151, 313], [151, 352, 301]]\n",
"2231 4.183\n",
"2232 4.997\n",
"2233 6.015\n",
"2234 4.857\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 150 with actual coord [151, 151, 313]\n",
"Nodule Detected at slice# 151 with actual coord [151, 151, 313]\n",
"Nodule Detected at slice# 152 with actual coord [151, 151, 313]\n",
"Sensitivity: 0.40289256198347106\n",
"Specificity: 0.06992821058229194\n",
"Processing patient# 382 ETA: -3.412722591825042 hrs\n",
"[[77, 102, 223], [38, 126, 341]]\n",
"2235 4.836\n",
"2236 6.953\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 37 with actual coord [38, 126, 341]\n",
"Nodule Detected at slice# 38 with actual coord [38, 126, 341]\n",
"Sensitivity: 0.40329218106995884\n",
"Specificity: 0.07000795544948289\n",
"Processing patient# 383 ETA: -3.4360059995605594 hrs\n",
"Processing patient# 384 ETA: -3.44578555987389 hrs\n",
"[[266, 81, 177], [198, 378, 150], [279, 99, 175], [308, 85, 162], [305, 451, 257], [249, 84, 209]]\n",
"2237 4.149\n",
"2238 2.869\n",
"2239 6.631\n",
"2240 4.205\n",
"2241 5.773\n",
"2242 3.171\n",
"Name: eq. diam., dtype: float64\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Nodule Detected at slice# 278 with actual coord [279, 99, 175]\n",
"Nodule Detected at slice# 279 with actual coord [279, 99, 175]\n",
"Nodule Detected at slice# 280 with actual coord [279, 99, 175]\n",
"Nodule Detected at slice# 304 with actual coord [305, 451, 257]\n",
"Nodule Detected at slice# 305 with actual coord [305, 451, 257]\n",
"Nodule Detected at slice# 306 with actual coord [305, 451, 257]\n",
"Sensitivity: 0.4024390243902439\n",
"Specificity: 0.07042067783199261\n",
"Processing patient# 385 ETA: -3.4872073284286094 hrs\n",
"[[73, 192, 122], [43, 75, 310], [60, 173, 137], [12, 191, 295], [57, 85, 302], [17, 335, 305], [19, 195, 315], [41, 203, 344], [33, 109, 265], [79, 460, 229], [47, 411, 310], [41, 185, 349], [41, 393, 322], [67, 453, 242], [60, 381, 396], [77, 450, 309]]\n",
"2243 4.555\n",
"2244 4.732\n",
"2245 5.739\n",
"2246 5.051\n",
"2247 4.995\n",
"2248 5.089\n",
"2249 5.636\n",
"2250 4.732\n",
"2251 4.975\n",
"2252 8.312\n",
"2253 4.207\n",
"2254 5.465\n",
"2255 5.301\n",
"2256 7.478\n",
"2257 4.645\n",
"2258 8.586\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 60 with actual coord [60, 173, 137]\n",
"Nodule Detected at slice# 12 with actual coord [12, 191, 295]\n",
"Nodule Detected at slice# 13 with actual coord [12, 191, 295]\n",
"Nodule Detected at slice# 17 with actual coord [17, 335, 305]\n",
"Nodule Detected at slice# 19 with actual coord [19, 195, 315]\n",
"Nodule Detected at slice# 20 with actual coord [19, 195, 315]\n",
"Nodule Detected at slice# 79 with actual coord [79, 460, 229]\n",
"Nodule Detected at slice# 80 with actual coord [79, 460, 229]\n",
"Nodule Detected at slice# 41 with actual coord [41, 185, 349]\n",
"Nodule Detected at slice# 67 with actual coord [67, 453, 242]\n",
"Nodule Detected at slice# 76 with actual coord [77, 450, 309]\n",
"Nodule Detected at slice# 77 with actual coord [77, 450, 309]\n",
"Nodule Detected at slice# 78 with actual coord [77, 450, 309]\n",
"Sensitivity: 0.40551181102362205\n",
"Specificity: 0.07189800210304942\n",
"Processing patient# 386 ETA: -3.5051857701391755 hrs\n",
"[[47, 363, 268]]\n",
"2259 3.259\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.40471512770137524\n",
"Specificity: 0.07170009175514484\n",
"Processing patient# 387 ETA: -3.5533651142227494 hrs\n",
"[[269, 119, 178], [215, 410, 367]]\n",
"2260 5.003\n",
"2261 2.032\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 268 with actual coord [269, 119, 178]\n",
"Nodule Detected at slice# 269 with actual coord [269, 119, 178]\n",
"Nodule Detected at slice# 270 with actual coord [269, 119, 178]\n",
"Sensitivity: 0.4050880626223092\n",
"Specificity: 0.07167991659064252\n",
"Processing patient# 388 ETA: -3.5894986695249194 hrs\n",
"[[180, 388, 183], [132, 185, 155], [173, 157, 309], [107, 368, 207], [133, 398, 257], [247, 427, 297], [173, 364, 286], [199, 112, 181], [125, 185, 395], [269, 94, 321], [237, 135, 325], [74, 145, 278], [170, 411, 235]]\n",
"2262 4.745\n",
"2263 3.171\n",
"2264 4.736\n",
"2265 2.916\n",
"2266 4.544\n",
"2267 7.341\n",
"2268 6.286\n",
"2269 3.994\n",
"2270 8.685\n",
"2271 3.228\n",
"2272 9.013\n",
"2273 4.386\n",
"2274 2.962\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 246 with actual coord [247, 427, 297]\n",
"Nodule Detected at slice# 247 with actual coord [247, 427, 297]\n",
"Nodule Detected at slice# 248 with actual coord [247, 427, 297]\n",
"Nodule Detected at slice# 124 with actual coord [125, 185, 395]\n",
"Nodule Detected at slice# 125 with actual coord [125, 185, 395]\n",
"Nodule Detected at slice# 126 with actual coord [125, 185, 395]\n",
"Nodule Detected at slice# 236 with actual coord [237, 135, 325]\n",
"Nodule Detected at slice# 237 with actual coord [237, 135, 325]\n",
"Nodule Detected at slice# 238 with actual coord [237, 135, 325]\n",
"Sensitivity: 0.40076335877862596\n",
"Specificity: 0.07214765100671142\n",
"Processing patient# 389 ETA: -3.637720636394459 hrs\n",
"[[88, 435, 238]]\n",
"2275 3.644\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4\n",
"Specificity: 0.07190635451505016\n",
"Processing patient# 390 ETA: -3.6674616115096628 hrs\n",
"[[103, 357, 356], [33, 327, 305]]\n",
"2276 7.922\n",
"2277 8.351\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 102 with actual coord [103, 357, 356]\n",
"Nodule Detected at slice# 103 with actual coord [103, 357, 356]\n",
"Nodule Detected at slice# 104 with actual coord [103, 357, 356]\n",
"Nodule Detected at slice# 32 with actual coord [33, 327, 305]\n",
"Nodule Detected at slice# 33 with actual coord [33, 327, 305]\n",
"Nodule Detected at slice# 34 with actual coord [33, 327, 305]\n",
"Sensitivity: 0.40227703984819735\n",
"Specificity: 0.07247306310928682\n",
"Processing patient# 391 ETA: -3.6925366023981496 hrs\n",
"[[47, 213, 294], [63, 323, 402]]\n",
"2278 18.213\n",
"2279 5.824\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 46 with actual coord [47, 213, 294]\n",
"Nodule Detected at slice# 47 with actual coord [47, 213, 294]\n",
"Nodule Detected at slice# 48 with actual coord [47, 213, 294]\n",
"Nodule Detected at slice# 63 with actual coord [63, 323, 402]\n",
"Nodule Detected at slice# 64 with actual coord [63, 323, 402]\n",
"Sensitivity: 0.4045368620037807\n",
"Specificity: 0.072992700729927\n",
"Processing patient# 392 ETA: -3.7106697891845184 hrs\n",
"Processing patient# 393 ETA: -3.7205055191205454 hrs\n",
"[[185, 136, 238], [235, 74, 207]]\n",
"2280 5.004\n",
"2281 7.739\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 234 with actual coord [235, 74, 207]\n",
"Nodule Detected at slice# 235 with actual coord [235, 74, 207]\n",
"Nodule Detected at slice# 236 with actual coord [235, 74, 207]\n",
"Sensitivity: 0.4048964218455744\n",
"Specificity: 0.07286368260427263\n",
"Processing patient# 394 ETA: -3.7636868399398447 hrs\n",
"[[157, 469, 294], [129, 72, 183], [100, 434, 375]]\n",
"2282 5.358\n",
"2283 5.803\n",
"2284 3.977\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 156 with actual coord [157, 469, 294]\n",
"Nodule Detected at slice# 157 with actual coord [157, 469, 294]\n",
"Nodule Detected at slice# 158 with actual coord [157, 469, 294]\n",
"Sensitivity: 0.4044943820224719\n",
"Specificity: 0.07307789901040346\n",
"Processing patient# 395 ETA: -3.7904552509915477 hrs\n",
"[[98, 189, 265]]\n",
"2285 20.686\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 98 with actual coord [98, 189, 265]\n",
"Nodule Detected at slice# 99 with actual coord [98, 189, 265]\n",
"Sensitivity: 0.405607476635514\n",
"Specificity: 0.07309978500063236\n",
"Processing patient# 396 ETA: -3.8098674097078553 hrs\n",
"[[51, 164, 214], [45, 211, 334], [89, 400, 182], [188, 456, 267], [187, 461, 324], [72, 126, 230], [23, 192, 264], [114, 146, 168], [134, 378, 397]]\n",
"2286 4.477\n",
"2287 4.205\n",
"2288 3.424\n",
"2289 6.038\n",
"2290 5.367\n",
"2291 4.137\n",
"2292 5.124\n",
"2293 4.292\n",
"2294 5.658\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 187 with actual coord [188, 456, 267]\n",
"Nodule Detected at slice# 188 with actual coord [188, 456, 267]\n",
"Nodule Detected at slice# 189 with actual coord [188, 456, 267]\n",
"Nodule Detected at slice# 186 with actual coord [187, 461, 324]\n",
"Nodule Detected at slice# 187 with actual coord [187, 461, 324]\n",
"Nodule Detected at slice# 133 with actual coord [134, 378, 397]\n",
"Nodule Detected at slice# 134 with actual coord [134, 378, 397]\n",
"Nodule Detected at slice# 135 with actual coord [134, 378, 397]\n",
"Sensitivity: 0.40441176470588236\n",
"Specificity: 0.0736404833836858\n",
"Processing patient# 397 ETA: -3.841024845880585 hrs\n",
"[[198, 136, 313], [233, 161, 202]]\n",
"2295 7.710\n",
"2296 4.552\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 197 with actual coord [198, 136, 313]\n",
"Nodule Detected at slice# 198 with actual coord [198, 136, 313]\n",
"Nodule Detected at slice# 199 with actual coord [198, 136, 313]\n",
"Sensitivity: 0.40476190476190477\n",
"Specificity: 0.07355516637478109\n",
"Processing patient# 398 ETA: -3.890861464127823 hrs\n",
"[[74, 93, 155], [49, 346, 298]]\n",
"2297 4.938\n",
"2298 4.805\n",
"Name: eq. diam., dtype: float64\n",
"Sensitivity: 0.4032846715328467\n",
"Specificity: 0.07354596622889306\n",
"Processing patient# 399 ETA: -3.911309088614617 hrs\n",
"[[174, 171, 252], [192, 165, 212], [211, 116, 296], [180, 112, 414]]\n",
"2299 5.342\n",
"2300 20.904\n",
"2301 4.450\n",
"2302 12.865\n",
"Name: eq. diam., dtype: float64\n",
"Nodule Detected at slice# 191 with actual coord [192, 165, 212]\n",
"Nodule Detected at slice# 192 with actual coord [192, 165, 212]\n",
"Nodule Detected at slice# 193 with actual coord [192, 165, 212]\n",
"Nodule Detected at slice# 179 with actual coord [180, 112, 414]\n",
"Nodule Detected at slice# 180 with actual coord [180, 112, 414]\n",
"Nodule Detected at slice# 181 with actual coord [180, 112, 414]\n",
"Sensitivity: 0.40398550724637683\n",
"Specificity: 0.07374301675977654\n",
"28390.67985391617\n"
]
}
],
"source": [
"#maskedtumor=pix_resampled[int(coord[0])]*cmw_patient\n",
"start_time=time.time()\n",
"elapsed_time=0\n",
"totaltime=50000\n",
"noduleimages=np.ndarray([10000,512,512],dtype=np.float32)\n",
"#predictedemasks=np.ndarray([len(patients)*8,512,512],dtype=np.float32)\n",
"nodulelabels=[]\n",
"nodulesensitivity=[]\n",
"index=0\n",
"coordcount=0\n",
"coordtruecount=0\n",
"nodulecount=0\n",
"noduletruecount=0\n",
"slicecounts=[]\n",
"thresh=-500 #lower HU threshold for nodule segmentation\n",
"for i in range(197,400):\n",
" print(\"Processing patient#\",i,\"ETA:\",(totaltime-elapsed_time)/3600,\"hrs\")\n",
" if len(nodule_coordinates(nodulelocations,meta.iloc[i]))>0:\n",
" patient_scan=load_scan(patients[i])\n",
" slicecounts.append(len(patient_scan))\n",
" patient_pix=get_pixels_hu(patient_scan)\n",
" processed_pix = processimagefromfile(patient_pix)\n",
" coord = nodule_coordinates(nodulelocations,meta.iloc[i])\n",
" print(coord)\n",
" radius = nodulelocations[\"eq. diam.\"][nodulelocations.index[nodulelocations[\"case\"]==int(meta[\"Patient Id\"][i][-4:])]]\n",
" print(radius)\n",
" mask = predictmask(processed_pix)\n",
" noduleindex = getnoduleindex(mask) \n",
" labels = np.zeros(len(noduleindex)).astype(np.bool)\n",
" cordlabels=np.zeros(len(coord)).astype(np.bool)\n",
" for j,cord in enumerate(coord): #loop through labeled nodules\n",
" if radius.iloc[j]>5:\n",
" nodulemask = cmw.cell_magic_wand(-patient_pix[int(cord[0])],[int(cord[2]),int(cord[1])],2,int(radius.iloc[j])+2)\n",
" nodulepix=nodulemask*patient_pix[cord[0]]\n",
" nodulepix[nodulepix<thresh]=0\n",
" nodulepix[nodulepix!=0]=1\n",
" nodulemask=nodulepix.astype(np.bool)\n",
" for k,ind in enumerate(noduleindex): #loop through detected nodules\n",
" if abs(ind-cord[0])<2:\n",
" if np.sum(nodulemask*mask[ind][0])>1:\n",
" print(\"Nodule Detected at slice#\",ind,\"with actual coord\",cord)\n",
" labels[k] = True\n",
" cordlabels[j] = True\n",
"\n",
" for j in range(len(coord)):\n",
" nodulesensitivity.append(cordlabels[j])\n",
" \n",
" for k in range(len(noduleindex)):\n",
" nodulelabels.append(labels[k])\n",
" noduleimages[index]=processed_pix[noduleindex[k]]\n",
" index+=1\n",
" coordtruecount+=len(cordlabels[cordlabels==True])\n",
" noduletruecount+=len(labels[labels==True])\n",
" coordcount+=len(coord)\n",
" nodulecount+=len(noduleindex)\n",
" print(\"Sensitivity:\",coordtruecount/coordcount)\n",
" print(\"Specificity:\",noduletruecount/nodulecount)\n",
" elapsed_time=time.time()-start_time\n",
" totaltime=elapsed_time/(i+1)*200\n",
"print(elapsed_time)\n",
"noduleimages=noduleimages[:len(nodulelabels)]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"noduleimages=noduleimages[:len(nodulelabels)]\n",
"noduleimages=noduleimages.reshape([noduleimages.shape[0],1,512,512])\n",
"nodulelabels=np.array(nodulelabels)\n",
"np.save(\"noduleimages197-399.npy\",noduleimages)\n",
"np.save(\"nodulelabels197-399.npy\",nodulelabels)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#noduleimages=np.load(\"noduleimages0-192.npy\")\n",
"nodulelabels=np.load(\"nodulelabels0-192.npy\")\n",
"#noduleimages=np.concatenate((noduleimages,np.load(\"noduleimages197-399.npy\")))\n",
"nodulelabels=np.concatenate((nodulelabels,np.load(\"nodulelabels197-399.npy\")))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of True Positive nodules: 1336\n",
"Number of False Positive nodules: 14856\n",
"# of FPs per TP 11.119760479041917\n"
]
}
],
"source": [
"TP=len([nl for nl in nodulelabels if nl==True])\n",
"FP=len([nl for nl in nodulelabels if nl==False])\n",
"print(\"Number of True Positive nodules:\",TP)\n",
"print(\"Number of False Positive nodules:\",FP)\n",
"print(\"# of FPs per TP\",FP/TP)\n"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"noduleimagestrue=np.load(\"noduleimagesv3.npy\")\n",
"falseind=[i for i in range(len(nodulelabels)) if nodulelabels[i]==False]\n",
"random.shuffle(falseind)\n",
"falseind=falseind[:noduleimagestrue.shape[0]]\n",
"noduleimagesfalse=np.array([noduleimages[i] for i in falseind])\n",
"del noduleimages\n",
"noduleimagesbalanced=np.concatenate((noduleimagestrue,noduleimagesfalse.reshape(noduleimagesfalse.shape[0],1,512,512)),axis=0)\n",
"nodulelabelsbalanced=[True]*noduleimagestrue.shape[0]+[False]*noduleimagesfalse.shape[0]\n",
"nodulelabelsbalanced=to_categorical(nodulelabelsbalanced,2)\n",
"del noduleimagestrue,noduleimagesfalse\n",
"Xtrain, Xtest, Ytrain, Ytest = train_test_split(noduleimagesbalanced,nodulelabelsbalanced,test_size=.30)\n",
"del noduleimagesbalanced, nodulelabelsbalanced"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 7032 samples, validate on 3014 samples\n",
"Epoch 1/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.6701 - acc: 0.5709Epoch 00000: loss improved from inf to 0.67013, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 463s - loss: 0.6701 - acc: 0.5708 - val_loss: 0.6254 - val_acc: 0.6676\n",
"Epoch 2/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.6036 - acc: 0.6505Epoch 00001: loss improved from 0.67013 to 0.60376, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 461s - loss: 0.6038 - acc: 0.6503 - val_loss: 0.5821 - val_acc: 0.6981\n",
"Epoch 3/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.5434 - acc: 0.6982Epoch 00002: loss improved from 0.60376 to 0.54359, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 458s - loss: 0.5436 - acc: 0.6981 - val_loss: 0.5493 - val_acc: 0.7283\n",
"Epoch 4/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.4905 - acc: 0.7462Epoch 00003: loss improved from 0.54359 to 0.49050, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 457s - loss: 0.4905 - acc: 0.7460 - val_loss: 0.5110 - val_acc: 0.7565\n",
"Epoch 5/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.4400 - acc: 0.7830Epoch 00004: loss improved from 0.49050 to 0.43996, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 456s - loss: 0.4400 - acc: 0.7831 - val_loss: 0.4842 - val_acc: 0.7704\n",
"Epoch 6/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.3978 - acc: 0.8068Epoch 00005: loss improved from 0.43996 to 0.39774, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.3977 - acc: 0.8069 - val_loss: 0.4702 - val_acc: 0.7731\n",
"Epoch 7/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.3501 - acc: 0.8368Epoch 00006: loss improved from 0.39774 to 0.35043, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.3504 - acc: 0.8365 - val_loss: 0.4465 - val_acc: 0.7906\n",
"Epoch 8/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.3224 - acc: 0.8586Epoch 00007: loss improved from 0.35043 to 0.32226, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.3223 - acc: 0.8586 - val_loss: 0.4299 - val_acc: 0.8019\n",
"Epoch 9/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.2871 - acc: 0.8717Epoch 00008: loss improved from 0.32226 to 0.28703, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.2870 - acc: 0.8717 - val_loss: 0.4381 - val_acc: 0.7960\n",
"Epoch 10/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.2671 - acc: 0.8796Epoch 00009: loss improved from 0.28703 to 0.26707, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.2671 - acc: 0.8797 - val_loss: 0.4083 - val_acc: 0.8149\n",
"Epoch 11/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.2485 - acc: 0.8900Epoch 00010: loss improved from 0.26707 to 0.24853, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.2485 - acc: 0.8901 - val_loss: 0.4103 - val_acc: 0.8162\n",
"Epoch 12/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.2226 - acc: 0.9051Epoch 00011: loss improved from 0.24853 to 0.22252, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 456s - loss: 0.2225 - acc: 0.9051 - val_loss: 0.4034 - val_acc: 0.8275\n",
"Epoch 13/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.2103 - acc: 0.9099Epoch 00012: loss improved from 0.22252 to 0.21038, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 456s - loss: 0.2104 - acc: 0.9098 - val_loss: 0.4086 - val_acc: 0.8321\n",
"Epoch 14/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.1949 - acc: 0.9169Epoch 00013: loss improved from 0.21038 to 0.19480, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 456s - loss: 0.1948 - acc: 0.9170 - val_loss: 0.4247 - val_acc: 0.8235\n",
"Epoch 15/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.1785 - acc: 0.9287Epoch 00014: loss improved from 0.19480 to 0.17869, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.1787 - acc: 0.9285 - val_loss: 0.4020 - val_acc: 0.8328\n",
"Epoch 16/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.1606 - acc: 0.9368Epoch 00015: loss improved from 0.17869 to 0.16055, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.1606 - acc: 0.9369 - val_loss: 0.4224 - val_acc: 0.8301\n",
"Epoch 17/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.1600 - acc: 0.9347Epoch 00016: loss improved from 0.16055 to 0.15991, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.1599 - acc: 0.9347 - val_loss: 0.4110 - val_acc: 0.8374\n",
"Epoch 18/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.1463 - acc: 0.9407Epoch 00017: loss improved from 0.15991 to 0.14649, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.1465 - acc: 0.9406 - val_loss: 0.4141 - val_acc: 0.8361\n",
"Epoch 19/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.1413 - acc: 0.9405Epoch 00018: loss improved from 0.14649 to 0.14119, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.1412 - acc: 0.9406 - val_loss: 0.4146 - val_acc: 0.8454\n",
"Epoch 20/20\n",
"7028/7032 [============================>.] - ETA: 0s - loss: 0.1333 - acc: 0.9459Epoch 00019: loss improved from 0.14119 to 0.13350, saving model to truenodule-cnn-weights-improvement2.hdf5\n",
"7032/7032 [==============================] - 455s - loss: 0.1335 - acc: 0.9458 - val_loss: 0.4118 - val_acc: 0.8437\n"
]
}
],
"source": [
"#classify as nodule or non-nodule\n",
"input_shape=(1,512,512)\n",
"num_classes=2\n",
"model = Sequential()\n",
"model.add(Conv2D(8, kernel_size=(3, 3),\n",
" activation='relu',\n",
" input_shape=input_shape))\n",
"model.add(Conv2D(16, (3, 3), activation='relu'))\n",
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
"model.add(Dropout(0.25))\n",
"model.add(Flatten())\n",
"model.add(Dense(32, activation='relu'))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(num_classes, activation='softmax'))\n",
"\n",
"model.compile(loss=keras.losses.binary_crossentropy,\n",
" optimizer=Adam(lr=1e-5),\n",
" metrics=['accuracy'])\n",
"\n",
"\n",
"#model.load_weights(truenoduleweightspath)\n",
"\n",
"checkpoint = ModelCheckpoint(truenoduleweightspath, monitor='loss', verbose=1, save_best_only=True)\n",
"\n",
"history=model.fit(Xtrain, Ytrain, batch_size=4, epochs=20, verbose=1, shuffle=True, callbacks=[checkpoint], validation_data=(Xtest,Ytest))"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\narKkh6vq0QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x134b27f0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEKCAYAAAAB0GKPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VGX2wPHvIfSA9CZFEJAqNSJrh1CCCoiFpquiK4uu\nZd1V13X3p+6u7rK666KCBZWugA0J0gRFASsJ0otEBEwoSSihExLO7493wCEkMIG5c1PO53nmycxt\nc+Yy5OS+733PK6qKMcYYcyYl/A7AGGNM4WAJwxhjTEgsYRhjjAmJJQxjjDEhsYRhjDEmJJYwjDHG\nhMQShjHGmJBYwjDGGBMSSxjGGGNCUtLvAMKpevXq2rBhQ7/DMMaYQiMxMTFdVWuEsm2RShgNGzYk\nISHB7zCMMabQEJHNoW5rTVLGGGNCYgnDGGNMSDxNGCISJyLrRSRJRB7PZX0VEZkmIitE5DsRaR20\nbpOIrBSRZSJi7UzGGOMzz/owRCQKGAV0B5KBJSISr6prgjZ7Alimqv1EpHlg+9ig9V1UNf1c4jh6\n9CjJyckcPnz4XA5jgpQtW5Z69epRqlQpv0MxxkSQl53enYAkVd0IICJTgL5AcMJoCQwHUNV1ItJQ\nRGqp6o5wBZGcnEzFihVp2LAhIhKuwxZbqsrOnTtJTk6mUaNGfodjjIkgL5uk6gI/B71ODiwLthy4\nEUBEOgEXAPUC6xSYLyKJIjL0bIM4fPgw1apVs2QRJiJCtWrV7IrNmGLI79tqhwMvisgyYCXwPZAd\nWHeFqqaISE1gnoisU9WFOQ8QSCZDARo0aJDrm1iyCC87n8YUT14mjBSgftDreoFlJ6jqXmAIgLjf\nQj8BGwPrUgI/U0VkGq6J65SEoaqjgdEAMTExNt+sMaZY2L0bVq+GVasgIwP+9Cfv39PLhLEEaCoi\njXCJYiAwOHgDEakMHFTVTOA3wEJV3Ssi0UAJVd0XeN4D+LuHsXpi586dxMa6Pvzt27cTFRVFjRpu\nQOV3331H6dKlz3iMIUOG8Pjjj9OsWTNPYzXGFEyHDsHatbBypUsOq1a55ylBf37XqQOPPQZeX/x7\nljBUNUtE7gfmAlHAGFVdLSLDAutfA1oA40VEgdXA3YHdawHTAk0fJYF3VHWOV7F6pVq1aixbtgyA\np59+mgoVKvDII4+ctI2qoqqUKJF7d9LYsWM9j9MY47+sLEhKOjUx/PgjHDvmtildGlq0gC5doHVr\nuPhi97N+fe+TBXjch6Gqs4BZOZa9FvT8a+CiXPbbCLT1MjY/JSUl0adPH9q3b8/333/PvHnz+Nvf\n/sbSpUs5dOgQAwYM4MknnwTgiiuuYOTIkbRu3Zrq1aszbNgwZs+eTfny5Zk+fTo1a9b0+dMYU/xk\nZMCyZbB0KXz/PWzdem7HS093VxGZme61CDRp4hLCoEG/JIcmTaCkjz3Pfnd6R9Tvf+/+kcOpXTsY\nMSL/+61bt44JEyYQExMDwPDhw6latSpZWVl06dKFm2++mZYtW560T0ZGBldffTXDhw/nD3/4A2PG\njOHxx08ZD2mMCaNt21xSCH5s3PjL+jp1oFGjc/sLv04d6N79l8TQogWUK3fusYdbsUoYBUnjxo1P\nJAuAyZMn89Zbb5GVlcXWrVtZs2bNKQmjXLly9OrVC4COHTuyaNGiiMZsTEGSkgKffOIeKSlQtWpo\nj4oVc//lruoSQXBiWLoUdgSNCmvcGDp2hN/8Btq3d49atSL3mf1WrBLG2VwJeCU6OvrE8w0bNvDi\niy/y3XffUblyZW677bZcxzkEd5JHRUWRlZUVkViNKQgOHYKFC12CmDvX3SEEULs2XHQR/PQTJCbC\nrl1w8GDex4mKOjWJ7NvnWh/27v1lm1atIC7ul8TQti1UquT95yzIilXCKKj27t1LxYoVOe+889i2\nbRtz584lLi7O77CM8ZWqSwpz57oksXAhHD4MZcrAlVfCnXdCjx6uCSfnFcPhw+620127zvzYts11\nJt966y/JoXVrKFvWl49doFnCKAA6dOhAy5Ytad68ORdccAGXX3653yEZ44v0dJg//5ckcbwzuUUL\nGDYMevaEq66C8uVPf5yyZV2/QJ063sdcnIhq0RnrFhMTozknUFq7di0tWrTwKaKiy86rCQdV14z0\n0UcuSSQmumVVqkC3bi5B9Ojhbhs13hCRRFWNOfOWdoVhjPFBaipMmgRjx7rxBlFR0LkzPP20SxIx\nMW6ZKVgsYRhjIuLoUZg1yyWJmTPdQLVLL4XXXoP+/d1VhSnYLGEYYzy1apVLEpMmuSuL2rXh4Ydd\np3WOO8dNAWcJwxgTdrt3w+TJLlEkJECpUtC7NwwZ4m5V9XO0sjl79s9mjAmL7Gx3h9PYsa4T+8gR\nN3ZhxAh3y2r16n5HaM6VJQxjzFnLznYF8t57DyZMgORkNxBu6FB3NdG+vd8RmnDycsY9A3Tp0oW5\nc+eetGzEiBHce++9ee5ToUIFALZu3crNN9+c6zbXXHMNOW8hzmnEiBEcDBryeu2117Jnz55QQzfm\nFAcPwuefwzPPuKalqlVdUhg+HNq0cYlj61Z46SVLFkWRXWF4bNCgQUyZMoWePXueWDZlyhSee+65\nM+57/vnn8/7775/1e48YMYLbbruN8oFRTrNmzTrDHsacLC0NvvwSFi92j8REd3cTuNHQgwfDFVdA\n1642SK44sCsMj918883MnDmTzEDd4k2bNrF161bat29PbGwsHTp04OKLL2b69Omn7Ltp0yZat24N\nwKFDhxg4cCAtWrSgX79+HDp06MR29957LzExMbRq1YqnnnoKgJdeeomtW7fSpUsXunTpAkDDhg1J\nT08H4IUXXqB169a0bt2aEYEiW5s2baJFixbcc889tGrVih49epz0PqZoU4UNG2DcOFdcr3lzqFkT\n+vWDkSNd+YxHH4WPP3YlNVauhFdfdf0TliyKh2J1hfH7Ob9n2fbw1jdvV7sdI+LyrmpYtWpVOnXq\nxOzZs+nbty9Tpkyhf//+lCtXjmnTpnHeeeeRnp5O586d6dOnT57zZb/66quUL1+etWvXsmLFCjp0\n6HBi3bPPPkvVqlXJzs4mNjaWFStW8OCDD/LCCy+wYMECqufobUxMTGTs2LF8++23qCqXXnopV199\nNVWqVGHDhg1MnjyZN954g/79+/PBBx9w2223hedkmQIjM9NN1rN+Paxb5+5kWrzY3fYKrqnp8svh\nrrvcFUTHjq6GkyneilXC8MvxZqnjCeOtt95CVXniiSdYuHAhJUqUICUlhR07dlC7du1cj7Fw4UIe\nfPBBANq0aUObNm1OrHv33XcZPXo0WVlZbNu2jTVr1py0PqfFixfTr1+/ExVzb7zxRhYtWkSfPn1o\n1KgR7dq1A1wJ9U2bNoXpLJhIU3W1mdat+yUxHP/500+uw/q4Ro3cCOsrrnCP5s0hj0kgTTFWrBLG\n6a4EvNS3b18efvhhli5dysGDB+nYsSPjxo0jLS2NxMRESpUqRcOGDXMtaX4mP/30E//5z39YsmQJ\nVapU4c477zyr4xxXJujPyKioKGuSKgSOT+2ZMymsW+fGQxxXpowrA96+PQwc6JJC8+ZuWcWK/sVv\nCg9PE4aIxAEv4ub0flNVh+dYXwUYAzQGDgN3qeqqUPYtTCpUqECXLl246667GDRoEOBmz6tZsyal\nSpViwYIFbN68+bTHuOqqq3jnnXfo2rUrq1atYsWKFYArjR4dHU2lSpXYsWMHs2fP5pprrgGgYsWK\n7Nu375QmqSuvvJI777yTxx9/HFVl2rRpTJw4Mfwf3HjqyBEYMwb+9S/4+edflteu7RLBgAHQrJl7\n3qwZNGhg9ZnMufEsYYhIFDAK6A4kA0tEJF5V1wRt9gSwTFX7iUjzwPaxIe5bqAwaNIh+/foxZcoU\nAG699VZ69+7NxRdfTExMDM2bNz/t/vfeey9DhgyhRYsWtGjRgo4dOwLQtm1b2rdvT/Pmzalfv/5J\npdGHDh1KXFwc559/PgsWLDixvEOHDtx555106tQJgN/85je0b9/emp8KicOH4c033a2sKSlw2WXw\n97+7MhvNmtkkP8Y7npU3F5FfAU+ras/A6z8DqOq/graZCQxX1UWB1z8ClwEXnmnf3Fh588ix8xp5\nhw7BG2/Av//txjpccQU89RTExp7bfNKmeMtPeXMvu7XqAkEXyiQHlgVbDtwIICKdgAuAeiHuS2C/\noSKSICIJaWlpYQrdmILj0CFXXqNxY3joIWjSBD791M1A162bJQsTOX7fBzEcqCwiy4AHgO+B7NPv\ncjJVHa2qMaoaU6NGDS9iNMYXBw/CCy+4O5geftg1Ny1YAF984QbKWaIwkeZlp3cKEDxPVr3AshNU\ndS8wBEDcAISfgI1AuTPtmx+qmuf4BpN/RWmWxoLowAE3IO755924iK5d4d133dSkxvjJyyuMJUBT\nEWkkIqWBgUB88AYiUjmwDuA3wMJAEjnjvqEqW7YsO3futF9yYaKq7Ny5k7Jly/odSpGzfz8895y7\nonj0UVebadEi1/xkycIUBJ5dYahqlojcD8zF3Ro7RlVXi8iwwPrXgBbAeBFRYDVw9+n2PZs46tWr\nR3JyMta/ET5ly5alXr16fodRZOzbB6NGwX//6wba9ejhOrMvu8zvyIw5mWd3Sfkht7ukjCmIDh2C\n2bNh6lSYMcO9jotziaJzZ7+jM8VJfu6SKlYjvY3xU2YmzJsHU6bA9OnuyqJ6dTdV6ZAhcMklfkdo\nzOlZwjDGQ1lZ7s6mqVPhww9dqY7KlaF/fzcSu0sXm67UFB72VTUmzI4dc53VU6fC+++7OSUqVoS+\nfV0Np+7dXalwYwobSxjGhIEqfPuta246PutcuXLQu7e7kujVy702pjCzhGHMWdq3z422/vRT19y0\nebO7cujVy11JXH89BGbbNaZIsIRhTIiOHIFvvnEJ4tNP4bvvXB9FmTJucN3f/+6anaz4nymqLGEY\nk4djx2DZMpg/3yWIRYvc7a8lSkBMjBtcFxvrxktYc5MpDixhGBNwfE7r41cQCxa4uavBlQ7/zW9c\ngrj6anenkzHFjSUMU6xlZUF8vHt8+ikkJ7vlDRq45qXYWNfcVKeOv3EaUxBYwjDF0s6dbm6JUaNc\nkqhWzSWG2Fj3aNzYqsEak5MlDFOsrFgBL78Mkya5metiY13SuO46m77UmDOxhGGKvOxs1+T00kvw\n+eeug/qOO+D++6F1a7+jM6bwsIRhiqzdu+Gtt2DkSDdGokEDVz787ruhalW/ozOm8LGEYYqc1atd\ns9PEiW7WuquvdjPX9eljdZuMORf238cUCdnZMGuWa3aaPx/KloVbb4UHHoC2bf2OzpiiwRKGKdRU\n4c03Yfhw2LgR6taFf/4T7rnHlQ43xoSPJQxTaO3cCXfd5Tq0O3d2SeOGG6BUKb8jM6Zo8nJOb0Qk\nTkTWi0iSiDyey/pKIjJDRJaLyGoRGRK0bpOIrBSRZSJi0+iZk3z+uWtqmjMHRoyAr76CW26xZGGM\nlzy7whCRKGAU0B1IBpaISLyqrgna7HfAGlXtLSI1gPUi8raqZgbWd1HVdK9iNIVPVpYr8vfMM9Ck\nCXz9NXTo4HdUxhQPXl5hdAKSVHVjIAFMAfrm2EaBiiIiQAVgF5DlYUymENuyxc1Q949/wO23w9Kl\nliyMiSQvE0Zd4Oeg18mBZcFGAi2ArcBK4CFVPRZYp8B8EUkUkaEexmkKgWnToF07Vz120iQYN87m\nmjAm0jztwwhBT2AZcD7QDhgpIucF1l2hqu2AXsDvROSq3A4gIkNFJEFEEtLS0iIStImcQ4fgvvvg\nxhtdfafvv3e3yxpjIs/Lu6RSgPpBr+sFlgUbAgxXVQWSROQnoDnwnaqmAKhqqohMwzVxLcz5Jqo6\nGhgNEBMTo2H/FMY3q1e7metWrYI//tHdLmtzYZuiJHlvMjPWzyBpVxLnlTnvjI8KpSsQVcK/omde\nJowlQFMRaYRLFAOBwTm22QLEAotEpBbQDNgoItFACVXdF3jeA/i7h7GaAkTVVZL9/e9ds9OsWW7a\nU2MKO1Vl+Y7lxK+PZ/r66SzdthSAsiXLcjjrcEjHqFC6wimJ5PyK5zP+hvFehg54mDBUNUtE7gfm\nAlHAGFVdLSLDAutfA/4BjBORlYAAf1LVdBG5EJjm+sIpCbyjqnO8itUUHHv2uEF3778P3bq58h61\na/sdlTFnLzM7ky82fUH8+njif4hnS8YWBKFzvc78K/Zf9G3Wl+bVm5Ot2ezP3M/eI3vz/di6b2tE\nPou41qCiISYmRhMSbMhGYfXVVzB4MKSkuNtmH33UTYdqTGGz+9BuZifNZvr66cxJmsPeI3spV7Ic\nPRr3oE+zPlzX9DpqVajld5gAiEiiqsaEsq2N9Da+y852o7Sfegrq13dzZ3fu7HdUpjg4dPQQ36Z8\ny9Z9WylfqjzRpaKpULoC0aWjiS4VfdLPEnL6v1427t7oriLWx7Nw80KyNZta0bXo37I/fZr1IfbC\nWMqXKh+hT+YNSxjGVwcPwk03uRHbAwbA669DpUp+R2WKqozDGXz585cs2ryIhVsWsiRlCUePHQ1p\n37Ily7pkkiORRJeKZnPGZlalrgKgVY1WPHb5Y/Rp1odOdTudMdEUJpYwjG/274frr3dXFK++Cr/9\nrU2LasJrx/4dLNqy6ESCWL59OYpSskRJYs6P4eHOD3PlBVfSpGoTDh49yIHMAxw4euCUn/sz9/+y\nLMf6bfu3UTO6Ji/0eIE+zfrQuGpjvz+2ZyxhGF9kZMC118K337qBeIMG+R1R8bI/cz/r09ezfud6\n1qevJ7p0ND0b96RNrTZIBLK2qrI6bTXT101nxg8zSNmXQs3omtSMrkmt6Fon/awZXZNaFdzzGuVr\nUCoq94JhqsrmjM0s3LzwRIL4YecPAJQrWY5f1f8VT139FFdecCWX1r2U6NLRnn/OosY6vU3E7d4N\nPXu6QXhTprgmKRN+2cey2ZKx5URSWL/zlwSRsu+XIVGCoLjfA3Uq1CGuSRy9mvSie+PuVC5bOWzx\nHM0+yqIti0608/+05ycAOtXtRIvqLUg7mEbqgVR27N/BjgM7yMzOzPU4VctVPSWx7Dq8i4WbF5K8\nNxmAymUrc2WDK7mywZVcdcFVdKjTIc9EU9zlp9PbEoaJqPR06NHDDcp77z03C545N4eOHmJl6spT\nksIPO3/gSPaRE9tVLluZZtWa0ax6M/cz8LxJ1SbsPrSbOUlzmPPjHD758RP2HN5DlETRuV5nejXp\nRa+mvWhXu12+2+MzDmcwJ2kO8T/EM2vDLPYc3kOZqDJ0b9ydPhf14fqLrqdOxTqn7Keq7D2yl9QD\nqS6JHNjxy/P9O0g9GPT8QCrlSpU7KUG0qtmqSPUdeMkShimQUlPd2IoNG1xtqLg4vyMqvI7pMRZt\nXsT45eN5b8177M/cD0CURHFhlQtPSQrNqjWjZnTNkJqbso5l8W3yt8xOms2cpDkkbksEoFZ0LXo2\n6emuPi7sTrXy1XLdf/Oezcz4YQbx6+P5fNPnHD12lOrlq9P7ot70adaH7hd2t+agAsQShilwtm2D\n2FjYtAlmzHDPTf79uOtHJiyfwIQVE9i0ZxMVSlfglpa30Pui3jSv3pzGVRtTOiq89VN27N/B3B/n\nMidpDnN/nMuuQ7soISXoVLcTvZr0Iq5JHFESdWL08vIdywFoVq0ZfZv1pU+zPnSu19nXkhYmb5Yw\nTIHy88/QtSts3w4zZ8JVuZaRNHnJOJzBe2veY/zy8SzeshhBiL0wljva3kG/5v0i+td69rFslmxd\nwpykOcxOms2SlCUn+j9KSAkur385fZr1ofdFvWlWvVnE4jJnzxKGKTA2bXLJYudON9biV7/yO6LC\nIftYNvM3zmf88vFMWzeNw1mHaVatGXe0vYPb2txG/Ur1z3yQCEg7kMa8jfPIPpZNXJM4akTX8Dsk\nk0820tsUCElJLlns2wfz58Mll/gdUcG3Jm0N45eNZ9LKSWzdt5UqZaswpN0Q7mh7B53qdorILa/5\nUSO6BoMvzllT1BRVljCMJ9atc/0UR47AggVu8iPjqCpHso+cNCjss58+Y/zy8SRsTSBKoujVtBcv\nxr1I74t6U6ZkGb9DNgawhGE8sGqVuxtKFT7/HFq39jsi76gqszbM4ruU734ZEZxjJHBuy7I1+5Rj\nta3Vlhd6vMDgiwcXmMJ0xgSzhGHCavlylyxKlYLPPoPmzf2OyDub9mzi/ln3M3PDTIATxeuC6wxV\nKF2BquWq/rIsj+J2rWq2ok2tNj5/ImNOzxKGCZuEBDcoLzraJYumTf2OyBtHs48y4psRPP3F0wD8\np/t/ePDSB20ksSnyLGGYsPjmG1fuo2pVlywaNfI7Im98/fPX/Pbj37IydSV9mvXh5V4v06BSA7/D\nMiYiLGGYc7ZokSskWKuWSxYNiuDvzz2H9/Dn+X/m9cTXOb/i+UwbMI0bmt/gd1jGRJSnxVZEJE5E\n1otIkog8nsv6SiIyQ0SWi8hqERkS6r6mYHjzTddnUbcuLFxY9JKFqjJ55WSaj2zO6KWjeejSh1j7\nu7WWLEyx5NkVhohEAaOA7kAysERE4lV1TdBmvwPWqGpvEakBrBeRt4HsEPY1Pjp8GO6/H956C7p3\nh3fegerV/Y4qvH7c9SP3zbqPT378hJjzY5h16yw61Ongd1jG+MbLJqlOQJKqbgQQkSlAXyD4l74C\nFcWNRqoA7AKygEtD2Nf4ZNMmuPlmSEyEv/wF/vY3iPKpTNCKHSt4e8XbZGZn0qFOBzqe35Fm1Zqd\nU92izOxMnv/yeZ5Z9AylSpTipbiXuO+S+6wWkin2vEwYdYGfg14n4xJBsJFAPLAVqAgMUNVjIhLK\nvsYHc+fC4MGQlQXTp/tTnjz1QCrvrHyH8cvHs2z7MkqVKEXJEiU5lHUIcLe3tq3Vlo51OtKhTgc6\n1OlAyxotQ7qLadHmRfz249+yNn0tN7e8mRE9R1D3vLpefyRjCgW/O717AsuArkBjYJ6ILMrPAURk\nKDAUoEFRa0AvQI4dg3/+E5580g3E++CDyN42eyTrCB//8DHjl49ndtJsso5lEXN+DC/3epmBrQdS\nuWxl1qevZ+m2pSzdtpTEbYmMWz6OkUtGAlAmqgxtarU5kUA61OnAxTUvPjGKeufBnTw27zHGLBvD\nBZUu4ONBH3PdRddF7gMaUwicMWGIyAPAJFXdnc9jpwDBFdLqBZYFGwIMV1cBMUlEfgKah7gvAKo6\nGhgNrvhgPmM0IdizB26/3ZUlHzwYRo92Yy28pqos2bqE8cvGM2X1FHYd2kWdCnX4Q+c/cHvb22lV\ns9VJ27eq2YpWNVvx67a/BtycEUm7klwC2ZrI0u1Lmbp6Kq8nvg5AyRIlaV2zNW1qtWHWhlnsPrSb\nxy57jCevftLmazAmF6FcYdTCdTovBcYAczW0ErdLgKYi0gj3y34gkLNK2RYgFlgkIrWAZsBGYE8I\n+5oIWLECbrwRNm+Gl1+G3/0OvK5/l7w3mUkrJjF++XjWpa+jbMmy3ND8Bu5oewfdLuxGyRKhXRiX\nkBJcVO0iLqp2EQNbDwRcEtq0ZxOJ2xJPXI3MSZpDi+otGHntSBttbcxphFTePNAp3QN3RRADvAu8\npao/nmG/a4ERQBQwRlWfFZFhAKr6moicD4wD6gCCu9qYlNe+Z4rTypuH16RJMHQoVK4M778Pl13m\n3XsdPHqQaWunMX75eOZvnI+iXF7/cu5oewf9W/WnUtlK3r25McVY2Mubq6qKyHZgO+4upirA+yIy\nT1UfO81+s4BZOZa9FvR8Ky4RhbSviYzMTPjjH2HkSDfZ0dSpULu2N++VdiCNv3/xd8YvH8++zH1c\nUOkC/nrVX7m97e00qdrEmzc1xpyVUPowHgJuB9KBN4FHVfWoiJQANgB5JgxT+KSkwC23wNdfwx/+\nAMOHu0KC4XY0+yijlozi6c+fZn/mfm5tcytD2g3hqguuooR4Op7UGHOWQrnCqArcqKqbgxcGbn+9\n3puwjB8+/xwGDIADB9xVRf/+3rzPnKQ5PDz3Ydalr6NH4x78r+f/aFmjpTdvZowJm1D+lJuNG1AH\ngIicJyKXAqjqWq8CM5GjCv/9ryvxUaUKfPedN8nih50/cP0719Pr7V5kHcsifmA8c26dY8nCmEIi\nlCuMV4Hgegj7c1lmCqljx+COO1wH9403wtixcN554X2PjMMZPLPwGV789kXKlizLc92e48FLH7SZ\n5IwpZEJJGBJ8G22gKcrvAX8mTJ56yiWLp592g/LCects9rFsxi0bxxOfPUHagTSGtBvCs7HPUruC\nRz3oxhhPhfKLf6OIPIi7qgC4DzdWwhRyU6fCM8/A3XeHP1ks3rKYh+Y8xNJtS7ms/mXMHDyTmPND\nunPPGFNAhdKHMQy4DDeA7nhNp6FeBmW8t3QpDBnixlaMGhW+ZPFzxs8M/mAwV469kh37d/D2jW+z\neMhiSxbGFAFnvMJQ1VTcSGtTROzYATfcANWqwYcfQpkwdCUcPHqQ/3z1H4YvHo6i/N9V/8efLv+T\nldgwpggJZRxGWeBuoBVQ9vhyVb3Lw7iMR44cgZtugvR0WLzYzZKXH6pKxpEMUg+ksmP/DlIPpLIl\nYwsjvh3Blowt3NLyFp7r/hwNKzf0JH5jjH9C6cOYCKzDVZb9O3ArYLfTFkKqrhbUl1/ClCnQIXCf\nW9axrJMSQOqBVHYcyP156oFUMrMzTzl2m1ptGH/DeK5peE1kP5QxJmJCSRhNVPUWEemrquNF5B0g\nXyXITcEwcqSbIe8vf3ED9HYe3MmoJaMY+d1I0g6mnbJ96ajS1IquRa0KtahdoTZtarWhVnQtakbX\npGZ0zZOe165QG/G6KqExxlehJIyjgZ97RKQ1rp5UTe9CMl749FN4+GE34dGQh3/igVkvMGbZGA4e\nPch1Ta/juqbXUatCrZOSwHllzrMkYIw5IZSEMVpEqgB/xc2OVwH4P0+jMmH144+uPtQFnRMpOfB5\nLhr1HlESxa1tbuWRXz1yyrwSxhiTm9MmjECBwb2ByZMWAhdGJCoTNhkZStehc9l34/Psrv8Z6ZvP\n45FfPcI9rl9oAAAXwklEQVSDlz5oU48aY/LltAkjMKr7Mdz8F6YQOZp9lHdWTuGByc+z76qVVCt9\nPo9f/Tz3dLjH5pYwxpyVUJqk5ovII8BU4MDxhaq6K+9djF/2HdnHG0vf4H/f/I/kvcmwvxW31RjH\nWw8PonRUab/DM8YUYqEkjAGBn78LWqZY81SBsm3fNl769iVeTXiVjCMZtCx3Dbz9Ondf3Ys3/iie\nT6tqjCn6Qhnp3SgSgZizczT7KI988givJb5G1rEsbmpxE9dXfZRhvS/hio7wShjLfhhjirdQRnrf\nnttyVZ0Qwr5xwIu4ebnfVNXhOdY/ihsIeDyWFkANVd0lIpuAfUA2kBXqnLPFyaGjh7jlvVuYuWEm\n93S4x5XiyGzMJZdA9erwwQdQ2lqhjDFhEkqT1CVBz8sCscBS4LQJQ0SigFFAd1zRwiUiEq+qa45v\no6rPA88Htu8NPJyjb6SLqqaH8kGKm4zDGfSe3JvFWxbz6nWvMixmGEeOQNfesHMnfPUV1LTRMsaY\nMAqlSeqB4NciUhmYEsKxOwFJqroxsN8UoC+wJo/tBwGTQzhusbdj/w7i3o5jVeoqJt80mQGtB6AK\n993nEsW770K7dn5HaYwpakIpb57TASCUfo26wM9Br5MDy04hIuWBOOCDoMWKu0MrUUTyLKcuIkNF\nJEFEEtLSTi1vUdRs3rOZK8deyfr09cwYNIMBrd09CS+/DGPGwF//6gbpGWNMuIXShzED98sbXIJp\nSfjHZfQGvszRHHWFqqaISE1gnoisU9WFOXdU1dHAaICYmBjNub4oWZu2lu4Tu7M/cz/zfj2Pyxtc\nDsC8ea7sR9++8Le/+RykMabICqUP4z9Bz7OAzaqaHMJ+KUD9oNf1AstyM5AczVGqmhL4mSoi03BN\nXKckjOIiYWsCcZPiKFmiJF/c+QVta7cFXJnywYOhZUuYOBFKnM01ozHGhCCUhLEF2KaqhwFEpJyI\nNFTVTWfYbwnQVEQa4RLFQGBwzo1EpBJwNXBb0LJooISq7gs874ErrV4sLfhpAX2m9KF6+erM+/U8\nmlRtcmLdH/4AGRmwYAFUrOhjkMaYIi+Uv0ffA44Fvc4OLDstVc0C7gfm4ubPeFdVV4vIMBEZFrRp\nP+ATVT0QtKwWsFhElgPfATNVdU4IsRY5H637iF5v9+KCSheweMjik5LFvHnuquJPf4LWrX0M0hhT\nLIjq6Zv9RWSZqrbLsWy5qrb1NLKzEBMTowkJCX6HETbjlo3j7vi7ueT8S5h16yyqlqt6Yt3Bg3Dx\nxVCyJCxfDmXLnuZAxhiTBxFJDHWcWyhXGGki0ifo4H0BGxvhsf99/T+GTB9C10ZdmX/7/JOSBbjO\n7Y0bYfRoSxbGmMgIpQ9jGPC2iIwMvE4Gch39bc6dqvLkgid5ZtEz3NTiJt6+8W3KlCxz0jbLlsF/\n/wt33w1XX+1ToMaYYieUgXs/Ap1FpELg9X7PoyqmjukxHpj1AK8kvMLd7e/m9etfJ6pE1EnbZGfD\nPfe40h/PP+9ToMaYYumMTVIi8k8Rqayq+1V1v4hUEZFnIhFccXI0+yi3fXgbryS8wmOXPcYbvd84\nJVmAG6CXkAAvvghVqvgQqDGm2AqlD6OXqu45/iIw+9613oVU/Bw8epAbpt7A5FWTGR47nH93/3eu\nc2lv3uxGcl97LfTv70OgxphiLZQ+jCgRKaOqR8CNwwDKnGEfE6J9R/Zx3TvXsXjLYl6//nWGdsy9\nCooq/C4wI8krr1jJcmNM5IWSMN4GPhWRsYAAdwLjvQyquNh7ZC+93u7Ft8nfnigimJd334WZM+F/\n/4MLLohgkMYYExBKp/e/AwPouuFqSs0F7FfWOdp7ZC9xk+JYsnUJU2+eyk0tb8pz29274cEHISYG\nHnggz82MMcZToVxhAOzAJYtbgJ84uaqsyaeMwxnEvR1HwtYEpt48lRtb3Hja7R97zM1xMXcuRJ3a\nD26MMRGRZ8IQkYtwc1QMwg3Um4obGd4lQrEVSRmHM+g5qSeJ2xJ59+Z36dei32m3/+ILePNNlzRs\njgtjjJ9Od4WxDlgEXK+qSQAi8nBEoiqi9hzeQ89JPfl+2/e8f8v79G3e97TbHz4MQ4fChRfCU09F\nKEhjjMnD6RLGjbgKswtEZA5ulj27N+cs7T60mx6TerB8+3Le7/8+fZr1OeM+//wn/PADfPIJlC8f\ngSCNMeY08hyHoaofqepAoDmwAPg9UFNEXhWRHpEKsCjYfWg33Sd2Z/n25XzQ/4OQksXq1TB8OPz6\n19C9ewSCNMaYMzjjwD1VPaCq76hqb9wkSN8Df/I8siJi16FddJvYjZWpK/lwwIf0btb7jPscO+bK\nf5x3HrzwQgSCNMaYEIR6lxRwYpT3iSlRzentOrSLbhO6sTptNdMGTOPapqENkH/9dfj6a5gwwdWM\nMsaYgiBfCcOEbufBnXSb2I21aWv5aMBH9GraK6T9UlLchEjdu8Ntt515e2OMiRRLGB5IP5hOtwnd\nWJe+jo8GfkRck7iQ933gAcjKgtdes/IfxpiCJZTig2dNROJEZL2IJInI47msf1RElgUeq0QkW0Sq\nhrJvQZV+MJ3YCbGsS1/H9IHT85Uspk1zj6efdrfSGmNMQXLGKVrP+sAiUcAPQHfcpEtLgEGquiaP\n7XsDD6tq1/zue5zfU7SmHUgjdkIsG3ZtYPrA6fRoHPrNZBkZ0LIl1KgBS5ZAqVIeBmqMMQHhnqL1\nbHUCklR1o6pm4sZxnG6k2iBg8lnu67vUA6l0ndCVDbs2MGPQjHwlC4AnnoDt2+GNNyxZGGMKJi8T\nRl3g56DXyYFlpxCR8kAcv9SoCnnfgiD1QCpdx3flx10/8vGgj+l2Ybd87f/VV/Dqq67A4CWXeBSk\nMcacI0/7MPKhN/Clqu7K744iMlREEkQkIS0tzYPQTi/1QCpdxndh4+6NfDz4Y2IvjM3X/pmZrvxH\n/frwj394FKQxxoSBlwkjBagf9LpeYFluBvJLc1S+9lXV0aoao6oxNWrUOIdw8+/4lcVPu39i5uCZ\ndG3UNd/H+Pe/3ajuV16BChU8CNIYY8LEy4SxBGgqIo1EpDQuKcTn3EhEKgFXA9Pzu6+fjndwb9y9\nkZmDZ9KlUf6L+K5bB888AwMGwHXXeRCkMcaEkWfjMFQ1S0Tux024FAWMUdXVIjIssP61wKb9gE9U\n9cCZ9vUq1vxKO5BG1wldSdqVdNbJ4tgx1xQVHQ0vvuhBkMYYE2aeDtxT1VnArBzLXsvxehwwLpR9\nC4LjVxZJu5L4eNDHZ9UMBfDWW7BokftZq1aYgzTGGA8UlE7vQuH4oLzjt87mt4P7uG3b4NFHoUsX\nGDIkzEEaY4xHLGGEaOfBnSeSRfzA+HzfOhvswQfd5Eivv27lP4wxhYfVkgrB8WSxPn098YPi6d74\n7CeoiI+H9993kyM1bRrGII0xxmN2hXEGx6vOrktfR/yg+HyP4A62dy/cdx9cfDE88kgYgzTGmAiw\nK4zT2HVoF90ndmdt2tp814bKzRNPwNat8MEHVv7DGFP4WMLIQ/DkR9MHTqdnk57ndLyvv3aD8x54\nAC69NExBGmNMBFmTVC6Oz8G9Om01Hw3I33wWucnMdFOu1qvnBuoZY0xhZFcYORxPFqtSVzFtwLSQ\nZ8o7neeec+U/Pv4YKlYMQ5DGGOMDu8IIsufwHnpM6sHK1JV82P/DkOfgPp31611RQSv/YYwp7OwK\nI2DP4T10n9id5duX8+GAD7nuonP/7X68/Ef58jBiRBiCNMYYH1nCIHBlMbHHiWRx/UXXh+W4b70F\nCxfCm29C7dphOaQxxvim2DdJ7T2yl56TerJs+zI+6P9B2JLF8fIf11wDd90VlkMaY4yvin3CKFey\nHBdWuZD3+79P72a9w3bchx5y5T9Gj7byH8aYoqHYN0mViirF5Jsmn3nDfJgxA957D5591sp/GGOK\njmJ/hRFux8t/tG5t5T+MMUVLsb/CCLe//AVSUlyBwdKl/Y7GGGPCx64wwujrr2HUKLj/fiv/YYwp\neixhhElw+Y9nn/U7GmOMCT9PE4aIxInIehFJEpHH89jmGhFZJiKrReSLoOWbRGRlYF2Cl3GGw/PP\nu/Ifr7xi5T+MMUWTZ30YIhIFjAK6A8nAEhGJV9U1QdtUBl4B4lR1i4jUzHGYLqqa7lWM4fLDD678\nR//+cH14hnEYY0yB4+UVRicgSVU3qmomMAXom2ObwcCHqroFQFVTPYzHM/feC+XKwYsv+h2JMcZ4\nx8uEURf4Oeh1cmBZsIuAKiLyuYgkisjtQesUmB9YPjSvNxGRoSKSICIJaWlpYQs+VCtWwGefwf/9\nn5X/MMYUbX7fVlsS6AjEAuWAr0XkG1X9AbhCVVMCzVTzRGSdqi7MeQBVHQ2MBoiJidEIxg7A2LHu\n9tk77oj0OxtjTGR5eYWRAtQPel0vsCxYMjBXVQ8E+ioWAm0BVDUl8DMVmIZr4ipQMjNh4kS44Qao\nVs3vaIwxxlteJowlQFMRaSQipYGBQHyObaYDV4hISREpD1wKrBWRaBGpCCAi0UAPYJWHsZ6VGTNg\n504rLmiMKR48a5JS1SwRuR+YC0QBY1R1tYgMC6x/TVXXisgcYAVwDHhTVVeJyIXANHFV+0oC76jq\nHK9iPVtjxrhxF926+R2JMcZ4z9M+DFWdBczKsey1HK+fB57PsWwjgaapgiolBebMgT//GaKi/I7G\nGGO8ZyO9z9KECW5GvTvv9DsSY4yJDEsYZ0HVNUddfTU0aeJ3NMYYExmWMM7Cl19CUpJ1dhtjihdL\nGGdhzBhXL+qmm/yOxBhjIscSRj7t2wfvvgsDB0J0tN/RGGNM5FjCyKf33oMDB2DIEL8jMcaYyLKE\nkU9jxkDz5tC5s9+RGGNMZFnCyIf1612H9113gRtTaIwxxYcljHwYO9YN0vv1r/2OxBhjIs8SRoiy\nsmD8eLjuOitjbowpnixhhGjuXNi+3cZeGGOKL0sYIRozBmrWhGuv9TsSY4zxhyWMEKSlQXy867so\nVcrvaIwxxh+WMEIwaZLrw7CxF8aY4swSxhmowltvwaWXQqtWfkdjjDH+sYRxBgkJsHq1dXYbY4wl\njDMYMwbKlYMBA/yOxBhj/OVpwhCROBFZLyJJIvJ4HttcIyLLRGS1iHyRn329dvAgvPMO3HwzVKrk\nRwTGGFNweDZFq4hEAaOA7kAysERE4lV1TdA2lYFXgDhV3SIiNUPdNxKmTYO9e605yhhjwNsrjE5A\nkqpuVNVMYArQN8c2g4EPVXULgKqm5mNfz40dC40awVVXRfqdjTGm4PEyYdQFfg56nRxYFuwioIqI\nfC4iiSJyez729dSmTfDpp+5W2hLW02OMMd41SeXj/TsCsUA54GsR+SY/BxCRocBQgAYNGoQtsHHj\nXEXaO+4I2yGNMaZQ8/Jv5xSgftDreoFlwZKBuap6QFXTgYVA2xD3BUBVR6tqjKrG1KhRIyyBHzvm\nmqO6d4cw5iBjjCnUvEwYS4CmItJIREoDA4H4HNtMB64QkZIiUh64FFgb4r6e+ewz2LLFOruNMSaY\nZ01SqpolIvcDc4EoYIyqrhaRYYH1r6nqWhGZA6wAjgFvquoqgNz29SrWnMaMgSpVoG/Eu9mNMabg\nElX1O4awiYmJ0YSEhHM6xu7dUKcO3HMPvPxymAIzxpgCSkQSVTUmlG3t/p8cJk+GI0es0KAxxuRk\nCSOHMWOgbVto397vSIwxpmCxhBFkxQpITHSd3SJ+R2OMMQWLJYwgY8dC6dJw661+R2KMMQWPJYyA\nzEyYONHdGVWtmt/RGGNMwWMJI2DGDNi508ZeGGNMXixhBIwZA3XrutHdxhhjTmUJA0hJgTlzXN2o\nqCi/ozHGmILJEgYwYYKrH2VjL4wxJm/FPmGouuaoq66CJk38jsYYYwouv8ub++7AAbjmGujWze9I\njDGmYCv2CaNCBXjjDb+jMMaYgq/YN0kZY4wJjSUMY4wxIbGEYYwxJiSWMIwxxoTEEoYxxpiQWMIw\nxhgTEksYxhhjQmIJwxhjTEhEVf2OIWxEJA3YfJa7VwfSwxhOuFl858biOzcW37kpyPFdoKo1Qtmw\nSCWMcyEiCaoa43ccebH4zo3Fd24svnNT0OMLlTVJGWOMCYklDGOMMSGxhPGL0X4HcAYW37mx+M6N\nxXduCnp8IbE+DGOMMSGxKwxjjDEhKVYJQ0TiRGS9iCSJyOO5rBcReSmwfoWIdIhwfPVFZIGIrBGR\n1SLyUC7bXCMiGSKyLPB4MsIxbhKRlYH3TshlvW/nUESaBZ2XZSKyV0R+n2ObiJ4/ERkjIqkisipo\nWVURmSciGwI/q+Sx72m/rx7G97yIrAv8+00Tkcp57Hva74KH8T0tIilB/4bX5rGvX+dvalBsm0Rk\nWR77en7+wk5Vi8UDiAJ+BC4ESgPLgZY5trkWmA0I0Bn4NsIx1gE6BJ5XBH7IJcZrgI99PI+bgOqn\nWe/rOczx770dd4+5b+cPuAroAKwKWvYc8Hjg+ePAv/OI/7TfVw/j6wGUDDz/d27xhfJd8DC+p4FH\nQvj39+X85Vj/X+BJv85fuB/F6QqjE5CkqhtVNROYAvTNsU1fYII63wCVRaROpAJU1W2qujTwfB+w\nFqgbqfcPE1/PYZBY4EdVPduBnGGhqguBXTkW9wXGB56PB27IZddQvq+exKeqn6hqVuDlN0C9cL9v\nqPI4f6Hw7fwdJyIC9Acmh/t9/VKcEkZd4Oeg18mc+ss4lG0iQkQaAu2Bb3NZfVmguWC2iLSKaGCg\nwHwRSRSRobmsLyjncCB5/0f18/wB1FLVbYHn24FauWxTUM7jXbgrxtyc6bvgpQcC/4Zj8mjSKwjn\n70pgh6puyGO9n+fvrBSnhFFoiEgF4APg96q6N8fqpUADVW0DvAx8FOHwrlDVdkAv4HciclWE3/+M\nRKQ00Ad4L5fVfp+/k6hrmyiQtyqKyF+ALODtPDbx67vwKq6pqR2wDdfsUxAN4vRXFwX+/1JOxSlh\npAD1g17XCyzL7zaeEpFSuGTxtqp+mHO9qu5V1f2B57OAUiJSPVLxqWpK4GcqMA136R/M93OI+w+4\nVFV35Fzh9/kL2HG8mS7wMzWXbXw9jyJyJ3A9cGsgqZ0ihO+CJ1R1h6pmq+ox4I083tfv81cSuBGY\nmtc2fp2/c1GcEsYSoKmINAr8BToQiM+xTTxwe+BOn85ARlDTgecCbZ5vAWtV9YU8tqkd2A4R6YT7\nN9wZofiiRaTi8ee4ztFVOTbz9RwG5PmXnZ/nL0g8cEfg+R3A9Fy2CeX76gkRiQMeA/qo6sE8tgnl\nu+BVfMF9Yv3yeF/fzl9AN2CdqibnttLP83dO/O51j+QDdwfPD7i7J/4SWDYMGBZ4LsCowPqVQEyE\n47sC1zyxAlgWeFybI8b7gdW4uz6+AS6LYHwXBt53eSCGgngOo3EJoFLQMt/OHy5xbQOO4trR7waq\nAZ8CG4D5QNXAtucDs073fY1QfEm49v/j38HXcsaX13chQvFNDHy3VuCSQJ2CdP4Cy8cd/84FbRvx\n8xfuh430NsYYE5Li1CRljDHmHFjCMMYYExJLGMYYY0JiCcMYY0xILGEYY4wJiSUMY/JBRLLl5Iq4\nYauCKiINg6ueGlPQlPQ7AGMKmUPqyjkYU+zYFYYxYRCY2+C5wPwG34lIk8DyhiLyWaBQ3qci0iCw\nvFZgronlgcdlgUNFicgb4uZD+UREyvn2oYzJwRKGMflTLkeT1ICgdRmqejEwEhgRWPYyMF5dscO3\ngZcCy18CvlDVtrj5FFYHljcFRqlqK2APcJPHn8eYkNlIb2PyQUT2q2qFXJZvArqq6sZAAcntqlpN\nRNJxpSuOBpZvU9XqIpIG1FPVI0HHaAjMU9Wmgdd/Akqp6jPefzJjzsyuMIwJH83jeX4cCXqejfUz\nmgLEEoYx4TMg6OfXgedf4SqlAtwKLAo8/xS4F0BEokSkUqSCNOZs2V8vxuRPORFZFvR6jqoev7W2\nioiswF0lDAosewAYKyKPAmnAkMDyh4DRInI37kriXlzVU2MKLOvDMCYMAn0YMaqa7ncsxnjFmqSM\nMcaExK4wjDHGhMSuMIwxxoTEEoYxxpiQWMIwxhgTEksYxhhjQmIJwxhjTEgsYRhjjAnJ/wM8K9m7\n6tHg5wAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x13499dd8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['loss'], color='b')\n",
"plt.plot(history.history['val_loss'], color='g')\n",
"plt.xlabel(\"Epoch\")\n",
"plt.ylabel(\"Log Loss\")\n",
"plt.legend([\"Train\", \"Validation\"])\n",
"plt.show()\n",
"plt.plot(history.history['acc'], color='b')\n",
"plt.plot(history.history['val_acc'], color='g')\n",
"plt.xlabel(\"Epoch\")\n",
"plt.ylabel(\"Accuracy\")\n",
"plt.legend([\"Train\", \"Validation\"])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1531/1531 [==============================] - 8s \n",
"1483/1483 [==============================] - 8s \n"
]
}
],
"source": [
"XtestTrue=np.array([Xtest[i] for i in range(Ytest.shape[0]) if Ytest[i,1]==1])\n",
"YtestTrue=np.array([Ytest[i] for i in range(Ytest.shape[0]) if Ytest[i,1]==1])\n",
"XtestFalse=np.array([Xtest[i] for i in range(Ytest.shape[0]) if Ytest[i,1]==0])\n",
"YtestFalse=np.array([Ytest[i] for i in range(Ytest.shape[0]) if Ytest[i,1]==0])\n",
"\n",
"scoretrue=model.evaluate(XtestTrue,YtestTrue)\n",
"scorefalse=model.evaluate(XtestFalse,YtestFalse)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sensitivity: 0.7477\n",
"FP Rate/slice: 0.06030808390063514\n",
"FP Rate/slice after nodule classification: 0.0110205601612\n",
"Sensitivity after nodule classification: 0.650025277771\n"
]
}
],
"source": [
"print(\"Sensitivity:\", 0.7477) #Evaluated from 2TrainUnet.ipynb\n",
"print(\"FP Rate/slice:\", len(falseind)/(sum(slicecounts+slicecounts2)))\n",
"print(\"FP Rate/slice after nodule classification:\", len(falseind)*(1-scorefalse[1])/(sum(slicecounts+slicecounts2)))\n",
"print(\"Sensitivity after nodule classification:\", 0.7477*scoretrue[1])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}