블루아카이브

차량검출에서 다중객체추적하는 법

두원공대88학번뚜뚜 2022. 2. 3. 01:50

딥러닝 기반 다중객체 추정/후처리

 

일반적 차량 검출 알고리즘: 에이다부스트

다중객체추적: 옵티컬 플로우, 칼만 필터, 템플릿 매칭

* CCTV통해 입력된 영상에서 에이다부스트로 차량 검출 후, 이를 템플릿 매칭으로 다중객체를 추적

* 에이다부스트: haartraining으로 분류기 훈련 가능.

 

j: 특징 집합 번호 / f_j: 검출된 특징값/ Theta;_j: 임계값 / p_j: 부호결정 parity

템플릿 매칭: 객체간 유사도 판단. 개중 SAD(Sum of Absolute Differences).

M*N 픽셀의 템플릿 T(현 프레임)과 I(이전 프레임) 이용, 두 템플릿의 유사성 계산

두 이미지의 각 픽셀의 차를 죄다 게산해서 합한 것.

템플릿매칭 적용 위해, 검출된 차량의 이미지를 16*16픽셀로 정규화.

만일 해당 SAD가 특정 임계치 이하일 경우, 같은 차량으로 판단하고 추적. 이 경우, 임계치는 실험 통해 결정됨.

 

이 때, Haar-like는 특징점 추출 방법 중 하나.

사람얼굴에서 haar-like feature의 경우, 얼굴 위 흑백 사각형 겹치고, 다음 밝은 영역에 속한 픽셀값의 평균에서 어두운 영역의 픽셀값의 평균차를 구해, 임계점을 넘으면 haar-like feature이 나오는것.

 

이 사각형의 픽셀 합의 차는 적분으로 구하면 됨.

sum = c+a-b-c

잡음에 둔감한데, 이는 adaboost로 보완한다 한다.

 

https://www.koreascience.or.kr/article/CFKO201114258943240.pdf

 

https://scienceon.kisti.re.kr/commons/util/originalView.do?cn=JAKO201212049741692&oCn=JAKO201212049741692&dbt=JAKO&journal=NJOU00303927

 

원문보기 - ScienceON

 

scienceon.kisti.re.kr

객체 인식을 위한 특징 추출은 특징점(feature points) 추출과 기술자(descriptor) 구성의 두 단계로 구성된다.

특징점 추출의 대표적인 방법으로 Harris 모서리 검출기, Hessian 검출기, Harris-Laplacian 검출], Gaussian 차분 검출기, 고속 Hessian 검출기가 있다.

 

영상정보 이용해 표현자 구성하는 건 SIFT, SURF가 있다.

위의 논문은 SURF 중심으로, 4*4의 세부영역을 구성하고, 각 세부영역에 대해 Haar 웨이블릿을 적용해 dx, dy, |dx|, |dy|의 4개 특징을 구성해 64차원의 표현자벡터를 구성한다고 한다.

 

이러한 객체의 추적은, 색상 기반 추적방법인 Mean-shift 알고리즘을 통해 객체의 색상 분포를 히스토그램으로 나타내고 반복적으로 적용해, 다음 프레임에서 확률분포상 객체와 가장 유사한 후보 영역을 찾아낸다.

여기에 칼만 필터를 통해, 특정 객체의 상태를 예측하며, 일반적으로 객체위치 추적 분야에서 추적하는 관심 객체의 위치를그상태로 설정하여 다음 프레임에서의 위치를 예측하고, 그 위치를 다시 측정하여 결과를 보정해 나간다.

 

SURF 기법을 사용하여, 훈련 데이터 의 각 이미지 별로 특징 기술자를 생성하고 대표 특징을 검출한 다음,

앞에서 검출된 관심점들 중에서 해당 객체를 가장 잘 표현 할 수 있는 대표점을 선택한다.

하나의 관심점에 대해, SURF 기술자 유사도가 서로 비슷한 관심점의 개수가 충분히 많을 경우 해당 관심점은 대표점으로 간주된다.

 

객체 별로 대표점에 대한 검출이 끝나면, 추가 학습을 통하여 인식에 필요한 계수들을 자동으로 계산한다.

각 객체 타입에 속하는 다수의 훈련 이미지에 대해 정합 비율을 계산한 후 이들의 평균을 계산한다.

그리고 다른 객체의 훈련 이미지에 대해서도 마찬가지로 각 이미지들에 대한 정합 비율을 측정한 후,

이들의 평균값을 계산한다.

하나의 객체 대표점에 대해 훈련셋의 모든 이미지들과 비교하여 각각의평균 정합 비율을 계산하고 이를 기반으로 각 객체를인식하는 데 있어서 최적의 임계값을 결정한다. 

 

