728x90

생태계를 모니터링에서의 물체 탐지

 오늘은 시간적 맥락을 이용한 물체 탐지(Leveraging Temporal Context for Object Detection)에 대한 내용입니다. 생명체들의 다양성이나 변화 등을 관찰하는 연구들에서는 생태계를 모니터링하는 것이 도움 됩니다. 이를 위해서는 질 좋은 데이터들이 확보돼야 하는데, 데이터 수집을 위한 센서 구성을 하는 데 드는 비용은 적어졌지만 아직도 정확하고 폭넓게 데이터를 분석하는 데에는 한계가 있습니다. 특히 사진이나 비디오를 데이터를 기반으로 할 때, 실제 모니터링할 때에는 리소스 제약으로 질이 낮은 사진이나 비디오 데이터를 얻는 경우가 많습니다.

 

생태계를 모니터링에서의 컴퓨터 비전 모델에 필요한 요구사항

 컴퓨터 비전 모델은 사진의 초점이 맞지 않거나 조명이 낮은 경우 등의 다양한 실생활에 생길 수 있는 비전 관련 이슈에 잘 대응되어야 합니다. 또한, 고정되어 있는 카메라는 같은 장면을 지속적으로 찍기 때문에, 반복되게 같거나 비슷한 장면이 찍히는 경우가 생깁니다. 이는 충분한 데이터 변동을 주지 않아 ML 모델은 (중심을 두어야 하는 물체보다) 오히려 배경 상관관계에 더 집중하여 학습하므로 모델을 일반화하는 방안이 필요합니다. 생태계 분석을 위해 다양한 비디오 데이터를 모으고 있지만, 데이터를 수집하고 클래스를 분류하는 작업은 아직까지 느리고 지역적 특성이나 분류 그룹에 따라 다양하고 대표적인 데이터가 필요합니다.

 

일반화를 개선한 Context R-CNN 제안

 문제들의 해결을 위해, 알고리즘적으로 새로운 카메라 배치들에 대해 일반화를 개선하여 국제적 확장성을 높이는 보완적인 방법인 Context R-CNN 제안했습니다. 이는 네트워크 안에 있는 각 카메라 배치의 시간에 따른 맥락적 단서를 이용하여 새로운 배치들이 카메라들의 대규모의 학습 데이터없이 물체를 잘 인지하게 도움을 줍니다.

 이슈가 있는 이미지들이 생기면, Context R-CNN은 동일한 카메라의 최대 한 달 동안의 이미지들을 이용하여 이슈 있는 이미지의 물체를 파악하고 식별합니다. Context R-CNN은 고정된 카메라에서 촬영된 이미지들 내에서 높은 상관관계를 기반으로 이슈 있는 데이터의 성능을 향상시키고, 사람의 개입 없이 새로운 데이터 배치들을 일반화하는 데도 도움이 됩니다. 방법은, 1. 고정된 Feature 추출기를 이용하여 긴 시간 범위를 가지는 이미지들에서 맥락적인 기억 저장소(Memory bank) 구축하고, 2. 기억 저장소에서 집계된 연관 있는 맥락을 이용하여 이슈 있는 환경의 이미지에서 물체를 감지할 수 있게 도와주는 Context-RNN을 이용하여 물체를 감지합니다. 드물거나 불규칙적인 샘플링 속도에 대응하기 위해 기억 저장소에서 집계 시 attention을 이용합니다.

 

 Context R-NN 구체적으로 기존의 Faster R-CNN의 두 단계를 기반으로 구성됩니다.
1. Faster R-CNN의 첫 번째 단계로 가능성 있는 물체들을 제안합니다.
2. similarity-based attention : 기억 저장소(M)에 있는 feature들이 현재의 제안된 물체와 얼마나 연관성이 있는지 결정합니다. M에서 나온 관련성 가중치 합을 구하여 객체별 맥락 feature를 구성하고 원래 물체의 feature에 이 값을 더합니다.
3. Fater R-CNN의 두 번째 단계 : 맥락적 정보가 더해진 것을 기반으로 각 물체에 대해 분류합니다.

 

