NGMsoftware

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

    학습


    딥러닝 욜로 딥러닝을 하기 위한 데이타셋 만드는 방법과 학습하기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 에디터는 텐서플로우를 이용한 머신러닝과 욜로 딥러닝을 이용해서 이미지를 분류하고, 검색할 수 있는 아주 막강한 기능을 가지고 있습니다. 하지만, 데이타셋을 만들고 학습시키는 어려운 과정들이 있는데요. 이 부분 때문에 중도에 포기하시는 분들이 많습니다. 개발자라면 아래 글들을 읽어보시면 충분히 혼자 할 수 있을겁니다.

    [ 윈도우에서 욜로 환경 구성하기  ]

    [ 욜로 데이타셋 만들기 ]

    [ 욜로 학습 하기 ]

     

    비개발자분들은 [ 여기 ]를 통해서 이미 만들어진 욜로 마크를 받으세요. 관리자로부터 파일을 받은 후 압축을 풀면 아래와 같은 파일들이 들어 있습니다.

    mnunfXu.png

     

     

    yolo_mark.cmd 파일을 더블클릭해서 실행하면 데이타셋을 만들 수 있습니다. 아래 그림은 샘플로 넣어놓은 데이타입니다.

    oDDihBS.png

     

     

    학습시킬 이미지들을 전부 캡쳐했다면 train.txt 파일과 img 폴더안에 모든 파일을 삭제 해줍니다. 저는 고양이를 찾을겁니다.

    ZfFxHoc.png

     

     

    obj.data 파일을 더블클릭하여 내용을 아래와 같이 수정하세요. classes를 찾을 이미지 갯수로 설정해야 합니다. 화면에서 고양이를 찾을거라서 1로 설정했습니다. 만약, 찾아야 하는 이미지가 고양이와 개라면 2가 됩니다. 좀 더 쉽게 이해하기 위해 게임을 생각 해보세요. 필드에 몬스터가 장로, 커츠, 여왕 개미, 박쥐 인간이 있다면 클래스는 4가 됩니다.

    classes= 1
    train  = data/train.txt
    valid  = data/train.txt
    names = data/obj.names
    backup = backup/

     

    obj.names 파일을 실행하고, 찾을 이미지를 식별할 수 있는 이름을 한줄씩 입력해주세요. 이 예제에서는 고양이만 있으면 됩니다만, 게임에서 사용한다면 장로, 커츠, 여왕 개미, 박쥐 인간과 같이 4개를 모두 입력해야 합니다. 위에 클래스 숫자와 같아야 합니다.

    air
    bird
    person

     

    실제로 내가 원하는 이미지로 학습을 해야겠죠? 욜로 마크의 옵션을 설정하세요. yolo_mark.cmd와 같은 위치에 yolo-obj.cfg 파일이 있습니다.

    GIcUs8N.png

     

     

    편집기에서 Control+F로 찾기를 실행하세요. region을 찾으세요.

    [net]
    batch=64
    subdivisions=8
    height=416
    width=416
    channels=3
    momentum=0.9
    decay=0.0005
    angle=0
    saturation = 1.5
    exposure = 1.5
    hue=.1
    
    learning_rate=0.0001
    max_batches = 45000
    policy=steps
    steps=100,25000,35000
    scales=10,.1,.1
    
    [convolutional]
    batch_normalize=1
    filters=32
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [maxpool]
    size=2
    stride=2
    
    [convolutional]
    batch_normalize=1
    filters=64
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [maxpool]
    size=2
    stride=2
    
    [convolutional]
    batch_normalize=1
    filters=128
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=64
    size=1
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=128
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [maxpool]
    size=2
    stride=2
    
    [convolutional]
    batch_normalize=1
    filters=256
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=128
    size=1
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=256
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [maxpool]
    size=2
    stride=2
    
    [convolutional]
    batch_normalize=1
    filters=512
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=512
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=256
    size=1
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=512
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [maxpool]
    size=2
    stride=2
    
    [convolutional]
    batch_normalize=1
    filters=1024
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=1024
    size=3
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=512
    size=1
    stride=1
    pad=1
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    filters=1024
    size=3
    stride=1
    pad=1
    activation=leaky
    
    
    #######
    
    [convolutional]
    batch_normalize=1
    size=3
    stride=1
    pad=1
    filters=1024
    activation=leaky
    
    [convolutional]
    batch_normalize=1
    size=3
    stride=1
    pad=1
    filters=1024
    activation=leaky
    
    [route]
    layers=-9
    
    [reorg]
    stride=2
    
    [route]
    layers=-1,-3
    
    [convolutional]
    batch_normalize=1
    size=3
    stride=1
    pad=1
    filters=1024
    activation=leaky
    
    [convolutional]
    size=1
    stride=1
    pad=1
    # filters의 수는 5*(classes+5) 공식을 따릅니다.
    filters=40
    activation=linear
    
    [region]
    anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
    bias_match=1
    # 기본 클래스 2개(Air, Bird)와 추가한 1개(Person)입니다.
    classes=3
    coords=4
    num=5
    softmax=1
    jitter=.2
    rescore=1
    
    object_scale=5
    noobject_scale=1
    class_scale=1
    coord_scale=1
    
    absolute=1
    thresh = .6
    random=0
    

     

    classes는 감지 또는 검출하고자 하는 오브젝트의 수입니다. 여기에서는 고양이 하나뿐이므로. 이 값을 1로 변경해줍니다. 그리고, 위에 filters는 30로 변경합니다. filters는 5*(classes+5)의 공식으로 처리합니다. 클래스 1에 5를 더한 후 5를 곱해서 필터수를 계산합니다. 만약, 찾아야할 이미지가 4개라면 클래스는 4가되고 필터는 50이 됩니다.

    [convolutional]
    size=1
    stride=1
    pad=1
    filters=40
    activation=linear
    
    [region]
    anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
    bias_match=1
    classes=3
    coords=4
    num=5
    softmax=1
    jitter=.2
    rescore=1

     

    이 파일은 트레이닝을 하기 위한 옵션들이 모두 정의되어 있습니다. 자세한 사용법은 아래 링크에서 확인할 수 있습니다.

    https://github.com/AlexeyAB/Yolo_mark

     

    yolo_mark.cmd파일이 있는 위치에서 data/img 폴더에 학습할 이미지들을 저장시킵니다. 좀 더 편하게 이미지들을 가공하려면 [ 이미지 에디터 커스텀 모듈 ]을 이용할 수 있습니다. 커스텀 모듈은 모든 이미지의 사이즈 및 필터를 균일하게 조정할 수 있습니다. 이 예제에서는 기본 포함되어 있는 이미지외에 person.jpg를 하나 넣어 두었습니다.

    drADnhO.png

     

     

    저는 예제를 위해 고양이 이미지 3장을 넣어두었습니다. 여러분들은 실제 학습시킬 이미지를 모두 넣어야 합니다. 최소 300장 정도 필요합니다^^; 다시 yolo_mark.cmd 파일을 더블 클릭해서 실행하세요. 아래와 같이 추가한 파일들의 목록이 상단에 보이고 하단에 데이타셋을 만들기 위한 영역이 만들어집니다. 이미지를 하나씩 선택하면서 마우스로 영역을 설정합니다. 만약, 영역을 잘못 선택했다면 영역 위에 마우스를 두고 R키를 누르면 삭제됩니다.

    ZrFBSuS.png

     

     

    두번째 이미지를 선택하고, 아래와 같이 영역을 설정하세요.

    0TyHzRT.png

     

     

    3번째 이미지에는 고양이가 2마리 있습니다. 둘다 설정해야 합니다.

    EE5vCuK.png

     

     

    찾을 이미지 종류가 여러개라면 한 이미지에서 object id를 변경해가면서 영역을 설정해야 합니다. 참고로, obj.names에는 한글은 안됩니다^^; 알수없는 문제가 발생할수도 있으니 가능하면 영문으로 작명하는게 좋습니다. 그래서 저는 cat으로 이름을 설정했습니다. 안전한 방식으로 하는게 좋아요~ 고단한 노가다 작업으로 300장 이상 모두 이미지를 처리했으면 ESC를 눌러서 종료하시면 됩니다. 게임이라고 한다면 이미지는 300장이지만~ 각각의 몬스터만큼 박스를 그려줘야 하기 때문에 상당히 고단한 작업이 될겁니다. img 폴더에 보면 데이타셋 정보를 기록한 txt 파일들이 생성되어 있습니다.

    GBht7XB.png

     

     

    train.txt 파일도 생성되었을겁니다. 내용은 img 폴더의 이미지들 목록입니다. 여기까지가 욜로 딥러닝을 하기위한 데이타셋 만들기였습니다. 그렇게 어렵지는 않죠^^? 만들어진 데이타셋을 이용해서 학습시키고, 모델을 만드는 방법은 [ 여기 ]를 참고해서 다크넷 디텍션 트레이닝을 돌리면 됩니다.

    ※ 데이타셋을 다 만드셨으면 관리자에게 학습 요청하시면 소정의 수고비를 받고 모델을 만들어드립니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

     

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

    댓글목록

    등록된 댓글이 없습니다.