딥러닝

[DL]10. 객체 탐지

CodeJaram 2023. 10. 4. 16:28

딥러닝_10_객체 탐지

 

  1. 객체 탐지: 이미지 내에서 객체(사물, 사람 등)를 감지하는 것

-객체 있으면 찾고 객체가 없으면 찾지 않음

-활용분야: 공항검색대 사람인식, CCTV 위급상황 감지, 자율주행차 차량거리 파악 등

 

 

2. 객체 탐지 알고리즘의 역사

 

1)Traditional Detection Method(전통적)

  • 슬라이딩 윈도우: 고정된 크기의 window로 이미지의 좌상단부터 우하단(이미지의 모든 영역)까지 일일이 객체를 검출하는 방식
  • 문제점: 객체가 없는 영역도 Sliding해야 하며, 여러 scale의 이미지를 스캔하여 검출→수행시간이 오래 걸리고, 검출성능이 낮음, 한 객체를 여러 번 검색

 

2)Two Stage Detector

  • 영역추정(Region Proposal), 탐지(Detection) 단계를 나누어 수행하는 방식
  • R-CNN model:  객체가 있을 법한 2000개의 영역을 찾고, 그 영역에서만 객체 탐지하는 단계 제안, 주로 단일 이미지에서 사용됨
  • 장점: 영역추정과 탐지 단계를 나누어 수행하여 객체 검출성능이 좋음
  • 단점

-초 당 30장 이상의 이미지를 수행할 수 없어 동영상, 실시간에서 사용하기 어려움

-객체가 각각 다른 크기와 형태를 가지고 있으면 후보영역을 찾는 정확도 떨어짐

 

3)One-Stage Detector

  • 선택적 검색

-모든 부분을 Bounding box로 만들어 리스트에 추가

-색상, 무늬, 크기, 형태에 따라 유사도가 비슷한 부분을 그룹화

-위 단계들을 계속 반복

 

  • 영역 추정과 객체 탐지를 한번에 수행
  • 장점: 탐지속도의 획기적인 향상으로 동영상, 실시간 탐지 가능 
  • 단점: 객체 검출 성능이 Two-stage Detector에 비해 낮음
  • YOLO model

 

[실습]

  1. 개, 고양이 객체 탐지 데이터 라벨링

https://roboflow.com/

 

  • create new project: Object Detection-Project Name

 

  • 이미지 업로드: 개, 고양이 사진 100개씩 업로드-Save and Continue

  • Assign Images

 

  • 개, 고양이 얼굴 Bounding BOX→분류(cat/dog) save(Enter)→다음 사진(→ 방향키)

 

  • 분류결과(Annotated)



  • 이미지 데이터셋으로 만들기



 

 

  • Generate

-Preprocessing(데이터 전처리) Continue

 

-Augmentation(데이터 증식) 옵션 선택-continue

-Maximum Version Size 선택-Generate

 

 

  • 데이터셋 내보내기

  • Format: YOLO v5 PyTorch-show download code

  • Download Code: Terminal-코드 복사


[Colab]

2. roboflow 데이터 다운로드: Export 시 복사한 코드 실행하기

#roboflow 자료 다운로드

!curl -L "https://app.roboflow.com/ds/G19c4ZDMmi?key=p4JPAWFsN4"~



  • 데이터셋 폴더 생성: 다운로드한 데이터를 데이터 폴더로 옮기기

#작업폴더 확인(print working directory)

%pwd

 

#폴더 생성(make directory)

%mkdir dataset

 

#폴더와 파일을 원하는 폴더로 이동(move)

#맨 마지막 경로로 마지막을 제외한 파일, 폴더 이동(띄어쓰기로 구분)

 

%mv ./README.dataset.txt ./README.roboflow.txt ./data.yaml train test valid /content/dataset

 

 

3. 데이터 확인: data.yaml

 

4. 데이터 경로 txt에 저장하기

  • train 데이터 경로 가져오기

# train 모든 파일의 경로 가져오기

 

from glob import glob

 

#모든 파일-> *

train_img_list=glob('/content/dataset/train/images/*.jpg')

 

  • valid 데이터 경로 가져오기

# valid 모든 파일의 경로 가져오기

valid_img_list=glob('/content/dataset/valid/images/*.jpg')

 

  • 데이터 경로 txt에 저장하기

#train 데이터 경로 txt에 저장

with open('/content/dataset/train.txt', 'w') as f: #쓰기 권한

  f.write('\n'.join(train_img_list) + '\n') #경로 한줄씩 개행하여 작성

 

#valid 데이터 경로 txt에 저장

with open('/content/dataset/valid.txt', 'w') as f: #쓰기 권한

  f.write('\n'.join(valid_img_list) + '\n') #경로 한줄씩 개행하여 작성

 

  • data.yaml 데이터 경로 수정

 

5. YOLOv5 필요한 파일 다운로드

#YOLOv5 사용에 필요한 파일 다운로드

 

!git clone https://github.com/ultralytics/yolov5



6. YOLOv5에 필요한 라이브러리 설치

#YOLOv5 작업폴더 변경

%cd yolov5

 

# requirements.txt->YOLOv5 사용하기 위해 필요한 라이브러리 안내

!pip install -r requirements.txt

 

7. 모델 학습

#모델 학습

#사용할 이미지 크기--한 번에 학습할 이미지 수(batch_size)--학습횟수--사용할 데이터--결과를 저장할 폴더 이름(yolov5/run/train/)

!python train.py --img 640 --batch 16 --epochs 20 --data /content/dataset/data.yaml --name cat_dog_yolov5s_results

 

  • 모델 성능 확인: mAp50, mAP50-95

 

  • 주피터 노트에 사용하기 위해 best.pt 다운로드

 


[Jupyter Notebook 환경설정]

  • yolov5 폴더 생성

 

  • yolov5 활성화

 

  • git에 있는  필요한 라이브러리 환경설정

 

  • best.pt yolov5 폴더에 넣기

 

  • yolov5 폴더로 작업폴더 변경

  • 주피터 설치

  • 주피터 노트북 실행

 

[Jupyter NoteBook]

  • 필요한 라이브러리 설치

! pip install -r requirements.txt

 

  • 모델 불러오기

import torch  # YOLOv5 라이브러리

 

#모델 불러오기

model=torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True)

 

  • 객체 검출하기

#객체 검출하기

img='dog60.jpg'

result=model(img)

 

  • 검출결과 확인하기

result.pandas().xyxy[0]

 

#confidence: 검출율

 

'딥러닝' 카테고리의 다른 글

[DL]9. 네이버 영화리뷰 감성분석  (0) 2023.09.27
[DL]8. 소리데이터 분석  (1) 2023.09.22
[DL]7. 과대적합 제어 및 전이학습  (1) 2023.09.21
[DL]6. CNN  (0) 2023.09.20
[DL]5. 오차 역전파  (0) 2023.09.15