일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ViT
- Python
- transformer
- cnn
- 딥러닝
- 파이썬
- 머신러닝
- 코딩테스트
- Computer Vision
- optimizer
- Self-supervised
- Semantic Segmentation
- pytorch
- 인공지능
- 논문구현
- Segmentation
- 파이토치
- Convolution
- 프로그래머스
- 논문 리뷰
- 논문리뷰
- 코드구현
- object detection
- 옵티마이저
- opencv
- 알고리즘
- Paper Review
- programmers
- Ai
- 논문
- Today
- Total
Attention please
[논문 리뷰] A Method for Detection of Small Moving Objects in UAV Videos(2021) 본문
[논문 리뷰] A Method for Detection of Small Moving Objects in UAV Videos(2021)
Seongmin.C 2023. 7. 14. 16:00이번에 리뷰할 논문은 A Method for Detection of Small Moving Objects in UAV Videos 입니다.
https://paperswithcode.com/paper/a-method-for-detection-of-small-moving
Object detection의 경우 많은 발전들이 있었습니다. R-CNN, YOLO와 같은 CNN 기반 object detection 모델들이 많이 제안되었었죠. 하지만 작은 size의 경우 명확한 형태나 질감적인 디테일이 부족하여 현대의 CNN기반 Object detection 으로는 활용에 제한이 있었습니다.
본 논문에서 사용한 데이터셋은 꿀벌 데이터셋입니다. UAV(드론과 같은 비행물체)를 사용하여 영상을 녹화하고 날아다니는 꿀벌을 detection 해야합니다. 하지만 여기에는 여러 문제들이 존재했습니다.
먼저 비행물체가 땅에 너무 접근해서는 안됩니다. 너무 낮게 비행을 하게 되면 꿀벌에게 방해 요소가 될 수 있으며, 바람으로 인해 잔디나 풀 등이 흔들려 detection 하는데 방해가 될 수 있기 때문이죠. 즉, 비행 고도를 높이 잡아야하며, 필연적으로 감지해야하는 꿀벌의 크기는 그만큼 작아지게 됩니다.
또한 꿀벌은 계속 움직이기 때문에 형태가 변하며 속도 또한 1~2 frame 정도만 나타날 정도로 아주 빠르다는 문제가 있었습니다. 추가로 이런 꿀벌을 UAV로 녹화하며, 자연적으로 부는 바람에 흔들리는 잔디때문에 꿀벌의 움직임이 아닌 다른 움직임들이 존재한다는 문제도 존재했습니다.
위 figure의 (a) 와 (b) 는 같은 배경에 꿀벌이 존재하는 frame과 존재하지 않는 frame을 비교해서 보여줍니다. 자세히 보면 꿀벌의 존재 여부로 특정 위치에서 미세한 변화가 있음을 확인할 수 있죠. 이는 사람의 육안으로 봐도 알아차리기 힘들정도로 미세한 변화이기에 상당히 어려운 과제임을 알 수 있습니다.
본 논문에서는 꿀벌과 같이 작고 움직이는 객체의 appearance와 motion을 융합한 정보를 기반으로 detection을 진행합니다.
움직이는 object를 detection하는 알고리즘은 많이 존재하지만 배경의 움직임 때문에 이런 알고리즘을 직접 인용하는 것은 제한적입니다. 이에 대해 본 논문에서는 연속된 frame group에 대해 학습된 CNN 모델을 사용하자고 제안합니다.
또한 위와 같은 훈련에는 labeling 된 많은 video data가 필요합니다. 하지만 이를 수동으로 작업하기에는 한계가 있습니다. 다른 task의 경우 해당 task에 맞는 대량의 데이터셋이 제공되지만 작은 object를 detection하는 task에는 데이터셋이 존재하지도 않습니다. 이에 대해 본 논문은 실제 배경에 인공적으로 생성한 작고 움직이는 객체들을 포함하는 비디오로 train data를 생성하였다고 합니다.
Materials
작고 움직이는 객체에 대한 데이터셋은 아주 부족합니다. 본 논문에서는 이런 데이터셋의 부족을 해결하기 위해 실제 배경에 인공적으로 작고 움직이는 객체를 추가하여 데이터를 생성합니다.
물론 어느정도의 데이터셋은 수집해야합니다. 하지만 여기에서도 여러 신경써야하는 요소들이 존재합니다. 꿀벌은 size가 작은 object이기 때문에 낮은 고도로 비행을 하며 영상을 녹화하면 꿀벌의 외형 정보를 얻기에 적합할 순 있지만 이는 꿀벌의 비행을 방해하며 비행의 바람으로 인해 잔디나 풀 등의 움직임을 초래하죠. 또한 낮은 고도로 비행하게 되면 작은 부분의 표면 영역만 cover하게 되어 다양한 시야에서 꿀벌의 움직임을 감지하게에 힘들어집니다.
위 figure는 비행 고도로 생기는 문제들을 고려하여 찍은 실제 배경의 3가지 예시입니다. 이제 이런 background sequence에 인공 꿀벌을 추가하여 데이터를 생성하면 되죠.
먼저 꿀벌의 형태를 만들어야합니다. x축을 [2, 4.5] , y축을 [1, 3.5] 구간으로 하여 임의로 선택한 표준편차를 가진 2D gaussian kernel을 사용하여 모델링한 타원형 덩어리로 꿀벌을 표현합니다. 이를 통해 다양한 형태의 꿀벌 object를 생성할 수 있죠.
또한 꿀벌의 개수, size, 초기 위치, 초기 비행방향, 초기 속도는 위의 table에서 제공되는 최소값과 최대값을 가진 균등 분포에서 랜덤하게 sampling하여 선택한다고 합니다.
추가로 날아다니는 꿀벌의 질감은 매끄럽지 않습니다. 움직임과 빛의 굴절, 날개와 같은 형태 등으로 복잡한 질감을 띄게 되죠. 이런 점들을 반영하기 위해 gaussian noise를 사용하여 modeling 합니다.
또한 연속적인 frame으로 이루어진 데이터이기에 속도와 방향은 계속 변화합니다. 이는 생성해야하는 현재의 frame을 기준으로 이전의 frame을 사용하여 계산됩니다. 위 식을 보면 속도와 비행 방향이 전 frame의 값들에 각각 $ \bigtriangleup _{v} $ 와 $ \bigtriangleup _{\theta} $ 를 더해 계산됩니다.
$ \bigtriangleup _{v} $ 와 $ \bigtriangleup _{\theta} $ 값은 평균이 0이며, 표준편차는 2 ~ 30 인 정규분포에서 sampling 하여 정한다고 합니다.
또한 꿀벌과 배경을 혼합하기 위해 alpha channel을 사용합니다. 이로 인해 텍스처 평균 값이 낮아 꿀벌의 픽셀 값이 낮은 꿀벌은 더 투명하게 보이며, 텍스처 평균 값이 높아 꿀벌의 픽셀 값이 높은 꿀벌은 더 불투명하게 보이게 됩니다.
또한 인공적으로 꿀벌을 생성하기 때문에 ground truth를 생성하기 위해 수동으로 labeling할 필요가 없습니다. 저자는 ground truth frame을 black background를 가진 grayscale frame에 훈련 데이터에 추가된 인공 꿀벌의 같은 위치에 추가하여 생성합니다.
Method for Detection of Small Moving Objects
작고 움직이는 object를 detection하기 위해 저자는 객체의 appearance와 motion을 융합한 정보를 기반으로 detection을 진행한다고 하였습니다.
위 figure는 날아다니는 꿀벌을 detection하기 위해 진행한 방식을 보여줍니다. 크게 4가지 기법이 순서대로 적용됩니다.
- 비디오 안정화
- 배경 추정 및 차감
- frame segmentation
- CNN의 output 임계값 처리
각 기법들을 차례대로 살펴보도록 하죠.
Video stabilization
기본적으로 본 논문에서 사용하는 꿀벌 데이터인 영상은 UAV 로 녹화하기 때문에 흔들림이 존재합니다. 하지만 object의 움직임을 감지해야하는 상황에서 영상의 흔들림은 방해요소가 되기 때문에 우선 영상의 흔들림을 완화하는 작업이 필요하죠.
위 글은 비디오 안정화를 위해 진행한 과정들을 설명합니다. 간략하게 설명하면 다음과 같습니다.
- ORB(Oriented FAST and Rotated BRIEF) 검출기와 기술자를 사용하여 각 프레임에서 키포인트를 감지하고 그 특징을 설명합니다. ORB는 효율적이며, 회전과 크기 변화에 강인한 특징을 제공하는 알고리즘입니다.
- 키포인트 사이의 일치 항목을 찾습니다. 이 작업은 각 프레임에서 계산된 특징 기술자를 비교하여 수행됩니다. 일치하는 특징들은 두 프레임 사이의 변환을 추정하는데 사용됩니다.
- RANSAC(Random Sample Consensus) 알고리즘을 사용하여 아핀 변환을 견고하게 추정합니다. RANSAC는 특징 일치성의 오류(아웃라이어)를 처리하는데 효과적인 방법입니다.
- 이렇게 추정된 아핀 변환을 사용하여 모든 프레임을 공통 참조 프레임으로 왜곡합니다. 이것은 각 프레임을 첫 번째 프레임과 일치하도록 이동 및 회전하는 것을 의미합니다.
이를 통해 카메라가 흔들려 발생하는 비디오 내의 움직임이 제거되며, sequence 전반에 걸쳐 비슷한 위치에 나타나는 object가 일관성을 유지하도록 할 수 있습니다.
Background estimation & subtraction
탐재해야하는 객체의 크기가 아주 작고 움직이기 때문에 먼저 객체와 배경을 분리해주는 작업을 진행합니다.
우선 이전 frame의 temporal window에서 각각의 pixel 값의 평균과 표준편차를 추정합니다. 이렇게 구한 각 픽셀의 평균과 표준편차를 사용하여 gaussian probability distribution 을 적합할 수 있습니다.
배경의 픽셀값을 일정하지만 움직이는 객체가 나타나게 되면 해당 위치의 픽셀값들은 변하게 됩니다. 즉, temporal window에서의 pixel 별 평균은 배경 추정으로 간주될 수 있음을 의미하죠. 결국 object들은 window안의 frame들을 평균화함으로써 필터링되게 됩니다.
- N : temporal window의 frame 개수
- x,y : 픽셀 좌표
- t : 시간
위 식은 현재의 frame을 기준으로 temporal window의 평균치를 구하는 식입니다. 현재 시간(t) 에서 시작하여 이전 frame에 대해 (x, y) 위치의 pixel 값들을 모두 더한 후 N으로 나누어 평균값을 구합니다. 이를 통해 배경을 추정할 수 있습니다.
위 식은 표준편차를 구하는 식입니다. 현재 프레임(t)과 그 이전의 N개의 프레임에서 동일한 픽셀 위치의 값들이 평균값 $ \mu(x, y, t) $로부터 얼마나 흩어져 있는지 측정합니다. 이는 각 픽셀 위치에서 시간에 따른 밝기 변화의 변동성을 추정하는데 사용합니다.
- $ I(x, y, t) $ : 특정 시간 t 에서 픽셀 위치 (x, y) 의 원래 픽셀값
- $ \mu(x, y, t) $ : 특정 시간 t에서 픽셀 위치 (x, y) 의 배경 평균 값
- $ \sigma(x, y, t) $ : 특정 시간 t에서 픽셀 위치 (x, y) 의 배경 픽셀 값의 표준편차 값
위 식은 해당 픽셀의 원래 값에서 배경의 평균값을 빼고 배경의 표준편차로 나누는 과정을 진행합니다. 이렇게 구한 $ I_{bgsub} $값이 크다면 원래 픽셀값이 배경에서 크게 벗어난 것으로 간주할 수 있게 됩니다.
위 사진을 보면 object의 위치의 픽셀값이 배경에 비해 큰 값을 가지는 것을 확인할 수 있죠.
물론 이렇게 정규화를 하였다고 해도 바람으로 움직이는 잔디나 풀 등을 포함할 수 있습니다. 위 사진만 봐도 object외에 노이즈가 존재하는 것을 확인할 수 있습니다. 이는 단순히 임계값 처리만으로는 너무 많은 False positive detection을 야기하게 됩니다.
이런 단점을 보완하기 위해 전처리된 프레임을 CNN기반 모델에 입력하여 움직이는 object를 segment하는 작업을 거치게 됩니다.
Frame segmentation CNN
이 과정에서 frame segmentation CNN 모델은 시간적 맥락을 이해할 수 있도록 5개의 연속된 프레임으로 이루어진 sequence data를 input으로 받아 가운데에 있는 frame을 segmentation하도록 수행됩니다.
모델의 구조는 위 figure와 같습니다.
모델은 Encoder와 Decoder로 이루어져있으며, encoder에서는 input data의 representation을 학습하고, decoder에서는 학습한 representation을 바탕으로 segmentation map을 얻을 수 있도록 up-sampling 작업을 진행합니다.
Encoder의 경우 3개의 convolution layer block을 포함하는데 각 block은 3x3 kernel convolution, batch normalization, ReLU activation 연산을 수행합니다. 또한 각 block뒤에는 max pooling 연산을 수행합니다. 또한 encoder의 가장 마지막 층에서는 1x1 convolution 연산을 수행합니다.
또한 object의 크기가 아주 작기 때문에 입력 frame에서 detail 한 information을 잘 활용해야합니다. 이를 위해 skip connection을 수행하죠.
자세한 모델의 각 layer의 hyperparameter 정보는 아래 table에서 제공됩니다.
Decoder까지 수행하여 나온 마지막 층의 결과인 segmentation map은 원래 image의 resolution보다 2배 정도 작지만 up-sampling이나 convolution을 사용하지 않고 단순히 bilinear interpolation을 사용하였습니다. 이는 모델의 복잡성을 줄이기 위함이며 저자는 이에 대해 성능적으로 떨어짐이 없다고 주장합니다.
위 figure를 보면 (a)의 경우 CNN segmentation을 진행하기 전이며 (b)의 경우 segmentation을 진행한 결과입니다. (a)는 바람으로 인해 생기는 배경의 움직임들이 여전히 노이즈로 남아있지만 (b)를 보면 노이즈들이 모두 제거되었으며 object만을 잘 분리하였음을 확인할 수 있습니다.
또한 train 시 사용한 Adam의 Hyperparameter 정보는 다음과 같습니다.
Experimental Results
먼저 segmentation CNN 의 output에서 어떤 threshold 값을 설정하는 것이 좋은지 평가하기 위해 Precision-Recall curve를 적용하였습니다.
오히려 임계값을 0.6 정도로 설정하면 꿀벌을 거의 detection하지 못한다고 하였습니다. 실험에 따라 본 논문에서는 0.1 로 설정하였다고 합니다.
위 Table 4와 5는 각각 꿀벌의 texture value값을 설정하여 recall, precision, F1-score 값을 구한 것이며, table 4는 background subtraction을 적용하지 않았으며, table 5는 background subtraction을 적용한 결과입니다.
또한 사용한 데이터셋은 실제가 아닌 합성한 synthetic video 입니다.
결과를 보면 꿀벌의 texture value값이 클 때는 background subtraction을 적용하는 것과 상관없이 좋은 결과가 나옵니다. 하지만 texture value값이 작을 대는 background subtraction을 적용한 결과가 훨씬 좋은 수치를 보여주는 것을 확인할 수 있습니다.
위 Table 6 과 7의 경우 4, 5와 달리 real-world에서 직접 수집한 데이터셋에 대한 결과입니다. Table 6의 경우 background subtraction을 사용하지 않은 결과이며, Table 7의 경우 background subtraction을 사용한 결과입니다.
결과를 보면 background subtraction을 사용했을 때의 성능이 더 좋은 것을 확인할 수 있죠.
여기서 생각해볼 수 있는 점이 한가지 존재합니다. 바로 합성 sequence에서도 낮은 texture value값을 갖는 꿀벌의 경우 background subtraction을 사용할 때 더 효과적이었습니다. 이는 낮은 texture value값을 갖는 꿀벌이 현실의 꿀벌을 잘 모델링한다는 것을 알 수 있습니다. 본 논문에서는 mean texture value값이 0.25 정도로 낮은 대비의 인공 꿀벌을 얻었을 때 가장 좋은 결과를 얻는다고 말합니다.
위 figure의 (a)를 보면 꿀벌의 대비정도가 낮은 것을 확인할 수 있습니다. 이는 먼 거리에서 촬영하는 것과 빠른 움직임으로 인해 생기는 blur 처리 때문에 이와 같이 나타나게 됩니다.
(b)은 False positive에 대한 예시이며, (c)는 False negative 에 대한 예시입니다. (b)의 경우 타원의 형태를 가지고 있었기에 모델이 꿀벌이라 잘못 예측하였다고 주장합니다. (c)의 경우 형태적으로 형태가 타원과 멀었기 때문에 꿀벌이라 예측하지 못하였다고 하죠.
이와 같이 CNN 기반 모델로 segmentation을 진행하였기 때문에 객체의 형태에 초점을 맞추어 학습을 진행합니다. 하지만 해당 데이터셋의 경우 객체의 움직임에 초점을 맞추어야 하죠. 본 논문에서는 이런 문제를 해결하고자 RNN 기반 모델을 사용하여 sequence 정보를 학습하는 것이 도움이 될 것이라 주장합니다.
'논문 리뷰 > Object detection' 카테고리의 다른 글
[논문 리뷰] YOLO: You Only Look Once:Unified, Real-Time Object Detection(2016) (0) | 2023.07.17 |
---|---|
[논문 리뷰] SPP: Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition(2015) (0) | 2023.07.06 |
[논문 리뷰] YOLO v1(2016) 리뷰 (0) | 2023.01.10 |
[논문 리뷰] R-CNN(2014) (0) | 2022.12.30 |