YOLO 모델 학습 위한 데이터셋 준비 작업

우디·2024년 2월 19일
0
post-thumbnail

안녕하세요:) 개발자 우디입니다! 아래 내용 관련하여 작업 중이신 분들께 도움이되길 바라며 글을 공유하니 참고 부탁드립니다😊
(이번에 벨로그로 이사오면서 예전 글을 옮겨적었습니다. 이 점 양해 부탁드립니다!)

작업 일시: 2020년 하반기 ~ 2021년 4월

1. 원하는 데이터 수집

  • 배경
    • 데바데 게임 주요 장면 객체 탐지를 위한 데이터 수집 작업
    • '데이터 수집' 작업은 앞으로 라벨링 작업을 진행하기 위해 필요한 데이터들을 수집하는 과정
    • 본 작업에서는 게임 방송 영상에서 특정 객체(Object)가 나오는 장면을 데이터로 얻고자 함
    • 스트리밍 영상에서 원하는 대상이 나오는 장면을 캡쳐하는 방식
  • 작업 개요
    • 트위치 사이트로 이동
    • 데바데 게임 영상을 검색하여 찾고, 영상 다시보기 페이지로 이동
    • 영상을 '전체화면'으로 재생한 후, 원하는 부분에서 캡쳐를 진행.
    • 영상 해상도는 영상이 지원하는 가장 높은 해상도로 진행하는 것 추천 (1092*1080 정도면 바람직)
    • 캡쳐된 이미지들을 각각 클래스별 폴더에 나눠 저장
  • 작업 상세
    • 폴더 구조는 아래와 같이 구성.

      - DEAD BY DAYLIGHT
        - 클래스1
          - images
          - labels
        - 클래스2
          - images
          - labels
        ...생략...
    • 클래스는 아래와 같이 구성

      • 게임 시작

        • 클래스 명) DBD_START
        • 캡쳐) 게임 시작 전 '게임 시작 까지 00:00'라는 문구와 함께 게임 로고가 나오는데, 게임 로고가 빨간색으로 완전히 채워진 장면(보통 5초 남았을 경우 발생)
        • BBOX) '게임 시작 까지 00:00'라는 문구와 함께 빨간색으로 변한 게임 로고까지
      • 게임 시작(영어)

        • 클래스 명) DBD_START_ENG
        • 캡쳐) 게임 시작 전 'MATCH STARTS IN 00:00'라는 문구와 함께 게임 로고가 나오는데, 게임 로고가 빨간색으로 완전히 채워진 장면(보통 5초 남았을 경우 발생)
        • BBOX) 'MATCH STARTS IN 00:00'라는 문구와 함께 빨간색으로 변한 게임 로고까지
      • 게임 끝

        • 클래스 명) DBD_END
        • 캡쳐) 게임 종료 시 '게임 점수판'이라는 문구가 나오는 장면
        • BBOX) '게임 점수판'이라는 문구가 있는 부분
      • 게임 끝(영어)

        • 클래스 명) DBD_END_ENG
        • 캡쳐) 게임 종료 시 'MATCH SCOREBOARD'라는 문구가 나오는 장면
        • BBOX) 'MATCH SCOREBOARD'라는 문구가 있는 부분
      • 기절 상태

        • 클래스 명) DBD_STATE_FAINT
        • 캡쳐) 팀원 혹은 본인의 캐릭터가 기절 상태가 된 경우, 화면 좌측에 기절 아이콘이 나오는 장면
        • BBOX) 기절 아이콘이 있는 부분(아이콘 옆의 HP BAR는 제외)
      • 후크 상태

        • 클래스 명) DBD_STATE_HOOK
        • 캡쳐) 팀원 혹은 본인의 캐릭터가 후크(목 매달림) 상태가 된 경우, 화면 좌측에 후크 아이콘이 나오는 장면
        • BBOX) 후크 아이콘이 있는 부분(아이콘 옆의 HP BAR는 제외)
      • 죽음 상태(뒤틀린 해골)

        • 클래스 명) DBD_STATE_DEATH_TWISTED
        • 캡쳐) 팀원 혹은 본인의 캐릭터가 죽음 상태가 된 경우, 화면 좌측에 뒤틀린 해골 아이콘이 나오는 장면(보통 갈고리에 걸려서 희생된 거는 뒤틀린 해골 모양이 나오고, 말라죽거나 즉결 처분당한 경우에는 정상 해골 모양이 나옵니다.)
        • BBOX) 뒤틀린 해골 아이콘이 있는 부분(아이콘 옆의 HP BAR는 제외)
      • 죽음 상태(정상 해골)

        • 클래스 명) DBD_STATE_DEATH_NORMAL
        • 캡쳐) 팀원 혹은 본인의 캐릭터가 죽음 상태가 된 경우, 화면 좌측에 정상 해골 아이콘이 나오는 장면(보통 갈고리에 걸려서 희생된 거는 뒤틀린 해골 모양이 나오고, 말라죽거나 즉결 처분당한 경우에는 정상 해골 모양이 나옵니다.)
        • BBOX) 정상 해골 아이콘이 있는 부분(아이콘 옆의 HP BAR는 제외)
      • 팀원 탈출

        • 클래스 명) DBD_STATE_ESCAPE
        • 캡쳐) 팀원이 탈출한 경우, 화면 좌측에 탈출 아이콘이 나오는 장면
        • BBOX) 탈출 아이콘이 있는 부분
  • 캡쳐시 유의사항
    • 반드시 전체화면으로 설정 후, 전체화면 캡쳐(윈도우키+Print Screen키) 하기
    • 한 폴더 내에 동일한 이미지가 있으면 안되니 주의하기
    • 데이터가 많아서 누락되면 골치아픈 경우가 생길 수 있으니 꼼꼼하게 작업하기

