OpenCV 보행자 검출

Posted by 빵빵빵
2016/04/12 10:51 전산(컴퓨터)/오픈소스



출처 : http://darkpgmr.tistory.com/53

영상 보행자 검출 (pedestrian/people detection) 기술에 대한 전반적인 소개 및 정보공유를 위해 이 글을 씁니다.

 

 

1. 영상 보행자 인식 기술 소개

2. 학계 기술 동향

3. 보행자 검출 성능 지표

4. 관련 법규 동향(자동차 보행자 안전 시스템)

5. 관련 제품 동향

6. 보행자 검출 소프트웨어

7. 공개된 보행자 검출 데이터 셋

 

 

 

1. 영상 보행자 인식 기술 소개

 

영상 보행자 인식 기술은 영상에서 보행자, 즉 서 있는 사람을 찾는 기술입니다. 현재까지의 연구는 대부분 서 있는 사람을 검출하는데 초점이 맞추어져 있으며 앉아있는 사람이나 누워있는 사람까지는 찾지 못합니다(기술적으로 안된다는 것이 아니라 연구를 하지 않는다는 것이 맞겠습니다. 재난 등 상황에서 인명구조 용도로는 누워있는 사람을 찾는 것도 유용할텐데 말이죠). 어쨌든 영상에서 보행자만 잘 찾을 수 있으면 정말 많은 곳에 유용하게 활용될 수 있을 것입니다. 매장을 드나드는 사람의 수를 셀 때, 운전중 전방의 위험을 알릴 때, 중장비와 인부들이 같이 일을 하는 작업장에서 인부들의 안전을 지킬 때, 사진사 로봇이 자동으로 최적의 구도를 잡을 때 등 통상적인 보안, 모니터링 외에도 그 응용은 무궁무진할 것입니다.

 

 

 

본 글에서는 보행자 인식 기술에 대한 학계의 주요 기술 동향, 보행자 검출 성능을 평가하는 주요 성능 지표, 보행자 인식과 관련된 관련 법규 동향(자동차 안전 관련), 관련 제품 동향, 보행자 검출 소프트웨어, 공개된 보행자 테스트 데이터 셋, 관련 인터넷 링크 등을 소개합니다.

 

 

 

2. 학계 기술 동향

 

영상 보행자 검출 분야에서 있어서 중요한 의미를 갖는 대표적인 논문들을 연도순으로 정리해 보았습니다.

 

[Viola2001] P. Viola and M. J. Jones, "Rapid Object Detection using a Boosted Cascade of Simple Features," In Proc. of CVPR 2001.

 

 

=> 영상 Object Detection 분야에 있어서 고전적이면서도 가장 대표적인 방법론 중의 하나로 인정받고 있는 논문입니다. 이 방법은 보통 Haar Feature-based Cascade Classifier라고 불리는데, 웨이블릿의 일종인 Haar feature와 유사한 매우 단순한 feature들을 조합하여 물체를 찾아냅니다.  캐스캐이드(cascade)란 용어는 하나의 검출기로 물체를 찾는 것이 아니라 여러 개의 검출기를 순차적으로 사용하되 처음에는 간단한 검출기를 적용하고 점점 더 어려운 검출기를 적용하는 방법입니다. 시간이 많이 걸리는 강력한 검출기는 초기 단순 검출기를 통과한 후보에만 적용되기 때문에 전체적으로 검출 속도를 크게 향상시킬 수 있습니다. 부스팅(boosting)이란 용어는 수많은 Haar-like feature들 중에서 물체를 식별하는데 유용한 feature들을 학습을 통해 점진적으로 그리고 자동으로 찾아낼 수 있는 매카니즘을 지칭합니다. 또한 이 논문에는 integral image라고 불리는 영상처리에 있어서 연산속도를 획기적으로 높일 수 있는 매우 유용한 방법이 제시되어 있습니다.

=> 이 방법은 매우 빠르게 영상에서 물체를 찾을 수 있다는 장점이 있습니다. 하지만 검출 성능을 높이기 위해서는 엄청나게 많은 샘플 데이터와 오랜 학습과정을 필요로 합니다. 즉, 어떤 데이터를 사용하고 어떻게 학습을 시키느냐에 따라서 성능에 많은 차이가 납니다. 한 마디로 노가다의 결정판이라고 볼 수 있지만 잘만 학습을 시키면 훌륭한 성능을 낼 수 있습니다. OpenCV에는 이 방법으로 학습된 다양한 물체 검출기들이 포함되어 있으며 여기에는 보행자 검출기(Haarcascade_fullbody.xml)도 포함되어 있습니다. 하지만 제가 써본 바로는 그다지 성능이 좋지는 않았습니다.

 

 