객체 인식 단계에서는 전처리 과정에서 얻어진대표 특징들을 이용하여 질의 영상이 어떠한 객체를 포함하고 있는 지를 결정한다.

먼저 질의 영상의 현재 프레임에 대해 관심점 및 범위 검출을 수행한다.

검출된 관심점에 대해 전처리 과정에서 구축된 대표특징들과 비교하여 얼마나 일치하는지를 계산한다.

현재 프레임의 관심점들에 대해, 어떤 객체의 대표특징들이 일정 비율 이상 존재한다고 판별되면 최종적으로 현재 프레임은 해당 객체를 포함한다고 간주한다.

기존의 방법과 비교하면, 하나의 질의 영상에서 다수의 객체를 동시에 검출해 낼 수 있다는 장점이 있다.

 

객체 인식은 영상이 최초로 입력되었을 때나, 추적해야 할 객체가 인식되지 않았을 때 반복적으로 수행되게 된다.

이 과정에서는 SURF 특징 기술자의 정합을 응용하여 움직임 벡터를 생성하고 전체 움직임 벡터와 다른 움직임을 보이 는 벡터들을 검출하여, 어떠한 객체가 이동하고 있음을 감지한다.

이렇게 감지된 객체를 포함하는 영역을 생성하여, 객체 추적 전체 프레임 영역이 아닌 해당 영역 내부만을 고려하는 방법으로 성능을 향상 시킨다.

SURF 특징 기술자의 정합을 응용하여 움직임 벡터 를 생성하고 전체 움직임 벡터와 다른 움직임을 보이 는 벡터들을 검출하여, 어떠한 객체가 이동하고 있음을 감지한다

 

위에선, 전체적인 시점이 좌측 상단으로 이동하고 있는 영상에서 연속된 두 프레임에 대해 움직임벡터를 이용하여 이동하는 객체를 검출한 결과이다.

먼저, 현재 프레임(좌상)과 바로 이전 프레임(우상)에대해 각각 SURF 특징 기술자를 추출하고 정합한다.

그 후에 정합된 기술자들 간에 이동한 경로를 벡터로 표현한 것이 하얀색 화살표들이다(좌하).

 

이 경우화살표들이 대부분 좌측 하단으로 향하고 있는 것을 확인할 수 있다.

방향 및 크기를 기준으로 히스토그램을 생성하면 변량이 다른 것에 비해 매우 큰 경우가있는 것을 확인할 수 있다.

이것은 영상의 시점이 한 곳으로 이동함으로 인해 대부분의 특징점들이 동일한 방향과 크기로 움직이기 때문이다. 

이렇게 큰 변량을 가지고있는 벡터를 대표 움직임 벡터라고 정의할 때, 현재프레임(중)에서 흰색 화살표 벡터들에서 조금 전에구한 대표 움직임 벡터를 빼서 남는 부분을 표시하면 다음의 프레임(하)과 같다.

 

이 나머지 벡터들은 전체움직임 벡터와 다른 움직임을 보인 SURF 기술자들을 의미한다. 즉, 배경과 다른 움직임을 가지는 것으로 관심있는 객체일 가능성이 크다는 것을 알 수있다. 그래서 이러한 기술자들과 전처리 과정에서 생성한 대표 특징 기술자와의 비교를 통해 객체의 존재여부를 판단한다. 이러한 과정을 거쳐 관심 객체가인식 된다면, 해당 영역을 관심 영역으로 설정하고해당 프레임에 대한 처리를 마친다.

 

객체 추적 단계에서는 객체 인식 단계에서 생성된관심 영역을 기반으로 객체 추적을 수행한다.

입력된 영상의 현재 프레임에 대해 관심 영역을 사용하여 마스킹 함으로써 관심 영역을 제외한 영역을 배제한다.

그리고 해당 영역에 대한 객체 인식을 진행하여 객체의 실제 존재여부를 판단한다.

만약 객체가 존재한다고 판단되면 다음 프레임에서의 객체 추적을 위해현재 관심 영역을 갱신해 주어야 한다.

 

YOLO기반 광원객체 탐지

딥러닝 통한 객체탐지 : 1-stage Detector, 2-stage Detector

개중 yolo: 1-stage detector로 동일한 크기의 그리드로 나누고, 하나의 이미지에서 여러 물체의 경계박스 찾는 알고리즘(내 다른 글 참조)

 

R-CNN은 2-stage detector로, classification과 localization이 순차적으로 일어남. 선택적 검색에서 추출한 이미지가 CNN모델의 입력값이 되기에, 과도 연산량으로 수행시간이 긴 단점이 존재. 이는 fast R-CNN, faster R-CNN 등으로 보완.

 

