# Training code for Lung Tumor 3D Segmentation - Mixed Supervision End to end code base for lung tumor segmentation from CT-scan using mixed supervision for deep convolutional neural network. Takes 3D CT scans as input and outputs 3D segmentation of primary tumor. Project aims to utilize multiple different datasets with different label types (classification labels, bounding boxes, rough segmentations, and fine segmentations). ## Installation Requires python >= 3.6 Install python dependencies with pip. The requirements file is located in `/Resources/`: ``` pip install -r requirements.txt ``` Build repository files as packages using setuptools. If you alter the code, remember to run the setup again: ``` python setup.py install ``` ## Usage **Initiate Training:** `python .\Runable\Test\test_sevlus.py` The training is initiated from the .\Resources\Test\test_train.yaml file that looks like this: ``` device: 'cuda' data: train_dataset: "D:\\Repos\\LungTumorSegmentation\\Resources\\Test\\data_test_train.yaml" aug_prob: 0.1 scale_dim: d_0: 32 d_1: 32 d_2: 32 model: architecture: UNet_con_double loss: DiceLoss filter_base: 64 filter_expansion: 2 optimizer: name: 'Adam' lr: 0.001 train: max_epochs: 3 val_frequency: 1 output_threshold: 0.5 metric_path: "D:\\Repos\\LungTumorSegmentation\\metrics.csv" save_frequency: 5 model_directory: "D:\\Repos\\LungTumorSegmentation\\models\\" steps_per_plot: 10 ``` The paths would need to be updated. **Plot Training Metric File**: `python interface.py plot ` Store the plot by specifying the store location: `python interface.py plot -store_file -steps_per_epoch ` Example: `python interface.py plot ./metrics.csv -store_file plot.png -steps_per_epoch 120` **Evaluate Network**: `python .\Runable\Evaluate\eval.py` Evaluates the network on specified test images with labels. The configuration file (which here is the file at .\Resources\Windows_Files\win_eval.yaml) should contain network information as well as a reference to the data to evaluate the network on. The evaluation config should look similar to this ``` device: 'cuda' data: train_dataset: "D:\\Repos\\LungTumorSegmentation\\Resources\\Windows_Files\\evaluate_data_msd.yaml" scale_dim: d_0: 128 d_1: 128 d_2: 128 model: architecture: UNet_filter weights: "D:\\idun_models\\1\\model_last_128.pth" loss: DiceLoss filter_base: 128 filter_expansion: 2 optimizer: name: 'Adam' lr: 0.01 evaluate: save_segmentations: True save_directory: 'D:\\Repos\\LungTumorSegmentation\\m_128\\' output_threshold: 0.5 ``` In this case, the paths would also need to be updated. ## Authors [Vemund Fredrksen](https://github.com/VemundFredriksen), [Svein Ole M. Sevle](https://github.com/sosevle), & [André Pedersen](https://github.com/andreped). ## License [MIT](https://choosealicense.com/licenses/mit/)