FastestDet은 초경량 앵커 프리(Anchor-Free) 객체 탐지 알고리즘으로, 모델 크기가 250K 파라미터에 불과하며, yolo-fastest 대비 시간 소모를 10% 절감하고 후처리 과정도 단순화되었습니다.

Github

주요 특징:

  • 향상된 성능: Yolo-fastest 대비 성능이 10% 향상되었으며, COCO 평가 지표에서 Yolo-fastestv2의 mAP0.5 대비 1.2% 증가하였습니다.

  • 경량화: 모델 파라미터 수가 0.24M으로, Yolo-fastestv2의 0.25M보다 더 가볍습니다.

  • 빠른 추론 시간: 352x352 해상도에서 RK3568 ARM Cortex-A55 CPU 기반의 Radxa Rock3A 플랫폼에서 단일 코어 기준 70.62ms, 4코어 기준 23.51ms의 추론 시간을 보입니다.

개선 사항:

  • 앵커 프리(Anchor-Free) 구조

  • 단일 스케일 디텍터 헤드

  • 크로스 그리드 다중 후보 타겟

  • 동적 양성 및 음성 샘플 할당

사용 방법:

  1. 의존성 library 설치: requirements.txt 파일을 통해 필요한 패키지를 설치합니다.

    pip install -r requirements.txt
  1. 테스트: 이미지 테스트를 위해 test.py 스크립트를 사용합니다.

    python3 test.py --yaml configs/coco.yaml --weight weights/weight_AP05:0.253207_280-epoch.pth --img data/3.jpg

모델 학습

다크넷 YOLO와 동일한 방식으로 데이터셋을 구성하여 학습을 진행합니다.
Darknet YOLO 형식의 데이터셋 구축 방식에 대해 설명하겠습니다.

1. 데이터셋 형식

FastestDet은 Darknet YOLO와 동일한 형식으로 데이터셋을 구성합니다.
각 이미지에 대해 동일한 이름의 .txt 파일이 존재하며, 해당 파일에는 해당 이미지 내 객체의 라벨 정보가 포함됩니다.

라벨 파일(.txt) 포맷

.txt 파일에는 다음 형식의 데이터가 포함됩니다.

category cx cy w h
  • category: 객체의 클래스 인덱스(0부터 시작)
  • cx, cy: 바운딩 박스 중심 좌표 (이미지 크기에 대해 정규화된 값)
  • w, h: 바운딩 박스 너비 및 높이 (이미지 크기에 대해 정규화된 값)

예제 라벨 파일 (image1.txt)

예를 들어, image1.jpg에 대한 라벨 파일 image1.txt가 있다면 다음과 같은 형식일 수 있습니다.

0 0.5 0.5 0.2 0.3
1 0.3 0.7 0.1 0.2

위 예제는:

  • 첫 번째 객체(클래스 0): 중심 좌표 (0.5, 0.5), 너비 0.2, 높이 0.3
  • 두 번째 객체(클래스 1): 중심 좌표 (0.3, 0.7), 너비 0.1, 높이 0.2

2. 데이터셋 디렉토리 구조

데이터셋을 구성할 때, 보통 아래와 같은 디렉토리 구조를 사용합니다.

dataset/
│── images/
│   │── train/
│   │   │── image1.jpg
│   │   │── image2.jpg
│   │── val/
│   │   │── image3.jpg
│── labels/
│   │── train/
│   │   │── image1.txt
│   │   │── image2.txt
│   │── val/
│   │   │── image3.txt
│── train.txt
│── val.txt
│── classes.txt
  • images/train/, images/val/: 학습 및 검증 이미지 저장 폴더
  • labels/train/, labels/val/: 각 이미지에 대한 YOLO 형식의 .txt 파일 저장 폴더
  • train.txt, val.txt: 학습 및 검증 데이터셋 경로 리스트
  • classes.txt: 클래스 이름 목록 파일

3. train.txt, val.txt 파일 구성

이 파일들은 학습과 검증에 사용할 이미지의 파일 경로 리스트를 포함합니다.

예제 (train.txt):

/path/to/dataset/images/train/image1.jpg
/path/to/dataset/images/train/image2.jpg

4. classes.txt 파일 구성

클래스 인덱스에 대응하는 클래스명을 나열한 파일입니다.

예제 (classes.txt):

car
person
bicycle
  • 0: car
  • 1: person
  • 2: bicycle

5. Build the training .yaml configuration file

yaml 파일로 학습을 진행할 수 있다.

  • Reference./configs/coco.yaml
DATASET:
  TRAIN: "/home/qiuqiu/Desktop/coco2017/train2017.txt"  # Train dataset path .txt file
  VAL: "/home/qiuqiu/Desktop/coco2017/val2017.txt"      # Val dataset path .txt file 
  NAMES: "dataset/coco128/coco.names"                   # .names category label file
MODEL:
  NC: 80                                                # Number of detection categories
  INPUT_WIDTH: 352                                      # The width of the model input image
  INPUT_HEIGHT: 352                                     # The height of the model input image
TRAIN:
  LR: 0.001                                             # Train learn rate
  THRESH: 0.25                                          # ????
  WARMUP: true                                          # Trun on warm up
  BATCH_SIZE: 64                                        # Batch size
  END_EPOCH: 350                                        # Train epichs
  MILESTIONES:                                          # Declining learning rate steps
    - 150
    - 250
    - 300

학습

  • Perform training tasks
python3 train.py --yaml configs/coco.yaml

평가

Calculate map evaluation

python3 eval.py --yaml configs/coco.yaml --weight weights/weight_AP05:0.253207_280-epoch.pth

모델 내보내기

ONNX 또는 TorchScript 형식으로 모델을 내보낼 수 있습니다.

  • ONNX 형식:

    python3 test.py --yaml configs/coco.yaml --weight weights/weight_AP05:0.253207_280-epoch.pth --img data/3.jpg --onnx
  • TorchScript 형식:

    python3 test.py --yaml configs/coco.yaml --weight weights/weight_AP05:0.253207_280-epoch.pth --img data/3.jpg --torchscript
profile
따라가기도 벅찬 AI Engineer 겸 부앙단

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN