본문 바로가기

KT AIVLE SCHOOL

[7주차] 시각지능 딥러닝 + 3차 미니프로젝트

목차

1. CNN

2. 객체인식

3. 3차 미니프로젝트 - 저시력자를 위한 원화 화폐 분류

 

 

1. CNN - Convolutional Neural Network

1-1. CNN의 주요 구성 요소

합성곱 계층 (Convolutional layer) : 입력 이미지나 이전 계층의 출력에 여러 개의 필터를 적용해 특징 맵(feature map)을 생성. 이 필터들은 이미지의 지역적인 특징을 감지하는데 사용, feature map을 구하는 공식(암묵지)는 {(I -F + 2P) / S } + 1 이다.

활성화 함수 (Activation function) : 딥러닝의 활성화함수와 동일

풀링 계층 (Pooling layer) : 특징 맵의 크기를 줄이거나 다운샘플링하는데 사용. 이를 통해 계산 복잡도를 줄이고, 모델의 과적합을 방지.

완전 연결 계층 (Fully Connected layer) : 일반적인 신경망 계층으로, 합성곱 및 풀링 계층을 거친 후의 데이터를 분류나 회귀등의 최종 목적에 맞게 처리.

 

1-2. CNN의 구성

1) Conv2D

filters : 새롭게 제작하려는 feature map의 수

keruel_size : conv layer의 필터 사이즈

strides : conv layer 이동 보폭

padding : 사이즈 유지, 외곽 정보 더 반영

activation : 활성화 함수 (잊지말기)

2) Maxpool2D

pool size : 풀링 필터의 크기

strides : 풀링필터 이동 보폭 (None일때 poolsize를 따라감)

 

1-3. CNN의 코드

import tensorflow as tf
from tensorflow.keras import layers, models

# 입력 데이터의 형태를 정의 (예: 28x28 이미지, 1채널(흑백))
input_shape = (28, 28, 1)

model = models.Sequential()

# Conv2D 계층 추가
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu', input_shape=input_shape))

# BatchNormalization 계층 추가
model.add(layers.BatchNormalization())

# MaxPool2D 계층 추가
model.add(layers.MaxPooling2D(pool_size=(2, 2)))

# Dropout 계층 추가
model.add(layers.Dropout(0.25))

model.summary()

 

2. 객체인식 - Object Detection

2-1. 객체인식이란?

Claasification(분류) + Localization (위치지정)

분류는 이미지에 어떤 객체가 포함되어 있는지 결정하는 과정

위치지정은 이미지 내에서 해당 객체의 위치를 결정하는 과정. 이는 특정 객체의 위치를 나타내는 경계상자(bounding box)의 좌표를 예측하는 것을 포함.

따라서 이 이미지에는 무엇이 있고, 그것은 어디에 위치하고 있나?를 판단하는 과정

Multi-Labeled Classification(다중 라벨 분류) + Bounding Box Regression (경계 상자 회귀)

다중라벨분류는 이미지 내에 여러 객체가 있을 때 각 객체의 종류를 동시에 분류하는 과정. 예를들면, 하나의 이미지 안에 고양이와 개가 함께 있을 때 두 객체 모두를 인식. (이미지 내 하나의 객체를 분류하고 위치를 찾는 과정)

경계상자회귀는 각 객체의 위치를 나타내는 경계상자의 좌표를 예측하는 과정. 이는 위치지정과 비슷하지만, 여러 객체에 대한 경계 상자 좌표를 동시에 예측. (이미지 내 여러 객체를 동시에 분류하고 그들의 위치를 찾는 과정)

이 방법은 이미지 내에 여러 객체가 있을 때 그 객체들의 종류와 위치를 동시에 판단하는 것.

 

2-2. 객체인식의 주요 개념

1) Bounding Box (경계상자)

객체 탐지에서 특정 객체의 위치를 표시하기 위해 사용되는 사각형 상자를 의미

경계상자는 보통 이미지 내의 객체를 둘러싸는 최소 크기의 사각형으로, 이를통해 객체의 위치와 크기를 파악.

2) Class Classification (클래스 분류)

해당 객체의 종류(클래스)를 분류. 예를들어, 이미지에서 감지된 객체가 '고양이'인지 '개'인지를 결정하는 것.

3) Confidence Score (신뢰도 점수)

탐지된 각 객체에 대한 신뢰도 점수는 해당 객체가 실제로 그 클래스에 속한다는 확신의 정도, 높은 신뢰도 점수는 해당 예측이 더 확실하다는 것을 의미.

4) IoU (Intersection over Union, 교차 영역 대 연합 영역 비율)

두 경계상자 간의 겹치는 영역과 합치는 영역의 비율을 나타냄. IoU는 0과1 사이의 값으로, 1에 가까울수록 두 경계 상자의 일치도가 높다는 것을 의미.

5) NMS (Non-Maximum Suppression, 비최대 억제)

객체 탐지에서 여러 경계상자가 동일한 객체를 중복하여 탐지할 경우, NMS는 이 중복을 제거하는 과정. NMS는 신뢰도 점수가 가장 높은 경계상자를 유지하고, 그와 높은 IoU를 가진 다른 경계상자들을 제거

6) Precision, Recall, AP, mAP

Precision(정밀도) : 양성으로 예측된 것 중 실제로 양성인 것의 비율

Recall(재현율) : 실제 양성 중 양성으로 예측된 것의 비율

AP (Average Precision, 평균 정밀도) : 정밀도-재현율 곡선 아래의 영역을 나타냄. 클래스 별로 계산

7) Annotation (주석)

학습 데이터에 대한 정보(예:객체의 위치, 클래스 등)를 제공하는 것. 객체 탐지에서는 각 객체의 경계상자와 클래스 정보를 주석으로 제공. 이 주석은 학습 데이터를 준비하는 과정에서 수동으로 또는 반자동으로 생성.

 

2-3. 객체인식의 대표적인 방법론 및 모델

1) R-CNN (Regions with CNN)

먼저 이미지에서 후보 영역을 추출하고, 각 후보 영역에 대해 CNN을 사용하여 분류.

2) Fast R-CNN

R-CNN의 개선 버전으로, 후보 영역 추출과 분류 과정을 통합하여 속도를 개선.

3) Faster R-CNN

후보 영역 추출을 위한 별도의 알고리즘이 아닌, 신경망을 이용하여 후보 영역을 직접 추출.

4) SSD (Single Shot MultiBox Detector)

이미지를 한 번만 통과시키면서 동시에 객체의 위치와 분류 정보를 얻어내는 방법.

5) YOLO (You Only Look Once)

이미지 전체를 한 번만 보고 객체의 위치와 분류를 동시에 판단하는 방식으로 매우 빠른 속도를 자랑함.

 

3. 3차 미니프로젝트 - 저시력자를 위한 원화 화폐 분류

신권 원화 이미지와 동영상을 ['10', '50', '100', '500', '1000', '5000', '10000', '50000']의 라벨과 위치를 탐지하고 분류하는 프로젝트

yolov5를 이용했으며 지폐의 경우 기울임을 잘 탐지하기 위해 yaml파일에 기울임을 주는 등 정확도를 높힘.

 

관련 코드는 개인 깃허브에 정리.

'KT AIVLE SCHOOL' 카테고리의 다른 글

[10,11주차] AI모델 해석/평가 + 4차 미니프로젝트  (0) 2023.10.30
[8,9주차] 언어지능 딥러닝  (0) 2023.10.30
[6주차] 2차 미니프로젝트  (0) 2023.09.24
[5주차] 딥러닝  (0) 2023.09.11
[4주차] 머신러닝  (0) 2023.09.03