File size: 2,975 Bytes
48237d2 c39b8fc 48237d2 c39b8fc 48237d2 c39b8fc 48237d2 c39b8fc 48237d2 c39b8fc 766fe3f 48237d2 c39b8fc 48237d2 c39b8fc 766fe3f 48237d2 c39b8fc 766fe3f 48237d2 c39b8fc 7d4846a 766fe3f 48237d2 c39b8fc 766fe3f 48237d2 c39b8fc 48237d2 c39b8fc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
---
tags:
- fastai
---
# Model card
## Model description
Fastai `unet` created with `unet_learner` using `resnet34`
## Intended uses & limitations
This is only used for demonstration of fine tuning capabilities with fastai. It may be useful for further research. This model should **not** be used for gastrointestinal polyp diagnosis.
## Training and evaluation data
The model was trained on [Kvasir SEG dataset](https://datasets.simula.no/kvasir-seg/). Kvasir SEG is an open-access dataset of gastrointestinal polyp images and corresponding segmentation masks, manually annotated and verified by an experienced gastroenterologist.
20% of the data set were used as validation set and 80% as training set.
### Model training details:
#### Data pre-processing
Masks were converted to 1 bit images: 0 for background and 1 for mask using
```python
Path('/notebooks/Kvasir-SEG/masks1b-binary').mkdir(parents=True, exist_ok=True)
for img_path in tqdm(get_image_files(path/'masks')):
img = Image.open(img_path)
thresh = 127
fn = lambda x : 1 if x > thresh else 0
img1b = img.convert('L').point(fn)
img1b.save(path/'masks1b-binary'/f'{img_path.stem}.png')
```
#### Data loaders
`SegmentationDataloaders` were used to create fastai data loaders
```python
def label_func(fn): return path/'masks1b-binary'/f'{fn.stem}.png'
dls = SegmentationDataLoaders.from_label_func(
path, bs=24, fnames = get_image_files(path/'images'),
label_func = label_func,
codes = list(range(2)),
item_tfms=Resize(320),
batch_tfms=aug_transforms(size=224, flip_vert=True)
)
```
An sample of training images:
![show_batch](show_batch.png)
#### Learner
Create learner with Dice and JaccardCoeff metrics
```python
learn = unet_learner(dls, resnet34, metrics=[Dice, JaccardCoeff]).to_fp16()
```
#### Learning rate
Learning rate finder
![lr_find](lr_find.png)
#### Fine tuning
Fine tuning for 12 epochs
`learn.fine_tune(12, 1e-4)`
```
epoch train_loss valid_loss dice jaccard_coeff time
0 0.582160 0.433768 0.593044 0.421508 00:38
epoch train_loss valid_loss dice jaccard_coeff time
0 0.307588 0.261374 0.712569 0.553481 00:38
1 0.261775 0.232007 0.714458 0.555764 00:38
2 0.246054 0.227708 0.781048 0.640754 00:38
3 0.224612 0.185920 0.796701 0.662097 00:39
4 0.208768 0.179064 0.821945 0.697714 00:39
5 0.192531 0.171336 0.816464 0.689851 00:39
6 0.177166 0.167357 0.820771 0.696023 00:39
7 0.168222 0.158182 0.838388 0.721745 00:39
8 0.155157 0.161950 0.829525 0.708709 00:39
9 0.148792 0.164533 0.828383 0.707043 00:38
10 0.143541 0.158669 0.833519 0.714559 00:39
11 0.140083 0.159437 0.832745 0.713422 00:38
```
![loss_graph](loss_graph.png)
#### Results
Visualization of results
Target/Prediction
![show_results](show_results.png)
Top losses
![top_losses](top_losses.png)
#### Libraries used:
`huggingface_hub.__version__`
`'0.8.1'`
`fastai.__version__`
`'2.6.3'` |