[Dalal2005] N. Dalal and B. Triggs, "Histograms of oriented gradients for human detection," In Proc. of CVPR 2005.

 

 

=> 현재의 영상 보행자 검출 기술에 있어 가장 기본적인 방법론이 된 HOG(Histogram of Oriented Gradient)기반 영상 보행자 검출기가 발표된 논문입니다. 현재 OpenCV에 포함되어 있는 보행자 검출기는 이 논문의 내용이 구현된 것입니다. HOG 방법은 어떤 물체 영상이 갖는 지역적인 gradient(edge 방향) 분포(histogram) 특성을 추출하여 물체를 식별하는 방법인데, 보행자 뿐만 아니라 승용차, 트럭 등 다양한 물체 검출에 적용할 수 있는 일반적인 방법론입니다. 논문 저자의 HOG 검출기는 2006년도 파스칼 VOC 물체 검출 챌린지(PASCAL VOC object detection challenge)에서 person detection 분야 우승을 차지했습니다. 단점은 속도가 느리다는 점입니다(병렬처리로 CPU를 풀로 사용했을 때, i7 PC에서 VGA기준 약 7 Hz).


 

[Zhu2006] Q. Zhu, M.-C. Yeh, K.-T. Cheng, and S. Avidan. "Fast human detection using a cascade of histograms of oriented gradients," In Proc. of CVPR 2006.

 

 

=> Cascade HOG라 불리는 방법으로서, 2005년 발표된 Dalal & Triggs의 HOG 검출기에 캐스캐이드(cascade) 기법을 적용하여 속도를 개선한 논문입니다. 기존 HOG 검출기가 물체 영역을 고정된 크기(16 x 16픽셀)로 분할한 후 각 분할 영역마다 지역적으로 HOG를 계산하여 객체 모델을 만들었다면, cascade HOG는 다양한 크기와 위치의 수많은 블록들로부터 HOG를 계산하고 유의미한 블록들을 부스팅(boosting) 학습 과정을 통해 선별합니다. OpenCV에 보면 이 방법과 유사한 방법으로 학습된 보행자 검출기가 hogcascade_pedestrians.xml라는 이름으로 제공됩니다.

 

 

[Dollar2009] P. Dollár, Z. Tu, P. Perona, and S. Belongie, "Integral channel features," In BMVC, 2009.

 

 

=> ChnFtrs 방법으로 불리며 HOG[2005]보다 성능이 뛰어나다고 알려져 있습니다. 기존 방법이 단일 채널의 영상특징을 이용하여 물체를 검출한 반면(예: HOG[2005]는 histogram of oriented gradient라는 채널을 이용한 것으로 볼 수 있음) ChnFtrs 방법은 검출 대상 영역에 대해 다양한 채널을 계산하고(예: R, G, B 색상값, 그레이값, edge 값, gradient magnitude 값, gradient histogram 값 등) 이 채널들을 종합적으로 이용해서 물체를 검출합니다. 실제 구현 방법에 있어서는, 다양한 채널에서 계산된 영상 특징, 즉 다양한 측면에서 계산한 영상특징들을 Viola & Jones[2001]의 boosted cascade 기법을 적용하여 학습시킴으로써 영상 검출기를 구현합니다.

 

 

[Felzenszwalb2010] P. F. Felzenszwalb, R. B. Girshick, D. McAllester, and D. Ramanan, "Object Detection with Discriminatively Trained Part Based Models," IEEE Trans. on PAMI, 32(9):1627-1645, 2010.

 

 

