2024-01-02 73th Class
Deep Learning History
#️⃣ 비전, NLP 발전 단계
Vision: AlexNet > RCNN > Faster RCNN > YOLO
NLP: RNN > LSTM > Seq2Seq > Attention > Transformer
Object Detection
#️⃣ Computer Vision 카테고리
- Classification
- Classification + Localizaiton
- Object Detection
- Instance Segmentation
이미지 분류(Image Classification): 디지털 이미지를 사전 정의된 카테고리 중 하나로 할당하는 문제. ex) CNN
객체 검출(Object Detection): 이미지에서 물체의 위치와 정보를 찾는 기술.
기존의 컴퓨터 비전 기술인 이미지 분류 및 객체 인식 기술이 필요
세분화(Segmentation): 이미지를 작은 부분으로 나누어 각 부분에 레이블을 할당하는 작업.
전통적인 방법으로는 기하학적 모델링, 통계적 모델링, 머신러닝이 사용되고, 최근에는 딥러닝 기반의 방법들이 많이 연구 됨
생성(Generation): 입력 이미지나 비디오로부터 새로운 이미지나 비디오를 생성하는 기술. ex) GAN
#️⃣ Bounding Box
방법1
- (x, y, w, h) 형태로 표현
- x와 y는 bounding box의 왼쪽 상단 모서리의 좌표, w와 h는 bounding box의 너비와 높이
방법2
- (x1, y1, x2, y2) 형태로 표현
- (x1, y1)은 물체의 왼쪽 상단 모서리의 좌표, (x2, y2)는 물체의 오른쪽 하단 모서리의 좌표
#️⃣ Object Detection 방식
- Sliding Window : 커널이 이동되면서 검출. 시간 소요 大
- Region Proposal : selective search, edge boxes 알고리즘으로 물체가 있을만한 후보 영역을 찾아서 객체 탐지
#️⃣ Object Detection의 과제
- 작은 객체
- 겹치는 객체
- 다양한 크기의 객체
- 실시간 처리
#️⃣ One-Stage Detector vs Two-Stage Detector
History
Process
특징 | One-Stage Detector | Two-Stage Detector |
---|---|---|
검출 속도 | 빠름 (Real-time 용이) | 느림 (Real-time용으로는 제한적) |
정확도 | 상대적으로 낮음 | 상대적으로 높음 |
아키텍처 | 단일 네트워크 | 두 개의 연속된 네트워크 |
예시 모델 | YOLO (You Only Look Once) | Faster R-CNN, R-CNN, Mask R-CNN 등 |
목적 | 실시간 객체 검출 (e.g., 자율 주행차량) | 정확한 객체 위치 및 세분화 (e.g., 물체 인식 및 분할) |
훈련 및 데이터 필요량 | 적은 데이터 및 계산 리소스 필요 | 많은 데이터 및 계산 리소스 필요 |
감지 성능 (Detection Performance) | 일반적으로 정확도 낮음 | 높은 정확도 |
객체 크기 및 비율 | 다양한 크기와 비율의 객체 처리 가능 | 작은 객체 및 불균형한 비율의 객체에 더 적합 |
시행 과정 | Localization + Classification | Localization → Classification |
One-stage Detector
- 단일 네트워크로 이루어져 있고, 객체 위치와 클래스를 한 번에 예측
- train, predict 속도가 빠름 => 실시간 응용 프로그램에 적합
- Anchor Box 사용
Two-stage Detector
- 두개의 연속된 네트워크 아키텍처로 구성 (1st: 객체 후보 생성 > 2nd: 후보를 분류하고 객체 위치 보정)
- Region Proposal Network 사용하여 후보 객체 영역을 생성하고, 두번째 네트워크로 전달됨
- 정확도를 중시해서 train, predict에 연산량 多 => 객체 세분화 작업에 적합
#️⃣ Dataset
- COCO
- Pascal VOC
- ImageNEt
- Open Images
#️⃣ Metrics
Intersection over Union (IOU)
IOU = (예측된 영역과 실제 영역의 교집합 면적) / (예측된 영역과 실제 영역의 합집합 면적)
- IOU는 예측 바운딩 박스와 실제 바운딩 박스가 얼마나 겹치는지를 나타내는 정도
- IOU는 0 ~ 1 (1에 가까울 수록 정확)
Mean Average Precision (mAP)
평균 정밀도(MAP)는 다양한 임계값에서의 평균 정밀도를 의미
#️⃣ NMS (Non-Maximum Suppression)
NMS(Non-Maximum Suppression)은 객체 탐지에서 중복된 예측 결과를 제거하는 기술
- 예측된 바운딩 박스들을 IOU(Intersection over Union)를 기준으로 내림차순으로 정렬
- 가장 높은 점수를 가진 바운딩 박스를 선택하고, 이를 최종 결과로 유지
- 선택한 바운딩 박스와 IOU가 높은 다른 바운딩 박스들을 제거
- 남아 있는 바운딩 박스들에 대해 위의 과정을 반복
YOLO
- 입력 이미지를 S × S 그리드로 나눔
- 전체 이미지를 활용하여 모든 bounding Box를 동시 예측 및 confidence(신뢰도) 할당
- 겹치는 bounding Box와 높은 confidence(신뢰도)를 가지는 S × S 그리드로 나눈 그리드 중 일부를 해당 클래스로 할당
- 그리드를 연결하여 최종 bounding Box 생성
- mAP (mean Average Precision)
- 의미: mAP는 객체 탐지 모델의 정확도를 측정하는 지표. 모델이 얼마나 많은 객체를 정확하게 탐지하고 분류하는지 의미
- 계산 방법: mAP는 각 클래스에 대한 평균 정밀도(Average Precision, AP)의 평균값으로 계산됨. AP는 정밀도(precision)와 재현율(recall) 곡선 아래 면적으로 정의
- FPS (Frames Per Second)
- 의미: FPS는 시스템이나 모델이 초당 처리할 수 있는 이미지 프레임의 수. 이는 객체 탐지 시스템의 속도와 효율성을 측정하는 지표
- mAP와의 관계: 일반적으로, 높은 정확도(mAP)를 달성하기 위해서는 더 많은 계산이 필요하여 FPS가 감소. 반대로, 빠른 처리 속도(FPS)를 위해 모델을 단순화하면 정확도(mp)가 저하
YOLOv8은 이전 버전들의 성공을 기반으로 새로운 기능과 개선 사항을 도입하여 성능, 유연성 및 효율성을 향상시켰습니다. YOLOv8은 탐지, 분할, 자세 추정, 추적, 분류를 포함하여 다양한 비전 AI 작업을 지원합니다. 이러한 다재다능함은 사용자들이 다양한 애플리케이션과 도메인 전반에 걸쳐 YOLOv8의 능력을 활용할 수 있도록 합니다.
Ref.
Predict guidelines : Predict - Ultralytics YOLOv8 Docs
YOLOv8 Tutorial : YOLOv8 Tutorial - Colaboratory (google.com)
YOLO v8 객체검출 실습 (자유주제)
Fubao Detector
- 판다 푸바오를 검출하는 YOLOv8 모델 만들기
- 이미지에서 푸바오 검출 가능
- 영상에서 푸바오 검출 가능
- => 판다월드 CCTV를 통해 푸바오가 안전하게 잘 있는지 확인 할 수 있음
code (image)
import locale
from roboflow import Roboflow
from ultralytics import YOLO
import cv2
from google.colab.patches import cv2_imshow
import cv2
locale.getpreferredencoding = lambda: "UTF-8"
# Data
API_KEY = ""
rf = Roboflow(api_key=API_KEY)
project = rf.workspace("det").project("panda_person")
dataset = project.version(1).download("yolov8")
# Train
# Load a model
model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
# Use the model
model.train(data="panda_person-1/data.yaml", epochs=50) # train the model
# Predict (Image)
model = YOLO('/content/runs/detect/train/weights/best.pt')
results = model('/content/baby_fubao.jpg', save=True)
images='/content/runs/detect/predict/baby_fubao.jpg'
image = cv2.imread(images)
cv2_imshow(image)
code (video)
# Predict (Video)
# Open the video file
video_path = 'fubao.mp4'
cap = cv2.VideoCapture(video_path)
# Get video properties for VideoWriter
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # or 'XVID'
out = cv2.VideoWriter('/content/output.mp4', fourcc, fps, (frame_width, frame_height))
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLOv8 tracking on the frame, persisting tracks between frames
results = model.track(frame, persist=True)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Write the frame into the file
out.write(annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release everything
cap.release()
out.release()
cv2.destroyAllWindows()
0: 640x384 1 panda, 6.4ms
Speed: 2.1ms preprocess, 6.4ms inference, 1.4ms postprocess per image at shape (1, 3, 640, 384)
0: 640x384 1 panda, 7.7ms
Speed: 2.0ms preprocess, 7.7ms inference, 1.4ms postprocess per image at shape (1, 3, 640, 384)
0: 640x384 1 panda, 8.0ms
Speed: 2.0ms preprocess, 8.0ms inference, 1.5ms postprocess per image at shape (1, 3, 640, 384)
0: 640x384 1 panda, 10.1ms
Speed: 1.9ms preprocess, 10.1ms inference, 1.3ms postprocess per image at shape (1, 3, 640, 384)
0: 640x384 1 panda, 10.1ms
Speed: 1.7ms preprocess, 10.1ms inference, 1.5ms postprocess per image at shape (1, 3, 640, 384)
'Education > 새싹 TIL' 카테고리의 다른 글
새싹 AI데이터엔지니어 핀테커스 16주차 (목) - LSTM Pytorch (1) | 2024.01.04 |
---|---|
새싹 AI데이터엔지니어 핀테커스 16주차 (수) - Transfer Learning & RNN, LSTM, GRU (1) | 2024.01.03 |
새싹 AI데이터엔지니어 핀테커스 15주차 (금) - PJT 10 Presentation (0) | 2024.01.02 |
새싹 AI데이터엔지니어 핀테커스 15주차 (목) - PJT 9 Presentation (0) | 2024.01.02 |
새싹 AI데이터엔지니어 핀테커스 15주차 (수) - PJT 8 Profit Rate Calculator (0) | 2023.12.17 |