데이터 준비
- 영상 촬영 후 프레임 추출
- Labeling & Augmentation: Roboflow
![](https://velog.velcdn.com/images/yun5/post/70feefc1-bb8f-4406-b406-a606d07456b4/image.png)
- data.yaml
path: /home/yoh/dev_ws/yolo/mydata/
train: train
val: valid
test: test
nc: 7
names: ['coffee_cup', 'coffee_no_trash', 'cookie', 'paper', 'plastic', 'tissue', 'vinyl']
- 클래스
- 커피컵
- (쓰레기 아닌) 커피컵
- (쓰레기 아닌) 쿠키
- 종이
- 플라스틱
- 티슈
- 비닐
YOLO v3
베이스 모델: yolov3-tiny
- 훈련 결과
![](https://velog.velcdn.com/images/yun5/post/8d5681da-800e-40f5-8447-fcbabbc5766e/image.png)
![](https://velog.velcdn.com/images/yun5/post/7b1cf737-0191-49b4-92d5-4f4470da613d/image.png)
- detect 결과: 쿠키를 비닐로 잘못 인식, 티슈는 인식 못함
![](https://velog.velcdn.com/images/yun5/post/a6080414-438b-42e7-814a-d7ff4e9987a9/image.png)
YOLO v5
베이스 모델: yolov5n / SGD / epochs 100
- 옵션 따로 설정하지 않음
- train.py 기본값 확인 시 optimizer=SGD, lr0=0.01, imgsz=640
- 훈련 결과
![](https://velog.velcdn.com/images/yun5/post/edb242d6-950e-4efb-b688-ad94c4516e3a/image.png)
![](https://velog.velcdn.com/images/yun5/post/82075538-6762-4ca9-9237-478eb0ee1e2e/image.png)
- detect 결과: 쿠키 인식 ok, 티슈도 비닐로 인식
![](https://velog.velcdn.com/images/yun5/post/6d4469a5-d686-4998-b3ad-72d83ac0deef/image.png)
베이스 모델: yolov5n / Adam / epochs 300
- 훈련 결과
![](https://velog.velcdn.com/images/yun5/post/e5d34b46-1e4f-4fc5-9a02-e145ac009040/image.png)
![](https://velog.velcdn.com/images/yun5/post/a5b79320-7c5c-4a49-8c33-7f7b0818a0fb/image.png)
- detect 결과: 쿠키를 비닐로도 인식함, 커피컵 인식 못함
![](https://velog.velcdn.com/images/yun5/post/5a8ddcd9-63cb-4d28-bcf9-ab60e94ec3ae/image.png)
학습을 더 열심히 했지만 결과가 더 나쁜 슬픈 상황이 실제로 있다
YOLO v8
베이스 모델: yolov8n
- optimizer=Adam, lr0=0.001
- 훈련 결과
![](https://velog.velcdn.com/images/yun5/post/862b5727-a802-4afc-a17e-85be9e99e51b/image.png)
![](https://velog.velcdn.com/images/yun5/post/6229e82c-4850-4528-ad5d-f3af7f534a82/image.png)
- detect 결과: 쿠키 인식 못함, 티슈/비닐/커피컵 구분 ok
![](https://velog.velcdn.com/images/yun5/post/68c02316-058b-49fa-9f62-3d69021e38bc/image.png)
- 특이사항: 코랩
베이스 모델: yolov8s
- optimizer=SGD, lr0=0.001
- 훈련 결과
![](https://velog.velcdn.com/images/yun5/post/974d5420-fef0-4608-8e7f-ed22e8b3e6f1/image.png)
![](https://velog.velcdn.com/images/yun5/post/6da9e5de-26b1-4b62-b84b-107289b274a2/image.png)
- detect 결과: 비닐/커피컵 일부 구분, 비닐/티슈/쿠키 인식 못하는 경우 있음 => 8n보다 인식을 더 못함
![](https://velog.velcdn.com/images/yun5/post/e59d1f6c-d1fb-4a53-a0b1-e65a87802743/image.png)
- 특이사항
- 커스텀 도커 환경에서 로컬 GPU로 실행
- yolov8-l 모델 학습도 했던 PC인데 yolov8-s 학습 도중 killed됨
베이스 모델: yolov5su
의문과 결론
- ultralytics 공식 github에서는 YOLOv8의 성능이 더 좋다고 하는데 왜 YOLOv5로 학습한 모델이 인식을 더 잘할까?
![](https://velog.velcdn.com/images/yun5/post/779f910c-973e-4621-a355-d38ce2d250bc/image.png)
- 공짜 점심 없음 이론
- 데이터에 따라 좋은 모델이 다르다. 최신 모델보다 이전 모델이 내 데이터에 맞을 수도 있다.
- 팀 프로젝트에서 어떤 사람은 YOLO v8 모델을 사용하고 어떤 사람은 YOLO v5 모델을 사용하는데... 배포를 어떻게 하지? 이미지 여러 개 만들면 되나?
- 방법이 없지는 않지만 프로젝트에서 사용하는 버전을 하나로 하는 것이 좋다. v5를 사용하자.
쓰레기 분류라니! 너무 멋져요!