=> 이 방법은 part-based 모델 방법으로 불리며 현재까지 나와있는 영상 검출 방법들 중 가장 뛰어난 성능을 보이는 방법으로 인정받고 있습니다. 기존의 HOG 검출기(cvpr 2005)는 단일 물체 모델을 사용하기 때문에 보행자의 전신이 모두 나와야만 검출할 수 있고 앉거나 누워있는 사람은 검출할 수 없는 문제가 있습니다. 하지만, part-based 모델 방법은 (HOG feature를 사용한다는 점은 같지만) 물체의 전체적인 모습 뿐만 아니라 물체를 구성하는 부분(part)들도 같이 검출하기 때문에 물체의 일부만 보여도 검출할 수 있으며 또한 물체의 형태가 변하는 경우에는 적용할 수 있는 장점을 가집니다. 예를 들어, 보행자의 경우 전신, 상반신, 하반신, 머리, 팔, 다리를 각각 따로 검출하고(검출기가 여러 개임) 그 결과를 종합하여 최종적으로 보행자 여부를 판단하는 것입니다. 또한 파트(part)들을 검출할 때에는 물체내 정상적인 위치에서 벗어난 정도에 따라 패널티(penalty)를 받게 됩니다. 저자들의 파트 모델 방법은 2007, 2008, 2009 파스칼 VOC 물체 검출 챌린지(PASCAL VOC object detection challenge)에서 보행자 뿐만 아니라 다양한 분야에서 우승을 차지했습니다.

 

 

[Dollar2012] P. Dollar, C. Wojek, B. Schiele, and P. Perona, "Pedestrian detection: An evaluation of the state of the art," IEEE Trans. on PAMI, 2012.

 

 

=> 영상 보행자 검출 분야에서 있어서 대표적인 방법들의 성능을 정량적으로 비교 분석한 논문입니다.

 

 

[Benenson2012] R. Benenson, M. Mathias, R. Timofte, and L. V. Gool, "Pedestrian detection at 100 frames per second," In Proc. of CVPR 2012.

 

 

=> 2012년 cvpr에 구두(oral)로 발표된 논문인데 스테레오 비전과 GPU를 사용해서 VGA 해상도 기준으로 135 Hz의 속도로 보행자를 검출할 수 있다고 합니다(모노 비전 + GPU의 경우에는 50 Hz). 영상 feature로는 ChnFtrs라는 Integral Channel Feature를 사용합니다. 기존 방법에 비해서 검출 성능이 크게 개선된 것은 아니지만 검출성능의 저하없이 처리속도를 크게 높였다는 점에서 의미가 있는 논문입니다. 처리속도 개선을 위해 GPU를 사용한 것 외에 스테레오 카메라의 거리정보로부터 계산된 stixel(카메라와 지면과의 기하학적 관계를 이용하여 탐색 영역을 축소한 것)을 이용한 점, 다양한 크기의 보행자를 검출할 때 영상의 크기를 변화시키지 않고도 여러 크기의 보행자 모델과 HOG feature의 스케일링을 결합하여 빠른 처리를 가능케 한 점을 들 수 있습니다.

 

 

3. 보행자 검출 성능 지표

 

보행자 검출 알고리즘의 성능을 평가할 때 사용하는 용어 및 성능지표들을 정리해 보았습니다. 보행자 뿐만 아니라 영상 object detection 분야에서도 공통적으로 사용되는 지표들입니다.

  • 검출율(recall rate): detection rate라고도 합니다. 입력(테스트) 데이터에 있는 전체 보행자들 중에서 성공적으로 검출된 보행자 비율을 지칭합니다.
  • 미검출율(missing rate): 검출율과는 상반되는 개념으로 입력 데이터에 있는 전체 보행자들 중 검출되지 못한 보행자의 비율을 지칭합니다(missing rate = 1 - recall rate).
  • 정확도(precision): 검출기가 검출한 결과들 중 정검출(true positive)의 비율을 말합니다. 아무리 검출율이 높아도 오검출이 많다면 쓸모가 없기 때문에 검출기의 성능을 말할 때는 보통 precision과 recall을 함께 얘기합니다. 예를 들어, 영상의 모든 영역을 검출 결과로 반환하면 검출율은 항상 100%이지만 아무런 쓸모가 없는 검출기가 될 것입니다.
  • 오검출율(false alarm rate): 정확도에 상반되는 개념으로서 검출 결과 중 오검출(false positive 또는 false alarm)의 비율을 의미합니다(false alarm rate = 1 - precision).
  • FPPW(false positives per window): FPPW는 오검출율을 표현하는 다른 한 방법으로서 입력 window 1개당 평균 오검출 개수를 나타냅니다. 예를 들어, 10,000개의 window를 검출기로 검사했는데 오검출(false positive)이 5개 있었다면 FPPW는 5/10,000 입니다. False alarm rate가 검출기의 정확도를 표현하는 지표라면 FPPW는 실제로 오검출이 얼마나 많이 발생하는지를 나타내는 지표입니다. 참고로, 영상에서 물체를 찾을 때 통상적으로 일정한 크기의 사각형 window를 영상 내에서 이동시켜 가면서 각 window 위치에 물체가 존재하는지 여부를 판단하는 방식으로 물체 검출이 이루어집니다(이러한 방식을 sliding window 방식이라 부릅니다).
  • FPPI(false positives per image): 이미지 1장 당 평균 오검출 개수로서 오검출 개수를 정량적으로 표현하는 다른 한 방법입니다. FPPW보다는 훨씬 직관적입니다만 검출기의 성능을 비교할 때에는 FPPW가 보다 엄밀한 지표입니다. 왜냐하면 FPPI는 sliding window 기법에서 window를 몇 픽셀 간격으로 이동시키느냐에 따라서 수치가 달라지기 때문입니다.

