Haar/Cascade Training 프로그램

개발한 것들 2013. 6. 5. 18:16

Haar training과 cascade training을 손쉽게 할 수 있도록 도와주는 프로그램입니다.


OpenCV에서 기본적으로 제공하는 opencv_createsamples.exe, opencv_haartraining.exe, opencv_traincascade.exe 유틸러티들은 사용하기도 힘들고, 제공하지 않는 기능, 훈련 과정에서 여러 오류 가능성을 가지고 있습니다.


이러한 OpenCV 기본 유틸러티들의 문제점을 개선하고, 학습 데이터 생성 및 training, 그리고 성능 테스트까지 모두 하나의 프로그램으로 할 수 있도록 통합 프로그램을 작성해 보았습니다.




프로그램 다운로드


CascadeTrainer.zip



※ 2016-08-26

-> Detect AVI로 동영상을 읽을 때 필요한 opencv_ffmpeg244.dll 파일을 같이 첨부


※ 2015-07-22

-> 각 stage 학습과정에서 추출할 샘플수와 진행상황을 도스창에 출력하도록(10개마다) UI 수정


※ 2014-02-05

-> 샘플 생성시에 사용한 파라미터(vec 파일명, 샘플 크기, 생성된 샘플수 등)들을 훈련(training) 파라미터에 자동으로 반영하도록 UI 수정


※ 2014-02-04

-> positive 샘플의 수가 적은 경우에도 동작 가능하도록 수정 (기존 버전은 positive 샘플수가 100개 이하일 경우에는 정상적으로 동작하지 않았음)


※ 2013-12-02

-> haar trainnig 방식에도 무한루프 방지코드를 적용 (기존 버전에는 cascade training 방식에서만 무한루프 방지코드가 동작하였음)

-> 무한루프 방지코드 개선 (좀더 완벽하게 무한루프를 방지하도록 코드개선)


※ 2013-06-05

-> 프로그램 최초 업로드



프로그램 특징


개발한 프로그램의 주요 특징입니다.


[training 데이터 생성 관련]

  • opencv_createsamples.exe에 있던 4가지 모드를 radio로 컨트롤로 쉽게 선택할 수 있으며, 선택된 모드에 관련된 파라미터들만 활성화됨
  • 기본 제공되는 모드 외에 'multi expand'라는 새로운 기능을 제공. 이 기능은 positive 샘플 이미지 목록으로부터 원하는 개수만큼의 확장된 training 데이터 셋을 생성할 수 있음 (기존 opencv에서는 하나의 positive 샘플 이미지에서만 확장된 training 데이터 셋을 생성할 수 있었고, 여러 샘플 목록에서는 확장을 할 수 없었음). 'multi expand'를 선택하면 positive 샘플 이미지 하나당 expand_n 개수만큼의 training 샘플이 생성됨 (최종적으로 이미지수*n_expand 개수만큼의 positive training 샘플이 생성되며 이 값이 max_samples를 넘을 경우에는 max_samples 개수까지만 생성됨)
  • 샘플을 변형시키는 범위 파라미터들의 값을 라디안(radian) 대신에 디그리(degree)로 입력받음


[training 관련]

  • 4가지 training 방식 중 하나를 선택할 수 있으며 하나의 training 방식을 선택하면 해당 방식에 관계되는 파라미터들만 활성화됨 (기존 haartraining 방식, 새로운 cascade 방식: haar feature, LBP feature, HOG feature)
  • 병렬처리 라이브러리인 tbb를 지원하도록 컴파일되었기 때문에 비교적 training 속도가 빠름
  • 파라미터중 nPositives에 실제 positive 샘플 데이터 개수를 입력해주면 내부적으로 알아서 관련된 파라미터 값들을 적절히 조절해줌 (기존 opencv training 유틸러티들은 실제 샘플 개수를 넣어줄 경우에는 training 도중 오류를 발생시키는 문제가 있었음). 만일 그럼에도 불구하고 training 도중 "OpenCV Error: Assertion failed (elements_read == 1) in unknown function"라는 에러 메시지가 발생하면 nPositives의 값을 조금 낮춰 주면 됨
  • training 도중 무한 루프에 빠질 수 있는 경우를 방지하는 코드가 내부적으로 포함되어 있음 (OpenCV Haar/cascade training 무한루프 방지 글 참조)
  • 파라미터중 nPositives에 실제 positive 샘플의 수를 입력해 주면 내부적으로 


[test 관련]

  • 학습된 haar classifier나 cascade classifier를 바로 불러와서 실시간 웹캠 또는 avi 동영상 파일에 대해 테스트해 볼 수 있음
  • 병렬처리 라이브러리인 tbb로 컴파일되었기 때문에 처리 속도가 빠름


[기타 특징]

  • CascadeTrainer.exe 실행파일 하나만으로 독립적으로 실행됨 (xp 이상의 윈도우즈 시스템에서 visual c++, opencv 없이도 동작)
  • 현재 설정값을 'save settings'를 통해 저장하면 이후 프로그램을 실행할 때마다 저장한 설정값으로 시작함


프로그램 사용법


프로그램 사용법 관련해서는 OpenCV Haar/cascade training 튜토리얼 글을 참조하시기 바랍니다. Haar training, cascade training에 대한 전반적인 내용 및 파라미터들에 대해 파악할 수 있습니다.


참고로, avi 동영상 파일을 불러와서 테스트하기 위해서는 통합 영상 코덱 등이 컴퓨터에 깔려 있어야 합니다.



☞ haar training, cascade training 관련 내용을 정리하면서 구현한 프로그램입니다. 이 툴을 사용하면 opencv 없이도 손쉽게 detector 학습이 가능할 것으로 생각합니다. 개인적으로 haar, cascade haar, cascade lbp까지는 training해서 테스트해 봤는데, hog는 너무 시간이 많이 걸려서 테스트해보지 못했습니다 ^^ 사용상 문의 사항은 댓글로 남겨주시기 바랍니다.


☞ 이 프로그램은 opecv에서 제공하는 코드를 단지 사용하기 쉽도록 포장한 것이므로 내부 코드나 구현이 바뀐 것은 전혀 없습니다 (다만, 무한루프를 방지하기 위한 코드만 추가되어 있음). 따라서, 프로그램 실행시 콘솔창에 출력되는 다양한 에러 메시지에 대해서는 opencv 원본 코드를 참조하시는게 가장 좋은 방법입니다 (원본코드 위치: opencv\apps\traincascade\).


by 다크 프로그래머