일반화와 정확도 개선 및 이해가 필요한 점

 기존의 Faster R-CNN baseline에 다른 지역의 야생의 상황에서도 잘 작동함. 맥락적 시간축이 길어질수록 성능이 더 좋아집니다. 단순히 고정된 비전 쪽 센서뿐만 아니라 다양한 센서에도 적용이 가능할 것으로 기대됩니다.
 문제 제기한 부분이랑 해결 방법이 약간 매칭이 잘 안돼서 이해하기 힘들었는데, 여기서 제시한 Attention이나 Memory bank, Faster R-NN에 대한 기본 지식이 있어야 어느 정도 이해가 될 것 같습니다. 지금 포스팅된 실험 데이터는 기존 비전의 알고리즘을 좀 더 좋게 한 것으로밖에 안 느껴져서, 처음에 안개 끼거나 외부 상황으로 인해 물체 구분이 기존에는 안되는 부분이 잘 되었다는 예시가 좀 더 설명되었으면 하는 아쉬움이 느껴집니다. 주기적으로 일어나지 않는다던가 갑자기 예외적으로 일어나는 상황에 대해서는 대응하기 쉽지 않다는 생각이 듭니다. 새로운 배치들에 대해서도 작동할 수 있다는 게 Memory bank 때문인 거 같은데, 실제로 어떻게 작동했는지 좀 더 알아볼 필요가 있습니다. 기대효과에서 말했듯이 다른 센서들에 적용해도 접근법 자체는 작동할 수 있을 것 같은데, 한 번 실험해 보고 싶습니다.

728x90
728x90

연구는 반복되는 행위를 이해의 중요성

오늘은 비디오에서 반복 행위 계산(RepNet: Counting Repetitions in Videos)에 대한 내용입니다. 이 포스팅에는 반복 행위에 대한 예시들이 잘 나타나 있어 같이 보는 것을 추천합니다. 주기적으로 반복되는 행위는(ex. 일출, 일몰, 제조 라인 등) 실생활에서 많이 일어납니다. 여러 연구 분야와 관련하여 반복되는 행위는 뭔가의 근본적인 이유일 수도 있고, 연구 이해에 도움을 줄 수 있는 점진적인 변화의 일종일 수도 있습니다. 반복 행위는 의미 있는 행위들로 구성된 "행위 단위(action units)"로서 잘라질 수 있는데, 이는 복잡한 활동에 대해 설명하거나 사람의 개입 없이 미세한 시간 단위로 액션들을 분석하는 데 도움을 줄 수 있습니다. 따라서, 오랜 시간 관찰하며 세상에 대해 이해하려는 연구는 반복되는 행위를 이해하는 시스템의 도움을 받을 수 있습니다.

 

노이즈에 방해받지 않고 feature들을 학습의 필요성

 이전 연구는 같은 행위를 가지는 여러 비디오를 기반 주기-일관성(cycle-consistency) 제약 조건을 이용하여 반복행위를 이해하였습니다. 이에, 이전 연구는 비디오 간의 프레임 내의 픽셀을 직접 비교하였는데 이는 실제 상황에서 생기는 노이즈(ex. 비디오 움직임 등으로 변하는 비디오의 색감, 형태 등)에 대해 적절하게 대응하기 힘듭니다. 따라서 이러한 노이즈에 방해받지 않고 feature들을 학습할 수 있어야 합니다.

 

노이즈 대응이 가능한 반복 행위를 이해하는 모델 제안

 RepNet이라는 하나의 비디오만을 가지고 다양한 분야의 반복 행위를 이해하는 모델을 만들고 모델을 End-to-End 형태로 만들어 노이즈에 대응 가능하도록 합니다. RepNet은 다양한 클래스의 주기적인 반복 행위가 있는 비디오를 입력받아서 발견한 반복 행위의 주기를 도출하는 모델로,  모델은 크게 세 가지로 구성됩니다.

① 프레임 인코더 (Frame Encoder) : 비디오나 이미지 데이터에 알맞은 ResNet 구조를 이용하여 각 비디오 프레임을 임베딩합니다.

