본문 바로가기

인공지능/Toy Projects

python에서 Semantic segmentation을 이용한 누끼따기_完 (remove background, semantic segmentation using python)

Introduction

저번글(python에서 Image matting을 이용한 누끼따기_1 (remove background, Image matting using python))에서는 Image matting을 이용해 배경으로부터 아바타를 분리하는 작업을 진행했다.

배경이 깔끔하거나 아바타의 외곽선이 명확한 경우에는 matting작업이 원활하게 진행 되었지만, 배경에 영상이 있거나 아바타 외곽선이 명확하지않은 경우에는 matting작업을 해도 배경까지 mask에 포함되는 경우가 많았다.

이러한 경우를 보완하기위해 matting작업대신 차라리 아바타의 위치를 찾는 segmentation 모델을 사용하는것이 좀 더 정확하게 아바타를 추출할 수 있는 방법일 것 같아서 시도해봤다.

 

Method

이번 semantic segmentation에 사용한 모델은 Mask R-CNN으로 SOTA 알고리즘은 아니지만 torch vision 라이브러리에서 기본적으로 제공하는 모델이기도 하고 범용적으로 사용되었던 모델이라 관련 자료가 많아 채택했다.

Google의 Deeplab v3도 이번 프로젝트에서 사용해봤지만 학습이 잘 되지 않아 포기했다.

Mask R-CNN architecture

Mask R-CNN은 사용해본 적이 있기 때문에 원래 가지고 있던 코드에서 데이터셋클래스만 변형해서 바로 학습을 진행했다.

 

 

Results

기존에 올렸던 반응영상에 전부 누끼를 적용해봤다.

누끼 추출에 영상 하나당 약 1.5~2시간이 소요된다.

2022-03-30 13:21:42.133976
r_cut_jingburger.mp4 start
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
11000
12000
13000
14000
15000
16000
17000
18000
19000
image to matte: 100%|█| 19278/19278 [29:53<00:00, 10.75it/s
2022-03-30 13:55:18.052793
100%|██████████████| 19278/19278 [1:17:58<00:00,  4.12it/s]
2022-03-30 15:13:20.585698
frame loading: 100%|█| 19278/19278 [00:46<00:00, 413.85it/s
mp4 making: 100%|███| 19278/19278 [00:42<00:00, 451.91it/s]
frame loading: 100%|█| 19278/19278 [01:10<00:00, 273.92it/s
mp4 making: 100%|███| 19278/19278 [00:48<00:00, 396.14it/s]
frame loading: 100%|█| 19278/19278 [00:49<00:00, 387.19it/s
mp4 making: 100%|███| 19278/19278 [00:37<00:00, 514.09it/s]
frame loading: 100%|█| 19278/19278 [01:18<00:00, 245.47it/s
mp4 making: 100%|███| 19278/19278 [00:43<00:00, 445.14it/s]
frame loading: 100%|█| 19278/19278 [01:17<00:00, 248.58it/s
mp4 making: 100%|███| 19278/19278 [00:44<00:00, 433.41it/s]

 

 

사이언티스트 반응영상 Semantic segmantation 적용

 

겨울봄 반응영상 Semantic segmantation 적용

 

챤기를 빌려 반응영상 Semantic segmantation 적용

 

남세돌 반응영상 Semantic segmantation 적용

Conclusion & Discussion

기존 matting에서 문제가 되었던 주르르님 리본, 세구님 후드티는 거의(90%) 잘 포착하는것을 확인했는데, 릴파님 포니테일은 추출이 잘 안되는 문제가 아직도 있다.

이번에 학습한 mask rcnn 모델로 GT 데이터셋을 추가해서 추가 학습을 시키면 지금의 문제점을 어느정도 보완할 수 있을 것으로 보인다.

추가적으로 이 내용에 다룰 시간이 있다면 SOTA 알고리즘을 추가로 적용해보거나, edge를 추출하여 후보정을 적용해 볼 수 있을 것 같다.

 

 

 

코드는 모두 공개했으므로 데이터셋만 잘 준비하면 학습 및 추론까지 스스로 해볼 수 있다.

 

GitHub - wlsdml1114/isedol_segmentation

Contribute to wlsdml1114/isedol_segmentation development by creating an account on GitHub.

github.com