앞 포스팅에서 설명한 인공지능을 활용한 폐의약품 수거함을 이해서 우리는 인공지능 모델을 만들어야했다.
https://trouveler-s.tistory.com/77
가장 큰 문제는 데이터!!
우리는 데이터를 확보하기 위해 여수시 보건소에 협조요청을 구했다.
여수시 보건소에서 폐의약품을 제공해 줘 우리는 300여 장의 사진을 확보하였고
이걸 통해서 우리는 직접 라벨링을 진행하였다.
라벨링은 Label img를 이용하였다. 라벨링 방법은 추후에 게시하여 추가하겠다.
우리는 라벨링 된 이미지를 yolov8 모델을 통해서 학습하였다. 기술적인 내용은 내버려두더라고
가장 최신의 모델이고 사용성이 매우 간단해졌으며 yolov7보다 좀 더 가볍고 성능이 좋다는
벤치 마크를 보고 결정하였다. 사실 정말 근소한 차이다.
하지만 사용은 너무나도 편하다.
먼저 PIP로 설치를 진행한다.
pip install ultralytics
그리고 데이터셋의 위치를 알리기 위해 yaml 파일을 작성한다.
나는 coco128.yaml을 수정했다. 나처럼 수정하거나 아래의 내용으로 custom_data.yaml을 만들어 주자
train: 학습 데이터 경로
val: 검증 데이터 결로
# number of classes
nc: 내가지정한 클래스 수
# class names
names: [ '클래스명', '클래스명', '클래스명' ]
yolov8을 학습코드를 실행하는 방법은 두 가지가 존재한다.
먼저 CLI
CLI는 명령프롬프트를 이용하는 것이다. CMD를 켜주고 간단한 명령어만 입력하면 된다.
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640
뒤에 파라미터에 더 많은 매게 변수를 입력하여 하이퍼파라미터 튜닝이 가능하다.
매개변수의 목록은 공식 Doc을 참고 바란다.(https://docs.ultralytics.com/modes/train/#arguments)
두 번째는 python 스크립트로 실행하는 방법이다.
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.yaml') # build a new model from YAML
model = YOLO('yolov8n.pt') # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # build from YAML and transfer weights
# Train the model
model.train(data='coco128.yaml', epochs=100, imgsz=640)
매우 간단하게 학습을 진행시킬 수 있다. 너무 간편해져서 이게 성능이 나올까 고민이 많았다.
어이없을 정도로 높은 정확도를 보여준다.
이제는 라즈베리파이에 적용하기 위해 모델을 조금 변경해주어야 한다.
기본적으로 모델이 pt파일이 제공되는데 라즈베리파이의 openCV에서는 이를 제대로 구동하기 어렵다
ONNX 또는 tflite모델로 변환해주어야 한다. 이 또한 간단한 명령어로 실행이 가능하다.
export 명령어로 모델이 있는 위치와 바꾸고 싶은 포맷만 선언해 주면 된다.
yolo export model=path/to/best.pt format=onnx # export custom trained model
모델변경에 대한 자세한 사항은 공식 문서를 참고하자 (https://docs.ultralytics.com/modes/export/#export-formats)
이렇게 우리는 인공지능 모델을 yolov8을 통해 만들었고
우리가 만든 간단한 기기에서 동작하였다.
간단한 시연 영상도 보고 가시라 ㅎㅎ