File size: 4,089 Bytes
0c65f71
 
 
 
 
 
a3a4a50
0c65f71
 
2187224
 
0c65f71
 
 
 
 
2187224
0c65f71
 
 
 
 
 
 
2187224
0c65f71
2187224
0c65f71
 
 
 
 
 
 
 
 
 
 
 
3a89034
0c65f71
3a89034
 
0c65f71
3a89034
0c65f71
3a89034
 
0c65f71
3a89034
 
 
0c65f71
3a89034
0c65f71
 
 
3a89034
 
0c65f71
 
 
 
 
 
 
 
 
 
 
 
 
 
3a89034
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c65f71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3a89034
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
---
license: apache-2.0
tags:
- generated_from_trainer
datasets:
- chest-xray-classification
- keremberke/chest-xray-classification
metrics:
- accuracy
pipeline_tag: image-classification
base_model: google/vit-base-patch16-224-in21k
model-index:
- name: vit-xray-pneumonia-classification
  results:
  - task:
      type: image-classification
      name: Image Classification
    dataset:
      name: chest-xray-classification
      type: chest-xray-classification
      config: full
      split: validation
      args: full
    metrics:
    - type: accuracy
      value: 0.9742489270386266
      name: Accuracy
---

<!-- This model card has been generated automatically according to the information the Trainer had access to. You
should probably proofread and complete it, then remove this comment. -->

# vit-xray-pneumonia-classification

This model is a fine-tuned version of [google/vit-base-patch16-224-in21k](https://huggingface.co/google/vit-base-patch16-224-in21k) on the chest-xray-classification dataset.
It achieves the following results on the evaluation set:
- Loss: 0.0868
- Accuracy: 0.9742

## Inference example

```python
from transformers import pipeline

classifier = pipeline(model="lxyuan/vit-xray-pneumonia-classification")

# image taken from https://www.news-medical.net/health/What-is-Viral-Pneumonia.aspx
classifier("https://d2jx2rerrg6sh3.cloudfront.net/image-handler/ts/20200618040600/ri/650/picture/2020/6/shutterstock_786937069.jpg")

>>>
[{'score': 0.990334689617157, 'label': 'PNEUMONIA'},
 {'score': 0.009665317833423615, 'label': 'NORMAL'}]

```

## Training procedure

Notebook link: [here](https://github.com/LxYuan0420/nlp/blob/main/notebooks/ViT-xray-classification.ipynb)

### Training hyperparameters

The following hyperparameters were used during training:
- learning_rate: 5e-05
- train_batch_size: 16
- eval_batch_size: 16
- seed: 42
- gradient_accumulation_steps: 4
- total_train_batch_size: 64
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
- lr_scheduler_type: linear
- lr_scheduler_warmup_ratio: 0.1
- num_epochs: 15

```python
from transformers import EarlyStoppingCallback

training_args = TrainingArguments(
    output_dir="vit-xray-pneumonia-classification",
    remove_unused_columns=False,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    logging_strategy="epoch",
    learning_rate=5e-5,
    per_device_train_batch_size=16,
    gradient_accumulation_steps=4,
    per_device_eval_batch_size=16,
    num_train_epochs=15,
    save_total_limit=2,
    warmup_ratio=0.1,
    load_best_model_at_end=True,
    metric_for_best_model="eval_loss",
    greater_is_better=False,
    fp16=True,
    push_to_hub=True,
    report_to="tensorboard"
)

early_stopping = EarlyStoppingCallback(early_stopping_patience=3)

trainer = Trainer(
    model=model,
    args=training_args,
    data_collator=data_collator,
    train_dataset=train_ds,
    eval_dataset=val_ds,
    tokenizer=processor,
    compute_metrics=compute_metrics,
    callbacks=[early_stopping],
)
```

### Training results

| Training Loss | Epoch | Step | Validation Loss | Accuracy |
|:-------------:|:-----:|:----:|:---------------:|:--------:|
| 0.5152        | 0.99  | 63   | 0.2507          | 0.9245   |
| 0.2334        | 1.99  | 127  | 0.1766          | 0.9382   |
| 0.1647        | 3.0   | 191  | 0.1218          | 0.9588   |
| 0.144         | 4.0   | 255  | 0.1222          | 0.9502   |
| 0.1348        | 4.99  | 318  | 0.1293          | 0.9571   |
| 0.1276        | 5.99  | 382  | 0.1000          | 0.9665   |
| 0.1175        | 7.0   | 446  | 0.1177          | 0.9502   |
| 0.109         | 8.0   | 510  | 0.1079          | 0.9665   |
| 0.0914        | 8.99  | 573  | 0.0804          | 0.9717   |
| 0.0872        | 9.99  | 637  | 0.0800          | 0.9717   |
| 0.0804        | 11.0  | 701  | 0.0862          | 0.9682   |
| 0.0935        | 12.0  | 765  | 0.0883          | 0.9657   |
| 0.0686        | 12.99 | 828  | 0.0868          | 0.9742   |


### Framework versions

- Transformers 4.30.2
- Pytorch 1.9.0+cu102
- Datasets 2.12.0
- Tokenizers 0.13.3