☞ 최근 아래의 한 댓글(cv초심자, 2015.4.1)을 통해 기존에는 FPPW가 많이 사용되었으나 최근에는 FPPI가 보다 일반적인 성능지표로 인정받고 있음을 알게 되었습니다. 관련하여 그 이유를 조사해 보았는데, 가장 큰 이유는 FPPW는 분류기(classifier)의 성능을 평가하는 것이고 FPPI는 검출기(detector)의 성능을 평가하는 기준이기 때문입니다. 응용 시스템 관점에서 보았을 때 중요한 것은 각 윈도우(window)의 분류 정확도가 아니라 최종적으로 시스템에서 반환하는 검출 결과이기 때문입니다. 따라서 검출기(detector)의 성능을 평가할 때에는 FPPI가 보다 정확한 성능지표로 사용되는 것 같습니다. 보다 자세한 내용에 대해서는 [Dallar2012] 논문을 참조하시기 바랍니다.

 

위의 성능 지표들을 계산하기 위해서는 어떤 검출 결과가 성공(true positive)인지 실패(false positive)인지를 판단할 수 있는 기준이 있어야 합니다. 이러한 검출성공 여부 기준으로 흔히 사용되는 방법은 파스칼 VOC 챌린지(PASCAL VOC challenge)에서 사용되는 object detection criterion입니다. 이는 검출결과와 ground truth와의 overlap이 50%이상이면 true positive로 간주하고 그 이하면 오검출로 간주하는 방법입니다. 즉, (R∩G)/(R∪G)>0.5 이면 성공으로 간주합니다(단, R은 검출결과 경계 사각형 & G는 ground truth 경계 사각형).

 

 

 

4. 관련 법규 동향(자동차 보행자 안전 시스템)

 

그동안 영상 보행자 인식 기술은 주로 감시(surveillance), 보안(security) 목적으로 연구되어 왔으나 최근 들어서는 자동차 업계를 중심으로 안전(safety) 이슈가 대두되면서 보행자 인식 기술에 대한 관심이 크게 증가되고 있습니다. 특히 최근 유럽, 미국을 중심으로 자동차 보행자 안전 시스템의 탑재 의무화가 법으로 추진되고 있어서 요즘 자동차 업계에서는 보행자 인식 기술이 초미의 관심사입니다. 관련 동향은 다음과 같습니다.

  • 대형차(대형트럭,버스)에 대해 유럽은 2013년부터, 일본은 2014년부터 AEBS(Advanced Emergency Break System: 첨단 긴급 브레이크 시스템) 장착을 법으로 의무화함. 2014~2016년 사이에 다른 많은 나라들도 입법 예고되고 있음.
  • 승용차에 대해서는 아직 AEBS 도입이 법규화되어 있지 않지만 자동차 회사 자체적으로 자동 브레이크 시스템 채용이 이루어지고 있음.
  • 세계에서 가장 엄격한 신차 안전도 평가인 Euro NCAP(New Car Assessment Programme)에서는 2014년부터 자동 브레이크 시스템의 유무를 자동차 평가 항목에 추가한다고 발표(2012.6.13일 발표). 따라서, 2014년 이후 자동차들은 AEBS를 표준장비로 할 가능성이 매우 높음.
  • 미국에서는 2014년까지 모든 차량의 후방카메라 장착을 의무화.

 

