Skip to main content

PyTorch에서 YOLOv5 객체 감지 모델을 트레이닝하기 위한 이미지 수집 및 레이블 지정

이 튜토리얼에서는 사용자 지정 YOLOv5 모델을 트레이닝하기 위해 데이터 세트를 준비하는 방법을 단계별로 안내합니다.
Created on April 21|Last edited on April 21
이는 여기에서 볼 수 있는 영어 기사를 번역한 것이다.



YOLOv5 튜토리얼 시리즈 2부에 오신 것을 환영합니다! 이 시리즈의 1부를 아직 확인하지 않으셨다면 먼저 읽어보시는 것이 좋습니다. Windows 및 Google Colab에서 실제 객체 감지를 위해 YOLOv5를 설치하는 방법에 대해 설명합니다. 이 보고서에서는 이 작업을 완료했다고 가정합니다.
환경을 설정한 후에는 데이터 세트 준비에 착수할 수 있습니다.

섹션



시작해보겠습니다.

우리는 매일 머신과 로봇이 스스로 학습하고, 인간의 개입이나 명확한 프로그램 없이도 계속해서 개선되는 것을 볼 수 있습니다.
이런 것들을 궁금하게 생각해보신 적이 있으세요?
✓ 자율주행 자동차는 어떻게 안전하게 보고 운전할 수 있을까요?
✓ Facebook이 어떻게 이미지에서 여러분을 인식하고 자동으로 태그를 붙일 수 있을까요?
✓ 알고리즘이 질병의 의료 이미지를 어떻게 진단할 수 있을까요?
✓ 익은 정도에 따라 수확 작물을 어떻게 분석하고 분류할까요?
이 모든 놀라운 기술의 핵심은 컴퓨터 비전에 있습니다. 컴퓨터 비전 분야는 빠르게 발전하고 있으며 어떤 경우에는 많은 시각적 과제를 해결하는 데 있어서 인간을 능가하기도 합니다.
컴퓨터 비전은 많은 작업을 다루지만, 여기서는 가장 인기 있는 세 가지 사항에 초점을 맞추겠습니다.
  1. 이미지 분류
  2. 객체의 검출
  3. 이미지 분할
현지화, 감지, 분할의 차이
현지화, 감지, 분할의 차이

객체 감지란 무엇입니까?

객체 탐지는 분류와 현지화를 결합하여 이미지 또는 비디오에서 객체가 존재하는 위치를 결정합니다.
이는 일종의 감독 머신 러닝 모델입니다. 즉, 알고리즘에 이미지가 포함된 트레이닝된 데이터 세트를 각각의 레이블과 함께 제공해야 합니다. 이것은 간단해 보일 수 있지만, 딥 러닝 모델은 일반적으로 많은 양의 데이터를 필요로 합니다. 다시 말해, 모델이 레이블이 없는 이미지에 무엇이 있는지 구별하기 위해서는 많은 예가 필요합니다.
하지만 사람과 마찬가지로 모델에 공급하는 것은 양만큼 질도 중요합니다. 데이터 품질이 높을수록 결과가 더 좋습니다.
그래프는 데이터 양이 증가함에 따라 성능이 어떻게 향상되는지를 나타냅니다.

트레이닝 이미지 수집

이 튜토리얼에서는 커스텀 모델을 트레이닝하기 위한 데이터 수집에 관한 다양한 접근법에 대해 중점적으로 설명합니다.
사용 가능한 옵션은 다음과 같습니다.

공공 데이터 세트


다음은 데이터 세트에 무료로 쉽게 액세스할 수 있는 몇 가지 장소입니다.
  1. Google 데이터 세트 검색: Google은 연구자들이 쉽고 빠르게 데이터 세트에 액세스할 수 있도록 하기 위해 이 검색 엔진을 출시했습니다. 2500만 개 이상의 데이터 세트가 포함되어 있습니다.
  2. Kaggle 데이터 세트: Kaggle은 데이터 과학 커뮤니티�� 모든 종류의 머신 러닝 데이터 세트에 액세스할 수 있도록 지원합니다. 이는 이 작업에 가장 적합한 리소스 중 하나입니다.
  3. UCI 머신 러닝 저장소: 1987년에 만들어진 UCI 페이지는 세계에서 가장 오래된 무료 데이터 세트 저장소입니다.
  4. Visual Data: 이름에서 알 수 있듯이 이 검색 엔진에는 컴퓨터 비전 전용 데이터 세트가 포함되어 있습니다. 분류, 영상 분할 및 영상 처리와 관련된 데이터 세트를 찾는 데 매우 유용합니다.
  5. Papers With Code: 코드와 데이터 세트가 포함된 무료 오픈 소스 연구 프로젝트를 위한 커뮤니티입니다.