2. 데이터 라벨링

  • YOLO에 알맞은 형태로 라벨링 진행

  • 라벨링은 anaconda를 설치한 후에 labelImg라는 툴을 사용하여 진행

  • 작업 상세

    • anaconda를 설치

      • anaconda 사이트 접속 (사이트로 이동)
      • 다운로드
        • 1) 홈페이지에서 Download 버튼 클릭
        • 2) 본인의 컴퓨터 사양에 맞는 버전 다운로드
    • labelImg 다운로드

      • labelImg Github 사이트 접속(사이트로 이동)
      • zip 파일 다운로드
      • 압축 해제 후, 바탕화면에 옮긴 후, 편의상 파일명을 'labelImg'로 변경
    • labelImg 실행

      • anaconda prompt 실행

      • 순서대로 명령어 입력

        • 1) 아래와 같이 명령어 입력

          cd [labelImg 폴더 경로]

          예시)

          cd C:/Users/User/Desktop/labelImg
        • 2) 아래의 명령어를 복사 - 붙여넣기

          conda install pyqt=5

          [y/n]과 같은 표시가 나오면, y 누르고 enter키 입력하기

        • 3) 아래의 명령어를 복사 - 붙여넣기

          conda install -c anaconda lxml

          [y\n]과 같은 표시가 나오면, y 누르고 enter키 입력하기

        • 4) 아래와 같이 코드를 입력!

          pyrcc5 -o libs/resources.py resources.qrc
        • 5) 아래의 명령어를 복사 - 붙여넣기

          python labelImg.py
      • 명령어 입력 후, labelImg 가 실행되는지 확인

      • 만약 실행이 되지 않는다면, anaconda 새로운 환경을 만들어서 다시 진행하거나, 아나콘다 삭제 후 다시 진행

    • 라벨링 작업 진행

      • 기본 설정

        • 클래스 명 순서(중요!)

          • 앞서 GitHub 에서 다운받았던 파일인 labelImg/data 폴더로 가서 아래의 파일을 열고, 기존 클래스들을 지운 다음 아래의 새로운 클래스를 작성
            • 이렇게 클래스 명 순서를 맞춰주면, 앞으로 라벨링 작업을 할 때 이 순서가 유지됨.
            • 이 순서는 어떠한 경우에도 무너지면 안됨.
            • 제대로 순서가 입력되었다면, 아래와 라벨링 작업창에 클래스 목록이 보일 것
        • 이미지 폴더 설정

          • 라벨링 작업을 할 이미지 데이터가 있는 폴더의 경로를 지정해줘야 함
          • 앞서 객체 별로 캡쳐한 이미지들이 담긴 images 폴더를 만들었음 -> 이를 업로드하기
          • Open Dir을 클릭 → 해당 객체의 이미지 폴더를 업로드
        • 결과물 저장 폴더 설정

          • 이미지에 라벨링 작업을 하면 자동으로 좌표값이 적혀있는 파일이 저장됨 -> 이 파일을 저장할 경로를 설정해줘야 함
          • 앞서 객체별로 images 폴더와 더불어 labels 폴더를 만들었는데, 이 폴더로 경로를 설정해주면 됨.
          • Change Save Dir 클릭 → 저장할 위치를 설정
        • view 설정

          • 편한 작업을 위해 자동으로 저장되도록 설정하고, 라벨링 작업 시 Bounding-box 가 보이도록 설정해주기

            • Bounding-box 의미)
              Detection에서는 '박스 형태'로 위치를 표시하는데, 이 때 사용하는 박스는 네 변이 이미지 상에서 수직/수평 방향인 직사각형 모양의 박스이다. 이는 아래 그림과 같은 형태의 박스를 지칭하며, 이를 바운딩 박스(Bounding box)라고 한다.
          • 좌측 상단 View 탭 누르고, Auto Save mode 와 Display Labels를 활성화

        • YOLO 포맷 설정

          • 형광펜 부분을 클릭하여 YOLO로 설정해야 함.
          • 처음부터 YOLO일 경우는 놔두기
          • 라벨링 결과물이 YOLO 포맷인 txt 파일로 저장되면 잘 설정된 것
      • 라벨링 진행

        • 이미지를 하나 씩 로드 후 Bounding-box 작업
        • 해당 객체에 맞는 클래스를 선택 -> 그러면 자동으로 추가됨
        • 확인
          • 다음 이미지로 넘어가면, 이전 이미지는 자동으로 저장될 것임.
          • 사전에 지정한 저장 폴더(labels 폴더)에 가서 결과물이 .txt 파일로 잘 저장되었는지 확인
        • 단축키 사용
          • 많은 데이터에 대해 라벨링 작업을 해야하기 때문에, 단축키 활용하여 보다 효율적으로 작업하기를 권장
profile
넓고 깊은 지식을 보유한 개발자를 꿈꾸고 있습니다:) 기억 혹은 공유하고 싶은 내용들을 기록하는 공간입니다

0개의 댓글