딥러닝_10_객체 탐지
- 객체 탐지: 이미지 내에서 객체(사물, 사람 등)를 감지하는 것
-객체 있으면 찾고 객체가 없으면 찾지 않음
-활용분야: 공항검색대 사람인식, 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
[실습]
- 개, 고양이 객체 탐지 데이터 라벨링
- 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 |