본문 바로가기

딥러닝/Object Detection

YOLO v5 - 자동차 번호판(License Plate) 인식 - 4. Custom Dataset 만들기

1. 자동차 번호판 Image 모으기

자동차 번호판 Custom Dataset을 만들기 위해서는 우선 이미지를 모아야 합니다. 저는 구글에서 자동차 번호판 / License Plate로 검색해서 이미지를 모았으며 https://www.kaggle.com/tustunkok/license-plate-detection의 일부 이미지도 사용했습니다.

구글 - 자동차 번호판 검색

2. Image resizing

이미지들을 YOLO가 Training 할 수 있도록 Resize를 해줘야 합니다. Resize 이미지는 416, 608, 836 픽셀입니다.(Width, Height 동일)

제가 만든 이미지 데이터 프로세스 프로그램을 받습니다.

https://github.com/amahiner7/ImageDatasetProcess-Yolov5에서 직접 받으시거나 git을 통해 다운로드 받습니다.

$git clone https://github.com/amahiner7/ImageDatasetProcess-Yolov5

다운로드 받은 디렉토리로 가서 Resize를 실행합니다. Resize Width: 836, Height: 836 으로 지정했고 원본 이미지의 겨로인 source path와 Resize image가 저장될 path를 지정합니다.

python resize_images.py --resize-width 836 --resize-height 836 --source-path ./original_images --resize-path ./resize_images

이미지 리사이즈가 완료 되었습니다.

3. License labeling

레이블링 전 Resize된 Image들을 source_images 폴더로 옮겼습니다.

이제 이미지들의 번호판 영역을 레이블링할 차례입니다.

https://github.com/tzutalin/labelImg 여기서 직접 다운로드 받으시거나 git을 통해 다운로드 받습니다.

$ git clone https://github.com/tzutalin/labelImg

다운로드 받은 위치로 가셔서 labelimg 프로그램을 실행합니다.

python labelimg.py

 

labelimg 실행화면

labelimg의 Open Dir를 클릭합니다.

 

source_images를 선택합니다.(Resize된 이미지들이 들어 있는 디렉토리)

Create RectBox를 클릭합니다.

Drag and drop으로 레이블링 할 위치를 설정합니다.

레이블 이름을 지정합니다. (레이블명: License plate)

레이블 지정이 완료 되었습니다. 

File 매뉴의 Save 또는 Ctrl+S 눌러서 설정한 레이블을 저장합니다.

저장이 완료 되면 아래와 같은 레이블 XML이 생성됩니다. 이미지의 Width/Height 그리고 레이블링한 Object의 name과 bounding box의 정보들이 저장되어 있습니다.

이러한 작업을 이미지 마다 해야 합니다. (지루한 작업입니다ㅠㅠ)

4. Dataset 만들기

조금 전에 다운로드 받은 ImageDatasetProcess_Yolov5 디렉토리 가서 make_yolov5_dataset를 실행합니다.

python make_yolov5_dataset.py --source-path ./source_images --train-ratio 0.8

Dataset 만들기 작업이 완료 되었습니다.

train dataset의 이미지와 레이블 파일들

레이블 데이터를 살펴보면 xml의 pixel 좌표가 YOLO 형식에 맞게 변환된 모습을 확인 할 수 있습니다.

labelimg 형식의 xml과 yolo 형식의 txt 비교

이제 거의다 왔습니다. 만들어진 dataset을 yolov5-master의 dataset으로 옮겨 줍니다.

Dataset이 잘 만들어졌는지 확인해 보겠습니다.

ImageDatasetProcess_Yolov5에서 display_images_bbox_yolov5_dataset를 실행합니다.

python display_images_bbox_yolov5_dataset.py --image-path ./dataset/train/images --label-path ./dataset/train/labels

번호판 레이블링이 잘된것을 확인할 수 있습니다.

5. data.yaml 생성

Custom dataset의 마지막 단계인 data.yaml을 생성하면 됩니다.

data.yaml의 내용을 살펴보면 train dataset의 path와 validation dataset의 path를 설정하고 nc의 뜻은 클래스의 갯수를 의미 합니다. license plate 1개 임으로 1로 지정했습니다. names에는 Class name이 들어 갑니다. (nc가 1이상이면 Class name도 여러개 들어 갑니다)

data.yaml 파일을 저장합니다. 

Custom dataset 생성이 완료 되었습니다. 이제 해당 Dataset을 가지고 YOLO를 학습 시킬 차례입니다.

다음 글로 계속 됩니다.