Giromi / Capstone1

50% 이상만 가즈아ㅏㅏ
0 stars 0 forks source link

점자블럭 박스 다량 발생 문제 해결중 #14

Open realironn opened 2 months ago

realironn commented 2 months ago

code.txt

  1. 박스 일정 크기 이하일 경우 무시하기 image

실패

이진화 code.txt

  1. 가장 바깥에 있는 꼭짓점들만 이어보기 image

멘붕

Giromi commented 2 months ago

오우.. 하루만에 바운딩 박스를 하셨다니...대단하십니다

realironn commented 2 months ago

create_train_val_txt code.txt

  1. yolov5 학습 시도 -> 하기 전 yolov5 설치하기(gpt 물어보면 알려줌) -> label-studio 설치하기 -> pip install label-studio (해당 명령어 이용하기) -> 원래는 labelImg를 이용했으나 라벨링 과정이 너무 간단하다고 판단하여 label-studio 이용함

<과정 요약>

  1. 라벨 스튜디오 실행 label-studio => 알아서 라벨링 image

  2. 라벨 스튜디오에서 만들어준 json 파일을 gpt 돌려서 data.yaml 형식으로 변환 -> 저장 (이 작업은 추가적인 라벨(block 말고 따른 분류 라벨이 없는 한 ex) cat, dog ... etc)이 없는 한 진행 안해도 됨, 기존 data.yaml 그대로 가져와서 하면 됨)

  3. data.yaml과 같은 폴더에 train.txt와 val.txt를 생성해야됨 => create_train_val_txt.py 실행

    • 실행시키기 전, image_directory 변수의 값을 학습 시키고자 하는 이미지 폴더 위치로 변경해야됨
  4. 이후 아래 코드를 터미널에서 실행

python3 train.py --img 416 --batch 16 --epochs 50 --data train_set/data.yaml --cfg ./models/yolov5s.yaml --weights 'train' --name yolov5s_results

각 요소 설명
    --batch => 이미지를 몇개씩 묶어서 실행시킬 꺼?(안바꿔도 됨)
    --epochs => 반복 수
    --data => data.yaml 위치 

* 만일 학습이 제대로 안된다면 batch 사이즈와 epochs를 수정해 볼 것.
batch 사이즈를 수정하면 NMS time out error 가 발생할 수 있는데 이 오류가 발생할 시,
yolov5 폴더 내의 util/general.py에 들어가 1041 번째 줄 time_limit를 수정
ex) time_limit = 10 + 0.05 * bs -> time_limit = 20 + 0.05 * bs
한 번 학습 수행 시 최소 10+@ 대기 하던 것을 20+@ 대기 하는 것으로

image

------------------------------------여기 까지가 학습 방법-------------------------------

  1. 그럼 어떻게 모델을 실행시킴? 학습을 완료하면 yolov5 폴더의 runs/train/yolov5s_results 내의 weights에 결과 모델이 저장된다. 이 중 best.pt를 사용하면 된다. -> python3 detect.py --weights best.pt --source (train_batch0.jpg) -> 위에 괄호친 부분은 자기 파일명 넣기

  2. 이걸 yolov5 에서 실행시키면 위에서 학습한 모델을 실행시켜 볼 수 있음 (best.pt와 yolov5를 git에서 clone 한 것만 있으면 됨) ->git clone https://github.com/ultralytics/yolov5.git (해당 명령어 이용)

  3. python3 detect.py --weights best.pt --source test_tt.jpg --weights => 학습한 best.pt 위치 --source 0 => 웹캠(파이썬 라이브러리 중 하나인 opencv 이용해서 바로 화면 띄워줌) --source 비디오 파일(ex) video.mp4) => 비디오 --source 유튜브 링크 => 유튜브 --source 이미지파일 => 사진 ... 기타 등등 (webcam을 제외한 나머지는 runs/detect에 exp 폴더로 차곡차곡 저장 될 듯)

  4. 해당 과정을 진행 했고 roboflow에서 받은 사진 320개와 자료를 기반으로 학습을 진행함

  5. batch 16 / epoches를 10으로 하니 학습량이 너무 적어 아래 그림과 같이 확률이 매우 낮게 나옴 -> 이 문제는 학습량을 늘려서 다시 확인 예정(시간이 매우 오래 걸릴 것으로 예상)

train_batch0

realironn commented 2 months ago

python3 train.py --batch 16 --epochs 5 --data ./train/data.yaml --cfg ./models/yolov5s.yaml --name yolov5s_results 이 코드와 python3 train.py --batch 16 --epochs 10 --data ./train/data.yaml --cfg ./models/yolov5s.yaml --weights 'yolo5_result' --name yolov5s_results 이 둘의 차이점은 뭘까?

  1. 첫 번째 명령어는 새로운 모델을 처음부터 훈련시키는 것을 의미합니다. 따라서 --weights 옵션에는 미리 훈련된 가중치 파일을 지정하지 않는다.

  2. 두 번째 명령어는 이미 훈련된 모델에서 추가적인 에폭(epoch)을 더 훈련시키는 것을 의미합니다. --weights 옵션에는 이전에 훈련된 모델의 가중치 파일을 지정하여 이전에 학습한 지식을 보존하고 추가적인 훈련을 수행한다.

따라서 첫 번째 명령어는 새로운 훈련을 시작하고, 두 번째 명령어는 이전 훈련을 계속하는 것입니다.

따라서 우리는 weights 부분을 빼도 무관하다.

realironn commented 2 months ago

python3 train.py --batch 16 --epochs 1000 --data ./train/data.yaml --cfg ./models/yolov5s.yaml --name yolov5s_results -> 학습 소요 시간: 6시간 30분

점자블럭4

점자블럭2

위 그림과 같이 감지 가능성 확인