Haar/Cascade Training 프로그램

개발한 것들 2013.06.05 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 다크 프로그래머

  • 이전 댓글 더보기
  • joyy 2016.10.07 14:54 ADDR 수정/삭제 답글

    안녕하세요 다크님..
    올려주신 프로그램 잘 사용하고 있습니다.
    그런데 학습 과정중 궁금한 점이 하나 있습니다.
    샘플을 만드는데 http://darkpgmr.tistory.com/16의 프로그램을 활용하고 있는데
    동영상에서 사각형을 얻어 txt 파일을 만들면 프레임 별로 저장이 되던데..
    혹시 이 데이터를 positive 데이터로 넣을 수 있는 방법이 있나요?

    • BlogIcon 다크pgmr 2016.10.08 05:28 신고 수정/삭제

      동영상을 분해해서 이미지로 저장하고 이미지 이름을 프레임 번호로 하면 될 것 같습니다.

  • 취준생 2016.10.08 21:35 ADDR 수정/삭제 답글

    안녕하세요 예전에 야구배트 검출 및 추적으로 질문 드렸던적이 있는데... 기억 하실지 모르겠네요 ㅠㅠ
    제가 배트를 goodfeatureToTrack 으로 특징점을 찾고 optical flow로 추적을 하니까 생각보다 잘 안되네요 ㅠㅠ 특징점 찾을때 배트이외의 것들이 더 많이 잡혀 특징점으로는 도저희 안될것 같다는 생각이 들었습니다.
    그외에도 움직임 히스토리(MHI)를 적용해 보아도 역시 만족할 만한 결과가 안나왔습니다 ㅠㅠ
    그래서 찾아보던중 기계학습으로 할 수 있을것 같아서 또 찾던중 역시 다크님이 있더군요 ㄷㄷㄷ
    이번에는 이걸로 xml로 추출해서 가능할것 같은지 알 수 있을까요?ㅠㅠ

    • BlogIcon 다크pgmr 2016.10.09 05:02 신고 수정/삭제

      어렵다고 생각합니다. 저도 딱히 좋은 방법이 떠오르진 않습니다.

  • 취준생 2016.10.09 12:28 ADDR 수정/삭제 답글

    왜 어려울까요?ㅠㅠ
    단지 배트의 실시간 각도만 알면 됩니다

    • BlogIcon 다크pgmr 2016.10.09 13:56 신고 수정/삭제

      바로 배트의 각도가 변하기 때문에 어렵습니다. Haar나 HOG 등의 템플릿 매칭 계열의 방법으로 물체의 회전까지 고려해서 물체를 찾으려면 이미지를 회전시켜가면서 찾거나 아니면 모든 회전각에 대해서 물체를 찾을 수 있도록 학습을 시켜야 합니다. 이미지를 회전시키는 방법은 너무 시간이 많이 걸리기 때문에 현실적이지 않고 하나의 검출기가 모든 회전에 대해 동작하도록 학습시키는 것도 거의 불가능합니다. 결국 Haar나 hog 등의 일반적인 템플릿 매칭 계열의 방법을 사용하려면 각각의 회전한 형태별로 따로 따로 검출기를 여러 개 학습시킨 후 입력 이미지에 대해 검출기를 하나씩 적용해 보는 수밖에 없습니다. 그런데 이렇게 하려면 할 수도 있겠지만 쉽게 엄두가 나는 방법은 아닙니다. 그리고 설사 검출기가 영상에서 배트를 찾았다고 했도 앞서 검출 방법들은 사각형 박스 안에 배트가 있는지 여부만 알려줄 뿐 배트의 정확한 경계는 찾아내지 못합니다. 즉, 영상에서 배트를 잘 찾아주는 것에 성공했다고 해도 배트의 정확한 각도는 알기 힘듭니다.

  • 블랙 2016.10.20 17:43 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님

    질문사항이 있어서 글을 남깁니다.
    현재 hog training을 시켜서 생성된 xml파일로 detect AVI를 실행 시키면 어느정도 잘 실행되고 있습니다.
    현재 위의 CascadeTrainer 툴에서 detect AVI 부분을 python 코드로 작성하여 실행시키고 싶은데 방법을 잘 몰라 질문을 드립니다.
    haar로 생성한 파일은 실행이 되는 듯 하나, hog로 생성한 파일은 실행이 안되는 것 같습니다.
    hog = cv2.HOGDescriptor() 그리고
    hog.setSVMDetector( cv2.HOGDescriptor_getDefaultPeopleDetector() )
    를 어떻게 수정해야하는지 여쭤보고싶습니다.

    요약하자면, hogdescriptor의 default값이 아닌 train을 통해서 생성된 xml파일을 동영상 파일에 사용해서 detect하기 위해서는 python 코드를 어떻게 작성해야하는지 궁금합니다.
    아니면 cpp코드로 밖에 안되는지 궁금합니다.
    항상 좋은 자료를 제공해주셔서 감사합니다!

    • BlogIcon 다크pgmr 2016.10.20 18:20 신고 수정/삭제

      안녕하세요. 전 파이썬은 잘 모르지만 opencv에서 제공하는 샘플들 중에 cascade로 학습된 xml 파일을 이용해서 물체를 찾는 예제가 있으니 참조하시면 될듯 합니다. facedetect.py 파일을 보시면 됩니다. 그리고 말씀하신 hog.setSVMDetector()를 이용하기 위해서는 위 프로그램이 아니라 SVM을 이용해서 학습시킨 결과를 이용해야 합니다. 위 프로그램은 SVM이 아닌 cascading 기법을 이용한 것으로서 전혀 다른 내용입니다.

    • 블랙 2016.10.20 18:58 수정/삭제

      facedetect.py의 경우
      cv2.CascadeClassifier()라는부분에서, haar방식 xml파일은 괜찮은데 hog 방식의 xml파일은 적용이 안되서 고민중입니다.

      그러면 다크님은 저 툴에서 detect AVI 부분 코드를 c++로 작성하신 건가요?

    • BlogIcon 다크pgmr 2016.10.20 19:04 신고 수정/삭제

      네, c++로 작성했고 CascadeClassifier::load() 함수를 이용해서 xml 파일을 읽어들였습니다. 저는 파이썬을 이용하지 않아서 파이썬 버전과 cpp 버전의 opencv가 차이가 있는지는 잘 모르겠네요..

    • 블랙 2016.10.20 19:11 수정/삭제

      아마, opencv 3.X버전부터는 cascadeclassifier에서 hog 방식을 지원하지 않는 듯 합니다. 먼저 2.X버전을 받아서 테스트 해보고, 그렇게 해서도 안된다면 c++로 하는 방법을 생각해봐야겠습니다.

      아무튼 감사합니다!!

    • 블랙 2016.10.20 19:27 수정/삭제

      마지막으로 질문 하나 드리고 싶습니다.
      opencv 버전을 몇을 쓰고 계신지 여쭤봐도 될까요??
      opencv 3 버전에서는
      cascadedetect.cpp 파일에서
      bool CascadeClassifierImpl::Data::read(const FileNode &root) 메소드에서
      else if( featureTypeStr == CC_HOG )
      {
      featureType = FeatureEvaluator::HOG;
      CV_Error(Error::StsNotImplemented, "HOG cascade is not supported in 3.0");
      }
      이렇게 아예 hog를 지원하지 않는 것 같습니다. 그러면 opencv 3버전에서는 c++로 코딩한다고 해도 hog가 아예 불가능한거 아닌가요??

    • BlogIcon 다크pgmr 2016.10.21 00:21 신고 수정/삭제

      그렇네요.. 몰랐던 내용인데 감사합니다. 위 프로그램은 2.4.4로 컴파일한 것입니다. 그리고 코드를 확인해 보니 2.4.4에서는 CC_HOG가 지원되는 것 같습니다.

  • 이런 2016.10.28 16:51 ADDR 수정/삭제 답글

    안녕하세요-
    질문이 있어 글을 올립니다

    컬러 이미지
    20x20 의 얼굴 / 20 x 20 의 얼굴이 아닌 이미지 10000개를 이용해서
    haar traning 으로 계산하고
    pos 1000 / neg 10000
    pos 10000 / neg 1000
    이런식으로 바꿔가며 계산 한 결과로

    detectMultiScale 에 적용해 봤는데
    전부 얼굴은 커녕 엣지가 생기는 곳은 다 잡더라구요.. ㅠㅠ

    제가 설정을 이상하게 해서 그럴까요 ?
    positive에 들어가는 데이터가 중복되는게 있어서 그럴까요 ?
    학습 개수가 작아서 그럴까요 ?
    opencv에서 제공하는 xml 은 파일 용량이 엄청 크던데
    누적해서 학습을 하면 그렇게 되나요 ?
    누적해서 학습을 한다는건 nStages를 늘리기만 하면 안될듯한데
    인터넷 보면 다른 분들은 잘 되는 듯 한데 저만 안되는 것 같고 ..
    뭐가 문제인지 모르니 더 어렵네요 ㅠㅠ

    • BlogIcon 다크pgmr 2016.10.28 18:02 신고 수정/삭제

      negative 샘플에 문제가 있는 것 같습니다. negative 샘플은 20x20 패치가 아니라 얼굴이 포함되지 않은 일반 이미지를 원본크기 그대로 사용하면 됩니다. 그러면 학습기 내부적으로 알아서 20x20 패치를 잡아서 학습을 진행하게 됩니다.

  • BlogIcon Makeii 2016.11.07 17:23 신고 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님!
    프로그램을 사용하다 막히는 부분이 있어 질문드립니다.

    샘플을 만들고 negative 파일들을 txt에 정리한 뒤 LBP training을 수행하려고 하는데
    샘플을 읽는 것은 문제 없지만 negative 들어가면 항상 응답없음이 뜹니다.
    5분을 기다려도 수행되지 않고요.

    negative에 있는 파일들의 W/H가 너무 크면 처리가 안되는 경우도 있나요?
    negative의 파일들의 크기는 1600*1200입니다

    • BlogIcon 다크pgmr 2016.11.08 07:01 신고 수정/삭제

      그건 저도 잘 모르겠습니다. opencv에서 제공하는 코드에 gui만 덧붙인 것이라서.. 이미지 크기가 크다고 안될 것 같진 않은데요, negative에 있는 이미지들을 임시로 작은 크기로 해서 테스트해 보시면 어떨까 싶습니다.

    • BlogIcon Makeii 2016.11.08 11:29 신고 수정/삭제

      답변 감사드립니다. 초보라 그런지 모르는 것이 많아 미숙하네요ㅜㅜ

      추가적으로 질문을 드리고 싶습니다ㅜ
      negative의 개수를 100개/positive의 개수를 1000개로 하고 stage를 14로 설정한뒤 수행하였습니다. 나머지는 기본값입니다.
      8stage에서 Required leaf false alarm achieved. Branch training terminated. 라는 문구가 뜨면서 종료되는데 무슨 오류로 종료된 것일까요?ㅠㅠ

    • BlogIcon 다크pgmr 2016.11.08 13:11 신고 수정/삭제

      그건 오류가 아니고 목표성능이 달성되어 정상적으로 학습이 종료된 것입니다. opencv의 관련 소스코드에서 해당 메시지를 찾아보시면 코드의 흐름에 대해 좀더 자세한 내용을 아실 수 있습니다.

    • BlogIcon Makeii 2016.11.08 15:12 신고 수정/삭제

      아 그렇군요 정말 감사합니다ㅠㅠㅠ
      다크님의 블로그가 정말 많은 도움이 되고 있습니다 좋은 자료 항상 감사드려요ㅠㅠ!!

  • 설터 2017.01.07 10:11 ADDR 수정/삭제 답글

    안녕하신가요! 혹시 어려운 부탁을 드려도 될까요

    제가 이 프로그램으로 Haar cascade training을 수행할때 stage별로 프로그램이 메모리를 계산하는데

    항상 4GB 쯤에서 out of memory가 발생해서 프로그램이 종료됩니다.

    알아보니 이 프로그림이 32bit기반이라 4GB에서 할당이 안되서 멈추는것 같습니다.

    혹시 이 프로그램을 64bit로 만들어 주실수 있을까요 ??
    아니면 오픈소스라도 알려주신다면 직접 64bit로 만들수 있을것 같습니다.

    • BlogIcon 다크pgmr 2017.01.12 15:41 신고 수정/삭제

      안녕하세요. 되도록 변환해서 올려보려고 했는데 간단하게는 해결이 안되네요.. 이게 예전의 opencv2.4.4 버전의 소스로 컴파일 되어 있어서 요즘 컴파일러로 하려니 걸리는 문제가 많습니다.. 64비트를 지원하려면 아무래도 나중에 시간을 들여서 opencv 최신 버전의 traincascade 코드로 다시 빌드해야 할 것 같습니다.

  • 대학생 2017.04.17 22:27 ADDR 수정/삭제 답글

    안녕하세요 캡스톤 디자인 수업으로 물체인식을 찾다가 여기까지 오게되었습니다.
    올려주신 프로그램을 사용해보려고 하는데요. 이런것이 처음이라 어떻게 하는건지 감이 안잡히네요 ㅠ
    positive와 negative 이미지는 원하는 물체를 캡쳐한 이미지면 되는건가요? 아니면 가로 세로크기가 일정한 이미지여야 하나요??

    • BlogIcon 다크pgmr 2017.04.18 18:51 신고 수정/삭제

      positive 이미지는 물체가 포함된 이미지고 negative 이미지는 물체가 포함되지 않은 이미지입니다. 자세한 프로그램 사용법은 튜토리얼 글을 참조하시기 바랍니다.

  • phiver707 2017.05.06 14:45 ADDR 수정/삭제 답글

    정말 유익한 프로그램 만들어주셔서 감사합니다.
    이 프로그램을 이용해서 사람의 얼굴을 인식할 수 있을 수준의 cascade파일을 만들고자 하는데 positive, negative샘플을 얼마나 준비해둬야 하나요? 인물 사진 100장과 배경사진 3000장 정도로 해봤는데 얼굴을 인식하지를 못해서 그럽니다. 죄송하지만 더 많은 사진을 준비해야 하는지 설정에 문제가 있는지 조언 주시면 감사하겠습니다.

    • BlogIcon 다크pgmr 2017.05.07 17:55 신고 수정/삭제

      opencv에 있는 툴을 사용하기 쉽게 만든 것일 뿐.. 제가 이것을 이용해서 얼굴 인식기를 학습한 적은 없습니다. 학습 성능에 영향을 미치는 요소는 워낙 다양하기 때문에 이건 이거다라고 딱부러지게 말하기는 정말 어렵습니다. 샘플 개수도 중요하겠지만 모델의 크기를 어떻게 잡는지에 따라서도 성능의 편차가 크고 샘플들이 얼마나 잘 얼라인이 맞게 되어 있는지 (정규화가 잘 되었는지) 등도 성능에 영향을 미칠 것입니다. 그리고 Haar 방법이 성능이 좋은 건 아니라서 학습을 잘 시켜도 문제에 따라서는 실망스런 성능이 나올 수 있습니다. opencv에 미리 학습된 xml 파일들이 제공되니 제공된 xml 파일들로 Haar 방법이 얼마나 성능이 나오는지 테스트해 보는 것도 좋은 방법입니다.

    • phiver707 2017.05.07 19:59 수정/삭제

      조언 정말로 감사드립니다.

  • placto 2017.05.26 15:27 ADDR 수정/삭제 답글

    positive 샘플 학습시킬 때 파일의 확장자 랑 size같은거는 상관없나요?
    지금 dataset 가지고 있는게 .pgm파일이랑 92x112x8b 로 나오는데 그대로 사용해도 괜찮은지 궁금합니다

    • BlogIcon 다크pgmr 2017.05.26 15:47 신고 수정/삭제

      학습에 사용할 이미지의 크기나 확장자는 어떤 것을 써도 상관없느냐는 말씀이시지요? 처음에는 확장자와 size가 같아도 되느냐(확장자 = size)는 말인줄 알고 무슨 말인가 했습니다.. 이미지 포맷(확장자)는 opencv가 읽을 수 있기만 하면 됩니다. 대부분 거의 모든 포맷을 읽을
      수 있습니다만 pgm을 읽을 수 있는지는 한번 확인해 보시기 바랍니다. 그리고 이미지 크기도 관계없습니다. 입력한 이미지 크기를 그대로 사용하는 것이 아니라 파라미터로 입력한 width, height 크기로 크기를 변경해서 사용하기 때문입니다.

  • 호롤롤리 2017.05.30 07:14 ADDR 수정/삭제 답글

    안녕하세요 학습중에 궁금한점이 생겨서 여쭈어보고 싶습니다. haar cascade training을 통해 얼굴인식에 대한 xml파일을 생성해서 실행하니 xml을 못불러들이는 것 같습니다. opencv에서 제공하는 정면얼굴 검출 frontalface_alt2.xml파일과 xml편집기를 통해 구조를비교해보았을때 제가 설정한 mode all 부분 외에는 구조상 차이는 없었습니다. pos 1000, neg 500 샘플로 multi expand로 sample 생성 및 cascade haar training을 해서 done 결과를 확인하고 xml파일까지 생성이 되었음에도 불구하고 opencv에서 제공하는 xml파일로는 실행이 되는데 제가 학습시킨 xml로 불러오는경우에는 결과가 나타나지 않아서 이부분에 대해서 여쭈어봐도 될까요??

    • BlogIcon 다크pgmr 2017.05.30 08:39 신고 수정/삭제

      그건 저도 잘 모르겠습니다. cascade 학습기를 제가 실제로 사용하는 건 아니라서요.. 추측컨테 프로그램이 죽거나 runtime error가 난 것이 아니라면 학습하신 xml 파일이 아마도 학습이 잘 안된 것이 아닐까요? cascade 학습기가 그렇게 성능이 잘 나오는 것이 아니라서요..

  • placto 2017.05.30 15:14 ADDR 수정/삭제 답글

    안녕하세요. 저도 윗분과 비슷한 경우가 생겨서 질문드립니다.
    pos 1500, neg1500 정도의 샘플에 multi expand 샘플생성, cascade haar training으로 진행을 해서 만들어진 xml파일로 검출을 해봤습니다.
    그런데 opencv에서 제공하는 xml을 이용하는 함수로는 잘 나오는데 다른 코드는 동일하고 xml파일만 제가 만들어본 xml파일로 변경해서 실행하면 결과가 나오질 않습니다... 샘플 수를 좀더 늘려서 다시 학습을 시켜야하는 걸까요?

    • BlogIcon 다크pgmr 2017.05.30 16:35 신고 수정/삭제

      한가지 확인드리고 싶은 것이 있는데요.. 테스트를 위 프로그램으로 진행한 것인가요 아니면 최신 opencv 코드로 진행한 것인가요? 보시다시피 위 프로그램에도 학습한 결과를 테스트할 수 있는 기능이 포함은 되어 있습니다 (Test Classifier/Detect AVI...). 만일 최신 버전 opencv를 사용한 별도 프로그램으로 테스트를 진행한 것이라면 위 프로그램으로도 한번 테스트를 진행해 보시면 바랍니다. 그리고 결과를 알려주시면 감사하겠습니다.

    • placto 2017.06.04 16:16 수정/삭제

      노트북 웹캠으로 테스트를 해봤는데 검출이 전혀 안되네요..

    • BlogIcon 다크pgmr 2017.06.05 12:09 신고 수정/삭제

      네 감사합니다. 혹시 opencv 버전의 문제가 아닌가 해서 여쭤봤습니다. 학습은 저도 잘 아는 편이 아니라서..

  • 티거 2017.05.31 13:35 ADDR 수정/삭제 답글

    안녕하세요. 다크님.
    opencv에서 제공하는 코드에 gui만 붙이셨다고 하셨는데
    Test Classifier의 Detector 부분도 opencv에서 제공하는 예제소스에서 gui 만 붙이신건가요?
    같은 cascade xml파일로 다크님의 프로그램과 opencv 예제소스의 실험 결과가 다르게 나와서
    문의드립니다.

    • BlogIcon 다크pgmr 2017.05.31 13:43 신고 수정/삭제

      네 맞습니다. 결과가 다른 것은 아마도 opencv 버전의 차이일지도 모르겠습니다. 위 프로그램은 opencv 2.4.4를 사용한 것입니다.

  • Huhs 2017.06.01 12:29 ADDR 수정/삭제 답글

    안녕하세요 다크님 항상 다크님정보에많은도움을받고있습니다 haar training할때 expand n 값을1로하고 샘플을 만들면 positive이미지에서 parse error가뜨며 제가설정한 800개 샘플중에 400개정도만생성이됩니다... expand n값을늘리면 에러가나지않지만 제가이해하기론 샘플에서 1개의특징만찾으려고 expand n 을 1로설정한것인데 잘못이해한건지물어보고싶습니다 그리고 괜찮으시다면 칼라영상에서 특징을찾을때 pos neg모두 24b 칼라영상으로해야되는지 그레이스케일영상에경우에는 pos neg 모두 8b 그레이영상으로설정해야되는지..이부분에대한조언을해주시면 진심으로감사드리겠습니다ㅠㅠ

    • BlogIcon 다크pgmr 2017.06.01 14:30 신고 수정/삭제

      안녕하세요. 에러 원인은 저도 코드를 확인해 봐야 알 것 같습니다. 만일 n = 1로 사용하는 목적이라면 'multi preserve' 옵션을 사용하면 좋을 것 같습니다. 그리고 입력 이미지는 칼라나 그레이 모두 괜찮습니다. 내부적으로 항상 그레이로 변환해서 사용하기 때문입니다.

  • hansel123 2017.06.08 07:43 ADDR 수정/삭제 답글

    안녕하세요 혹시 이 exe파일을 ubuntu에서 사용할 수 있나요?

    • BlogIcon 다크pgmr 2017.06.08 10:07 신고 수정/삭제

      아니요.. windows에서 컴파일된 것이라 우분투에서는 사용할 수 없습니다.

  • haekrk 2017.09.01 00:35 ADDR 수정/삭제 답글

    안녕하세요.. 관련 글들 보면서 궁금증이 생겨서 글을 남기게 되었습니다.

    haar를 이용하여 동영상을 돌렸을때 검출율과 정확도를 알고 싶은데요, 올려주신 cascade trainer에서 minHitRate와 MaxFalseAlarmRate를 제가 임의로 설정해주고 트레이닝을 시키면 결과도 그 설정해준 값과 비슷하게 나오는 건가요??

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

      학습한 데이터에 대해서 그렇다는 것이지 실제 성능이 그렇게 된다는 것은 아닙니다. 실제 성능은 대부분 훨씬 낮을 것으로 생각됩니다.

    • haekrk 2017.09.01 18:29 수정/삭제

      실제 성능은 설정값에 따라 변하게 되는건가요??

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

      네, 영향을 받긴 합니다만 학습데이터, 학습알고리즘 등 여러가지 요인에 의해 영향을 받습니다. 문제에 따라서는 아무리 학습을 시켜도 성능이 잘 안나올 수도 있구요..

    • haekrk 2017.09.03 12:22 수정/삭제

      답변 정말로 감사드립니다ㅠㅠ 많은 도움이 되었습니다.

  • moam1127 2017.10.06 23:12 ADDR 수정/삭제 답글

    안녕하세요 다크님 덕분에 많은 도움 받고 있습니다!!
    다름이 아니라 이 프로그램을 잘 사용하고 있었는데 어느 순간부터 vec 파일은 잘 생성이 되는데
    갑자기 train을 하는 도중 stage2를 넘어가지 못하고 계속 TODO : <File description> 이런 오류가 떠서 프로그램이 되질 않습니다 ㅠㅠ 혹시 해결법 알고 계신가요??

    • BlogIcon 다크pgmr 2017.10.09 15:10 신고 수정/삭제

      안녕하세요. 저도 어떤 것인지 몰라서 인터넷을 찾아봤지만 저는 잘 모르겠습니다. "TODO: <File description> has stopped working" 이라는 에러메시지와 관련된 자료들을 한번 검색해 보시기 바랍니다.

    • hgeun 2017.10.12 18:37 수정/삭제

      저도 같은 증상이네요.....
      무엇을 만져야할지 감이 안잡힙니다..

  • IN102030 2017.11.26 01:58 ADDR 수정/삭제 답글

    다크 프로그래머님 안녕하세요. 간단하게 create sample을 시험해볼려고 하는데 multiexpand로 샘플을 만들면 '0 sample created'라고 뜨네요 프로그램이 네거티브 이미지 는 불러오는데 positive image를 불러오지를 못하네요.

    • BlogIcon 다크pgmr 2017.11.26 14:13 신고 수정/삭제

      이미지 파일 중 gif 포맷은 읽지 못합니다. 그 외의 원인이라면 저도 잘 모르겠습니다.

  • tlsude 2018.09.27 12:50 ADDR 수정/삭제 답글

    안녕하세요. 딥러닝 모델들의 트레이닝 방법을 간단하게 합치려고 저런 프로그램을 (.exe 파일) 만들고 싶은데 (ubuntu 환경에서 c++로) 참고할만한 사이트 있을까요??

  • 추파춥스 2019.03.07 09:38 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님, 항상 글 잘 보고 있습니다. SVM 학습할 이미지를 가지고 xml을 생성하려고 하는데 저 프로그램 말고 소스코드로 된 건 혹시 없을까요.. sample 소스도 찾아봐도 안보여서요...ㅠㅠ OpenCV 2버전과 C++ 사용 중입니다.