② TSM(Temporal Self-similarity Matrix)를 이용한 중간 표현법(Intermediate Representation) : 생성된 각 임베딩 프레임은 다른 모든 프레임들과 비교하여 매트릭스(Matrix)를 만듭니다. 반복 기간 추정을 가능케하는 자가 유사성(self-similarities)가 나옵니다.

- Why 자가 유사성(Self-similarity)?

단순히 고정된 반복 행위 기간을 가지는 상황들 외에도 반복 행위의 기간이 짧아지거나 중간에 사라졌다가 다시 반복되는 행위 등의 현실에서 일어날 수 있는 상황들도 고려되어야 하기 때문입니다.

따라서, 사진 특성을 이용하는 것이 아니라 자가 유사성(Self-similarity)을 기반으로 매트릭스를 만들어서 비디오 프레임 간의 비슷한 정도를 정량적으로 측정하는 기법을 쓰면, 테스트 데이터에 새로운 상황이 들어오더라도 반복 행위 주기가 비슷한 것이 학습 데이터에 있었으면 모델이 작동하게 됩니다.

③ 기간 예측기(Period Predictor) : TSM을 기반으로 Transformer 구조를 이용하여 반복 행위 기간과 반복 행위인지 여부를 각 프레임 별로 판별합니다. 반복 행위의 기간이 구해지면 그 안의 프레임 수를 구할 수 있습니다. 그리고 얼마나 반복 행위가 비디오 내에서 많이 일어나는 지도 알아낼 수 있습니다.

 데이터를 모을 때는 비디오 자체에 반복 행위가 있는지 판별하고 얼마나 반복행위가 반복됐는 지 세는 것도 노력이 많이 듭니다. 따라서, 인공으로 반복 행위 포함 데이터를 생성하는 시스템을 만듭니다. 간단하게는 비디오 내에서 특정 비디오 프레임을 반복시켜서 만들 수 있습니다.

 

그러나 이런 단조로운 데이터 셋으로만 학습하기에는 현실에서는 잘 작동을 하지 않을 수도 있으므로 임의로 만든 반복 행위가 포함된 비디오에 비디오 모션이 추가된 것처럼 만들어 데이터의 다양성을 확보하였습니다.

 

Kinetics dataset 기반의 실험과 개인적인 생각

 실험 때는 Kinetics dataset를 기반으로 평가하였습니다. 다양한 애플리케이션에 쓰일 수 있음을 알 수 있었습니다. 야채 써는 것, 지구의 일주기, 치타의 뛰는 행위, 심장박동 등에서 쓰일 수 있을 것으로 기대합니다. 애플리케이션 결과로 알 수 있는 것은 반복되는 행위만 확실하다면 반복 행위의 기간이 변해도 잘 작동한다는 것을 알 수 있었습니다.

 이전 연구와의 성능 차이를 알 수 없어서 아쉬웠습니다. 그러나 Matrix를 쓰는 부분에서는 이전의 완전 비디오 기반으로 비교하는 것보다는 방법론적으로 더 유연하고 효율적일 것으로 예상합니다.

 비디오를 기반으로 했는데 앞 ①, ③만 잘 수정한다면 다른 도메인에서 충분히 쓰일 수 있지 않을까라는 생각이 들었습니다. 여전히 반복 행위가 들어있는지 여부에 대한 학습 데이터를 만드는 것은 숙제일 것으로 예상됩니다. 얼마나 정확히 예측하는지 알 수가 없어서 학습 데이터가 저걸로 충분했는지 의문이 들긴 합니다. 생각보다 주변에 반복되는 행위가 이렇게 만든다는 것이 놀라웠습니다. 일종의 루틴을 알아낸다는 것인데 어쩌면 굉장히 Long-term 데이터가 주어진다면 사용자 행위 파악에도 이 기법을 사용할 수 있지 않을까 생각됩니다.

728x90
728x90

