영상 보행자 검출 기술(Pedestrian Detection) - 정보공유

영상처리 2013.04.02 17:00

영상 보행자 검출 (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_ffmpeg244.dll을 프로그램과 같은 실행폴더에 놓고 실행하세요).


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






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


MIT Pedestrian Database

INRIA Person Dataset

ETH Pedestrian Dataset

TUD-Brussels Pedestrian Dataset

Daimler Pedestrian Dataset

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



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


by 다크 프로그래머

  • 이전 댓글 더보기
  • 임재현 2016.11.16 15:48 ADDR 수정/삭제 답글

    다크프로그래머님 안녕하세요. 항상 잘 보고있습니다.

    글을 남긴 이유는 저의 연구 접근하는 방법이 맞는건지를 여쭈어보고 싶기 때문입니다.

    Pedestrian detection을 할때 기존의 과거 논문들은 HOG/LBP/Haar-like feature등의 Low-Level Feature만 가지고 사용했는데, 이 Low-level-feature의 한계점과 더불어 다른 object에 비해 Non-Linearity가 많아 Robust한 feature를 뽑는 것이 성능 향상에 도움을 줄 것 이라 생각하여 CNN 같은 딥러닝 알고리즘을 적용시켜서 기존 논문과 동일한 환경에서 성능 개선을 해보겠다.

    라는 위의 제 생각은 논리적인지, 논문을 쓸 때 이런 flow로 해서 성능을 높여서 의미가 있다고 말 해도 되는 것인지 잘 모르겠습니다.

    다크프로그래머님은 저의 이 생각을 어떻게 보시는지 궁금합니다.

    • BlogIcon 다크pgmr 2016.11.16 18:58 신고 수정/삭제

      딥러닝이 나온 이후로 저는 거의 석기시대에 머물고 있어서 잘 알지는 못하지만 cnn을 이용한 pedestrian detection 연구들도 많이 발표된 것으로 알고 있습니다. 그리고 꼭 pedestrian이 아니라 일반적인 object detection 문제로서 다양한 딥러닝 기반의 방법들이 발표되고 있고 성능 또한 그 이전에 비하면 월등하게 향상된 것으로 알고 있습니다. 그래서 단순히 cnn을 사용했다가 아니라 다른 cnn 기반의 방법들에 비해서 어필할 수 있는 포인트가 있어야 된다고 생각합니다. 작년에 나온 Residual Net이나 올해 발표된 SSD(single shot multibox detector)이 성능 면에서는 top을 달리는 방법들이니 이들의 성능 수준이나 접근 방법 등을 검토해 보시면 좋을 것 같습니다.

  • 임재현 2016.12.01 21:28 ADDR 수정/삭제 답글

    다크프로그래머님

    Fast human detection using a cascade of histograms of oriented gradients

    논문에서 Hog를 추출할 때 16x16의 고정된 블록 크기를 개선시켜 variable size block을 사용하여 다양한 크기와 위치의 수많은 블록들로 Hog를 계산하고, 유의미한 블록들을 부스팅으로 선택한다고 나와있습니다.

    그런데, 어떻게 adaboost를 학습시켜서 "유의미"한 block 를 구별 해 낼 수 있는건지 감이 안옵니다. 그리고 이것이 training할때 성능이 좋은건지, testing 할때 성능이 좋은건지, 왜 boosting을 하는지 boosting은 어떤 효과가 있길래 좋은 block을 선택시켜주는지, 이것이 왜 빠른 방법인지 궁금합니다. 논문을 읽어봐도 잘 모르겠습니다.

    감사합니다.

    • BlogIcon 다크pgmr 2016.12.01 22:54 신고 수정/삭제

      먼저 boosting의 개념과 알고리즘에 대해 공부해 보시면 좋을 것 같습니다. 구글에서 boosting에 대해 검색해 보니 "https://www.analyticsvidhya.com/blog/2015/11/quick-introduction-boosting-algorithms-machine-learning/"에 있는 내용이 (자세히는 안봤지만) 직관적으로 잘 설명되어 있는 것 같습니다.

  • 댕이냥 2016.12.07 13:33 ADDR 수정/삭제 답글

    안녕하세요! 보행자 검출 공부하고 있는 학생인데요
    FPPI 및 miss rate에 대해서 궁금한점이 있어서요. Piotr Dollar의 "Pedestrian Detection: A Benchmark" cvpr2009년도 논문을 읽었었는데, miss rate 계산시에 1 FPPI를 기준으로 한다..?
    라고 되어있더라구요.(2012년도 꺼도 읽었는데도,,,잘,,) 위에 4.26일 김공자님과 대화하신것도 읽어보았는데 여전이 이해가 안되서요.
    miss rate를 계산하는 방법을 정확히 알 수 있을까요?
    그리고 fppi계산시에, 예를 들어 어떤 데이터 세트가 총 3장 인데 각각 false positive인 경우가 1,3,6,개 일때, 이 데이터 세트에 대한 fppi는 (1/1+1/3+1/6)/3이 맞나요...?

    긴글 읽어주셔서 감사합니다. =)
    ´

    • BlogIcon 다크pgmr 2016.12.07 17:53 신고 수정/삭제

      먼저 한 가지 정확히 이해하고 있어야 할 부분은 miss rate는고정된 값이 아니라는 것입니다. 파라미터(threshold 등)를 어떻게 주느냐에 따라서 달라지는 값이기 때문에 어떤 알고리즘의 miss rate가 얼마다 라고특정지어 말하는 것은 가능하지도 않고 의미도 없습니다. miss rate는 false detection rate와 반비례 관계에 있으며 파라미터 조절에 따라 이들의 값이 변하게 됩니다. 따라서 이 둘의 상관관계 그래프(보통 precision-recall graph라 불리는)를 통해 성능을 표현하는 것이 보다 타당하며 일반적으로 사용되는 방법입니다. 물론 miss rate와 false rate 둘 중 어느 하나의 값을 고정된 값으로 맞춘 상태에서 성능을 비교하는 것은 가능합니다 (말씀하신 fppi를 1로 맞춘 상태에서 miss rate를 비교하는 것처럼 -> 어떤 절대적 기준이 있는 것이 아니라 논문의 저자는 그렇게 비교를 하고 싶어서 그렇게 한 것 뿐입니다).
      그리고, miss rate는 물체를 검출하지 못하고 놓친 비율이로서 n개의 물체가 있을 때 이 중 m개만 검출되었다면 miss rate는 = (n-m)/n 입니다.
      마지막으로, fppi 계산은 이미지 3장에 대해 총 1+3+6=10개의 false가 발생했기 때문에 이미지 한장에 대해서는 10/3 = 3.33333 개의 false 가 발생한 셈입니다. 즉, fppi = 3.33333... 입니다.

    • 댕이냥 2016.12.07 23:47 수정/삭제

      친절하신 답변 너무 감사드려요 ㅠㅠ 근 한달동안 궁금하던 내용이였는데, 해결을 못했었거든요!! 너무 감사드립니다.!!! =)

  • BlogIcon (@_@) 2016.12.27 16:50 신고 ADDR 수정/삭제 답글

    안녕하세요 영상처리로 움직이는 물체를 파악하는 기법을 알아보다가 우연히 포스트 된 글을 읽었는데 정리도 잘 되어있고 저희 프로젝트에 일부분 필요해서 움직이는 물체 파악하는 것의 코드를 약간 수정해서 사용 하고 싶은데 혹시 불편하시지 않으시면 사용해도 되는지 궁금합니다.

  • 호롤룰루 2017.01.19 00:57 ADDR 수정/삭제 답글

    다크프로그래머님, 설명 및 소스코드 너무 감사합니다.
    다름이 아니라, 제가 다크프로그래님께서 올려주신 소스에 upperbody_upperbody detection 을 적용해보려고 코드 변경을 시도했는데 opencv관련 헤더파일에서 문제가 생기네요. 혹시 opencv버전은 어떤걸 쓰쎴는지 여쭤봐도 될까요? 감사합니다!

    • BlogIcon 다크pgmr 2017.01.19 10:45 신고 수정/삭제

      아마 2.4.4를 사용했던 것으로 기억합니다.

  • kamchol 2017.01.25 17:25 ADDR 수정/삭제 답글

    안녕하세요 다크님
    포스팅을 보다가 질문의 생겼습니다.
    서있는 사람 추적시, 서있는 사람의 경우 가로 세로 비율이나 이런것으로 ROI를 줄 수 있는것으로 알고있는데요 만약 서있는사람과 앉아있는사람 혹은 엎드려 있는 사람을 검출 할 경우는 어떤 방법으로 검출 해야 하는지 혹시 알고 계신가요?

    • BlogIcon 다크pgmr 2017.01.25 23:55 신고 수정/삭제

      기존의 검출 방식은 기본적으로는 템플릿 매칭 방식이기 때문에 하나의 검출기로 서있는 사람, 앉아있는 사람, 누워있는 사람을 모두 검출하기는 거의 불가능합니다. 사람의 자세별로 검출기를 각각 별도로 학습시켜야 할 것입니다.

  • 할루라라 2017.02.09 22:35 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님!
    올려놓으신 실행파일로 다른 avi파일을 실행하려니 자동으로 꺼지더라구요 ㅠㅠ
    혹시 저 실행파일은 올려주신 영상만 실행이 되는건가요???
    아니면 특정한 조건이 있어야지 실행되는건가요 ㅠ
    포스트 감사합니다 덕분에 많이알아가용!

    • BlogIcon 다크pgmr 2017.02.11 08:14 신고 수정/삭제

      아마도 opencv_ffmpeg이 없어서 그런 것 같습니다. 블로그 본문에 파일을 올렸으니 실행파일과 같은 폴더에 놓고 실행해 보시기 바랍니다.

  • 할루라라 2017.02.13 17:57 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님!!! 파일을 올려주셔서 해결하였습니다.
    현재 HOG(INRIA)를 이용해서 PD를 진행하고 있는데 많이 느리더라구요
    코드를 살펴보니 HOG와 SVM을 사용하여 찾는거같은데 박스사이즈를 점차 크게 넓히면서 한칸씩 이동하면서 비교를 하는것인가요? 이번에 영상처리에 관심을 가지게 된 학생인데
    해당코드에 대해 주석처리가 되있거나 사용한 방법에 대하여 자세하게 확인 할 수 있는 방법이 없을까요?

    • BlogIcon 다크pgmr 2017.02.14 09:13 신고 수정/삭제

      네 맞습니다. 물체인식 기술은 기본적으로 모든 가능한 스케일과 위치에 대해서 검사를 수행하기 때문에 수행속도가 매우 느립니다. 제가 올린 코드는 opencv에서 제공하는 코드들을 사용하는 예제파일입니다. opencv 함수에 대한 설명은 opencv document를 참조하시기 바랍니다 (http://docs.opencv.org/)

  • 하라라루롤 2017.03.21 10:34 ADDR 수정/삭제 답글

    안녕하세요 질문하나 드립니다ㅠㅠ

    혹시 pedestrian detection 과 관련하여 최근 가장 좋은 성능을 보이고 있는 논문을 아시는지요..
    또 특별히 사람이 많이 가려지더라도 검출할 수 있도록 설계한 논문이 아시는 바 있으신지 여쭤봅니다!

    • BlogIcon 다크pgmr 2017.03.21 11:09 신고 수정/삭제

      Faster R-CNN, SSD(Single Shot Multibox Detector), YOLO9000 등이 최근에 나온 가장 대표적인 기술들로 볼 수 있습니다. 어느 것을 사용해도 성능에는 문제가 없을 것으로 생각됩니다. 가려진 경우, 상반신만 나오는 경우, 옆으로 비스듬히 누운 경우 등 관계없이 왠만한 경우 모두 잘 찾습니다.

  • 하라라루롤 2017.03.21 11:17 ADDR 수정/삭제 답글

    제 연구분야가 가려진 사람을 더욱 잘 찾을수 있도록 연구하는 부분이라.. 혹시 특별히 가려진 경우를 더 잘 detection 하기 위해 설계한 논문은 아시는바가 없으신지요ㅠㅠ

    • 하라라루룰 2017.03.21 11:25 수정/삭제

      더불어, 제가 deformable part based model 을 잘 모르는데 이 방법을 쓰면 딥러닝보다 가려짐 상황에 대해 더 장점이 있는지? 여쭤봅니다.. deformable part based model 과 CNN 을 결합한 논문도 있더라구요..

    • BlogIcon 다크pgmr 2017.03.21 13:23 신고 수정/삭제

      글쎄요.. 어떤 것이 좋을지는 해 보지 않아서 저도 잘 모르겠습니다. 하지만 요즘 기술들이 워낙 잘 되서.. 일단 현재 기술 수준을 직접 한번 테스트해 보고 부족한 점들을 찾아보면 어떨까 싶습니다. 가려짐에 특화된 기술은 아는 바가 없습니다.

  • 2017.04.06 20:21 ADDR 수정/삭제 답글

    비밀댓글입니다

    • BlogIcon 다크pgmr 2017.04.06 22:44 신고 수정/삭제

      2000장의 이미지 프레임으로 구성된 1분짜리 비디오가 있는데 이 비디오에서 오검출이 총 50번 발생했다면 이 기술의 FPPI는 50/2000 입니다. 한 장으로 오검출 개수를 확인하는게 아니라 전체 발생한 오검출 개수를 총 이미지 개수로 나눈 것이 FPPI입니다.

  • 2017.04.06 20:44 ADDR 수정/삭제 답글

    비밀댓글입니다

    • BlogIcon 다크pgmr 2017.04.06 22:55 신고 수정/삭제

      miss rate의 단위는 0 ~ 1 사이의 값(비율)이고 FPPI의 단위는 개수입니다(1개, 2개, ...). miss rate는 전체 true 중 검출하지 못한 것의 비율(rate)이고 FPPI는 전체 발생한 오검출 개수를 총 이미지 개수로 나눈 값입니다. 일반적으로 miss rate와 FPPI는 서로 반비례 관계를 갖습니다. 왜냐하면 miss rate를 낮추도록 알고리즘의 파라미터를 조절하면 검출율은 높아지겠지만 그만큼 잘못된 검출도 늘어날 것이기 때문입니다.

  • 화니대디 2017.04.07 00:07 ADDR 수정/삭제 답글

    정말 목마른자에 답변을 주시어 감사합니다.
    죄송한데 한가지만 여쭈어 볼께요.
    miss rate 단위는 0 ~ 1이면 0 일수록 오검출이 적다는것을 나타내는데..FPPI 는 단위를 보면 10 에 마이너스 3승, 10에 1승 이런 의미가 이해가 가지않습니다. 휴~
    답변 제발 부탁드립니다.

    • BlogIcon 다크pgmr 2017.04.07 09:46 신고 수정/삭제

      miss rate는 미검출율, 즉 검출하지 못하고 놓치는 비율을 의미합니다. fppi는 이미지 1장당 잘못된 검출수이고 10의 -1승이라는 말은 평균 0.1건 오검출 발생했다는 의미입니다.

  • 화니대디 2017.04.07 15:52 ADDR 수정/삭제 답글

    안녕하세요.정말 답변 감사합니다.
    연락처라도 알면 찾아뵈어 커피라도 사 드리고 궁금한 것들 물어보고 싶은 마음이 굴뚝 같습니다.
    1) miss rate 비율은 0 ~ 1인데..0 에 가까울 수록 검출을 잘하는 것이 맞죠?
    2) FPPI 성능 지표를 보면 그래프 하단에 10의 -3승, 10의 -2승, 10의 -1승, 10의 0승, 10의 1승
    이렇게 되어 있고..말씀 해주신 내용은 이미지 1장당 잘 못 검출된 수인데..어떻게 계산되어 이미지를 10의 몇승으로 작성되었고 10의 -3 승 대비 10의 1승으로 갈 수록 검츌률이 좋아지는지 좀 처럼 이해가 되지 않습니다. 머리가 나빠서...다크님께서 바쁘실텐데..여러번 질문을 드리네요. 죄송합니다.


    • BlogIcon 다크pgmr 2017.04.08 22:34 신고 수정/삭제

      화니대디님, 질문을 하는 과정에서 생각이 정리되고 많은 공부가 될 수 있습니다. 그리고 질문을 잘 정리하여 하는 것 또한 무척 중요하다고 생각합니다. 어떤 점(이유)에서 말씀하신 내용이 이해가 되지 않는지 생각하신 바가 있다면 설명해 주시면 좋겠습니다.

  • 2017.04.09 04:42 ADDR 수정/삭제 답글

    비밀댓글입니다

    • BlogIcon 다크pgmr 2017.04.09 12:35 신고 수정/삭제

      일단은 FPPI에 대한 이해에 오해가 있는 것 같습니다. FPPI는 False Positive Per Image로서 이미지 한 장당 발생하는 오검출(물체가 아닌데도 물체라고 잘못 검출한 것) 개수를 말합니다. 그런데 적어주신 내용에는 검출하지 못한 것의 개수로 되어 있으니 그 뜻이 맞지 않습니다. 다음으로 FPPI의 단위에 대한 내용입니다. FPPI는 이미지 한 장당 발생하는 오검출(false positive)입니다. 제대로 된 알고리즘이라면 FPPI가 매우 작은 숫자여야 합니다. 예를 들어, 이미지 100장 당 1번 정도 오검출이 발생하는 알고리즘이 있다면 이 알고리즘의 FPPI는 0.01입니다. 이와 같이 FPPI는 원래 값이 작기 때문에 이를 0.01과 같이 소수 형태로 표기하는 것보다는 10의 -2승과 같은 형태로 표기하는 것이 보다 간결하기 때문에 지수승 형태로 표기하는 것입니다. 0.001, 0.0001과 같이 소수 형태로 한다고 해도 잘못된 것은 아닙니다. 마지막으로 FPPI와 miss rate의 관계에 대해서는 아마도 FPPI의 의미를 잘못 이해한데서 발생한 것으로 생각됩니다. 알고리즘의 검출율과 오검출율의 이해 및 이들의 상관관계에 대해서는 http://darkpgmr.tistory.com/162 글을 읽어보시면 도움이 되리라 생각합니다.

  • 화니대디 2017.04.09 22:54 ADDR 수정/삭제 답글

    안녕하세요. 정말 감사합니다.
    이해가 갑니다. 대가성 없이 정말 자세하게 설명주셔서 다시 한번 감사라는 말씀 드립니다.

  • jin 2017.05.22 15:39 ADDR 수정/삭제 답글

    안녕하세요 HOG 관련 문외한이라서 여기저기 자료를 찾아보다가 다크프로그래머님 싸이트에 와서 보고 질문을 드립니다. 제가 문외한이라 질문 자체가 말이 안될지라도 ㅠ 무시하지 마시고
    답변 부탁들비니다.

    기존 HOG 계산방식과 비교해서 새로만든 HOG 알고리즘이, 회로 면적을 1/12만큼 감소 또는 식별 정밀도의 실수 비율을 6 % 감소 할 수있는 등, 식별 정확성과 회로면 대상 트레이드 오프가 향상되었음을 확인할 수 있다면 기술적인 가치가 어느정도 상승할 수 있을까요?

    • BlogIcon 다크pgmr 2017.05.23 08:23 신고 수정/삭제

      그건 제가 잘 모르는 부분이라 답변이 어렵습니다. 특히 칩이나 하드웨어 쪽은 더 그렇습니다.

  • SC 송 2017.06.26 15:09 ADDR 수정/삭제 답글

    저희 (주)스프링클라우드에서 자율주행에서 보행자를 테스트할 수 있는 환경(플랫폼) 제공 예정입니다. 알고리즘만 있고 플랫폼이 없는 분들은 앞으로 많은 활용 바라며 사업화가 될 경우 이에 대한 로얄티도 지급 예정입니다.
    문의는 younggi_song73@naver.com 입니다.
    #알고리즘은 20개 정도 분류하여 협업이 가능 합니다. 기술 제공도 가능 합니다.

  • 질문있습니다. 2017.09.01 01:39 ADDR 수정/삭제 답글

    안녕하세요. 올려주신 글들 보면서 공부하던 중에 궁금한 점이 생겨 질문드립니다..
    호그 xml 파일에는 maxfalsealarm과 minhitrate로 정밀도와 검출율에 대해서 알 수 있는데
    하르에 대에서는 정밀도와 검출율을 어떻게 알 수 있는건가요??

    • BlogIcon 다크pgmr 2017.09.01 08:25 신고 수정/삭제

      호그 xml 파일에서 정밀도와 검출율에 대해 알수 있다는 것이 어떤 의미인지 모르겠습니다. 정밀도와 검출율은 실제 테스트데이터에 대해서 성능평가를 통해서만 얻을 수 있는 건데요..

    • 질문있습니다. 2017.09.01 15:30 수정/삭제

      아 제가 minHitRate와 MaxFalseAlarmRate 써있는거에 대해서 잘못 알았던것 같습니다. 혹시 위의 동작 프로그램에서 검출율과 정밀도를 구하고 싶은데, 이 두값을 구할 수 있는 opencv 라이브러리나 방법이 있는지 궁금합니다.

    • BlogIcon 다크pgmr 2017.09.03 07:43 신고 수정/삭제

      따로 없는 것 같습니다. 검출율과 정확도를 측정하기 위한 테스트 프로그램과 분석 프로그램은 자신이 직접 짜야 될 것 같습니다. 그렇게 어렵지는 않습니다.

    • 질문있습니다. 2017.09.03 15:53 수정/삭제

      친절한 답변 감사드립니다. 많은 공부되었습니다.

  • shawn050912 2018.06.24 15:31 ADDR 수정/삭제 답글

    저 4개의 방법중에서 가장 효과적인 방법은 뭔가요?

    • BlogIcon 다크pgmr 2018.06.25 00:47 신고 수정/삭제

      요즘은 딥러닝을 이용한 객체 검출기들이 성능이 워낙 좋기 때문에 위에 있는 (이미 옛날 기술이 되어버린) 4개의 성능을 비교하는 것은 큰 의미가 없습니다. 4개 중에는 그래도 1번이 성능이 가장 무난한 것 같습니다..