데이터 증강

이미지 수가 한정되어 있는 경우는, 데이터 증강 기술을 활용할 수 있습니다.
이 프로세스에는 새로 획득한 외부 데이터로 기존 데이터 세트를 확장하는 작업이 포함됩니다. 예를 들어 잘라내기, 뒤집기, 회전, 대비 및 밝기 변경 등이 있습니다.
이 기술을 사용하면 대부분의 객체 감지 모델의 관점에서 새로운 이미지처럼 기능하기 때문에 기존의 작은 트레이닝 데이터의 크기를 늘릴 수 있습니다.

무료 온라인 이미지

잘 아시겠지만 인터넷에는 많은 이미지가 있습니다. 리소스가 풍부한 사용자는 간단한 스크레퍼(scraper)를 작성하여 원하는 데이터 세트의 이미지를 수집할 수 있습니다.

사진 촬영

또 다른 선택지가 있나요? 카메라를 들고 이미지를 캡처합니다. 스케일아웃은 어렵지만 주어진 작업에 필요한 이미지를 정확하게 캡처할 수 있습니다.

라벨링 지정 도구를 사용한 데이터 라벨링 지정

현재 객체 탐지에 사용할 수 있는 주석 데이터가 제한되어 있습니다. 그것은 장애물이 될 수 있습니다.
위의 리소스에서 주석이 달린 데이터 세트를 찾을 수 없는 경우 직접 생성해야 합니다.
GitHub에는 무료로 이미지에 주석을 달기 위해 사용할 수 있는 많은 툴이 있습니다.
그 중 몇 가지는 다음과 같습니다:
또한 유료 툴도 있습니다:
OpenCV 기반의 오픈소스 리포 OpenLabeling을 사용할 예정입니다. 그러나 데이터에 라벨을 지정하기 전에 서로 다른 경계 상자 형식이 있음을 이해해야 합니다.
이런 것들도 있습니다:
각 형식은 경계 상자 좌표에 대한 고유한 표현을 사용합니다.
하나는 jpeg 이미지 파일이고 다른 하나는 .txt 텍스트 파일입니다 .이 파일에는 이미지 내의 라벨에 대한 정보가 저장됩니다.
각 행에는 5개의 파라미터가 있습니다.
  • 객체 클래스의 인덱스
  • (x,y) 경계 상자의 중심을 나타내는 좌표 (x 및 y는 각각 매개변수)
  • 경계 상자의 폭
  • 경계 상자의 높이
좌표 및 경계 상자 치수는 영상 치수의 백분율로 0과 1 사이에서 정규화됩니다.
OpenLabeling 도구를 사용하여 이미지에 라벨링을 지정합니다.
시작하겠습니다.

GitHub에서 라벨링Repo를 가져옵니다.

먼저 GitHub에서 라벨Repo를 다운로드하여 압축을 풀어야 합니다.
여기 링크가 있습니다. https://github.com/ivangrov/ModifiedOpenLabelling

다운로드가 완료되면 폴더의 압축을 풉니다.

라벨을 붙일 이미지를 이미지 폴더에 넣어야 합니다.

앞에서 설명한 바와 같이 YOLO 형식의 각 이미지의 라벨은 같은 이름으로 bbox_txt 폴더에 .txt 확장자로 생성됩니다.

수정된 Oepn Labeling 도구를 실행하는 데 필요한 라이브러리를 requirements.txt 파일에 설치했는지 확인합니다.
확인하려면 폴더 위치를 열고, 주소창에 cmd <enter> 라고 입력하고 다음과 같이 입력합니다.
pip install -r requirements.txt

툴을 시작하려면 , run.py 파일을 다음과 같이 입력합니다:
python run.py

