Diff of /Projects/NCS1/README.md [000000] .. [acd362]

Switch to unified view

a b/Projects/NCS1/README.md
1
# Peter Moss Acute Myeloid & Lymphoblastic Leukemia AI Research Project
2
## Acute Lymphoblastic Leukemia Classifiers 2019
3
### NCS1 Classifier
4
5
![Peter Moss Acute Myeloid & Lymphoblastic Leukemia AI Research Project](../../Media/Images/Peter-Moss-Acute-Myeloid-Lymphoblastic-Leukemia-Research-Project.png)
6
7
 
8
9
# Table Of Contents
10
11
- [Introduction](#introduction)
12
- [DISCLAIMER](#disclaimer)
13
- [Acute Myeloid Leukemia (AML)](#acute-myeloid-leukemia-aml)
14
- [Acute Lymphoblastic Leukemia (ALL)](#acute-myeloid-leukemia-aml)
15
- [Acute Lymphoblastic Leukemia Image Database for Image Processing (ALL-IDB)](#acute-lymphoblastic-leukemia-image-database-for-image-processing-all-idb)
16
- [Convolutional Neural Networks](#convolutional-neural-networks)
17
- [Transfer Learning](#transfer-learning)
18
- [System Requirements](#system-requirements)
19
- [Hardware Requirements](#hardware-requirements)
20
- [Software Requirements](#software-requirements)
21
- [Gain Access To ALL-IDB](#gain-access-to-all-idb)
22
- [Data Augmentation](#data-augmentation)
23
- [Installation](#installation)
24
  - [UFW Firewall](#ufw-firewall)
25
  - [Clone the repository](#clone-the-repository)
26
      - [Developer Forks](#developer-forks)
27
  - [Install Dependencies](#install-dependencies)
28
- [Adjusting Your Configuration](#adjusting-your-configuration)
29
- [Training On CPU/NVIDIA GPU](#training-on-cpunvidia-gpu)
30
  - [Prepare Your Data For Training](#prepare-your-data-for-training)
31
  - [Training Your Model](#training-your-model)
32
  - [Validate Your Model](#validate-your-model)
33
- [Tensorboard](#tensorboard)
34
  - [Tensorboard Training Graphs](#tensorboard-training-graphs)
35
  - [Tensorboard Validation Graphs](#tensorboard-validation-graphs)
36
- [Intel Movidius Neural Compute Stick 1](#intel-movidius-neural-compute-stick-1)
37
  - [Install Full NCSDK](#install-full-sdk)
38
  - [Install NCSDK API](#install-ncsdk-api)
39
  - [Converting Your Graph](#converting-your-graph)
40
- [Testing On Unseen Data](#testing-on-unseen-data)
41
- [Serving Your ALL Model](#serving-your-all-model)
42
- [Using the ALL Classifiers 2019 UI](#using-the-ALL-Classifiers-2019-ui)
43
- [Conclusion](#conclusion)
44
- [Contributing](#contributing)
45
    - [Contributors](#contributors)
46
- [Versioning](#versioning)
47
- [License](#license)
48
- [Bugs/Issues](#bugs-issues)
49
50
 
51
52
# Introduction
53
The NCS1 Classifier is a CNN (Convolutional Neural Network) coded in Python using Tensorflow/TF Slim, Inception V3 and Transfer Learning. The classifier is part of the [Peter Moss Acute Myeloid & Lymphoblastic (AML & ALL) Leukemia AI Research Project](https://www.amlresearchproject.com) computer vision R&D with the focus of detection/early detection of AML & ALL.
54
55
This tutorial allows you to train a CNN locally on CPU/GPU or on Intel AI DevCloud. The classifier is trained on data provided in the [Acute Lymphoblastic Leukemia Image Database for Image Processing](https://homes.di.unimi.it/scotti/all/) that has been augmented to increase our data using the [AML & ALL Detection System Data Augmentation program](https://github.com/AMLResearchProject/AML-ALL-Detection-System/tree/master/Augmentation/V1 "AML & ALL Detection System Data Augmentation program"). 
56
57
The Tensorflow model is trained and then converted to a format compatible with the Movidius NCS1 by freezing the Tensorflow model and then running it through the NCSDK compiler. In this project I use an an UP Squared and the NCS1 for inference, but you can use any device that is running Ubuntu 16.04 or 18.04.
58
59
This classifier is an upgrade to the classifier previously built for the sister project, [Invasive Ductal Carcinoma Classifier](https://www.breastcancerai.com/).
60
61
 
62
63
# DISCLAIMER
64
This project should be used for research purposes only. The purpose of the project is to show the potential of Artificial Intelligence for medical support systems such as diagnosis systems.
65
66
Although the classifier is accurate and shows good results both on paper and in real world testing, it is not meant to be an alternative to professional medical diagnosis.
67
68
Developers that have contributed to this repository have experience in using Artificial Intelligence for detecting certain types of cancer. They are not a doctors, medical or cancer experts.
69
70
Please use these systems responsibly.
71
72
 
73
74
# Acute Myeloid Leukemia (AML)
75
76
Despite being one of the most common forms of Leukemia, Acute Myeloid Leukemia (AML) is a still a relatively rare form of Leukemia that is more common in adults, but does affect children also. AML is an aggressive Leukemia where white blood cells mutate, attack and replace healthy red blood cells, effectively killing them.
77
78
The American Cancer Society's [estimates for leukemia in the United States for 2019 are](https://www.cancer.org/cancer/acute-myeloid-leukemia/about/key-statistics.html "estimates for leukemia in the United States for 2019 are"):
79
80
- About 61,780 new cases of leukemia (all kinds) and 22,840 deaths from leukemia (all kinds)
81
- About 21,450 new cases of acute myeloid leukemia (AML). Most will be in adults.
82
- About 10,920 deaths from AML. Almost all will be in adults.
83
84
In comparison, according to the [American Cancer Society](https://www.cancer.org/cancer/acute-myeloid-leukemia/about/key-statistics.html "American Cancer Society") there are 180,000 women a year in the United States being diagnosed with Invasive Ductal Carcinoma (IDC), a type of breast cancer which forms in the breast duct and invades the areas surrounding it.
85
86
 
87
88
# Acute Lymphoblastic Leukemia (ALL)
89
90
Acute Lymphoblastic Leukemia is found in children and causes abnormally excessive amount of white blood cells known as lymphocytes. This form of Leukemia is also known as Acute Lymphocytic Leukemia. In this project we use data for ALL as we have yet to discover a good computer vision dataset for AML.
91
92
The American Cancer Society’s [estimates for acute lymphocytic leukemia (ALL) in the United States for 2019 (including both children and adults) are](https://www.cancer.org/cancer/acute-lymphocytic-leukemia/about/key-statistics.html "estimates for acute lymphocytic leukemia (ALL) in the United States for 2019 (including both children and adults) are"):
93
94
- About 5,930 new cases of ALL (3,280 in males and 2,650 in females)
95
- About 1,500 deaths from ALL (850 in males and 650 in females)
96
97
 
98
99
# Acute Lymphoblastic Leukemia Image Database for Image Processing (ALL-IDB)
100
101
![Acute Lymphoblastic Leukemia Image Database for Image Processing](Media/Images/ALL_IDB1_Augmented_Slides.png)
102
_Samples of augmented data generated using the Acute Lymphoblastic Leukemia Image Database for Image Processing dataset and the [AML & ALL Detection System Data Augmentation program](https://github.com/AMLResearchProject/AML-ALL-Detection-System/tree/master/Augmentation/V1 "AML & ALL Detection System Data Augmentation program")._
103
104
The [Acute Lymphoblastic Leukemia Image Database for Image Processing](https://homes.di.unimi.it/scotti/all/) dataset is used for this project. The dataset was created by [Fabio Scotti, Associate Professor Dipartimento di Informatica, Università degli Studi di Milano](https://homes.di.unimi.it/scotti/). Big thanks to Fabio for his research and time put in to creating the dataset and documentation, it is one of his personal projects and without the dataset this project would not be possible.
105
106
 
107
108
# Convolutional Neural Networks
109
110
![Inception v3 architecture](Media/Images/CNN.jpg)
111
_Inception v3 architecture_ ([Source](https://github.com/tensorflow/models/tree/master/research/inception)).
112
113
Convolutional neural networks are a type of deep learning neural network. These types of neural nets are widely used in computer vision and have pushed the capabilities of computer vision over the last few years, performing exceptionally better than older, more traditional neural networks; however, studies show that there are trade-offs related to training times and accuracy.
114
115
 
116
117
# Transfer Learning
118
119
![Inception v3 model diagram](Media/Images/Transfer-Learning.jpg)  
120
_Inception V3 Transfer Learning_ ([Source](https://github.com/Hvass-Labs/TensorFlow-Tutorials)).
121
122
Transfer learning allows you to retrain the final layer of an existing model, resulting in a significant decrease in not only training time, but also the size of the dataset required. One of the most famous models that can be used for transfer learning is the Inception V3 model. Inception V3 by Google is the 3rd version in a series of Deep Learning Convolutional Architectures. Inception V3 was trained using a dataset of 1,000 classes ([See the list of classes here](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a "See the list of classes here")) from the original ImageNet dataset which was trained with over 1 million training images, the Tensorflow version has 1,001 classes which is due to an additional "background' class not used in the original ImageNet. Inception V3 was trained for the ImageNet Large Visual Recognition Challenge where it was a first runner up.
123
124
 
125
126
# System Requirements
127
128
- Tested on Ubuntu 18.04 & 16.04
129
- [Python 3.6](https://www.python.org/download/releases/3.6/ "Python 3.6")
130
- Requires PIP3
131
132
 
133
134
# Hardware Requirements
135
136
![UP Squared & Movidius NCS1](Media/Images/UP2.jpg)
137
_UP Squared & Movidius NCS1._
138
139
- Training device with NVIDIA GPU or [Intel® AI DevCloud](https://software.intel.com/en-us/ai/devcloud "Intel® AI DevCloud")
140
- [UP2](https://up-shop.org/28-up-squared "UP2"), Raspberry Pi or other Linux device for testing
141
- [Intel Movidius Neural Compute Stick 1](https://software.intel.com/en-us/neural-compute-stick "Intel Movidius Neural Compute Stick 1")
142
143
 
144
145
# Software Requirements
146
147
- [Tensorflow 1.4.0](https://www.tensorflow.org/install "Tensorflow 1.4.0")
148
- [Tensorflow Slim](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim "Tensorflow Slim")
149
- [Intel® Movidius™ NCSDK](https://github.com/movidius/ncsdk "Intel® Movidius™ NCSDK")
150
151
Installed using Setup.sh, more information can be found later in the tutorial.
152
153
 
154
155
# Gain Access To ALL-IDB
156
157
You you need to be granted access to use the Acute Lymphoblastic Leukemia Image Database for Image Processing dataset. You can find the application form and information about getting access to the dataset on [this page](https://homes.di.unimi.it/scotti/all/#download) as well as information on how to contribute back to the project [here](https://homes.di.unimi.it/scotti/all/results.php). If you are not able to obtain a copy of the dataset please feel free to try this tutorial on your own dataset, we would be very happy to find additional AML & ALL datasets.
158
159
 
160
161
# Data Augmentation
162
163
Assuming you have received permission to use the Acute Lymphoblastic Leukemia Image Database for Image Processing, you should follow the [Data Augmentation Jupyter Notebook](https://github.com/AMLResearchProject/AML-ALL-Detection-System/tree/master/Augmentation/V1/Augmentation.ipynb "Data Augmentation Jupyter Notebook") or [Data Augmentation Using Python](https://github.com/AMLResearchProject/AML-ALL-Detection-System/tree/master/Augmentation/V1/Manual.py "Data Augmentation Using Python") ([Tutorial](https://github.com/AMLResearchProject/AML-ALL-Detection-System/tree/master/Augmentation/V1/ "Tutorial"))to generate a larger training and testing dataset. Follow the Notebook or README to apply various filters to the dataset.
164
165
Data augmentations included are as follows:
166
167
- Grayscaling
168
- Histogram equalization
169
- Horizontal and vertical reflection
170
- Rotation
171
- Translation
172
- Gaussian blur
173
174
In my case the exact testing data that I extracted before creating the augmentation data set is as follows:
175
176
- Im006_1.jpg
177
- Im020_1.jpg
178
- Im024_1.jpg
179
- Im026_1.jpg
180
- Im028_1.jpg
181
- Im031_1.jpg
182
- Im035_1.jpg
183
- Im041_1.jpg
184
- Im047_1.jpg
185
- Im053_1.jpg
186
- Im057_1.jpg
187
- Im060_1.jpg
188
- Im063_1.jpg
189
- Im069_1.jpg
190
- Im074_1.jpg
191
- Im088_1.jpg
192
- Im095_1.jpg
193
- Im099_1.jpg
194
- Im0101_1.jpg
195
- Im0106_1.jpg
196
197
It is important that your testing data is removed from your training data. The point is to ensure that when testing, you are using images that the network has never seen before.
198
199
 
200
201
# Installation
202
203
Below is a guide on how to install the Acute Lymphoblastic Leukemia TF Slim Inception V3 NCS1 Classifier on your device, as mentioned above the program has been tested with Ubuntu 18.04 & 16.04, but may work on other versions of Linux and possibly Windows.
204
205
## UFW Firewall
206
207
UFW firewall is used to protect the ports of your device.
208
209
```
210
  sudo ufw status
211
```
212
213
```
214
  Status: inactive
215
```
216
217
If you are using this system on the same device as your GeniSysAI server, the local firewall has already been set up when you set up the server, all you need to do is open the ports that you decide to use for this project and add the port to the configuration file.
218
219
The ports are specified in **Required/confs.json**. The default port is set to **8080**. **FOR YOUR SECURITY YOU SHOULD CHANGE THESE!**.
220
221
To allow access to the ports use the following command for each of your ports:
222
223
```
224
  sudo ufw allow 8080
225
  sudo ufw status
226
```
227
228
```
229
 Status: active
230
231
 To                         Action      From
232
 --                         ------      ----
233
 22                         ALLOW       Anywhere
234
 8080                       ALLOW       Anywhere
235
 22 (v6)                    ALLOW       Anywhere (v6)
236
 8080 (v6)                  ALLOW       Anywhere (v6)
237
```
238
239
## Clone the repository
240
241
Clone the [ALL Classifiers 2019](https://github.com/AMLResearchProject/ALL-Classifiers-2019 "ALL Classifiers 2019") repository from the [Peter Moss Acute Myleoid & Lymphoblastic AI Research Project](https://github.com/AMLResearchProject "Peter Moss Acute Myleoid & Lymphoblastic AI Research Project") Github Organization.
242
243
To clone the repository and install the ALL Classifiers 2019, make sure you have Git installed. Now navigate to the home directory on your device using terminal/commandline, and then use the following command.
244
245
```
246
  git clone https://github.com/AMLResearchProject/ALL-Classifiers-2019.git
247
```
248
249
Once you have used the command above you will see a directory called **ALL-Classifiers-2019** in your home directory.
250
251
```
252
ls
253
```
254
255
Using the ls command in your home directory should show you the following.
256
257
```
258
ALL-Classifiers-2019
259
```
260
261
Navigate to **ALL-Classifiers-2019/NCS1** directory, this is your project root directory for this tutorial.
262
263
### Developer Forks
264
265
Developers from the Github community that would like to contribute to the development of this project should first create a fork, and clone that repository. For detailed information please view the [CONTRIBUTING](../CONTRIBUTING.md "CONTRIBUTING") guide. You should pull the latest code from the development branch.
266
267
```
268
  git clone -b "0.2.0" https://github.com/AMLResearchProject/ALL-Classifiers-2019.git
269
```
270
271
The **-b "0.2.0"** parameter ensures you get the code from the latest master branch. Before using the below command please check our latest master branch in the button at the top of the project README.
272
273
## Install Dependencies
274
275
```
276
  sed -i 's/\r//' setup.sh
277
  sh setup.sh
278
```
279
280
This file will install everything you need for the NCS1 Classifier.
281
282
 
283
284
# Augment Your Data
285
286
Once you have everything installed if you have not yet done so you need to follow the [Data Augmentation Jupyter Notebook](../Augmentation/Augmentation.ipynb "Data Augmentation Jupyter Notebook") or [Data Augmentation Using Python](../Augmentation/Augmentation.py "Data Augmentation Using Python") ([Tutorial](../Augmentation/ "Tutorial")) to generate a larger training and testing dataset.
287
288
Once you have the augmented dataset you should have 1053 training images per class. You now need to move the augmented dataset to the [Model/Data](Model/Data/ "Model/Data") directory to your training device or AI DevCloud, and also move your testing data to the [Model/Test](Model/Test/ "Model/Test") directory on your testing device.
289
290
 
291
292
# Adjusting Your Configuration
293
294
You can modify the configuration for your model using the configuration file in **Required/confs.json**. If you would like to try and replicate my results exactly, all you need to modify is the IP address that will be used by the API server.
295
296
```
297
{
298
  "Settings": {
299
    "Logs": "Logs/"
300
  },
301
  "Classifier": {
302
    "ALLGraph": "Model/ALLGraph.pb",
303
    "BatchSize": 10,
304
    "BatchTestSize": 30,
305
    "Classes": "Classes.txt",
306
    "DatasetDir": "Model/Data",
307
    "Domain": "",
308
    "Epochs": 65,
309
    "EpochsTest": 1,
310
    "EpochsDevCloud": 40,
311
    "EpochsBeforeDecay": 10,
312
    "FilePattern": "ALL_%s_*.tfrecord",
313
    "ImageSize": 299,
314
    "InceptionThreshold": 0.8,
315
    "InceptionGraph": "Model/ALL.graph",
316
    "IP": "",
317
    "Labels": "Labels.txt",
318
    "LearningRate": 0.0001,
319
    "LearningRateDecay": 0.8,
320
    "LogDir": "Model/_logs",
321
    "LogDirEval": "Model/_logs_eval",
322
    "Mean": 128,
323
    "NetworkPath": "",
324
    "NumClasses": 2,
325
    "OutputNode": "InceptionV3/Predictions/Softmax",
326
    "Port": 8080,
327
    "RandomSeed": 50,
328
    "Shards": 10,
329
    "TestImagePath": "Model/Test",
330
    "TFRecordFile": "ALL",
331
    "TFRecordPattern": "ALL_%s_*.tfrecord",
332
    "ValidationSize": 0.3,
333
    "ValidIType": [
334
      ".JPG",
335
      ".JPEG",
336
      ".PNG",
337
      ".GIF",
338
      ".jpg",
339
      ".jpeg",
340
      ".png",
341
      ".gif"
342
    ]
343
  }
344
}
345
```
346
347
 
348
349
# Training On CPU/NVIDIA GPU
350
351
It is not recommended to train on CPU, although it should be possible it will take a long time and may max out resources. If you are training on your own device I would recommended that you use an NVIDIA GPU. You need to make sure you have Tensorflow/Tensprflow GPU 1.4.0 and related CUDA/CUDNN libraries installed before you can begin.
352
353
## Prepare Your Data For Training
354
355
The first thing you need to do is prepare your data ready to be used for training. Ensure you have moved your augmented data and testing data to the correct locations and then use the following command:
356
357
```
358
  python3 Data.py
359
```
360
361
## Training Your Model
362
363
Now it is time to train your model. To do so, you simply need to run the following command and wait for the program to finish, this will take some time so take a break from the computer.
364
365
```
366
  python3 Trainer.py
367
```
368
369
Once the program is finished you should see something similar to the below output:
370
371
```
372
INFO:tensorflow: Epch 65.95 Glb Stp 9549: Loss: 0.6573 (6.55 sec/step)
373
INFO:tensorflow: Epch 65.96 Glb Stp 9550: Loss: 0.5594 (6.70 sec/step)
374
INFO:tensorflow: Epch 65.97 Glb Stp 9551: Loss: 0.5554 (6.56 sec/step)
375
INFO:tensorflow: Epch 65.97 Glb Stp 9552: Loss: 0.5546 (6.55 sec/step)
376
INFO:tensorflow: Epch 65.98 Glb Stp 9553: Loss: 0.5559 (6.61 sec/step)
377
INFO:tensorflow: Epch 65.99 Glb Stp 9554: Loss: 0.5576 (6.68 sec/step)
378
INFO:tensorflow: Epch 65.99 Glb Stp 9555: Loss: 0.5544 (6.57 sec/step)
379
INFO:tensorflow:Final Loss: 0.55445
380
INFO:tensorflow:Final Accuracy: 0.96919936
381
INFO:tensorflow:Finished training! Saving model to disk now.
382
INFO:tensorflow:Restoring parameters from Model/_logs/model.ckpt-9508
383
Exporting graph...
384
INFO:tensorflow:Froze 378 variables.
385
Converted 378 variables to const ops.
386
2020-07-18 11:28:52,183 - Trainer - INFO - ALL Classifiers 2019 NCS1 Trainer ended in 65130.24632191658
387
```
388
389
You will see that our final training loss is **0.55445** and our final training accuracy is **0.96919936** so there is still room for improvement. You will find out how to see more info about the training process in the **Tensorboard** section below.
390
391
## Validate Your Model
392
393
Now we need to validate your model. To do this run the below code:
394
395
```
396
  python3 Evaluation.py
397
```
398
399
Once the program is finished you should see something similar to the below output although results may vary depending on your setup and data splits:
400
401
```
402
INFO:tensorflow:Global Step 17: Streaming Accuracy: 0.9167 (4.78 sec/step)
403
INFO:tensorflow:Global Step 18: Streaming Accuracy: 0.9157 (4.77 sec/step)
404
INFO:tensorflow:Global Step 19: Streaming Accuracy: 0.9167 (4.79 sec/step)
405
INFO:tensorflow:Global Step 20: Streaming Accuracy: 0.9158 (4.80 sec/step)
406
INFO:tensorflow:Global Step 21: Streaming Accuracy: 0.9167 (4.75 sec/step)
407
INFO:tensorflow:Final Streaming Accuracy: 0.9127
408
INFO:tensorflow:global_step/sec: 0.175
409
INFO:tensorflow:Model evaluation has completed! Visit TensorBoard for more information regarding your evaluation.
410
```
411
412
You will see that our final streaming accuracy is **0.9127** which is a little lower than the training accuracy shown above. We need to look more into what happened during training so we can see how to improve our model for version 2. To do this we can use Tensorboard, follow the instructions below.
413
414
 
415
416
# Tensorboard
417
418
Tensorboard is a graphical interface that can give you more detailed information and specfics about what went on during your training and validation. During the training and validation stages, logs were written to **Model/\_logs** & **Model/\_logs_eval**. These logs can be used by Tensorboard to view more detailed information about your model. To run Tensorboard, navigate to the ** ** directory and use the following commands, you will be given a URL in the output which will allow you to access Tensorboard on your local network.
419
420
**Training Logs**
421
422
```
423
  tensorboard --logdir=Model/_logs --host "YourDeviceIP"
424
```
425
426
**Validation Logs**
427
428
```
429
  tensorboard --logdir=Model/_logs_eval --host "YourDeviceIP"
430
```
431
432
## Tensorboard Training Graphs
433
434
There are two main graphs we are interested in, Training_Accuracy & Training_losses/Total_Loss.
435
436
![Training_Accuracy](Media/Images/Training-Accuracy.png)
437
_CPU/GPU Training Accuracy._
438
439
![Training_losses/Total_Loss](Media/Images/Training-Loss.png)
440
_CPU/GPU Training Loss._
441
442
## Tensorboard Validation Graphs
443
444
There are two main graphs we are interested in, Valdation_Accuracy & Validation_losses/Total_Loss.
445
446
![Validation_Accuracy](Media/Images/Validation-Accuracy.png)
447
_CPU/GPU Validation Accuracy._
448
449
![Training_losses/Total_Loss](Media/Images/Validation-Loss.png)
450
_CPU/GPU Validation Loss._
451
452
 
453
454
# Intel Movidius Neural Compute Stick 1
455
456
![Intel® Movidius NCS1](Media/Images/Movidius-NCS1.jpg)
457
458
In this project we use NCS1 to run classifications in near real time. If your testing device is an IoT development device such as an UP Squared or Raspberry Pi it is recommended that you install the full NCSDK on your training device and the NCSDK API on your testing device. You can of course simply use your training device for both training and testing, in which case you only need to follow the guide for installing the full SDK.
459
460
## Install Full NCSDK
461
462
The **NCSDK** needs to be installed on your training device, this will be used to convert the trained model into a format that is compatible with the Movidius NCS1. To install NCSDK use the following commands:
463
464
```
465
  mkdir -p ~/workspace && cd ~/workspace
466
  git clone https://github.com/movidius/ncsdk.git
467
  cd ~/workspace/ncsdk
468
  make install
469
```
470
471
If you want to play around with the examples, plug your Movidius into your device and issue the following commands:
472
473
```
474
  cd ~/workspace/ncsdk
475
  make examples
476
```
477
478
## Install NCSDK API
479
480
If you are using a smaller device for your testing device, you may need to install the NCSDK API which is a lot smaller than the full SDK but has some features that are not available such as compiling your graph. This will be used by the classifier to carry out inference on local images or images received via the API hosted on the GeniSysAI server you installed. Make sure you have the Movidius plugged in.
481
482
```
483
  mkdir -p ~/workspace && cd ~/workspace
484
  git clone https://github.com/movidius/ncsdk.git
485
  cd ~/workspace/ncsdk/api/src
486
  make
487
  sudo make install
488
```
489
490
## Converting Your Graph
491
492
Now we need to compile the frozen Tensorflow/TF Slim graph produced during training into a format that is compatible with the NCS1. To do this we need to ensure that the file **ALLGraph.pb** is in the **Model** directory and navigate to the ** ** directory in terminal. Once there you can execute the following commands to compile the graph:
493
494
```
495
  mvNCCompile  -s 12 Model/ALLGraph.pb -in=input -on=InceptionV3/Predictions/Softmax -o Model/ALL.graph
496
```
497
498
The above command will save ALL.graph to the **Model** directory.
499
500
 
501
502
# Testing On Unseen Data
503
504
Now we will use [Classifier.py](Classifier.py " Classifier.py") with your test data. This classifier passes your test data through the NCS1 and predicts if Acute Lymphoblastic Leukemia is found in the images. You will see the output in console and you can also locate all AML & ALL Detection System logs in the [Logs](Logs " Logs") directory. To run the classifier, use the following command:
505
506
```
507
  python3 Classifier.py
508
```
509
510
This will run the classifier program using your test data. If you used the exact configuration and data splits you should see the following output although results may vary depending on your setup and data splits:
511
512
<details> 
513
  <summary>CPU/GPU Trained Results</summary>
514
515
```
516
2020-07-21 19:34:52,367 - Classifier - INFO - Helpers class initialization complete.
517
2020-07-21 19:34:52,368 - Movidius - INFO - Helpers class initialization complete.
518
2020-07-21 19:34:52,369 - Movidius - INFO - Movidius class initialization complete.
519
2020-07-21 19:34:52,891 - Movidius - INFO - Connected To NCS1 successfully.
520
2020-07-21 19:34:53,067 - Movidius - INFO - Movidius graph allocated successfully.
521
2020-07-21 19:34:53,113 - Movidius - INFO - Inception loaded successfully.
522
2020-07-21 19:34:53,117 - Classifier - INFO - Classifier class initialization complete.
523
2020-07-21 19:34:53,117 - Classifier - INFO - ALL Classifiers 2019 Classifier started.
524
2020-07-21 19:34:53,321 - Classifier - INFO - Loaded test image Model/Test/Im063_1.jpg
525
2020-07-21 19:34:53,712 - Classifier - INFO - ALL correctly detected with confidence of 0.999 in 0.3789231777191162 seconds.
526
2020-07-21 19:34:53,919 - Classifier - INFO - Loaded test image Model/Test/Im053_1.jpg
527
2020-07-21 19:34:54,262 - Classifier - INFO - ALL correctly detected with confidence of 0.999 in 0.3318161964416504 seconds.
528
2020-07-21 19:34:54,474 - Classifier - INFO - Loaded test image Model/Test/Im074_0.jpg
529
2020-07-21 19:34:54,816 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.3312382698059082 seconds.
530
2020-07-21 19:34:55,023 - Classifier - INFO - Loaded test image Model/Test/Im088_0.jpg
531
2020-07-21 19:34:55,364 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.33043575286865234 seconds.
532
2020-07-21 19:34:55,572 - Classifier - INFO - Loaded test image Model/Test/Im069_0.jpg
533
2020-07-21 19:34:55,915 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.3317413330078125 seconds.
534
2020-07-21 19:34:56,124 - Classifier - INFO - Loaded test image Model/Test/Im106_0.jpg
535
2020-07-21 19:34:56,466 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.3314836025238037 seconds.
536
2020-07-21 19:34:56,560 - Classifier - INFO - Loaded test image Model/Test/Im031_1.jpg
537
2020-07-21 19:34:56,900 - Classifier - WARNING - ALL incorrectly not detected with confidence of 0.8296 in 0.33110833168029785 seconds.
538
2020-07-21 19:34:57,099 - Classifier - INFO - Loaded test image Model/Test/Im101_0.jpg
539
2020-07-21 19:34:57,441 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.33135080337524414 seconds.
540
2020-07-21 19:34:57,632 - Classifier - INFO - Loaded test image Model/Test/Im041_0.jpg
541
2020-07-21 19:34:57,975 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.3327956199645996 seconds.
542
2020-07-21 19:34:58,052 - Classifier - INFO - Loaded test image Model/Test/Im024_1.jpg
543
2020-07-21 19:34:58,391 - Classifier - INFO - ALL correctly detected with confidence of 0.8833 in 0.33263349533081055 seconds.
544
2020-07-21 19:34:58,718 - Classifier - INFO - Loaded test image Model/Test/Im057_1.jpg
545
2020-07-21 19:34:59,060 - Classifier - INFO - ALL correctly detected with confidence of 0.999 in 0.3315732479095459 seconds.
546
2020-07-21 19:34:59,252 - Classifier - INFO - Loaded test image Model/Test/Im047_0.jpg
547
2020-07-21 19:34:59,594 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.33240199089050293 seconds.
548
2020-07-21 19:34:59,782 - Classifier - INFO - Loaded test image Model/Test/Im060_1.jpg
549
2020-07-21 19:35:00,124 - Classifier - INFO - ALL correctly detected with confidence of 0.9883 in 0.3316988945007324 seconds.
550
2020-07-21 19:35:00,304 - Classifier - INFO - Loaded test image Model/Test/Im095_0.jpg
551
2020-07-21 19:35:00,646 - Classifier - INFO - ALL correctly not detected with confidence of 0.984 in 0.33166933059692383 seconds.
552
2020-07-21 19:35:00,836 - Classifier - INFO - Loaded test image Model/Test/Im035_0.jpg
553
2020-07-21 19:35:01,179 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.331890344619751 seconds.
554
2020-07-21 19:35:01,251 - Classifier - INFO - Loaded test image Model/Test/Im006_1.jpg
555
2020-07-21 19:35:01,590 - Classifier - INFO - ALL correctly detected with confidence of 0.999 in 0.33198022842407227 seconds.
556
2020-07-21 19:35:01,782 - Classifier - INFO - Loaded test image Model/Test/Im099_0.jpg
557
2020-07-21 19:35:02,124 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.3316376209259033 seconds.
558
2020-07-21 19:35:02,199 - Classifier - INFO - Loaded test image Model/Test/Im026_1.jpg
559
2020-07-21 19:35:02,536 - Classifier - INFO - ALL correctly detected with confidence of 0.994 in 0.3310544490814209 seconds.
560
2020-07-21 19:35:02,616 - Classifier - INFO - Loaded test image Model/Test/Im028_1.jpg
561
2020-07-21 19:35:02,954 - Classifier - WARNING - ALL incorrectly not detected with LOW confidence of 0.7217 in 0.3318631649017334 seconds.
562
2020-07-21 19:35:03,034 - Classifier - INFO - Loaded test image Model/Test/Im020_1.jpg
563
2020-07-21 19:35:03,373 - Classifier - WARNING - ALL incorrectly not detected with confidence of 0.957 in 0.3327059745788574 seconds.
564
2020-07-21 19:35:03,374 - Classifier - INFO - Testing ended. 17 correct, 3 incorrect, 1 low confidence: (0 correct, 1 incorrect)
565
```
566
</details>
567
568
&nbsp;
569
570
# Serving Your ALL Model
571
572
Now that we are all trained and tested, it is time to set up the server that will serve an **API endpoint** that provides access to your trained model via HTTP requests. The GeniSysAI UI will use this API to interact with the AI for training / classifying etc.
573
574
- **Server.py** starts a **Rest api server** with **API endpoints** for your **ALL** classifier.
575
- **Client.py** is provided to test sending images via HTTP to the API to receive a classification.
576
577
The server will run on the IP you specify in the configuration file. The server will use the following files/folders on your testing device.
578
579
```
580
Model/Data/Classes.txt
581
Model/Data/Labels.txt
582
583
Model/Test/
584
585
Model/ALL.graph
586
587
Required/confs.json
588
589
Client.py
590
Server.py
591
```
592
593
On your testing device, open up a terminal and navigate to the to the folder containing Server.py then issue the following command. This will start the server and wait to receive images for classification.
594
595
```
596
 python3 Server.py
597
```
598
599
You should see the following output:
600
601
```
602
2020-07-21 01:22:35,853 - Server - INFO - Helpers class initialization complete.
603
2020-07-21 01:22:35,855 - Movidius - INFO - Helpers class initialization complete.
604
2020-07-21 01:22:35,855 - Movidius - INFO - Movidius class initialization complete.
605
2020-07-21 01:22:36,340 - Movidius - INFO - Connected To NCS1 successfully.
606
2020-07-21 01:22:36,521 - Movidius - INFO - Movidius graph allocated successfully.
607
2020-07-21 01:22:36,523 - Movidius - INFO - Inception loaded successfully.
608
2020-07-21 01:22:36,530 - Server - INFO - Server class initialization complete.
609
 * Serving Flask app "Server" (lazy loading)
610
 * Environment: production
611
   WARNING: This is a development server. Do not use it in a production deployment.
612
   Use a production WSGI server instead.
613
 * Debug mode: off
614
 * Running on http://###.###.#.##:8080/ (Press CTRL+C to quit)
615
```
616
617
With your API server now running you can now start the client with the following command, you need to make sure your testing data is in the correct location:
618
619
```
620
 python3 Client.py Test
621
```
622
623
This will send the test data to the model API and return the predictions. You should see the following output:
624
625
```
626
2020-07-21 20:08:52,489 - Client - INFO - Helpers class initialization complete.
627
2020-07-21 20:08:52,489 - Client - INFO - Classifier class initialization complete.
628
2020-07-21 20:08:54,158 - Client - INFO - Model/Test/Im063_1.jpg: ALL detected with a confidence of 0.999 in 0.3803825378417969
629
2020-07-21 20:09:02,326 - Client - INFO - Model/Test/Im053_1.jpg: ALL detected with a confidence of 0.999 in 0.33513545989990234
630
2020-07-21 20:09:10,485 - Client - INFO - Model/Test/Im074_0.jpg: ALL not detected with a confidence of 1.0 in 0.33394408226013184
631
2020-07-21 20:09:18,651 - Client - INFO - Model/Test/Im088_0.jpg: ALL not detected with a confidence of 1.0 in 0.3346860408782959
632
2020-07-21 20:09:26,817 - Client - INFO - Model/Test/Im069_0.jpg: ALL not detected with a confidence of 1.0 in 0.3332250118255615
633
2020-07-21 20:09:34,982 - Client - INFO - Model/Test/Im106_0.jpg: ALL not detected with a confidence of 1.0 in 0.3344697952270508
634
2020-07-21 20:09:42,715 - Client - INFO - Model/Test/Im031_1.jpg: ALL not detected with a confidence of 0.8296 in 0.3336520195007324
635
2020-07-21 20:09:50,871 - Client - INFO - Model/Test/Im101_0.jpg: ALL not detected with a confidence of 1.0 in 0.33390378952026367
636
2020-07-21 20:09:59,021 - Client - INFO - Model/Test/Im041_0.jpg: ALL not detected with a confidence of 1.0 in 0.3335244655609131
637
2020-07-21 20:10:06,737 - Client - INFO - Model/Test/Im024_1.jpg: ALL detected with a confidence of 0.8833 in 0.3324394226074219
638
2020-07-21 20:10:14,882 - Client - INFO - Model/Test/Im057_1.jpg: ALL detected with a confidence of 0.999 in 0.3338301181793213
639
2020-07-21 20:10:23,039 - Client - INFO - Model/Test/Im047_0.jpg: ALL not detected with a confidence of 1.0 in 0.3329615592956543
640
2020-07-21 20:10:31,190 - Client - INFO - Model/Test/Im060_1.jpg: ALL detected with a confidence of 0.9883 in 0.33469510078430176
641
2020-07-21 20:10:39,295 - Client - INFO - Model/Test/Im095_0.jpg: ALL not detected with a confidence of 0.984 in 0.33468103408813477
642
2020-07-21 20:10:47,445 - Client - INFO - Model/Test/Im035_0.jpg: ALL not detected with a confidence of 1.0 in 0.335205078125
643
2020-07-21 20:10:55,160 - Client - INFO - Model/Test/Im006_1.jpg: ALL detected with a confidence of 0.999 in 0.33264636993408203
644
2020-07-21 20:11:03,302 - Client - INFO - Model/Test/Im099_0.jpg: ALL not detected with a confidence of 1.0 in 0.3349738121032715
645
2020-07-21 20:11:11,023 - Client - INFO - Model/Test/Im026_1.jpg: ALL detected with a confidence of 0.994 in 0.33417510986328125
646
2020-07-21 20:11:18,733 - Client - INFO - Model/Test/Im028_1.jpg: ALL not detected with a LOW confidence of 0.7217 in 0.3328828811645508
647
2020-07-21 20:11:26,440 - Client - INFO - Model/Test/Im020_1.jpg: ALL not detected with a confidence of 0.957 in 0.3333897590637207
648
```
649
650
&nbsp;
651
652
# Using the ALL Classifiers 2019 UI
653
654
The ALL Classifiers 2019 UI is an extension for the [GeniSysAI Server](https://github.com/GeniSysAI/Server "GeniSysAI Server"). You can find the full code for this UI in the [Acute Lymphoblastic Detection System 2019 Server](https://github.com/AMLResearchProject/ALL-Detection-System-2019/tree/master/Server "Acute Lymphoblastic Detection System 2019 Server") directory.
655
656
Once you have set up the server, you can use the UI to classify your test data. The system allows you to upload your test data and then send it to the server for classification, providing a visual classification tool. 
657
658
During testing I found that using the uploaded test data resulted in better classification resultsm whether using the UI or using the uploaded test data locally with the classifier. 
659
660
Using the untouched test data, the results were as follows: 
661
662
```
663
17 correct, 3 incorrect, 1 low confidence: (0 correct, 1 incorrect)
664
```
665
When uploading this test data to the classifier and testing using the local classifier or the http classifier, the results were as follows:
666
667
```
668
19 correct, 1 incorrect, 7 low confidence: (6 correct, 1 incorrect)
669
```
670
671
The upload script on the server uses PHP's **imagecreatefromjpeg**, **imagecrop** and **imagejpeg**, cropping the images to 600px x 600px. I attempted to replicate the PHP upload code in Python with both OpenCV and Pillow, but was not able to replicate the improvement in results. When I have some more time I will look into replicating the exact resize process in Python to see if we can improve the local results. 
672
673
The full results using the dataset cropped using PHP are as follows:
674
675
**Local Classifier**
676
```
677
2020-07-22 00:21:39,144 - Classifier - INFO - Loaded test image Model/Test/Im063_1.jpg
678
2020-07-22 00:21:39,531 - Classifier - INFO - ALL correctly detected with LOW confidence of 0.605 in 0.3793625831604004 seconds.
679
2020-07-22 00:21:39,552 - Classifier - INFO - Loaded test image Model/Test/Im053_1.jpg
680
2020-07-22 00:21:39,890 - Classifier - INFO - ALL correctly detected with confidence of 0.9893 in 0.3322145938873291 seconds.
681
2020-07-22 00:21:39,910 - Classifier - INFO - Loaded test image Model/Test/Im074_0.jpg
682
2020-07-22 00:21:40,247 - Classifier - INFO - ALL correctly not detected with confidence of 0.9507 in 0.3323228359222412 seconds.
683
2020-07-22 00:21:40,262 - Classifier - INFO - Loaded test image Model/Test/Im088_0.jpg
684
2020-07-22 00:21:40,600 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.3331441879272461 seconds.
685
2020-07-22 00:21:40,619 - Classifier - INFO - Loaded test image Model/Test/Im069_0.jpg
686
2020-07-22 00:21:40,957 - Classifier - INFO - ALL correctly not detected with confidence of 0.997 in 0.33281946182250977 seconds.
687
2020-07-22 00:21:40,977 - Classifier - INFO - Loaded test image Model/Test/Im106_0.jpg
688
2020-07-22 00:21:41,314 - Classifier - INFO - ALL correctly not detected with confidence of 0.995 in 0.331695556640625 seconds.
689
2020-07-22 00:21:41,329 - Classifier - INFO - Loaded test image Model/Test/Im031_1.jpg
690
2020-07-22 00:21:41,667 - Classifier - INFO - ALL correctly detected with LOW confidence of 0.596 in 0.33196401596069336 seconds.
691
2020-07-22 00:21:41,678 - Classifier - INFO - Loaded test image Model/Test/Im101_0.jpg
692
2020-07-22 00:21:42,016 - Classifier - INFO - ALL correctly not detected with confidence of 0.995 in 0.3321669101715088 seconds.
693
2020-07-22 00:21:42,035 - Classifier - INFO - Loaded test image Model/Test/Im041_0.jpg
694
2020-07-22 00:21:42,373 - Classifier - INFO - ALL correctly not detected with confidence of 0.998 in 0.3324606418609619 seconds.
695
2020-07-22 00:21:42,393 - Classifier - INFO - Loaded test image Model/Test/Im024_1.jpg
696
2020-07-22 00:21:42,730 - Classifier - INFO - ALL correctly detected with LOW confidence of 0.51 in 0.3314645290374756 seconds.
697
2020-07-22 00:21:42,745 - Classifier - INFO - Loaded test image Model/Test/Im057_1.jpg
698
2020-07-22 00:21:43,083 - Classifier - INFO - ALL correctly detected with confidence of 0.935 in 0.3325080871582031 seconds.
699
2020-07-22 00:21:43,228 - Classifier - INFO - Loaded test image Model/Test/Im047_0.jpg
700
2020-07-22 00:21:43,565 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.33155250549316406 seconds.
701
2020-07-22 00:21:43,582 - Classifier - INFO - Loaded test image Model/Test/Im060_1.jpg
702
2020-07-22 00:21:43,920 - Classifier - INFO - ALL correctly detected with LOW confidence of 0.5815 in 0.33184123039245605 seconds.
703
2020-07-22 00:21:43,933 - Classifier - INFO - Loaded test image Model/Test/Im095_0.jpg
704
2020-07-22 00:21:44,270 - Classifier - INFO - ALL correctly not detected with LOW confidence of 0.733 in 0.331646203994751 seconds.
705
2020-07-22 00:21:44,283 - Classifier - INFO - Loaded test image Model/Test/Im035_0.jpg
706
2020-07-22 00:21:44,621 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.33235692977905273 seconds.
707
2020-07-22 00:21:44,638 - Classifier - INFO - Loaded test image Model/Test/Im006_1.jpg
708
2020-07-22 00:21:44,975 - Classifier - INFO - ALL correctly detected with confidence of 1.0 in 0.3319277763366699 seconds.
709
2020-07-22 00:21:44,989 - Classifier - INFO - Loaded test image Model/Test/Im099_0.jpg
710
2020-07-22 00:21:45,328 - Classifier - INFO - ALL correctly not detected with confidence of 1.0 in 0.33290529251098633 seconds.
711
2020-07-22 00:21:45,347 - Classifier - INFO - Loaded test image Model/Test/Im026_1.jpg
712
2020-07-22 00:21:45,684 - Classifier - INFO - ALL correctly detected with confidence of 0.981 in 0.3316617012023926 seconds.
713
2020-07-22 00:21:45,698 - Classifier - INFO - Loaded test image Model/Test/Im028_1.jpg
714
2020-07-22 00:21:46,035 - Classifier - WARNING - ALL incorrectly not detected with LOW confidence of 0.6772 in 0.3321866989135742 seconds.
715
2020-07-22 00:21:46,047 - Classifier - INFO - Loaded test image Model/Test/Im020_1.jpg
716
2020-07-22 00:21:46,384 - Classifier - INFO - ALL correctly detected with LOW confidence of 0.5405 in 0.33107590675354004 seconds.
717
2020-07-22 00:21:46,384 - Classifier - INFO - Testing ended. 19 correct, 1 incorrect, 7 low confidence: (6 correct, 1 incorrect)
718
```
719
**Server**
720
```
721
2020-07-22 00:18:02,152 - Client - INFO - Model/Test/Im063_1.jpg: ALL detected with a LOW confidence of 0.605 in 0.3804178237915039
722
2020-07-22 00:18:09,643 - Client - INFO - Model/Test/Im053_1.jpg: ALL detected with a confidence of 0.9893 in 0.404649019241333
723
2020-07-22 00:18:17,056 - Client - INFO - Model/Test/Im074_0.jpg: ALL not detected with a confidence of 0.9507 in 0.3337564468383789
724
2020-07-22 00:18:24,474 - Client - INFO - Model/Test/Im088_0.jpg: ALL not detected with a confidence of 1.0 in 0.3340914249420166
725
2020-07-22 00:18:31,889 - Client - INFO - Model/Test/Im069_0.jpg: ALL not detected with a confidence of 0.997 in 0.334122896194458
726
2020-07-22 00:18:39,306 - Client - INFO - Model/Test/Im106_0.jpg: ALL not detected with a confidence of 0.995 in 0.3339042663574219
727
2020-07-22 00:18:46,723 - Client - INFO - Model/Test/Im031_1.jpg: ALL detected with a LOW confidence of 0.596 in 0.332763671875
728
2020-07-22 00:18:54,138 - Client - INFO - Model/Test/Im101_0.jpg: ALL not detected with a confidence of 0.995 in 0.33394384384155273
729
2020-07-22 00:19:01,554 - Client - INFO - Model/Test/Im041_0.jpg: ALL not detected with a confidence of 0.998 in 0.33323001861572266
730
2020-07-22 00:19:08,971 - Client - INFO - Model/Test/Im024_1.jpg: ALL detected with a LOW confidence of 0.51 in 0.3343958854675293
731
2020-07-22 00:19:16,382 - Client - INFO - Model/Test/Im057_1.jpg: ALL detected with a confidence of 0.935 in 0.33320093154907227
732
2020-07-22 00:19:23,789 - Client - INFO - Model/Test/Im047_0.jpg: ALL not detected with a confidence of 1.0 in 0.33370471000671387
733
2020-07-22 00:19:31,203 - Client - INFO - Model/Test/Im060_1.jpg: ALL detected with a LOW confidence of 0.5815 in 0.3327455520629883
734
2020-07-22 00:19:38,608 - Client - INFO - Model/Test/Im095_0.jpg: ALL not detected with a LOW confidence of 0.733 in 0.3334190845489502
735
2020-07-22 00:19:46,025 - Client - INFO - Model/Test/Im035_0.jpg: ALL not detected with a confidence of 1.0 in 0.333467960357666
736
2020-07-22 00:19:53,451 - Client - INFO - Model/Test/Im006_1.jpg: ALL detected with a confidence of 1.0 in 0.33263731002807617
737
2020-07-22 00:20:00,860 - Client - INFO - Model/Test/Im099_0.jpg: ALL not detected with a confidence of 1.0 in 0.3327138423919678
738
2020-07-22 00:20:08,276 - Client - INFO - Model/Test/Im026_1.jpg: ALL detected with a confidence of 0.981 in 0.3331906795501709
739
2020-07-22 00:20:15,692 - Client - INFO - Model/Test/Im028_1.jpg: ALL not detected with a LOW confidence of 0.6772 in 0.3350038528442383
740
2020-07-22 00:20:23,105 - Client - INFO - Model/Test/Im020_1.jpg: ALL detected with a LOW confidence of 0.5405 in 0.33272433280944824
741
```
742
743
&nbsp;
744
745
# Conclusion
746
747
Based on training and validation statistics, it is clear that we can still improve our model. However on unseen data the classifier functions well with 17 correct classifications and 3 incorrect classifications (1 with low confidence). Feel free to play with different testing data and/or modify the configuration / code to see how you do.
748
749
&nbsp;
750
751
# Contributing
752
753
The Peter Moss Acute Myeloid & Lymphoblastic Leukemia AI Research project encourages and welcomes code contributions, bug fixes and enhancements from the Github.
754
755
Please read the [CONTRIBUTING](../../CONTRIBUTING.md "CONTRIBUTING") document for a full guide to forking our repositories and submitting your pull requests. You will also find information about our code of conduct on this page.
756
757
## Contributors
758
759
- [Adam Milton-Barker](https://www.leukemiaresearchassociation.ai/team/adam-milton-barker "Adam Milton-Barker") - [Asociacion De Investigation En Inteligencia Artificial Para La Leucemia Peter Moss](https://www.leukemiaresearchassociation.ai "Asociacion De Investigation En Inteligencia Artificial Para La Leucemia Peter Moss") President & Lead Developer, Sabadell, Spain
760
761
&nbsp;
762
763
# Versioning
764
765
We use SemVer for versioning.
766
767
&nbsp;
768
769
# License
770
771
This project is licensed under the **MIT License** - see the [LICENSE](../../LICENSE "LICENSE") file for details.
772
773
&nbsp;
774
775
# Bugs/Issues
776
777
We use the [repo issues](../../issues "repo issues") to track bugs and general requests related to using this project.