A. 데이터 수집
기본 파일 세팅
- 학습에 사용할 모든 이미지의 경로가 담긴 all_train.txt 생성
- 보다 정확한 학습을 위해 all_train.txt를 random하게 shuffle한 shuffled.txt 생성
- shuffled.txt를 weight파일 생성용(train.txt)과 확인용(validation.txt)으로 분류
학습 환경 세팅
-
Colab Notebooks
에darknet-master
배치 -
darknet-master/
에 폴더custom
생성-
yolov3-tiny.weights | yolo pre-trained weight 파일
-
yolov3-tiny.conv.15 | 커스텀 데이터 맞춤 yolo pre-trained tiny 모델 (추후 설명)
-
train.txt | 2-a에서 생성한 훈련용 데이터 텍스트 파일
-
validation.txt | 2-a에서 생성한 확인용 데이터 텍스트 파일
-
obj.names | 만들고자하는 weight 파일에서 분류할 class들의 이름
보기
-
obj.data |
보기
-
v3-all.cfg | 구축할 모델의 layer 세부설정
- line 1 [net layer]
max batches (반복횟수)
: 사용할 class개수 * 2000 - line 1 [net layer]
steps
: max batches의 0.8배, max batches의 0.9배 - line 123, 167 [Convolutional layer]
filters
: (사용할 class개수 + 5) * 3 - line 132, 174 [yolo layer]
anchors
: 커스텀 데이터 맞춤 anchor로 설정 (추후 설명) - line 132, 174 [yolo layer]
classes
: 사용할 class개수
전체내용확인
- line 1 [net layer]
-
- 디렉토리 변경, darknet 접근 권한 부여
- darknet 빌드파일 생성
- cfg에 설정할 anchor값 구하기
- 커스텀 데이터에 맞춘 yolo tiny.conv.15 파일 생성
- 훈련 | weight 파일 생성
- 테스트 | validation 파일로 정확도 확인
학습계획
- 각 데이터를 정제없이 사용하여, 신호등과 횡단보도 yolo 모델을 각각 생성
- 신호등 데이터: 인도보행영상의 Bbox_1, Bbox_2, Bbox_3, Bbox_4
- 횡단보도 데이터: ImVisible 데이터셋
내 데이터 학습 결과 (TEST용)
보기
은소리 데이터 학습 결과
- 횡단보도 : 정확도 70~80%
- 신호등 : 정확도 50% 내외
결론 | 신호등 데이터 학습에 문제가 있다
- 문제점 찾기 : 정제되지 않은 데이터 사용?
참고블로그 | CNN 을 이용하여, 얼굴을 분류해보자
- 내가 만드려는 모델에 맞는 데이터만 추려서 사용
- 학습에 사용하는 이미지 데이터를 비슷하게 맞춰주기 ex. 사진 내에서 신호등의 위치
- 학습에 적합한 수준의 선명한 사진만 사용?
학습 계획
- 횡단보도와 신호등을 한번에 detect할 수 있는 모델을 생성
- detect할 객체(class) 종류: cross walk(0), red light(1), green light(2), black(3)
- 4개의 class를 가진 yolo 학습파일을 만들어보자
- 2차시도에서 정확도가 양호했던 횡단보도 데이터는 정제없이 그대로 사용
신호등 데이터셋 정제 절차
- 인도보행영상 데이터셋의 Bbox_1만 사용
- Bbox_1내의 모든 신호등 이미지를 clear(선명한 이미지), neutral(양호한 이미지), ambiguous(애매한 이미지)로 분류
- 신호등 이미지 수정: 사진에서 신호등이 있는 부분만 확대하고, 신호등이 사진의 정중앙에 오도록 수정
- 수정된 이미지를
red(빨간불)
,green(초록불)
,black(비어있는 상태)
3개의 class로 구분지어 라벨링
- 버전을 3개로 나눠서 모델 학습
- version1(clear이미지만 학습) | 혜정
- version2(clear+neutral이미지만 학습) | 은소리
- version3(clear+neutral+ambiguous 모든 이미지 학습) | 예지
- 참고 | 이미지 라벨링 툴
학습결과
- version2 (clear+neutral) 정확도 91%
- version3 (clear+neutral+ambiguous) 정확도 87%
version3 학습모델 시연 영상
결론 | 낮은 정확도는 데이터셋 퀄리티의 문제였다
- 개선할 부분
- 신호등 정확도 여전히 낮음
- 학습에 쓰인 신호등 이미지가 너무 큰 탓일까?
학습 계획