신호등은 보통 가로등, 전광 판, 표시판 등에 의해서 부분적으로 가려지는 현상이 발생. 가려진 데이터 셋에서 객체를 찾는 학습을 하기 위해서 Cropping방식을 사용 혹은 전체 이미지에서 일부분을 의도적으로 가려 물체의 전체 구조를 보존하는 Random Erasing 방식을 사용. Yolo의 CSPDarknet 53 모델은 파라미터의 수가 많음에도 불구하고 성능이 우수하며 작은 물체까지 탐지가 가능.

 

신호등의 색상은 전체 프레임에서 작은 부분을 차지하는 class 불균형 문제가 있다. 따라서 작은 프레임도 탐지가 가능하고, 많은 파라미터 수에도 성능을 높게 유지하는 CSPDarknet53 모델을 사용하여 신호등 탐지와 색상의 분류를 수행. 활성화 함수는 경사가 음수인 경우도 고려하기 때문에 loss를 줄이는 LeakyReLU를 사용. 

 

https://www.koreascience.or.kr/article/JAKO202024852036385.pdf

 

3D 영상인식 알고리즘

https://www.itfind.or.kr/WZIN/jugidong/1862/file9178202160744293404-186201.pdf

2장의 스테레오 영상으로부터 깊이를 추정하는 기술

샴 네트워크 구조.

샴 네트워크 구조 : 두 네트워크가 weight를 공유한다.

학습 방법: 

1) 두 개의 입력 데이터를 준비

2) 각 입력에 대한 임베딩값 (Embedding 1, Embedding2)를 얻는다.

3) 두 임베딩 사이의 거리를 L1 norm, L2 norm 등의 방법을 활용해 계산

4) 두 입력이 같은 클래스에 속하면 거리를 가깝게, 다른 클래스에 속하면 거리를 멀게 Siamese neural network를 학습시킴.

 

두 영상으로부터 깊이를 end-to-end 형태 네트워크 구조를 통해 알아내는 것 가능하다 한다.

샴쌍둥이 코랩 코드

https://metar.tistory.com/entry/%EC%BD%94%EB%9E%A9%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%83%B4-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%ED%98%84

 

코랩을 이용한 샴 네트워크 구현

출석관리팀 발표자: 김정민 실습은 코드도 길고 첨부할 이미지도 많아서 따로 게시물을 작성하였습니다. 코드는 깃허브에서 가져왔고 중간 중간에 조금씩 수정은 하였습니다. 코랩을 이용하였

metar.tistory.com

 

ReflectionPad2d 함수

대상 객체에 대해 3차원 정보 복원 기술 & 한장 이상의 2차원 영상 통해 3차원 포인트클라우드 획득

 

카메라영상 통한 사람의 행동, 동작에 대한 인식 위해 2차원 영상으로부터 사람에 대한 3차원자세 추정

 

앞서 설명한 3차원 정보를 객체 종류에 따라 분류

3D 데이터는 측정된 물체의 공간적인 정보 담은 3차원 점군의 집합 or 이 점군의 연결정보를 더해 물체 표면을 정의하는 폴리건 메시 형태 or 공간을 분할해 물체가 점유되고 있는 3차원 영역을 정의하는 복셀 형태로 표현하게 됨.

이러한 3D 표현법에 기반해 물체를 분류하는 경우, CNN이 주로 쓰이게 되는데...

 

shapeNet : 정형화되지 않은 입력 3D데이터를 정형화된 복셀 공간으로 변환 후, convolution 필터를 선형적으로 한 차원씩 증가시키기

MV-CNN: 3D물체를 복수 개의 2D평면으로 투영된 시점 영상으로 표현해, 기존 개발된 2D convolution 필터 활용

 

2D영상에 특화된 선형필터로 3D데이터를 다루는 법: 위의 두 알고리즘은, '정형공간(복셀공간, 혹은 시점영상)'으로 변환하는 전처리를 수행한다. 이는 정보손실이 발생하는 단점이 존재.

 

단순 점군 집합의 각 지점 또는 계층적 표면 영역에 직접적으로 필터링 수행 후, 이를 합쳐나가는 방식으로 3D 데이터의 추상화도 가능. '포인트넷'이 그 예로, 모델을 정의하는 점군 집합 표현법 그대로를 학습에 사용.

SPLATNet : 점군 간 연결성 고려한 학습법으로, pointNet에서 분할연산된 결과를 합치는 단순 max-pooling layer를 중요도를 고려해 적응적으로 합치는 Bilateral convolutional layer(BCL)을 학습하는 것으로 개선