CV
Computer Vision
컴퓨터 비전. 이미지/영상 이해 AI 분야. 객체 탐지, 세그멘테이션, OCR.
Computer Vision
컴퓨터 비전. 이미지/영상 이해 AI 분야. 객체 탐지, 세그멘테이션, OCR.
컴퓨터 비전(Computer Vision, CV)은 기계가 이미지와 비디오에서 의미 있는 정보를 추출하고 이해하도록 하는 AI의 핵심 분야입니다. 인간의 시각 시스템을 모방하여 객체 인식, 장면 이해, 3D 재구성 등 다양한 시각 작업을 자동화합니다.
CV의 역사는 1960년대 MIT의 초기 연구로 거슬러 올라가지만, 2012년 AlexNet이 ImageNet 대회에서 압도적 성능을 보인 이후 딥러닝 기반 CV가 주류가 되었습니다. 이후 ResNet, EfficientNet 같은 분류 모델과 YOLO, Faster R-CNN 같은 객체 탐지 모델이 등장하며 급속도로 발전했습니다.
CV의 주요 과제는 이미지 분류(Image Classification), 객체 탐지(Object Detection), 시맨틱 세그멘테이션(Semantic Segmentation), 인스턴스 세그멘테이션(Instance Segmentation), 포즈 추정(Pose Estimation), OCR(Optical Character Recognition) 등이 있습니다. 각 과제는 서로 다른 아키텍처와 학습 방법을 요구합니다.
실무에서 CV는 자율주행 차량의 도로 인식, 의료 영상에서의 질병 탐지, 제조업 품질 검사, 보안 시스템의 얼굴 인식, 소매업의 무인 결제 시스템 등에 광범위하게 적용됩니다. 최근에는 Vision Transformer와 멀티모달 모델(CLIP, GPT-4V)이 새로운 가능성을 열고 있습니다.
# OpenCV와 PyTorch를 활용한 객체 탐지
import cv2
import torch
from torchvision import transforms
from torchvision.models.detection import fasterrcnn_resnet50_fpn_v2, FasterRCNN_ResNet50_FPN_V2_Weights
# 사전 학습된 Faster R-CNN 모델 로드
weights = FasterRCNN_ResNet50_FPN_V2_Weights.DEFAULT
model = fasterrcnn_resnet50_fpn_v2(weights=weights)
model.eval()
# 이미지 전처리
preprocess = weights.transforms()
# 이미지 로드 및 추론
image = cv2.imread("sample.jpg")
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_tensor = preprocess(torch.from_numpy(image_rgb).permute(2, 0, 1))
# 객체 탐지 수행
with torch.no_grad():
predictions = model([image_tensor])[0]
# 결과 시각화 (confidence > 0.7인 객체만)
categories = weights.meta["categories"]
for box, label, score in zip(predictions['boxes'], predictions['labels'], predictions['scores']):
if score > 0.7:
x1, y1, x2, y2 = box.int().tolist()
class_name = categories[label]
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(image, f"{class_name}: {score:.2f}",
(x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
cv2.imwrite("detected.jpg", image)
print(f"탐지된 객체 수: {len([s for s in predictions['scores'] if s > 0.7])}")
"불량 검출 시스템에 YOLOv8을 적용하면 실시간 처리가 가능합니다. 현재 라인에서 초당 30프레임 처리가 필요한데, V100 GPU 기준으로 YOLOv8-m이 45fps 정도 나옵니다."
"객체 탐지에서 IoU(Intersection over Union)는 예측 바운딩 박스와 정답 박스의 겹치는 영역을 전체 영역으로 나눈 값입니다. 보통 IoU 0.5 이상이면 True Positive로 간주하고, 이를 기준으로 mAP를 계산합니다."
"이미지 전처리에서 resize 후 normalize 순서가 중요해요. 사전 학습된 모델은 ImageNet 통계(mean=[0.485, 0.456, 0.406])로 정규화되어 있으니 동일하게 맞춰야 합니다."
ImageNet으로 학습된 모델을 의료 영상이나 위성 사진에 바로 적용하면 성능이 크게 떨어집니다. 해당 도메인 데이터로 fine-tuning이 필수적입니다.
고해상도 이미지를 그대로 처리하면 메모리 부족과 속도 저하가 발생합니다. 작업에 따라 적절한 리사이징 또는 슬라이딩 윈도우 기법을 적용하세요.
분류는 Accuracy, 탐지는 mAP, 세그멘테이션은 IoU/Dice를 사용합니다. 과제에 맞는 올바른 평가 지표를 선택해야 모델 성능을 정확히 측정할 수 있습니다.