꺼내먹는지식 준
Instance segmentation, Panoptic segmentation 본문
2018년도 이후로는 Instance segmentation, Panoptic segmentation 연구로 전형
Instance segmentation VS Panotic segmentation
두 방법 모두 같은 class 물체들을 따로 구분 가능
Instance segmentation
Instance segmentation의 경우 물체 구분을 object detection 을 기반으로 한 경우가 많다.
MASK R CNN
R CNN 과 거의 동일 구조
RPN 의 결과로 나온 Bbox proposal 을 이용해서 RoI pooling 방법을 사용했었다.
정교한 pixel level pooling 지원
:기존 pooling은 정수좌표만 지원을 했었으나, mask R CNN 에서는 RoIAlign에서는 interpolation을 통해 정교한 sub pixel 즉 소수점 pixel level pooling 지원
기존의 Fast R CNN에서는 pooling된 feature 위에 올라가 있던 head 가 두개가 있었다.
classification + box regression
기존 head 옆에 mask branch 가 하나 추가된다.
mask branch
7 X 7 $\rightarrow$ 14 X 14 upsampling
2046 $\rightarrow$ 256
각 80 클래스 별로, binary mask prediction
하나의 bounding box 에 대해서 일괄적으로 모든 클래스 mask 다 생성,
그 후, class 를 예측한 후 이 결과를 이용해서 mask 참조
Mask R CNN
MASK R CNN
docs.google.com
MASK R CNN 을 대충 정리한 내 글
Single Stage
YOLACT
Feature Pyramid 형식으로 고해상도 이미지 사용 가능
MASK R CNN에서는 실제로 사용하지 않아도 80개의 클래스를 고려한다하면 80개의 독립적 마스크를 한번에 생성을 했고, 그 후 classification 결과에 따라서 하나를 참조했다.
여기서는 Prototype 이라는, 즉 마스크는 아니지만 마스크를 합성해낼 수 있는 기본적인 soft segmentation component들을 생성해낸다.
mask 를 span 가능한 basis 라고 볼 수 있다.
추후 마스크로 합성 될 수 있는 재료를 제공한다.
그 후 Prediction head 에서 각 detection에 대해서 proto type 을 잘합성할 수 있는 coefficient를 출력, 그 후 계수들과 prototype을 선형결합하여 detection에 적합한 mask response맵을 생성.
detection 1 은 사람이 dominant
detection 2 는 racket이 dominant
이를 통해 최종적인 reponse map 생성
마스크를 효율적으로 생성하기 위해서 클래스 80개를 다 사용하지 않고, 적당하게 작게 설정하는 대신에 선형 결합으로 다양한 마스크를 생성하는 것이 key point.
자세한 내용 해당 블로그의 글 참고
https://itforfun.tistory.com/100
YOLACT
https://www.youtube.com/watch?v=2i56S0tNUj8 내가 좋아하는 PR series https://byeongjokim.github.io/posts/YOLACT,-Real-time-Instance-Segmentation/ 논문 리뷰 - YOLACT: Real-time Instance Segmentation I..
itforfun.tistory.com
YoloEdge
이전 프레임중 key frame의 feature를 다음 frame에 전달해서 특징 맵 게산량을 획기적으로 줄임으로써 소형화 디바이스에서도 동작하며 성능은 유지하게 하여 속도 유지
비디오에 따라서 독립적으로 processing되므로 mask 가 떨리거나 깜빡이는 한계점이 있다.
Panotic segmentation (기능성 추가하며 발전한 기법)
배경에는 관심 없는 Instance segmentation
이에 따라 배경 참고에는 semantic segmentation이 유리했다.
이 두가지를 모두 합친 것이 panoptic segmentation
물체와 배경 정보 instance 를 전부 구분하는 것
[Review] UPSNet: A Unified Panoptic Segmentation Network
Uber에서 발표하였으며 2019 CVPR Oral Paper 중 하나인 'UPSNet: A Unified Panoptic Segmentation Network'에 대해서 리뷰하도록 하겠습니다. Paper Link : [Link] / Github Link : [Github Link] Ab..
cdm98.tistory.com
해당 블로그 글 내용 정리
용어 설명 및 개요
stuff: semantic segmentation을 통해 다룰 수 있는 무정형이며 셀 수 없는 영역 ex. 보행자 자전거
things: instance segmentation이 구분하는 셀 수 있는 물체 ex. ehfh gksmf
기존 instance segmentation은 stuff 와 things를 동시에 고려하지 않았다.
BackBone: FPN(고해상도 Feature map 뽑기), Resnet 을 사용한 기존 Mask R CNN의 backbone
- Sementic Head (deformable convolution + sementic segmenation: FCN 로 sementic map prediction) Instnace 구별없이 semantic class 를 segment 하는걸 바탕으로 instance segmentation의 정확도를 높여 thing 클래스에 대한 성능을 높힘, Semantic head 는 FPN에서 얻은 multi-scale feature를 input으로 받는 deformable convolution 기반의 sub-network 로 구성 , 엄밀히는 multi cale feature maps를 각각 동일한 deformable conv net 을 통과 후 upsampling 하여 크기를 동일하게 맞춰서 이어붙인다. (concat) 그 후 1 X 1 conv를 통해 최종 semenatic class를 예측
- Instance Head (Detection, Box regression, Mask segmentation ) 추출: thing 클래스를 더욱 정확하게 식별할 수 있는 instance aware represenration 생성, 이러한 representatin은 panoptic head 로 전달되어 각 instance 의 logits에 영향을 미친다.
- 결과들 융합하는 Panoptic Head
앞선 heads의 logits 에 extra unknown class 의 새로운 채널을 추가하여 semantic 과 instance segmentation 사이에 발생하는 충돌 해결
Instance head
각 Instance들을 bbox 형태가 아닌 전체 영상에 해당하는 부분 위치에 다시 넣어 보강하기 위해서 sementic head 의 물체 부분을 masking 해서 그 response를 instance response와 더해줘서 최종출력에 삽입
box 사이즈가 실제 물체 사이즈와 일치한다고 하면, 전체 영역에서 어디에 위치해야하는지를 조정해서 넣어준다.
Semantic head
Instance 와 배경 외에 소속되지 않는 unknown class의 물체들도 있다. 이를 고려하기 위하여 물체의 semantic mask map에 instance 로 사용된 부분을 제외 해서 나머지 베타 적인 부분들을 모두 unknown 클래스로 합쳐서 한 채널로 추가
즉 파악한 물체들을 빼고 나머지 배경에 대한 정보들만 unknown으로 들어간다.
자세한 설명
logits
https://haje01.github.io/2019/11/19/logit.html
로짓(Logit) 이란?
haje01의 노트
haje01.github.io
X: semantic head 에서 구한 logits
channel size: $N_{stuff} + N_{thing}$
X는 channel size에 따라 $X_{stuff} + X_{thing}$으로 쪼개질 수 있다.
학습과정에서는 GT의 인스턴스 수에 의해 $N_{inst}$가 결정되고 inference 과정에서는 mask pruning 과정을 통해 $N_{inst}$가 결정된다.
- mask pruning: panoptic logits에 instance segmentation head 에서 얻은 여러가지 mask 중에서 어떤 mask 를 사용할지 결정하는 과정. IoU threshold 를 0.5로 설정하고 non-maximum suppression을 거친다. 이 후 나머지 boxes에 대해 예측한 클래스에 대한 확률값을 정렬하고 확률 값이 0.6 이상인 boxes 만 남긴다. 각 class에 대해 이미지와 동일한 사이즈의 canvas를 만들고 masks 를 interpolate 한 후 해당 canvas에 붙여넣어 준다. 확률 기준으로 내림차순으로 mask를 paste하고 이전 mask 와 paste하려는 mask IoU가 0.3 이하일 경우에만 겹치지 않는 영역에 해당 mask를 붙여준다.
Panoptic segmentation head 의 목적은 우선 ($N_{stuff} + N_{thing}$) X H X W의 사이즈를 갖는 logit tensor Z를 만든 다음에 각 픽셀마다 클래스와 인스턴스 ID 를 결정하는 것
우선 stuff 를 분류하기 위한 logits으로 $X_{stuff}$를 Z... 추후 정리
결과
VPSNET
두 시간차를 가지는 영상 사이에 pi 라는 motion map을 먼저 사용해서 각 frame에서 나온 feature map을 모션에 따라 wrapping을 해준다.
개별 물체가 잘 구분되고, 시간에 따라서 ID 가 유지되면서 추적이 잘 된다.
Landmark localization
주로 얼굴, human pose 에 사용
landmark localization
: predicting the coordinates of keypoints
1) coordinate regression: 주로 부정확하고 편향(일반화 문제)이 있다.
2) Heatmap classification: 더 높은 성과 그러나 낮은 computational cost
한 채널들이 각각의 keypoint 담당, 하나의 key point 마다 하나의 class로 생각을 해서 keypoint 가 발생할 확률 맵을 픽셀 별로 classification하는 방법으로 대신 해결하는 heat map classification
이에 따라 각 위치에 해당하는 landmark 가 확률맵처럼 표현이 되었다.
하지만 성능은 높아지나 모든 픽셀을 판별하다보니 계산량이 많다.
HeatMap 표현은 각 위치마다 confidence 가 나오는 형태의 표현
x,y 위치가 label로 주어졌을 때, heatmap label을 생성
location 으로부터 heat map으로 어떻게 변환할 것인지 알아야 한다.
label로 주어진 x,y 가 가우시안의 평균 포인트를 나타낸다.
그 위치 근처에 가우시안 분포를 씌운다.
x,y 값에다가 각각 들어갈 가우시안 값을 계산해서 넣어주면 된다.
간단 구현
영상 크기 사이즈는 정사각형 임의 크기로 설정
x,y 에 모든 좌표의 값 표현
x0,y0 를 center point로 설정
x,y 를 더해주면?
정사각형 행렬의 사이즈가 나온다. 브로드 캐스팅을 지원하기 때문에.
모델의 출력물인 CNN 이라던지 model 의 출력은 heat map이다.
이 heat map 을 좌표의 값으로 바꾸는 반대의 process는 어떻게 할까?
Hourglass Network
landmark detection에 딱 맞는 구조
Unet 을 여러개 stack 쌓은 것과 같은 구조
영상 전체를 작게 만들어서 receptive field 를 키워서 전체를 보고, landmark를 찾는게 좋겠다는 결론
skip connection이 있어서 low level feature를 참고해서 정확한 위치 특정 유도
한번에 하는 거보다 여러번 거쳐서 점점더 큰 그림과 디테일을 구체화해나가며 결과 구축
주어진 rough 한 정보로 더 더 정교하게 만들어나가는 구조
UNET 과 다른 점은 일단 +, Unet은 concat (따라서 dimension이 늘어나지 않는다.)
대신에 skip 할때 unet 은 그냥 skip 한 반면, 여기서는 또다른 conv layer 를 통과해서 전달
ourglass model 은 Unet 보다는 FPN 에 더 가까운 구조
FPN
https://herbwood.tistory.com/18
FPN 논문(Feature Pyramid Networks for Object Detection) 리뷰
이번 포스팅에서는 FPN 논문(Feature Pyramid Networks for Object Detection)을 리뷰해보도록 하겠습니다. 이미지 내 존재하는 다양한 크기의 객체를 인식하는 것은 Object dection task의 핵심적인 문제입니다...
herbwood.tistory.com
지금까지는 몇몇개의 중요한 landmark만 찾는 sparse한 landmark method
신체 전체에 대한 dense landmark를 찾아보자.
DensePose
신체의 모든 부위의 landmark 위치를 알게되면 사실은 3D를 알게되는 것과 마찬가지
하나의 확장
각 위치가 3D 표준모델에서 어떤 부위에 해당하는지 좌표를 색상으로 표현한 결과 영상
얼핏봐도 3D 느낌이 난다. $\rightarrow$ UV map
UV Map
각 부위를 2D로 펼쳐서 u , v 라는 형태의 이미지로 나타낸 좌표 표기법
UV map의 한 점은 3D mesh의 한점과 1:1로 matching이 된다.
각 mesh 내에서의 point, triangle들이 고유 ID 를 갖기 때문에 1:1로 매칭이 된다.
이 그래프에서 3D mesh가 움직여도, ID는 계속 보존되고 tracking 된다.
triangle이 조금 변형되는 거지 없어지거나 새로 생기는 것이 아니다.
$\rightarrow$ 무슨 말인고 하니 UV map 즉 2D 에서랑 3D mesh 에서랑 형태가 조금 다를 수 밖에 없는데, 그렇다고 해서 삼각형이 없어지거나 생기는 것이 아니니까 matching 관계는 유지된다.
UV Map 은 고정된 형태의 지도인데, 이 점의 위치를 알고 있으면 3D 상에서 형태가 변하더라도 어디에 위치에 있는지 계속 tracking 할 수 있다.
UV Map 의 좌표를 바로 출력하는 dense pose는 이런 3D mesh를 바로 출력하는 것과 마찬가지
UV map은 3D 좌표와 3D 형상을 표현하는 모델
color 라는 이미지, 텍스쳐를 어떻게 입힐까? texture는 이미지 형태로 저장하는 것이 가장 편하다.
UV map의 원조는 그래픽스에서 3D model 위에 texture를 입히기 위해 나온 것이다.
$\rightarrow$ OpenGL 에서 많이 봤던 표현방법
UV 좌표계를 바로 color coding 해서 입힌 것.
DensePose 구현
MASK R CNN 과 거의 동일한 구조
Faster R CNN + 3D surface Regression branch
patch: 각 body파트의 segmentation map
입력 data와 출력 data 간의 관계를 잘 설게함으로써 2D 구조의 CNN으로 3D 를 잘 예측하는 smart 한 방법!
MASK R CNN 에서 결국에 MASK Branch part 가 UV prediction 으로 변환하여 dense prediction 하는 방법을 만들었다.
해당 논문은 data 표현, dataset 제공 논문 2018 CVPR
RetinaFace (CVPR 2020)
FPN의 각 테스크에 해당하는 head를 필요한데로 다 넣는 것
RetinaFace = FPN + Multi task branches
얼굴의 판별, box regression, 기본적인 5개의 landmark를 detection 하는 것
3D face mesh 를 출력하는 branch 등 다양한 task 의 branch 를 사용해서 다양한 task를 한번에 풀기 (multi task 학습법)
multi task 방법으로 model을 만들면 학습시 장점이 있다.
각 task는 조금씩 다르지만, 모두 공통적으로 얼굴에 대한 task 이다.
조금씩 다른 task 를 통해 오는 공통된 정보에서 backbone network가 훨씬 강하게 학습되는 효과가 있다.
한번에 업데이트 될 때 모든 성능을 고려해서 잘 맞는 애가 학습이 되어야 한다.
데이터를 더 많이 본 것과 같은 효과도 있어서, 적은 데이터로도 비교적 좀더 강인한 학습 효과가 있다.
$\rightarrow$ 사용한 데이터 대비 성능 향상 폭이 큰 경우가 존재
Extension
backbone network 위에 관심있는 target task 에 해당하는 head 만 만들어주면 다양한 응용에 적용이 가능하다.
computervision에서의 큰 디자인 패턴의 흐름중 하나
Detecting objects as keypoints
CornerNet
bbox가 왼쪽 위의 점, 오른쪽 아래의 점 두개의 corner point만 있으면 bbox 하나가 결정이 된다.
unique하게 bbox를 결정할 수 있는 점을 활용하는 network.
backbone에서 나온 feature map에 4가지 head
한개는 heat map 표현을 통한 두점 검출
그 후, embedding이라 하는 각 포인트가 갖는 정보를 표현하는 head를 하나 더 둔다.
학습시 두 코너에서 나온 embedding 포인트를 같은 오브젝트에서 나왔으면 같아야 한다는 조건을 걸어 학습
영상을 주면 corner point만 잔뜩 출력을 하고, embedding matching을 통해서 bbox 추출을 가능하게 만든다.
corner 들의 pair 찾아서 bbox 추출
Single stage 구조에 가깝고, 성능보다는 속도 강조
CenterNet
성능의 중요한 요건으로 centerpoint 를 강조하면서 box 정의 구성요소로 corner에 center 추가
센터 포인트에서 코너 두개를 추가적으로 검출하면 그 자체가 bbox에 대해서 표현이 redundant하다.
왼쪽 위하고 오른쪽 아래만 가지고 있어도 잘 표현되는데, 가운데 점을 하나 더 추가한 것이기 때문에.
bbox 특정하기에 적합한 최소의 정보는 centerpoint, width, height
이에 따라 3가지를 추출하도록 디자인한 방법
이것만으로도 detection 가능함을 보여주는 방법론
속도도 제일 빠르고, 성능에도 유의미한 성장이 있었다.
'AI > CV' 카테고리의 다른 글
Multi modal learning (0) | 2022.03.17 |
---|---|
Conditional generative model (0) | 2022.03.16 |
Object Detection 개괄 from selective search to SSD (0) | 2022.03.13 |
FC layer 를 1X1 Convolution 으로 바꾸기 (0) | 2022.03.12 |
AutoGrad (0) | 2022.03.11 |