발화 표현과 개인화 모델 개선이 필요함

 오늘은 Self-supervision을 이용한 발화 표현과 개인화 모델 개선(Improving Speech Representations and Personalized Models Using Self-Supervision)에 대한 내용입니다. 그동안 연구되어온 오디오에서 텍스트 변환 등의 발화 관련 태스크는 많은 데이터양을 기반으로 합니다. 이러한 "언어적" 태스크뿐만 아니라 화자 인식, 감정 인지 등의 사람의 발화 자체를 포커스 하는 비의 미적인(Non-Semantic) 다양한 태스크에도 발화 분석 기술들이 쓰일 수 있습니다. 비언어적인 태스크에도 많은 데이터가 있으면 딥러닝 기반의 기존 접근법들이 좋은 결과를 내겠지만 데이터 셋이 적은 경우에는 성능이 잘 안 나올 수 있습니다. 따라서, 큰 데이터 셋에서 표현 모델(representation model)을 학습한 후 적은 데이터 셋으로 표현을 전이하는 방법들이 쓰입니다.

표현법(Representations)의 성능 발전될 수 있는 방안이 있는데, 고차원의 데이터를 저차원으로 변환하여 작은 모델들로 학습시키고 미리 학습된 표현 모델을 Pre-training으로서 사용하는 것입니다. 학습된 표현 모델이 충분히 작다면 디바이스 안(on-device)에서도 학습과 추론이 되므로 사용자 프라이버시를 지키는 데 일조할 수도 있습니다. 

 이런 표현법 학습은 다른 분야(텍스트- BERT , ALBERT , 이미지- Inception layers , SimCLR))에서는 많이 쓰이고 있지만, 발화 분야에서는 아직 더디게 쓰입니다. 또한, 텍스트 쪽 분야나 이미지 분야와 달리 표준적인 비의미적 발화 임베딩에 대해 기준(Benchmark)이 없어서 연구에 어려움이 생깁니다.

 

 Self-supervision을 이용한 개선 방안

 문제를 해결하기 위해 다음과 같은 세 가지를 고려하여 방법 제안합니다.

① 다양한 데이터 셋과 태스크를 포함하여, 비의미적 발화(NOSS: NOn-Semantic Speech) 분야의 기준을 제시합니다.

② 다른 표현 학습법의 성능을 능가하면서 온 디바이스에서도 적용 가능한 작은 모델을 만들어서 오픈소스화합니다( TRIpLet Loss network (TRILL)).

③ 다른 표현 학습법들과 비교하는 대규모의 연구를 하고 새로운 표현 학습법에 대해 오픈소스화합니다.

 기준(Benchmark)을 제시되기 위해서는 선택된 태스크들이 비슷한 해결 방법으로 풀릴 수 있어야 합니다. 따라서 이 포스팅에서는 발화 태스크의 하위 개념인 비의미적 발화(NOSS)을 중심으로 기준 제시합니다. 태스크 기준이 되기 위해서는 다음 조건을 만족해야 합니다. 1) 다양한 사용 사례들이 포괄되어야 하고, 2) 문제일만큼 복잡해야 하고, 3) 오픈 소스화시킬 수 있게 가용성이 있어야 합니다. 이에 따라 여섯 가지 태스크(Speaker idenfication, Language identification, Emotion, etc.)를 가진 데이터 셋이 NOSS의 기준으로 제시됩니다. 그리고 개인화 시나리오를 위해 3가지 태스크도 추가합니다. 이 태스크를 통해 특정 발화자에게 잘 적응하고 개인화되는지, 온 디바이스에서 모델이 잘 작동하는지 등을 실험해 볼 수 있습니다.

 새로운 NOSS 분류 기법도 제시하였습니다(위에서 말한 TRILL). 기존의 발화에 대한 표현 방법들은 적고 덜 다양한 데이터로 학습이 되거나 발화 인식 태스크만을 위해서 모델이 만들어지는 경우가 대다수였습니다. 다양한 환경과 태스크에 대해 활용도 있는 표현 방법을 만들기 위해서 AudioSet이라는 크고 다양한 데이터셋을 이용했습니다.

 같은 오디오에 들어있는 임베딩들끼리는 임베딩 공간에서 가깝게 다른 오디오에 있는 것끼리는 멀리하는 간단하고 Self-supervised 방법을 통해서 임베딩 모델을 학습합니다. Self-supervised Loss함수는 레이블이 필요 없이 데이터 자체만으로 학습이 됩니다. NOSS가 시간에 따라 특성이 달라질 수 있기 때문에 이 방법이 잘 맞고 다양한 음성적 특성을 찾아낼 수 있습니다.

 TRILL은 MobileNet을 기반 구조로 모바일 기기들에서 충분히 활용 가능합니다. 임베딩 부분은 더 큰 RestNet50 모델(Pre-traning)을 기반으로 결과를 가져와서 사용되기 때문입니다.

 

 TRILL의 성능 비교 결과와 논의점

 TRILL을 도메인이 다르고 여러 데이터 셋으로 학습된 다른 딥러닝 기반 표현법들과 비교해 보았습니다. 또한, 발화 분야에서 음성의 특성을 분석하는 데 중요한 기준이 되는 딥러닝 기반이 아닌 OpenSMILE과도 성능 비교해 보았습니다. 모든 기법들은 다양한 태스크에 대해서 학습하고 각 태스크들에서 나온 정확도들을 모델들과 엮어서 Linear regression을 이용하여 분석해 본 결과 TRILL이 대체적으로 다른 표현법들에 비해 성능이 좋은 것을 알 수 있었습니다. 이는 다양한 학습 데이터 셋으로의 학습이나 음성의 특성에 대한 보편적인 특성 파악 등을 TRILL이 잘해서 나타나는 결과였습니다. 학습 데이터가 적은 새로운 데이터 셋에 대해서도 좋은 성능이 나오고 마스크 등을 쓴 상태에서의 발화에서도 좋은 성능이 나왔습니다. 결론적으로, 이 포스팅의 방법은 비의미적 발화와 관련하여 다양한 태스크에서 쓸 수 있고 개인화나 적은 데이터 셋 문제에 대한 어떤 초기 기준을 마련해 줌을 의미합니다.

 언어적인 연구를 볼 때마다 느끼는 이슈인데, 영어 기반일 때는 가능하지만 Pre-traning을 할 정도의 데이터 자체가 없는 다른 나라들의 발화도 같은 성능이 나올 수 있을까라는 생각이 듭니다. 또한, 문화적 특성이나 양식 때문에 NOSS는 더 많은 노이즈가 생길 수 있지 않을까? 이런 부분들은 사회문화적 연구와 같이 결합하여 연구를 해야 하지 않을까? 등등 많은 이슈들이 떠오릅니다. Syntax 적인 요소보다 Sematic 한 요소를 파악하는 것이 어렵다고 생각했는데, 이 포스팅의 경우에는 그것을 넘어서 Non-Semantic 한 상황적인 부분까지 파악하는 연구이니 당연히 더 어렵고 앞으로 나아가야 할 길이 많을 것 같아 흥미로웠습니다. 작은 모델이라는 것과 모바일에서 쓸 수 있다는 점이 강조되어 있으니, 이에 대한 설명이 더 있었으면 좋았을 것 같고 결과 분석 시 이해 못 한 부분들이 좀 있는데 다시 봐야 할 것으로 보입니다.

728x90
728x90

CNN을 이용한 이미지 태스크의 한계

오늘 공부할 내용은 신경망 구조 탐색을 통한 물체 감지를 위한 새로운 접근법(SpineNet: A Novel Architecture for Object Detection Discovered with Neural Architecture Search)에 대한 내용입니다. CNN을 이용한 이미지 태스크는 이미지 입력값을 이미지의 특성을 잘 포착하는 일련의 feature들로 인코딩합니다. 하위 레이어들은 낮은 공간적 차원을 가집니다. 이런 레이어가 더해가며 차원이 작아지는 모델은 인지와 로컬라이제이션(Localization)이 모두 중요한 다중 스케일의 시각적 인지 태스크에서 중요한 feature를 못 찾을 수 있습니다.

이미지 태스크에서 Classification(인지), Localization, Object detection, Segmentation 차이

 

 

