다음 이야기를 이어서 작성하겠습니다.
(잡담이지만 날씨가 참 왔다갔다 하네요. 항상 나가실 때 우산 혹시 모르니까 챙기시는게 좋으실거 같습니다!)
https://github.com/ultralytics/ultralytics 에서 Segmentation을 확인해보시고 만들고자 하는 모델에 가장 적절한 Seg를 선택하셔서 사용하시면 좋을 것 같습니다.
yolo task=segment mode=predict model=yolov8n-seg.pt conf=0.5
를 통해서 먼저 segmentation을 위한 pytorch file을 download 합니다.
진행하시고 나면 이렇게 runs\segment\predict의 위치에 .pt가 다운로드 되어있음을 확인하실 수 있습니다.
들어가시면 이렇게 예시 파일들이 있는 것을 확인하실 수 있습니다.
yolo task=segment mode=predict model=yolov8n-seg.pt conf=0.3 source=people.jpg
실행결과에서 보시면 아실 수 있듯이 이제 bounding box뿐만 아니라 segmentation까지 제대로 나타내는 것을 확인하실 수 있습니다.
>yolo task=segment mode=predict model=yolov8n-seg.pt conf=0.3 source=people.jpg save_txt=True
를 진행하면 다시 새롭게 predict4에 새롭게 파일이 생겼음을 확인할 수 있습니다.
들어가서 확인해보면 굉장히 좌표가 많이 찍혀있음을 확인할 수 있습니다.
yolo task=segment mode=predict model=yolov8n-seg.pt conf=0.3 source=container_ship_loading.mp4
위 코드를 작성하여 mp4 file을 segmentation을 진행하겠습니다.
실제로 실행 해보면 segmentation이 제대로 생성되는것을 확인하실 수 있는데, 그 중에서 suitcase를 보시면 앞에 가려져 있는것을 알고 그 부분을 제외한 segmentation이 진행되어 정확히 검출해내는것을 알 수 있습니다.
(앞선 내용에서 검출을 제대로 못했던게 역시나 conf값을 0.8이라는 높은 수치로 했기 때문임을 확인할 수 있었습니다.)
segmentation을 했으니 이제는 classification을 진행해보겠습니다.
마찬가지로 https://github.com/ultralytics/ultralytics 에 가서 Classification 문서를 확인하고 사용할 모델을 선택합니다.
yolo task=classify mode=predict model=yolov8n-cls.pt source=people.jpg imgsz=224
모델 선택 후 위와 같이 코드를 치면
이렇게 runs\classify\predict에 새롭게 폴더가 생긴 것을 알 수 있습니다.
폴더에 확인해보시면
이렇게 값이 나온것을 확인할 수 있습니다.
(글이 흰색이라서 제대로 보이지 않네요ㅠㅠ)
아쉬운대로 영상에서 나온 결과로 확인해보겠습니다!
이런 식으로 결과가 나오는 것을 확인하실 수 있습니다.
다음으로 export에 대해서 알아보겠습니다.
yolo mode=export task=detect model=yolov8n.pt format=onnx
를 해주면
이렇게 export하여 저장되는것을 확인할 수 있습니다.
ONNX란? : ONNX(Open Neural Network Exchange)는 AI 모델의 오픈 소스 형식입니다. ONNX에서는 프레임워크 간의 상호 운용성을 지원합니다. 즉, PyTorch와 같이 널리 사용되는 여러 기계 학습 프레임워크 중 하나에서 모델을 학습시키고, ONNX 형식으로 변환하며, ML.NET과 같은 다른 프레임워크에서 ONNX 모델을 사용할 수 있습니다.
출처 : https://learn.microsoft.com/ko-kr/dotnet/machine-learning/tutorials/object-detection-onnx
yolo mode=export task=detect model=yolov8n-seg.pt format=onnx
를 하면 마찬가지로 onnx 형식으로 export 되는 것을 확인할 수 있습니다.
이번에는 onnx형식이 아닌 tflite로 export를 하겠습니다.
yolo mode=export task=detect model=yolov8n.pt format=tflite
를 했지만 결과가 제대로 나오지 않았습니다.
그래서 anaconda prompt에 나온대로
pip install --no-cache "tensorflow-cpu"
를 통해 설치를 진행했습니다.
이후 다시 yolo mode=export task=detect model=yolov8n.pt format=tflite를 하니까 제대로 동작했습니다!
이렇게 제대로 동작되는 것을 확인할 수 있었습니다.
이번에는 anaconda prompt가 아닌 python file에서 실행이 가능하도록 만들어보겠습니다.
다시 yolov8 폴더에서 새 문서를 만듭니다.
만들고 난 후 이름을 predict.py로 바꿔줍니다.
이후 연결프로그램을 사용하시는 editor를 통해서 들어갑니다.
(전 VScode를 통해서 연결했습니다.)
from ultralytics import YOLO
model = YOLO("yolov8m.pt")
model.predict(source = "people.jpg", save=True, conf=0.5, save_txt=True)
을 입력합니다.
만약 저처럼 .py를 했는데 그대로 .txt인 경우에 VScode를 사용하시는 경우 predict.py.txt를 우클릭하시면 Rename이 나오는데 이를 클릭 후 predict.py로 변경해주시면 python file로 변경이 됩니다.
변경 전 / txt file 그대로인것을 확인할 수 있습니다.
변경 후 / python file로 변경된 것을 확인할 수 있습니다.
predict.py를 저장 후 다시 anaconda prompt에서
python predict.py
를 입력합니다.
이렇게 새롭게 저장되는것을 확인하실 수 있습니다.
확인해보시면 이렇게 label과
이미지가 prompt에서 실행한것과 동일한 결과로 나오는 것을 확인할 수 있습니다.
이번에는 아까와 같이 python file에서 onnx로 export 하는 방법에 대해 알아보겠습니다.
마찬가지로 predict.py에서 model.predict(source = "people.jpg", save=True, conf=0.5, save_txt=True) 이 부분은 주석처리를 해주고 아래와 같이 코드를 작성합니다.
from ultralytics import YOLO
model = YOLO("yolov8m.pt")
model.export(format="onnx")
저장 후 anaconda prompt에서 다시
python predict.py
를 칩니다.
이렇게 되면 yolov8 폴더에 yolov8m.onnx file이 생긴 것을 확인할 수 있습니다.