Target Model을 YOLOv3_tiny로 정한 것은 다른 이유가 있는 것은 아니고 간단하고 레퍼런스가 쉽게 구할 수 있어서이다. 사실 프로젝트가 YOLOv3 tini의 경우 매우 가볍기 때문에 가속기로의 의미는 크게 없다고 생각한다. 그러나 YOLO-X 모델 같은 가속기를 구현하기 위해서는 Sparse Matrix operation 등이 적용 가능한 NPU와 같은 구조를 잡는 것이 필요할 것이라 생각되어 미루어 두기로 한다. 우선 간단한 가속기를 구현하는 것에 의미를 둔다.
YOLO reference
- YOLO v3 tiny은 YOLO v3에서 FPN 을 덜어내고 경량화 시킨 구조이다. 라즈베리 파이 CPU에서도 돌릴 수 있다고 한다. ( 실제로 돌려보니 정확도가 좀 떨어지는 것 같다. 바운딩 박스도 이상하게 쳐지고)
- 기본적인 코드는 darknet git에서 구할 수 있다. 사용법 및 설명은 홈페이지에서 볼 수 있다.
(https://pjreddie.com/darknet/yolo/)
- darknet repo pull
- make(GPU 사용 예정이라면 Makefile 수정)
- pre-trained 된 weights 다운
- test
|
|
yolov3-tiny.cfg
파일을 보면 Model의 구조를 알 수 있다.- 각 layer에 대한 설명은 누군가 Darknet을 pytorch로 변환하면서 분석해 놓은 것이 있으니 이를 참조한다. (https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/)
YOLO v3 Structure
Model을 도식화하면 다음과 같다.