AEBS에 사용될 수 있는 센서로는 radar, 카메라, 레이져 센서, 초음파 센서 등이 있는데 가장 유망한 센서로는 radar + (스테레오)카메라 조합이 될 것으로 예상되고 있습니다. 그 만큼 영상인식 기술의 중요성이 대두되고 있는 것입니다. 현대자동차의 모 상무의 말에 의하면 영상 검출률이 한 95%만 되어도 바로 써먹을 수 있을 텐데라고 말했다 합니다. 물론 오검출율은 거의 0%에 가까워야 합니다.

 

 

5. 관련 제품 동향

  • Mobileye는 상용화된 대표적인 영상 보행자 감지 시스템입니다. 자동차 백미러에 설치된 카메라 영상을 분석하여 차선, 전방 차량, 보행자 등을 감지하고 운전자에게 경보를 줍니다.
  • 볼보의 시티 세이프티 시스템은 30km/h 이하에서 전방 장애물을 감지해서 자동으로 브레이크를 잡아주는 기능을 제공합니다. 특히 어린이가 갑자기 튀어나올 수 있는 골목길이나, 차가 많이 밀리는 상황에서 도움이 되는 기능입니다. 최근에는 시속 50km/h 이하에서도 장애물 감지가 가능하도록 기능이 개선되었습니다.

 

 

6. 보행자 검출 소프트웨어

 

공개된 검출기로는 공개 비전 라이브러리인 OpenCV에 포함된 보행자 검출기(총 4가지의 보행자 검출기가 포함되어 있음)가 대표적입니다. 각각의 검출기의 사용법은 아래 예제 코드를 참조하시기 바랍니다.

  • HOG(INRIA): [Dalal2005] 논문의 HOG 검출기를 구현한 것으로 INRIA Person Database를 사용하여 학습되었습니다. 학습에 사용된 보행자 템플릿의 크기가 64(w)x128(h)이며 템플릿보다 작은 크기의 보행자는 검출하지 못합니다. 물론 영상을 확대한 후에 검출기를 적용하면 작은 크기의 보행자도 찾을 수는 있지만 속도가 느려집니다. 파라미터 값으로는 hitThreshold=0~0.4, groupThreshold=2 정도가 적당합니다.
  • HOG(Daimler): HOG를 사용하되 Daimler Pedestrian Dataset를 사용하여 학습시킨 보행자 검출기입니다. 보행자 템플릿의 크기가 48(w)x96(h)이기 때문에 보다 작은 크기의 보행자도 검출할 수 있습니다. 파라미터 값은 hitThreshold=1.2~1.8, groupThreshold=4~6 정도가 적당합니다. 성능은 HOG(INRIA)와 큰 차이는 없습니다.
  • hogcascades: HOG feature에 cascade 기법을 적용하여 학습시킨 검출기입니다. 보행자 템플릿의 크기는 48(w)x96(h)입니다.
  • haarcascades: [Viola2001] 논문의 방법을 이용하여 구현한 보행자 검출기입니다. 보행자 템플릿의 크기는 14(w)x28(h)입니다. 속도가 빠릅니다.

 

OpenCV에 포함된 4가지의 보행자 검출기를 쉽게 테스트해볼 수 있도록 다음과 같은 테스트 코드를 작성해 보았습니다 (OpenCV에서 avi 동영상 파일을 불러오기 위해서는 xvid 코덱 설치도 필요합니다).

 

코드 및 실행파일 다운로드: PedestrianOpenCV.zip

 

xvid 코덱 다운로드: http://www.xvid.org/Downloads.15.0.html

 

 

 

 

 

 

7. 공개된 보행자 검출 데이터 셋

 

MIT Pedestrian Database

INRIA Person Dataset

ETH Pedestrian Dataset

TUD-Brussels Pedestrian Dataset

Daimler Pedestrian Dataset

Caltech Pedestrian Dataset (최근 공개되었으며 가장 정리가 잘됨)

 

 

☞ 제 글이 보행자 인식/검출 분야에 대해 공부를 하는 학생이나 관련 업계 연구 개발자들에게 도움이 되길 바랍니다. 아직 미진한 부분도 있으나 본업이 바쁜 관계로 추후 시간이 되는 대로 내용을 보완할 예정입니다. 관련된 정보나 코멘트, 요청사항, 질문답변 등이 있으면 편하게 댓글로 남겨주시기 바랍니다.

 

by 다크 프로그래머

2016/04/12 10:51 2016/04/12 10:51

이 글에는 트랙백을 보낼 수 없습니다