목록컴퓨터 비전 (14)
귀퉁이 서재
이번 포스팅에서는 스타일 전이(Style Transfer)의 원리를 알아보고, 코드로 실습까지 해보겠습니다. 스타일 전이(Style Transfer)의 원리 1. 스타일 전이란? 스타일 전이란 콘텐츠 이미지(content image)에 스타일 이미지(style image)의 화풍을 적용해 새로운 이미지를 생성하는 기법을 말합니다. 아래 예시를 보시죠. 원본 이미지인 A(이를 콘텐츠 이미지라고 부름)를 기준으로 각 화풍(이를 스타일 이미지라고 부름)에 맞게 스타일을 적용해 새로운 이미지를 만든 예시들입니다. 반 고흐의 작품이나 뭉크의 작품의 스타일을 적용해서 새로운 이미지를 만들었죠. 스타일 전이는 어떤 원리로 동작하는지 알아봅시다. 먼저, 스타일 전이를 적용하려면 사전 훈련된(pre-trained) CN..
딥드림이란 무엇인가? 딥드림(Deep Dream)이란 입력 이미지를 환영이나 꿈 같은 이미지로 만들어주는 알고리즘입니다. 마치 어린 아이들이 구름을 보며 구름과 비슷한 동물이나 사물을 떠올리는 것과 같습니다. 이미 훈련된 신경망 모델이 원본 이미지에서 특정 패턴을 더 부각해 몽환적이고 새로운 이미지를 만들어주는 방식이죠. 아래 그림을 보시죠. 왼쪽이 원본이고, 오른쪽이 딥드림 모델로 만든 그림입니다. 딥드림을 이해하려면 먼저 기존 딥러닝 신경망을 알아야 합니다. 기본적으로 딥러닝 신경망은 경사 하강법으로 손실값을 최소화하는 방향으로 훈련을 합니다. 여러 계층(레이어)을 거쳐 전결합층에 도달해 최종 분류값을 결과물로 출력합니다. 이어서 최종 분류값과 실제값 사이의 오차(손실)를 계산하죠. 오차값이 줄어드는..
자세 추정이란? 자세 추정(Pose Estimation)이란 이미지나 영상에 포함된 여러 인물을 탐지(detection)해서 인체 각 부위의 위치를 식별하고 부위를 연결하는 선을 구하는 기술입니다. 게임, 헬스케어, AR, 스포츠 등에 쓰이죠. 특히나 스포츠 분야에서 다양하게 활용될 수 있을 것 같습니다. 인체에서 중요한 지점(key point)의 위치를 찾는 방식으로 동작합니다. 머리, 어깨, 팔꿈치, 무릎, 발목 등을 말이죠. 이러한 주요 지점을 선으로 연결하면 전체 자세를 추정할 수 있습니다. 자세 추정의 형태는 크게 세 가지입니다. Skeleton-based 모델, Contour-based 모델, Volume-based 모델이죠. Skeleton-based 모델은 주요 부위를 중심으로 찾기 때문에..
객체 탐지에 혁신을 가져다준 모델인 YOLO 계열의 초기 모델인 YOLO v1, v2, v3 모델의 전반적인 특징을 알아보고, 이 모델을 활용해 간단한 객체 탐지 실습까지 해보겠습니다. YOLO v1, YOLO v2, YOLO v3 소개 우선 YOLO v1, YOLO v2, YOLO v3를 알아봅시다. 이름을 보면 알겠지만 시리즈로 이어진 모델입니다. 버전 숫자가 클수록 개선된 모델이죠. YOLO v1 이후로 등장한 객체 탐지 모델을 간략히 살펴보죠. YOLO v1 : 2-stage 검출기를 1-stage 검출기로 바꾸는 데 지평을 연 모델입니다. 1-stage 검출기란 영역 추정(region proposal)과 이미지 분류(classification)를 동시에 수행하는 모델을 말합니다. YOLO v1은..
초창기 객체 탐지 모델인 R-CNN, SPP-net, Fast R-CNN, Faster R-CNN에 관해 알아보겠습니다. 각 객체 탐지 모델의 논문 전체를 따로 정리해 놓았는데, 자세한 내용이 궁금한 분은 아래 링크를 참고해주세요. 논문 리뷰 - R-CNN 톺아보기 논문 리뷰 - SPP-net 톺아보기 논문 리뷰 - Fast R-CNN 톺아보기 논문 리뷰 - Faster R-CNN 톺아보기 이 글에서는 R-CNN, SPP-net, Fast R-CNN, Faster R-CNN의 핵심 구조를 알아보겠습니다. 1. R-CNN 기존 localization 구조의 문제점과 해결 방안 객체 localization을 할 때 원본 이미지와 annotation 정보를 활용합니다. 원본 이미지를 활용해 이미지 분류를 수행..
이번 글에서는 객체 탐지에 관해 알아보겠습니다. 더불어 이미지 분류, Localization, 객체 탐지, 세그멘테이션이 무엇이고, 서로 어떻게 다른지 알아본 뒤, 객체 탐지의 구조와 객체 탐지가 어려운 까닭에 관해 알아보겠습니다. 1. 분류, Localization, 객체 탐지, 세그멘테이션 가장 먼저, 분류, Localization, 객체 탐지, 세그멘테이션이 각각 어떤 뜻인지 알아보겠습니다. 다음 그림을 보시죠. ① 분류(Classification)는 해당 이미지가 어떤 객체(물체)를 나타내는지 분류하는 작업입니다. 가장 간단한 딥러닝 작업이죠. 개와 고양이를 분류하는 예가 있습니다. ② Localization은 이미지 안에 있는 하나의 객체 위치를 찾아주는 작업입니다. 위 그림에서 보시는 바와 같..
이전 글에서 오토인코더의 개념과 원리를 알아봤습니다. 이번 게시글에서는 오토인코더를 직접 구현해보는 실습을 다루겠습니다. 간단한 선형 인코더를 설계한 뒤, 인코딩과 디코딩을 해보겠습니다. 인코딩 결과와 디코딩 결과도 시각화해볼 겁니다. 코드 링크 : https://github.com/BaekKyunShin/Computer-Vision-Basic/blob/main/Project4-AutoEncoder/AutoEncoder.ipynb 아래 코드는 구글 코랩(colab)을 바탕으로 설명합니다. 1. 라이브러리 임포트 필요한 라이브러리를 먼저 임포트합니다. import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from tensorf..
오토인코더(AutoEncoder)의 개념을 되도록 쉽게 알아보겠습니다. 각설하고 바로 시작해보죠. 1. 오토인코더의 개념 오토인코더는 입력(input)과 출력(output)이 동일한 값을 갖도록 만든 신경망 구조입니다. 오토인코더의 구조는 다음과 같습니다. 입력 x를 넣으면 출력 x'이 나옵니다. x와 x'은 (거의) 같은 값이 되게끔 하는 신경망 구조죠. 그런데 모양이 조금 특이합니다. 레이어가 점점 줄어들다가 다시 커지는 형태네요. 그래서 오토인코더를 Diabolo Network라고도 합니다. 아래와 같은 놀이기구(?)가 디아볼로라고 하네요. 작아졌다가 커지는 모양이 디아볼로와 같아서 이렇게도 부릅니다. 오토인코더의 가장 중요한 목적은 차원축소(Dimension Reduction)입니다. 어떻게 차원..
이번 글은 이전 게시글과 이어지는 내용입니다. 이번에는 동영상에 등장하는 여러 얼굴 이미지를 바탕으로 감정 분류를 해보겠습니다. 모델 학습까지는 이전 게시글에서 이미 설명했으니 여기서는 코드만 실겠습니다. 자세한 설명은 이전 글을 참고해주세요. 코드 링크 : https://github.com/BaekKyunShin/Computer-Vision-Basic/blob/main/Project3-Emotion_Classification/Emotion_Classification_in_Video.ipynb 아래 코드는 구글 코랩(colab)을 바탕으로 설명합니다. 1. 구글 드라이브 마운트 & 이미지 데이터셋 불러오기 from google.colab import drive drive.mount('/content/dr..
이번에는 신경망을 활용해 얼굴 이미지에서 감정을 분류하는 모델을 만들어보겠습니다. 사실 감정 분류와 이미지 다중 분류는 다를 바 없습니다. 코드 링크 : https://github.com/BaekKyunShin/Computer-Vision-Basic/blob/main/Project3-Emotion_Classification/Emotion_Classification.ipynb 아래 코드는 구글 코랩(colab)을 바탕으로 설명합니다. 1. 구글 드라이브 마운트 & 이미지 데이터셋 불러오기 가장 먼저 구글 드라이브를 마운트합니다. from google.colab import drive drive.mount('/content/drive') 이어서 감정 분류에 사용할 이미지 데이터를 불러오겠습니다. FER(Fa..
이전 글에서 LBPH 알고리즘 개념에 관해 알아봤습니다. 이번에는 LBPH 알고리즘을 활용해서 얼굴 인식을 하는 실습을 해보겠습니다. 코드 링크 : https://github.com/BaekKyunShin/Computer-Vision-Basic/blob/main/Project2-Face_Recognition/Face_Recognition_with_LBPH.ipynb 아래 코드는 구글 코랩(colab)을 바탕으로 설명합니다. 1. 구글 드라이브 마운트 & 이미지 데이터셋 불러오기 가장 먼저 구글 드라이브를 마운트합니다. from google.colab import drive drive.mount('/content/drive') 이어서 얼굴 인식에 사용할 이미지 데이터를 불러옵니다. 여기서는 Yale fac..
이전 포스트들에서 얼굴 검출(face detection)을 알아봤습니다. 이번에는 얼굴 인식(face recognition)에 관해 알아보겠습니다. 둘은 비슷해 보이지만 다른 개념입니다. 얼굴 검출 : 이미지나 영상에서 사람의 얼굴을 찾는 작업 얼굴 인식 : 이미지나 영상에서 개개인의 고유한 얼굴을 인식하는 작업 얼굴 자체를 찾는 일만을 원한다면 얼굴 검출 작업을 하면 됩니다. 반면, 특정한 개인을 식별하고 싶으면 얼굴 인식 작업을 해야 한다. 코로나가 한창일 때, 우리는 실내 입장 시 카메라 앞에 얼굴을 대고 체온을 측정했었습니. 그때는 얼굴 검출 기술이 필요합니다. 그 사람이 홍길동인지 임꺽정인지는 중요하지 않죠. 그냥 사람의 '얼굴'만 찾아서 체온을 측정하면 되기 때문입니다. 반면, 사무실에 출입할..
이전 게시글에서는 하르 캐스케이드를 활용해 얼굴을 검출하는 방법을 알아봤습니다. 초기 객체 검출 모델이라서 성능이 썩 좋지는 않았습니다. 이번에는 HOG 검출기를 활용해 얼굴을 검출해보겠습니다. 일반적으로 HOG 검출기가 캐스케이드 검출기보다 성능이 좋습니다. HOG 개념에 관해서는 OpenCV - 33. HOG(Histogram of Oriented Gradient) 디스크립터를 참고해주세요. 이론을 설명해놨습니다. 이 게시글에서는 이론은 제외하고 바로 코드로 구현해보겠습니다. 코드 링크 : https://github.com/BaekKyunShin/Computer-Vision-Basic/blob/main/Project1-Face_Detection/HOG_Face_Detection.ipynb 아래 코드는..
하르 캐스케이드는 'Rapid Object Detection using a Boosted Cascade of Simple Features' 논문(2001년 발표)에서 제안한 객체 검출기입니다. 상세한 이론은 논문 리뷰 - 캐스케이드 검출기 (Cascade Detector) 톺아보기 게시글에 설명해놨습니다. 궁금하신 분은 참고해보세요. 여기서는 OpenCV 라이브러리를 활용해 캐스케이드 검출기로 얼굴을 검출하는 실습을 해보겠습니다. 구글 코랩 환경에서 구현했습니다. 아래 코드는 모두 구글 코랩 바탕이므로, 다른 에디터에서 작업하신다면 적당히 가감하시면 되겠습니다. 코드 링크 : https://github.com/BaekKyunShin/Computer-Vision-Basic/blob/main/Project1..