backbone 구조 디자인을 두 가지 방면으로 개선한 SpineNet

 이를 해결하기 위해, 스케일이 작아지는 네트워크는 인코더로 쓰고(backbone) 공간적 정보를 복구하기 위해 디코더 네트워크가 backbone에 적용되는 기법들이 제안되었습니다.(FPN, DeepLabv3+). 하지만 동시에, 이 기법들은 공간적 정보를 버리는 스케일이 작아지는 backbone에 의존하고, 또 그것을 복구하기 위해 디코더가 쓰여야만 했습니다. 즉, 공간적 정보를 버리지 않는 backnbone 모델이 있으면 기법의 성능이 좋아질 수 있을 것이라 생각했습니다.

 SpineNet는 스케일-순열(scale-permuted)이라는 모델을 이용하여 backbone 구조 디자인을 두 가지 방면으로 개선했습니다. 1. 모델이 깊어져도 공간적 정보를 유지할 수 있도록 중간 feature 맵들의 공간적 resolution은 언제나 증가 또는 감소 가능하게 했습니다. 2. 다중 스케일의 feature 융합이 가능하도록 feature 스케일에 상관없이 feature 맵들은 연결되게 했습니다. 이다음에는 NAS(neural architecture search)과 이러한 feature들을 포함하는 새로운 공간 탐색 디자인을 기반으로 효과적인 스케일-순열(scale-permuted) 모델 탐색했습니다

 

SpineNet의 학습 내용

 SpineNet의 효율적인 구조적 디자인을 위해 NAS를 이용하여 최적의 구조를 찾았습니다. Backbone 모델은 COCO 데이터셋을 통해 인지와 로컬라이제이션이 필요한 물체 감지 태스크를 학습했습니다. 구조를 찾을 때 아래 세 가지를 학습했습니다.

1. 스케일 순열(Scale permutations) : 네트워크의 각 블록(blocks)은 이전 블록 순서의 블록에 영향을 미치기 때문에 네트워크 구성 블록들의 순서가 중요합니다. 따라서 블럭들을 재배열하여 스케일 순열의 검색 공간을 정의했습니다.

2. 스케일에 상관없이 연결(Cross-scale connections) :  각 블록에 대해 두 가지 연결 관계를 정의했습니다. 이전 순서의 블록들이나 Stem 네트워크의 블록들은 모두 부모 블록이 될 수 있습니다.

3. 블록 조절(block adjustments) - 옵션 : 블록들은 스케일이나 타입을 자유롭게 바꿀 수 있습니다.

 

 RestNet-50을 NAS 검색의 초기 backbone 모델로서 두고, 1과 2를 학습했습니다. feature 블록들의 순서만 바꿔서 후보 모델들을 만들기 때문에, 검색 공간의 모든 후보 모델은 RestNet-50과 비슷한 계산 리소스가 들었습니다.

 

효율성과 정확도에 대한 결과 이해 및 NAS의 중요성

 기존 모델보다 좋은 결과가 나왔고, 블록의 스케일이나 타입을 바꾸는 것에 다라 효율성도 커질 수 있음을 발견했습니다. 공간적 정보를 중간에 버리지 않아도 되는 모델을 만들기 위해서, scale permutations나 cross-scale connection 등을 학습하여 정확도도 높고 효율성도 좋아지는 모델을 만들었습니다.

 이 구조상 NAS에 대한 이해와 분석이 필요할 듯합니다. NAS의 의존도가 커보여서 작동 원리를 정확하게 이해해야 전반적인 성능이 나오는 이유도 이해할 수 있을 듯합니다. 그리고 지금 scale-decreased backbone vs scale-permuted backbone으로 성능을 비교한 것 같은데, 상황에 따라서는 scale-decreased backbone vs NAS + scale-permuted backbone으로 성능을 비교할 필요는 없을 지 궁금했습니다. 태스크에 따라 seed backbone도 자동으로 골라지면 좋겠다는 생각이 들었습니다. 마지막으로 알고리즘틱한 논문이어서 좀 더 구체적인 분석을 위해서는 논문을 직접 읽을 필요가 있습니다. 성능의 개선점을 보이는 데는 확실한 포인트가 있었습니다.

728x90

+ Recent posts