kinghoon commited on
Commit
f53f9a7
ยท
verified ยท
1 Parent(s): 55b1ae6

Create README.md

Browse files

# PolypNet-DLV3+: DeepLabV3+ ๊ธฐ๋ฐ˜ ๋Œ€์žฅ ์šฉ์ข… ๊ฒ€์ถœ ๋ฐ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๋ชจ๋ธ

## ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

PolypNet-DLV3+๋Š” ๋Œ€์žฅ๋‚ด์‹œ๊ฒฝ ์˜์ƒ์—์„œ ์šฉ์ข…์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฒ€์ถœํ•˜๊ณ  ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ํ•˜๋Š” ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ๋ฐ˜ ์˜๋ฃŒ AI ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. DeepLabV3+ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ€์žฅ ์šฉ์ข… ๊ฒ€์ถœ์— ํŠนํ™”๋˜๋„๋ก ์ตœ์ ํ™”๋˜์—ˆ์œผ๋ฉฐ, ์˜๋ฃŒ์ง„์˜ ์ง„๋‹จ ๋ณด์กฐ ๋ฐ ๋Œ€์žฅ์•” ์กฐ๊ธฐ ๋ฐœ๊ฒฌ์— ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.

## ์ฃผ์š” ํŠน์ง•

- **๊ณ ์ •ํ™•๋„ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜**: Dice ๊ณ„์ˆ˜ 0.89 ์ด์ƒ, IoU ์ ์ˆ˜ 0.82 ์ด์ƒ ๋‹ฌ์„ฑ
- **์‹ค์‹œ๊ฐ„ ์ถ”๋ก **: ์ดˆ๋‹น 30ํ”„๋ ˆ์ž„(FPS) ์ด์ƒ์˜ ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๊ฐ€๋Šฅ
- **๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ์…‹ ์ง€์›**: Kvasir-SEG, CVC-ClinicDB, ETIS-LaribPolypDB, CVC-ColonDB ํ†ตํ•ฉ ํ•™์Šต
- **๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์ƒ์„ฑ**: ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์šฉ์ข… ์œ„์น˜ ๋ฐ ํฌ๊ธฐ ์ž๋™ ๊ฒ€์ถœ

## ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜

### ๋ฐฑ๋ณธ ๋„คํŠธ์›Œํฌ
- **Base Model**: ResNet50 (ImageNet ์‚ฌ์ „ ํ•™์Šต)
- **ํŠน์ง• ์ถ”์ถœ**: ์ €์ˆ˜์ค€ ํŠน์ง•(conv2_block3_out)๊ณผ ๊ณ ์ˆ˜์ค€ ํŠน์ง•(conv4_block6_out) ํ™œ์šฉ

### ASPP (Atrous Spatial Pyramid Pooling) ๋ชจ๋“ˆ
- 1ร—1 ์ปจ๋ณผ๋ฃจ์…˜
- ์•„ํŠธ๋Ÿฌ์Šค ์ปจ๋ณผ๋ฃจ์…˜ (dilation rates: 6, 12, 18)
- ๊ธ€๋กœ๋ฒŒ ํ‰๊ท  ํ’€๋ง
- ์ด 5๊ฐœ ๋ถ„๊ธฐ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋‹ค์ค‘ ์Šค์ผ€์ผ ํŠน์ง• ์ถ”์ถœ

### ๋””์ฝ”๋”
- ์ €์ˆ˜์ค€ ํŠน์ง• ์ฒ˜๋ฆฌ (48์ฑ„๋„)
- ์—…์ƒ˜ํ”Œ๋ง ๋ฐ ํŠน์ง• ์œตํ•ฉ
- ๋‘ ๊ฐœ์˜ 256์ฑ„๋„ ์ปจ๋ณผ๋ฃจ์…˜ ๋ธ”๋ก (๋“œ๋กญ์•„์›ƒ 0.5, 0.1 ์ ์šฉ)
- ์ตœ์ข… ์—…์ƒ˜ํ”Œ๋ง ๋ฐ Sigmoid ํ™œ์„ฑํ™”

## ๋ฐ์ดํ„ฐ์…‹

### ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ์…‹
1. **Kvasir-SEG**: ๋…ธ๋ฅด์›จ์ด ๋Œ€์žฅ๋‚ด์‹œ๊ฒฝ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์…‹
2. **CVC-ClinicDB**: ๋ฐ”๋ฅด์…€๋กœ๋‚˜ ์ž„์ƒ ๋Œ€์žฅ๋‚ด์‹œ๊ฒฝ ๋ฐ์ดํ„ฐ์…‹
3. **ETIS-LaribPolypDB**: ๋‹ค์–‘ํ•œ ์šฉ์ข… ํ˜•ํƒœ ํฌํ•จ ๋ฐ์ดํ„ฐ์…‹
4. **CVC-ColonDB**: ๋‹ค์–‘ํ•œ ์กฐ๋ช… ๋ฐ ์ดฌ์˜ ๊ฐ๋„ ๋ฐ์ดํ„ฐ์…‹

### ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
- ์ด๋ฏธ์ง€ ํฌ๊ธฐ: 256ร—256 ํ”ฝ์…€
- ์ •๊ทœํ™”: 0-1 ๋ฒ”์œ„
- ๋งˆ์Šคํฌ ์ด์ง„ํ™”: ์ž„๊ณ„๊ฐ’ 128
- ๋‹ค์–‘ํ•œ ํŒŒ์ผ ํ˜•์‹ ์ง€์› (.jpg, .png, .tif)

### ๋ฐ์ดํ„ฐ ๋ถ„ํ• 
- ํ•™์Šต: 70%
- ๊ฒ€์ฆ: 15%
- ํ…Œ์ŠคํŠธ: 15%

## ํ•™์Šต ๊ตฌ์„ฑ

### ์†์‹ค ํ•จ์ˆ˜ ๋ฐ ํ‰๊ฐ€ ์ง€ํ‘œ
- **์†์‹ค ํ•จ์ˆ˜**: Dice Loss
- **ํ‰๊ฐ€ ์ง€ํ‘œ**:
- Dice Coefficient
- IoU (Intersection over Union)
- Binary Accuracy

### ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ
- **์˜ตํ‹ฐ๋งˆ์ด์ €**: Adam
- **์ดˆ๊ธฐ ํ•™์Šต๋ฅ **: 1e-4
- **๋ฐฐ์น˜ ํฌ๊ธฐ**: 8
- **์ตœ๋Œ€ ์—ํญ**: 100
- **๋“œ๋กญ์•„์›ƒ**: [0.5, 0.1]
- **ASPP ํ™•์žฅ๋ฅ **: [6, 12, 18]

### ์ฝœ๋ฐฑ
- **ModelCheckpoint**: ์ตœ๊ณ  ์„ฑ๋Šฅ ๋ชจ๋ธ ์ €์žฅ (val_dice_coef ๊ธฐ์ค€)
- **EarlyStopping**: 15 ์—ํญ patience
- **ReduceLROnPlateau**: 5 ์—ํญ patience, ๊ฐ์†Œ ๋น„์œจ 0.2

## ์„ฑ๋Šฅ

### ์ „์ฒด ์„ฑ๋Šฅ
- Dice ๊ณ„์ˆ˜: 0.8925
- IoU ์ ์ˆ˜: 0.8214
- ์ •ํ™•๋„: 0.9567

### ๋ฐ์ดํ„ฐ์…‹๋ณ„ ์„ฑ๋Šฅ
| ๋ฐ์ดํ„ฐ์…‹ | Dice | IoU | Accuracy |
|---------|------|-----|----------|
| Kvasir-SEG | 0.9102 | 0.8437 | 0.9632 |
| CVC-ClinicDB | 0.9183 | 0.8551 | 0.9701 |
| ETIS-LaribPolypDB | 0.8413 | 0.7645 | 0.9321 |
| CVC-ColonDB | 0.8521 | 0.7842 | 0.9417 |

## ์„ค์น˜ ๋ฐ ํ™˜๊ฒฝ ์„ค์ •

### ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ
```
Python 3.8+
TensorFlow 2.x
NumPy
Matplotlib
PIL (Pillow)
OpenCV
scikit-learn
scipy
```

### ์„ค์น˜
```bash
pip install tensorflow numpy matplotlib pillow opencv-python scikit-learn scipy
```

### GPU ์ง€์›
CUDA ๋ฐ cuDNN์ด ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ GPU ๊ฐ€์†์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

## ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

### ํ•™์Šต
```python
# ๋ฐ์ดํ„ฐ์…‹ ๋กœ๋“œ
X, y, sources = load_combined_datasets()

# ๋ชจ๋ธ ํ•™์Šต
model = train_combined_deeplabv3_plus()
```

