Duplicate from ototadana/occlusion-aware-face-segmentation
Browse filesCo-authored-by: Otota DANA <ototadana@users.noreply.huggingface.co>
.gitattributes
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
README.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: cc0-1.0
|
| 3 |
+
pipeline_tag: image-segmentation
|
| 4 |
+
tags:
|
| 5 |
+
- mmsegmentation
|
| 6 |
+
- face
|
| 7 |
+
- occlusion
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
# Occlusion-aware face segmentation
|
| 11 |
+
A model for occlusion-aware face segmentation.
|
| 12 |
+
|
| 13 |
+
This model was created following the procedures in [mmsegmentation](https://mmsegmentation.readthedocs.io/en/latest/)'s PR [[Feature] Support Delving into High-Quality Synthetic Face Occlusion Segmentation Datasets #2194](https://github.com/open-mmlab/mmsegmentation/pull/2194).
|
| 14 |
+
|
| 15 |
+
For more information, see:
|
| 16 |
+
- https://github.com/open-mmlab/mmsegmentation/pull/2194/files
|
| 17 |
+
- https://github.com/kennyvoo/face-occlusion-generation
|
| 18 |
+
|
| 19 |
+
### How to use
|
| 20 |
+
Use with [mmsegmentation](https://mmsegmentation.readthedocs.io/en/latest/get_started.html).
|
| 21 |
+
|
| 22 |
+
Example:
|
| 23 |
+
|
| 24 |
+
```python
|
| 25 |
+
from mmseg.apis import inference_model, init_model, show_result_pyplot
|
| 26 |
+
import mmcv
|
| 27 |
+
|
| 28 |
+
config_file = 'deeplabv3plus_r101_512x512_face-occlusion.py'
|
| 29 |
+
checkpoint_file = 'deeplabv3plus_r101_512x512_face-occlusion-93ec6695.pth'
|
| 30 |
+
model = init_model(config_file, checkpoint_file, device='cuda:0')
|
| 31 |
+
|
| 32 |
+
img = 'face-image.png'
|
| 33 |
+
result = inference_model(model, img)
|
| 34 |
+
show_result_pyplot(model, img, result, show=True, out_file='result.jpg', opacity=0.5)
|
| 35 |
+
```
|
deeplabv3plus_r101_512x512_face-occlusion-93ec6695.pth
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0ee938da54fe72f34916ec1456192c81efe40e846c03ad0a78cb460a3420f6a0
|
| 3 |
+
size 251071621
|
deeplabv3plus_r101_512x512_face-occlusion.py
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
norm_cfg = dict(type="SyncBN", requires_grad=True)
|
| 2 |
+
|
| 3 |
+
data_preprocessor = dict(
|
| 4 |
+
bgr_to_rgb=True,
|
| 5 |
+
mean=[123.675, 116.28, 103.53],
|
| 6 |
+
pad_val=0,
|
| 7 |
+
seg_pad_val=255,
|
| 8 |
+
size=(512, 512),
|
| 9 |
+
std=[58.395, 57.12, 57.375],
|
| 10 |
+
type="SegDataPreProcessor",
|
| 11 |
+
)
|
| 12 |
+
|
| 13 |
+
test_pipeline = [
|
| 14 |
+
dict(type="LoadImageFromNDArray"),
|
| 15 |
+
dict(type="Resize", scale=(512, 512), keep_ratio=True),
|
| 16 |
+
dict(type="LoadAnnotations", reduce_zero_label=True),
|
| 17 |
+
dict(type="PackSegInputs"),
|
| 18 |
+
]
|
| 19 |
+
|
| 20 |
+
img_ratios = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75]
|
| 21 |
+
tta_model = dict(type="SegTTAModel")
|
| 22 |
+
tta_pipeline = [
|
| 23 |
+
dict(type="LoadImageFromNDArray", backend_args=None),
|
| 24 |
+
dict(
|
| 25 |
+
type="TestTimeAug",
|
| 26 |
+
transforms=[
|
| 27 |
+
[dict(type="Resize", scale_factor=r, keep_ratio=True) for r in img_ratios],
|
| 28 |
+
[
|
| 29 |
+
dict(type="RandomFlip", prob=0.0, direction="horizontal"),
|
| 30 |
+
dict(type="RandomFlip", prob=1.0, direction="horizontal"),
|
| 31 |
+
],
|
| 32 |
+
[dict(type="LoadAnnotations")],
|
| 33 |
+
[dict(type="PackSegInputs")],
|
| 34 |
+
],
|
| 35 |
+
),
|
| 36 |
+
]
|
| 37 |
+
|
| 38 |
+
model = dict(
|
| 39 |
+
type="EncoderDecoder",
|
| 40 |
+
data_preprocessor=data_preprocessor,
|
| 41 |
+
pretrained="open-mmlab://resnet101_v1c",
|
| 42 |
+
backbone=dict(
|
| 43 |
+
type="ResNetV1c",
|
| 44 |
+
depth=101,
|
| 45 |
+
num_stages=4,
|
| 46 |
+
out_indices=(0, 1, 2, 3),
|
| 47 |
+
dilations=(1, 1, 2, 4),
|
| 48 |
+
strides=(1, 2, 1, 1),
|
| 49 |
+
norm_cfg=norm_cfg,
|
| 50 |
+
norm_eval=False,
|
| 51 |
+
style="pytorch",
|
| 52 |
+
contract_dilation=True,
|
| 53 |
+
),
|
| 54 |
+
decode_head=dict(
|
| 55 |
+
type="DepthwiseSeparableASPPHead",
|
| 56 |
+
in_channels=2048,
|
| 57 |
+
in_index=3,
|
| 58 |
+
channels=512,
|
| 59 |
+
dilations=(1, 12, 24, 36),
|
| 60 |
+
c1_in_channels=256,
|
| 61 |
+
c1_channels=48,
|
| 62 |
+
dropout_ratio=0.1,
|
| 63 |
+
num_classes=2,
|
| 64 |
+
norm_cfg=norm_cfg,
|
| 65 |
+
align_corners=False,
|
| 66 |
+
loss_decode=dict(type="CrossEntropyLoss", use_sigmoid=False, loss_weight=1.0),
|
| 67 |
+
sampler=dict(type="OHEMPixelSampler", thresh=0.7, min_kept=10000),
|
| 68 |
+
),
|
| 69 |
+
auxiliary_head=dict(
|
| 70 |
+
type="FCNHead",
|
| 71 |
+
in_channels=1024,
|
| 72 |
+
in_index=2,
|
| 73 |
+
channels=256,
|
| 74 |
+
num_convs=1,
|
| 75 |
+
concat_input=False,
|
| 76 |
+
dropout_ratio=0.1,
|
| 77 |
+
num_classes=2,
|
| 78 |
+
norm_cfg=norm_cfg,
|
| 79 |
+
align_corners=False,
|
| 80 |
+
loss_decode=dict(type="CrossEntropyLoss", use_sigmoid=False, loss_weight=0.4),
|
| 81 |
+
),
|
| 82 |
+
train_cfg=dict(),
|
| 83 |
+
test_cfg=dict(mode="whole"),
|
| 84 |
+
)
|