NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    딥러닝 다크넷 YOLO 학습 및 테스트 수행하기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 이 글이 욜로를 이용한 딥러닝의 마지막이 될듯합니다. 추가로, 뭔가 더 진행할 내용이 있을지는 모르겠으나~ 아무튼 마지막 글이 될거 같네요. 이전 글들을 통해서 Darknet의 YOLO와 yolo mark를 컴파일 하고 환경을 구성했습니다. 그리고, 학습시킬 데이타셋을 만들어봤죠? 마지막으로 데이타셋으로 학습을 돌리고 나온 모델로 테스트를 해보면 원하는(?)데로 학습시키고, 이미지를 감지할 수 있는 시스템을 가지게 될겁니다^^

    qrrwl3m.gif

     

     

    트레이닝을 위한 선행 학습

    이전 글에서 yolo mark를 사용해서 데이타셋을 만들었습니다. 트레이닝 관련 내용도 같이 다루었어야 했는데요. 아무래도 데이타셋을 만드는 방법에만 집중하다보니 그냥 건너뛰게 되었습니다. 여기서 몇가지 설명하고, 옵션들을 수정하고 넘어가야 합니다.

     

    yolo-obj.cfg (학습에 필요한 속성 콘피그 파일)

    이 파일은 데이타셋을 학습할 때 필요한 여러가지 속성들을 설정할 수 있습니다. 좋은 품질의 학습 데이타를 얻으려면 몇가지 수정해야 합니다.

    • batch: 기본 값은 64로 특별히 변경하지 않아도 됩니다. 이 값은 한 사이클에 몇장을 처리할지 정하는 값입니다.
    • subdivisions: batch를 이 값만큼 나누어서 처리합니다. 기본값은 8이지만 Out of memory 에러가 날 경우 16 또는 32, 64로 조절하여 시도해야 합니다.
    • height, width: 입력되는 이미지의 크기입니다. 이미지의 크기가 클수록 정확도가 높아지지만 성능은 하락합니다.
    • angle: HARR 또는 Tensorflow Inception과 동일하게 입력되는 데이터로부터 다양한 학습을 위한 설정값입니다. 보통은 0으로 두지만, 기울기에 따라 15~90도까지 가능합니다.
    • saturation: 이미지의 채도를 조절할 때 설정하는 값입니다.
    • exposure: 이미지의 노출을 조절할 때 설정하는 값입니다.
    • hue: 이미지의 색조를 조절할 때 사용하는 값입니다.
    • learning_rate: 기본 값은 0.001입니다. multi-gpu 사용시 0.001 / gpu수만큼 조절해서 사용할 수 있습니다.
    • burn_in: 기본 값은 1000입니다. multi-gpu 사용시 Iteration이 지날 때 마다 학습률을 조정할 것인지 설정합니다. gpu 수 * 1000으로 설정합니다.
    • max_batches: Iteration(반복) 횟수를 설정할 수 있습니다. 일반적으로 Class 수 * 2,000입니다. 더 복잡한 작업이라면 3,000 또는 4,000을 곱합니다. 추가로 200을 더해줍니다. 클래스가 3이라면 3*2,000+200=6,200입니다. 200은 전후로 알맞은 가중치를 얻기 위한 값입니다.
    • steps: 100, 500, 1000과 같이 입력합니다. 500, 1000을 입력해도 됩니다. 입력한 스텝까지 배치 후 학습 속도를 조정합니다.
    • scales: 0.1, 0.2, 0.3과 같이 입력합니다. 이 값은 steps에 입력한 값에 대응합니다. steps 100 후에 LR에 0.1을 곱한 다음 500 후에 다시 0.2를 곱합니다. 1000에서 0.3을 곱합니다.

     

    이외에도 학습과 관련된 옵션들이 많습니다. 다른 옵션들은 특별하게 조정할 필요가 없거나 기본 값을 사용하여 학습하는걸 추천드립니다. 이 옵션들에 대해 더 자세히 알고 싶다면 아래 링크에서 도움을 받을 수 있습니다.

    https://pjreddie.com/darknet/yolo/

     

    공통적으로 수정해야 하는 부분은 2가지입니다.

    classes와 filters입니다. 메모장에서 Ctrl+F를 눌러서 classes와 filters를 모두 수정하세요.

    classes: 감지 또는 검출할 이미지의 수입니다. 이 예제에서는 air, bird, person으로 3개입니다.

    filters: 5*(클래스 수+5) 입니다. 이 예제에서는 40입니다. 

     

    obj.names 파일 설정

    클래스의 이름입니다. 이 예제에서는 air, bird, person 3개이며, 아래 그림과 같이 한줄에 하나씩 입력해야 합니다.

    oS18Vck.png

     

     

    obj.data 파일 설정

    아래 이미지를 보면 크게 어려운 부분은 없습니다. train과 valid가 동일하게 설정되어 있는데요. 이 부분을 분리하여 처리가 가능합니다. valid image(유효한 이미지)를 별도로 목록화하여 valid = data/valid.txt로 만든 후 수정하여 사용하면 됩니다. 그리고, 마지막 backup은 학습을 반복하면서 weight가 저장되는 폴더 위치를 말합니다.

    Dd9brbJ.png

     

     

    트레이닝을 위해 이미지넷에서 프리트레이닝(미리 훈련된)된 컨볼루션 웨이트와 다크넷의 darknet53 모델의 가중치를 사용합니다. 아래 링크에서 컨볼루션 레이어의 가중치를 다운로드 할 수 있습니다.

    https://pjreddie.com/darknet/yolo/

    ※ 컨볼루션(합성곱): 트레이닝 함수를 반전시키고 이동시켜 값을 곱해 구간에 대해 적분하는 공식

    rrMdm5g.png

     

     

    대략 용량이 150메가쯤 합니다. 이 파일을 다운로드 받은 후 다크넷 프로젝트의 build/x64 폴더에 복사합니다.

    CgU81bj.png

     

     

    yolo mark 프로젝트의 data폴더안의 모든 파일을 다크넷의 data폴더에 복사합니다. 그리고, yolo mark의 yolo-obj.cfg파일은 data밖(x64)에 저장하세요.

    lcH2Iv4.png

     

     

    Windows Command를 관리자 권한으로 실행한 후 다크넷의 x64디렉토리로 이동합니다.

    3jSVPFE.png

     

     

    아래 명령으로 트레이닝을 실행시킵니다.

    darknet detector train data/obj.data data/yolo-obj.cfg darknet53.conv.74

    7J4OILT.png

     

     

    학습이 완료되면 아래와 같이 backup 폴더에 가중치 파일이 생성된걸 확인할 수 있습니다.

    vVUXS8D.png

       

       

    Windows Command에서 아래 명령으로 간단하게 테스트 해볼 수 있습니다.

    darknet detector test data/obj.data yolo-obj.cfg backup/yolo-obj_2000.weights air.png

    wvh1nLu.png

     

     

    이미지 몇장으로 테스트한거라서 그런지... 정확도는 높지 않네요. 보통 최소 300에서 30,000장을 학습시켜야 괜찮은 결과를 얻을 수 있다고 합니다. 물론, 전처리도 중요하죠. 생각해보면 수백에서 수만장의 사진을 수작업으로 train과 valid 이미지를 만든다는건~ 많은 노력과 시간이 들어가는 작업인걸 알 수 있습니다. 이 내용을 토대로 원하는 결과를 얻을 수 있었으면 좋겠네요.

     

    DdDN5ib.jpg

     

     

    위 그림에서 알 수 있듯이 저와 같은 개발자는 갑을병정무己에 위치하고 있습니다. 노력에 비해 정당한 대우를 받기 어려운 환경이지만, 그래도 기술직이다보니 스스로 창작 활동하기엔 좋은 직업이기도 합니다. 참고로 현업에서 불량을 제거하기 위한 활동으로 Vision Machine Learing을 이용합니다. 생산 라인의 주요 공정마다 카메라가 일렬로 스트리밍하고 이 영상은 리얼타임으로 분석됩니다. 만약, valid하지 않은 경우 해당 이미지는 캡쳐되고 서버에 별도로 저장됩니다. 일부 환경에서는 사용자가 직접 개입해서 한번 더 Negative를 Filtering합니다.

    4ri8RnB.jpg

     

     

    저장된 이미지는 재학습을 거쳐 좀 더 좋은 품질의 가중치 모델을 만들게 됩니다. 제조 공정에서 APC(Advanced Process Control) / R2R(Run to Run)과 같은 플로우를 구성한다면 자가 학습이 가능한 비전 분석 시스템을 구축할 수 있습니다. 지금까지 HARR, Python Tensorflow, Darknet을 사용하면서 가장 쉽게 시스템을 구축하고 학습시킬 수 있는 솔루션은 Darknet이라는걸 알게되었습니다. 그리 어렵지 않으니 한번 도전해보시기 바랍니다.

    감사합니다.

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.