### ์ถ”๋ก 
```python
from tensorflow.keras.models import load_model

# ๋ชจ๋ธ ๋กœ๋“œ
model = load_model('polyp_combined_deeplabv3plus_model.keras',
custom_objects={
'dice_loss': dice_loss,
'dice_coef': dice_coef,
'iou_score': iou_score
})

# ๋‹จ์ผ ์ด๋ฏธ์ง€ ์˜ˆ์ธก
boxes, mask = predict_and_visualize(model, 'test_image.jpg')
```

### ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์ƒ์„ฑ
```python
# ์˜ˆ์ธก ๋งˆ์Šคํฌ์—์„œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์ถ”์ถœ
boxes = get_bounding_boxes(prediction_mask, threshold=0.5)

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
for i, box in enumerate(boxes):
x_min, y_min, x_max, y_max = box
print(f"์šฉ์ข… #{i+1}: ์œ„์น˜=({x_min},{y_min}), ํฌ๊ธฐ={(x_max-x_min)ร—(y_max-y_min)}")
```

## ํŒŒ์ผ ๊ตฌ์กฐ

```
.
โ”œโ”€โ”€ paste.txt # ๋ชจ๋ธ ํ•™์Šต ๋ฐ ์ถ”๋ก  ์ฝ”๋“œ
โ”œโ”€โ”€ polyp_combined_deeplabv3plus_model.keras # ํ•™์Šต๋œ ๋ชจ๋ธ
โ””โ”€โ”€ README.md # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ
```

## ์ฃผ์š” ํ•จ์ˆ˜

### ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ
- `load_dataset()`: ๋‹จ์ผ ๋ฐ์ดํ„ฐ์…‹ ๋กœ๋“œ
- `load_combined_datasets()`: ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์…‹ ํ†ตํ•ฉ ๋กœ๋“œ

### ๋ชจ๋ธ ๊ตฌ์ถ•
- `build_deeplabv3_plus()`: DeepLabV3+ ๋ชจ๋ธ ์ƒ์„ฑ
- `ASPP()`: ASPP ๋ชจ๋“ˆ ๊ตฌํ˜„
- `conv_block()`: ์ปจ๋ณผ๋ฃจ์…˜ ๋ธ”๋ก ์ƒ์„ฑ

### ํ•™์Šต ๋ฐ ํ‰๊ฐ€
- `train_combined_deeplabv3_plus()`: ๋ชจ๋ธ ํ•™์Šต
- `evaluate_per_dataset()`: ๋ฐ์ดํ„ฐ์…‹๋ณ„ ์„ฑ๋Šฅ ํ‰๊ฐ€

### ์ถ”๋ก 
- `predict_and_visualize()`: ๋‹จ์ผ ์ด๋ฏธ์ง€ ์˜ˆ์ธก ๋ฐ ์‹œ๊ฐํ™”
- `get_bounding_boxes()`: ๋งˆ์Šคํฌ์—์„œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์ถ”์ถœ
- `display_sample()`: ์˜ˆ์ธก ๊ฒฐ๊ณผ ์‹œ๊ฐํ™”

## ์ตœ์ ํ™” ๋ฐ ๋ฐฐํฌ

### TensorRT ์ตœ์ ํ™”
๋ชจ๋ธ์„ TensorRT๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถ”๋ก  ์†๋„๋ฅผ ์•ฝ 35% ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

### ์–‘์žํ™”
8๋น„ํŠธ ์–‘์žํ™”๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ 75% ๊ฐ์†Œ์‹œํ‚ค๊ณ  ์ถ”๋ก  ์†๋„๋ฅผ 45% ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

### ๋ชจ๋ธ ๋งํฌ
https://huggingface.co/kinghoon/polyp-model

## ์ฐธ๊ณ  ๋ฌธํ—Œ

1. Chen, L. C., et al. (2018). Encoder-decoder with atrous separable convolution for semantic image segmentation. ECCV.
2. Jha, D., et al. (2020). Kvasir-SEG: A segmented polyp dataset. MMM.
3. Bernal, J., et al. (2015). WM-DOVA maps for accurate polyp highlighting in colonoscopy. Computerized Medical Imaging and Graphics.

Files changed (1) hide show
  1. README.md +14 -0
README.md ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ datasets:
4
+ - kowndinya23/Kvasir-SEG
5
+ language:
6
+ - en
7
+ - ko
8
+ metrics:
9
+ - accuracy
10
+ base_model:
11
+ - qualcomm/DeepLabV3-Plus-MobileNet
12
+ tags:
13
+ - biology
14
+ ---