이는 다음을 초래합니다:

상단의 슬라이딩 윈도우 바는 이미지를 전환하는 데 사용됩니다.

이 바로 가기 키를 사용하여 탐색할 수 있습니다.

클래스 수는 지정된 class.txt 파일을 클릭합니다. 저희 경우, 닫힌 문, 열린 문, 버스, 번호의 4개의 클래스가 있습니다.

이미지에 그리는 모든 경계 상자는 자동으로 .txt 파일에 추가됩니다.


데이터를 트레이닝과 검증으로 분할:

라벨링이 완료되면 데이터를 트레이닝 세트와 검증 세트로 분할합니다.
라벨링이 완료되면 데이터를 트레이닝 세트와 검증 세트로 분할합니다.
명령 프롬프트에 train_test_split.py를 입력하여 실행합니다.
python train_test_split.py
그러면 custom_dataset 디렉토리가 생성되어 데이터를 train 폴더와 val 폴더로 분할합니다.

그리고 다음과 같이 표시됩니다:

사용자 지정 데이터 집합 폴더를 Yolov5 폴더(튜토리얼 1에서 생성되었던)에 복사합니다.


우리 데이터용 YAML 파일 생성:

YAML 파일을 생성하기 전에 먼저 다음과 같은 질문에 답해보겠습니다.

YAML 파일이란 도대체 무엇일까요?

YAML 파일은 YAML(YAML Ain't A Markup Language)로 작성된 문서입니다. 일반적으로 구성 파일에 사용됩니다.

YAML 파일 생성

yolov5-master의 데이터 폴더로 이동하여 custom_data.yaml이라는 새 파일 이름을 생성합니다.

마지막으로 custom_data.yaml을 편집합니다.
트레이닝 및 val 경로를 업데이트합니다.
train: custom_dataset/train/
val: custom_dataset/val/

# number of classes
nc: 4

# class names
names: ['closed_door', 'opened_door', 'bus', 'number']
이렇게 보일 것입니다:

그리고 저장하는 것을 잊지 마십시오.

그리고 저장하는 것을 잊지 마십시오.

아직 가입하지 않으셨다면 무료 W&B 계정 생성을 위한 몇 분이 필요합니다.
이 작업을 완료하면 W&B 프로젝트를 빠르게 생성할 수 있습니다.

그런 다음 W&B를 YOLO에 설치할 수 있습니다.
pip install wandb

다음으로 다음 명령을 사용하여 W&B에 로그인합니다.
wandb login
주의: 오류가 발생할 경우: 'wandb' is not recognized as an internal or external command, operable program or batch file. 'wandb'는 내부 또는 외부 명령어, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다. Python 설치 경로에 Scripts 디렉토리를 추가하지 않았을 수 있습니다. 여기 1부에서 그 방법에 대한 설명을 찾아볼 수 있습니다. 회피책으로서 다음과 같이 입력할 수 있습니다: python -m wandb login
이제 데이터 세트를 기록할 시간입니다. 다음과 같이 입력합니다.
python utils/loggers/wandb/log_dataset.py --project YOLO --data data/custom_dataset.yaml
프로젝트명을 반드시 여러분이 정한 이름으로 변경해 주세요.

그리고 짜잔...

이제 여러분은 W&B 아티팩트에서 안전하게 찾을 수 있습니다.
모든 것을 쉽게 찾을 수 있는 한 가지 방법은 val.table에 있습니다.

동료들과 공유하고 싶은 분들에게 편리할 장점 중 하나는 이 표와 다른 많은 기능을 대화식으로 보고서에 포함시킬 수 있다는 것입니다.

id
train_image
Classes
name
1
2
3
어떤 사람들은 글을 통해 더 잘 배우고 어떤 사람들은 비디오를 통해 더 잘 배웁니다. 따라하는데 문제가 있거나 질문이 있으시면 아래의 코멘트로 알려주셔도 좋고, W&B의Ivan Goncharov씨의 훌륭한 비디오를 보아도 좋습니다.

자세한 연습 비디오




YOLO에 관심이 있는 분들을 위해 권장되는 읽을거리입니다.


Iterate on AI agents and models faster. Try Weights & Biases today.
File<(table)>