9. 컴퓨터 비전

1. OpenCV를 이용한 이미지 뷰어 구현

OpenCV는 이미지 처리와 컴퓨터 비전 분야에서 가장 많이 사용되는 라이브러리 중 하나입니다. 아래 예제는 OpenCV만을 사용하여 기본적인 이미지 뷰어를 구현한 코드입니다. 주요 기능은 다음과 같습니다.

import cv2

# 이미지 파일 경로 설정
image_path = 'sample.jpg'
img = cv2.imread(image_path)

# 줌(확대/축소) 함수: scale 값을 조절하여 이미지 크기를 변경
def zoom_image(image, scale=1.2):
    width = int(image.shape[1] * scale)
    height = int(image.shape[0] * scale)
    return cv2.resize(image, (width, height))

# 크롭 함수: (x, y) 좌표와 폭, 높이를 인자로 받아 이미지의 일부분을 추출
def crop_image(image, x, y, w, h):
    return image[y:y+h, x:x+w]

# 흑백 변환 함수
def convert_to_gray(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 간단한 사용자 인터페이스 구현: 키 입력에 따라 기능 선택
while True:
    cv2.imshow("Image Viewer", img)
    key = cv2.waitKey(0) & 0xFF

    if key == ord('q'):  # 'q'를 누르면 종료
        break
    elif key == ord('g'):  # 'g'를 누르면 흑백 변환
        img = convert_to_gray(img)
    elif key == ord('z'):  # 'z'를 누르면 이미지 확대 (scale 조절 가능)
        img = zoom_image(img, scale=1.5)
    elif key == ord('c'):  # 'c'를 누르면 중앙 영역을 크롭 (예시로 100x100 영역)
        h, w = img.shape[:2]
        img = crop_image(img, w//2 - 50, h//2 - 50, 100, 100)

cv2.destroyAllWindows()

추가 설명:


2. 딥러닝 발달 이전의 사물 감지 방법

딥러닝이 널리 활용되기 전, 객체(사물) 감지에는 주로 전통적 컴퓨터 비전 기법이 사용되었습니다. 대표적인 방법은 다음과 같습니다.


3. Faster R-CNN의 장단점

Faster R-CNN은 2단계 접근 방식(two-stage detector)으로, 먼저 Region Proposal Network(RPN)을 사용해 후보 영역을 생성한 후, 이 영역에 대해 분류와 경계 상자 회귀를 수행합니다.

장점

단점


4. dlib이란?

dlib은 C++로 작성된 머신러닝 및 컴퓨터 비전 라이브러리이며, 파이썬 인터페이스도 제공하여 손쉽게 사용할 수 있습니다.


5. YOLO의 장단점

**YOLO (You Only Look Once)**는 단일 신경망을 통해 이미지 전체에서 객체의 위치와 클래스를 동시에 예측하는 단일 단계 접근 방식(single-shot detector)입니다.

장점

단점


6. 선호하는 Object Detection 알고리즘: YOLO

개인적으로 YOLO를 선호하는 이유는 다음과 같습니다.


7. 이후 등장한 더 우수한 알고리즘

딥러닝 기술의 발전과 함께 객체 감지 알고리즘도 크게 발전했습니다. 대표적인 최신 알고리즘은 다음과 같습니다.

또한, YOLO 시리즈의 최신 버전(예: YOLOv5, YOLOv7, YOLOv8)도 지속적으로 개선되어 다양한 응용 분야에서 활용되고 있습니다.


8. Average Pooling vs Max Pooling

Pooling은 CNN에서 특징 맵의 공간적 크기를 줄여 계산량을 감소시키고, 특징의 요약 정보를 제공하는 역할을 합니다.


9. Deep 네트워크: 깊이가 깊을수록 좋은가? 언제까지 유효할까?


10. Residual Network (ResNet)와 Ensemble 관점

ResNet은 깊은 네트워크 학습에서 나타나는 기울기 소실 문제를 해결하기 위해 도입된 skip connection(잔차 연결) 개념이 핵심입니다.


11. CAM (Class Activation Map)

CAM은 CNN이 특정 클래스에 대해 어떤 이미지 영역에 주목하는지 시각화하는 기법입니다.


12. Localization (객체 위치 파악)

Localization은 이미지 내에서 객체의 위치와 크기를 찾는 작업을 의미합니다.


13. 자율주행 자동차의 원리

자율주행 자동차는 여러 센서를 활용하여 주변 환경을 인식하고, 주행 경로를 계획하여 안전하게 이동합니다.


14. Semantic Segmentation

Semantic Segmentation은 이미지의 각 픽셀에 대해 클래스 라벨을 할당하여, 이미지 내 객체의 경계를 보다 정밀하게 구분하는 작업입니다.


15. Visual Question Answering (VQA)

Visual Q&A는 이미지와 자연어 질문을 결합하여, 이미지의 내용을 이해하고 그에 맞는 답변을 생성하는 문제입니다.


16. Image Captioning

Image Captioning은 이미지의 내용을 설명하는 자연어 문장을 생성하는 작업입니다.


17. Fully Connected Layer (FC Layer)의 기능

Fully Connected Layer는 CNN의 마지막 단계에서 추출된 특징들을 종합하여 최종 분류나 회귀 결과를 도출하는 역할을 합니다.


18. Neural Style Transfer

Neural Style Transfer는 한 이미지의 스타일(색채, 질감, 브러시 스트로크 등)을 다른 이미지의 콘텐츠에 적용하는 기술입니다.


19. Convolutional Neural Network (CNN)의 개념

CNN은 이미지, 영상, 시계열 데이터 등 2차원 혹은 3차원 데이터 처리에 최적화된 신경망 구조입니다.


20. CNN이 MLP보다 뛰어난 이유

CNN은 이미지와 같이 공간적 구조가 중요한 데이터에 대해 다음과 같은 장점을 가집니다.


21. CNN의 파라미터 개수 계산

합성곱 계층의 파라미터 수는 다음과 같이 계산할 수 있습니다.


22. 주어진 CNN과 동일한 MLP를 구성할 수 있는가?

이론적으로는 MLP(완전 연결 신경망)도 임의의 함수를 근사할 수 있으나, 실제로는 다음과 같은 이유로 비효율적입니다.


23. 왜 풀링 시 Max Pooling을 사용하는가?

Max Pooling은 영역 내 가장 큰 활성화 값을 선택함으로써 다음과 같은 효과를 냅니다.


24. 시퀀스 데이터에 CNN 적용 가능 여부

CNN은 반드시 이미지와 같은 2차원 데이터에만 국한되지 않습니다. 1D 컨볼루션을 적용하여 시퀀스 데이터에도 효과적으로 사용할 수 있습니다.