FastestDet은 초경량 앵커 프리(Anchor-Free) 객체 탐지 알고리즘으로, 모델 크기가 250K 파라미터에 불과하며, yolo-fastest 대비 시간 소모를 10% 절감하고 후처리 과정도 단순화되었습니다.
향상된 성능: 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) 구조
단일 스케일 디텍터 헤드
크로스 그리드 다중 후보 타겟
동적 양성 및 음성 샘플 할당
의존성 library 설치: requirements.txt
파일을 통해 필요한 패키지를 설치합니다.
pip install -r requirements.txt
테스트: 이미지 테스트를 위해 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 형식의 데이터셋 구축 방식에 대해 설명하겠습니다.
FastestDet은 Darknet YOLO와 동일한 형식으로 데이터셋을 구성합니다.
각 이미지에 대해 동일한 이름의 .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.5, 0.5)
, 너비 0.2
, 높이 0.3
(0.3, 0.7)
, 너비 0.1
, 높이 0.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
: 클래스 이름 목록 파일train.txt
, val.txt
파일 구성이 파일들은 학습과 검증에 사용할 이미지의 파일 경로 리스트를 포함합니다.
예제 (train.txt
):
/path/to/dataset/images/train/image1.jpg
/path/to/dataset/images/train/image2.jpg
classes.txt
파일 구성클래스 인덱스에 대응하는 클래스명을 나열한 파일입니다.
예제 (classes.txt
):
car
person
bicycle
0
: car1
: person2
: bicycleyaml 파일로 학습을 진행할 수 있다.
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
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