본문 바로가기

AI 인공지능

인공지능 수첩 ( Classification / Localization / Object Detection / Semantic Segmentation / Instance Segmentation / Bounding box / IoU / Localization의 Target Label / Sliding Window / Convolution / Anchor box / NMS )

반응형

 

Classification

- 주어진 이미지 안의 물체가 '무엇인지' 알아내는 것

- 한 가지 물체를 찾으며, 가장 큰 물체를 알아냄.


Localization

- 주어진 이미지 안의 물체가 '어느 위치에 있는지' 알아내는 것

- Bounding Box로 위치를 나타냄.


Object Detection

- 주어진 이미지 안의 물체가 '무엇인지', '어느 위치에 있는지' 모두 알아내는 것

- Bounding Box로 위치를 나타냄.

- 여러 물체를 동시에 파악할 수 있음.


Semantic Segmentation

- 주어진 이미지 안의 '​물체의 영역'을 알아내는 것

- 객체의 모습 그대로 파악하며, Object Mask를 만듦. ( 물체가 있는 좌표의 데이터만 1, 2,.. 로 mask를 씌움. )

- 동일한 종류의 객체는 별도로 구분하지 않음.


Instance Segmentation

- 동일한 종류의 객체더라도 둘을 구분함. (서로 다르게 Mask됨.)

 


 

Bounding box

- 이미지 내에서 물체의 위치를 사각형으로 감싼 형태의 도형으로 정의하고, 이를 꼭짓점의 좌표로 표현하는 방식

- (min_x, min_y, max_x, max_y): 전체 이미지의 좌측 상단을 원점으로 정의하고, 바운딩 박스의 좌상단 좌표우하단 좌표 두 가지 좌표로 표현함.

- ​(min_x, min_y, width, height): 좌측 상단의 점에 대한 상대적인 위치인 폭과 높이로 바운딩 박스의 위치를 정의함.

from PIL import Image, ImageDraw

import os

img_path=os.getenv('HOME')+'/aiffel/object_detection/images/person.jpg'

img = Image.open(img_path) # 이미지를 불러옴.

draw = ImageDraw.Draw( img )

draw.rectangle( (130, 30, 670, 450), outline=(0, 255, 0), width=2 ) # 바운딩 박스를 그림.


IoU ( Intersection over Union )

- localization 모델이 인식한 결과를 평가하기 위한 지표

- Ap와Agt의 교차하는 영역을 Ap와 Agt를 합친 영역으로 나눈 값

-​ Ap: (prediction) 예측

- Agt: (ground truth) 정답


Localization의 Target Label

- Pc: 물체가 있으면 1, 배경인 경우는 0

- bx, by: 바운딩 박스의 좌측 상단의 점을 표현하는 x축과 y축의 좌표

- bh, bw: 바운딩 박스의 높이와 폭

- c1, c2, c3: 물체가 각 클래스 1, 2, 3에 속할 확률 ( 물체가 클래스인 경우에는 1, 클래스가 아닌 경우에는 0 )

* bx, by, bh, bw는 입력 이미지의 너비w와 높이h로 각각 Normalize된 값으로 표시됨. ( 0~1사이의 값 )

import tensorflow as tf

from tensorflow import keras

output_num = 1+4+3 # object_prob 1, bbox coord 4, class_prob 3

input_tensor = keras.layers.Input( shape=(224, 224, 3), name='image' )

base_model = keras.applications.resnet.ResNet50(

input_tensor = input_tensor,

include_top = False,

weights = 'imagenet',

pooling = None,

)

x = base_model.output

preds = keras.layers.Conv2D( output_num, 1, 1 )(x)

localize_model = keras.Model( inputs=base_model.input, outputs=preds )

localize_model.summary()


Sliding Window

- 큰 이미지에서 여러 물체를 한꺼번에 찾아내기 위해 수행함.

- 전체 이미지를 적당한 크기의 영역인 window로 나눈 후에, 각각의 window에 대해 이전 스텝에서 만든Localization network를 이동시키면서(sliding) 반복 적용해 보는 방식


Convolution

- Sliding window의 단점인 연산량과 속도를 개선하기 위한 방법 중 하나

- 연산이 병렬적으로 동시에 진행되므로 훨씬 효율적임.

- convolution의 결과로 얻어지는 1x1 형태의 output도 동일하게 localization 결과로 대체될 수 있음.


Anchor box

- 모델이 추론해야 할 위치의 후보

- 서로 다른 형태의 물체와 겹친 경우에 대응가능함.

- 인식 범위 내에 물체가 있고 2개의 앵커 박스가 있는 경우, IoU가 더 높은 앵커 박스에 물체를 할당하게 됨.

- 이미지의 모든 영역을 뒤덮을만큼 다양한 앵커 박스를 만들어서 그 중에 물체가 있을 확률이 가장 높은 앵커 박스물체의 바운딩 박스라고 예측하게 됨.


NMS ( Non-Max Suppression )

- Object detection 결과들 중 겹친 결과들을 명료하게 하나의 결과로 나타냄.

- 겹친 박스들이 있을 경우 가장 확률이 높은 박스를 기준으로 기준이 되는 IoU 이상인 것들을 없앰.

- 같은 클래스인 물체를 대상으로 적용함.

반응형
저작자표시 비영리 변경금지

'AI 인공지능' 카테고리의 다른 글

인공지능 수첩 ( YOLO v1, v2, v3, v4 / PPYOLO / YOLOR / YOLOX / YOLOS )  (1) 2023.05.17
인공지능 수첩 ( OCR / Google Cloud Vision API / keras-ocr / Tesseract / Text detection / TextBoxes 모델 / PixelLink 모델 / CRAFT / PMTD / Text recognition / CRNN / TPS / Attention과 Transformer )  (0) 2023.05.16
인공지능 수첩 ( DeepLabv3+ / Atrous Convolution / Spatial Pyramid Pooling / Pixel Accuracy / Mask IoU / Nearest Neighbor / Bilinear Interpolation / Transposed Convolution / Image Classification / CAM / GAP / NIN / Grad-CAM / ACoL / 약지도학습 )  (2) 2023.05.14
인공지능 수첩 ( segmentation / Mask R-CNN / RoIPool Layer / RoIAlign / FCN / U-Net / semantic segmentation )  (2) 2023.05.13
인공지능 수첩 ( Two-stage detector / One-stage detector / R-CNN / Fast R-CNN / Faster R-CNN / RoI Pooling / RetinaNet / Focal Loss / FPN / YOLO / SSD )  (0) 2023.05.12