인공지능은 이미지를 어떻게 인식하는가?
1. 컴퓨터가 이미지를 숫자로 이해한다.
컴퓨터는 이미지를 픽셀 단위로 처리한다. 각 픽셀은 색상 정보를 숫자로 표현한다.
*픽셀(Pixel)*
이미지를 구성하는 최소 단위이며 UHD 4K TV의 경우 화면 가로 3,840개 세로 2,160개인 총 830만 개의 픽셀로 이루어져 있다.
*그리드(Grid)*
영어로는 '격자 형식의 무늬'라는 뜻으로 행과 열로 구성된 2차원 배열을 의미한다. 즉, 이미지는 픽셀들이 행과 열로 배열된 2차원 구조인 그리드 구조로 구성된다. 이미지는 이러한 2차원 배열 형태로 표현된다.
이미지는 일반적으로 픽셀의 그리드로 구성된다. 각 픽셀은 다양한 형태로 표현될 수 있고 이미지의 용도와 필요에 따라 적절한 값을 갖는다.
(ex. 그리이스케일 이미지(Grayscale Image), 컬러 이미지, CMYK 이미지, 멀티스펙트럴 및 하이퍼스펙트럴 이미지. 열화상 이미지, 심도 이미지, 라벨 이미지)
또한 한 픽셀에 여러 값이 담길 수도 있다. 간단히 RGB와 흑백 이미지만 살펴보자
- 흑백 이미지
일반적으로 밝기를 나타내며 보통 0(검정)에서 255(흰색)로 갈수록 밝아진다.
3x3 픽셀로 구성된 흑백 이미지이다.

0부터 255의 값을 표현하므로 한 픽셀 당 8bits 즉 1byte가 필요하다.
- 컬러 이미지
각 픽셀은 세 개의 값을 가지며 각각 빨강(R), 초록(G), 파랑(B) 색상 채널의 강도를 나타낸다. 각 값은 보통 0에서 255사이의 정수이다.
3x3 픽셀로 구성된 RGB 이미지이다.

0부터 255의 값을 세 개로 표현해야 하므로 한 픽셀 당 24bits 즉 3bytes가 필요하다.
2. 숫자가 큰 값이 아닌 계산하기 편한 작은 숫자로 전처리 한다
이미지를 인식하기 전에 데이터를 전처리하여 모델에 적합한 형태로 변환한다.
- 정규화: 픽셀 값(0~255)을 [0, 1] 또는 [-1, 1] 범위로 스케일링하여 신경망이 더 효율적으로 학습할 수 있도록 한다. 이는 큰 값이 아닌 작은 값을 계산하므로 효율성을 높이고 학습 안정성을 향상시킨다.

- 크기 조정: 이미지를 동일한 크기로 조정하여 모델에 입력합니다. 예를 들어, 모든 이미지를 224x224 픽셀로 크기 조정할 수 있다. 이로 인해 행렬 계산의 일관성을 보일 수 있다.
- 데이터 증강: 이미지 회전, 이동, 확대/축소 등의 변환을 적용하여 다양한 학습 데이터를 생성합니다.
3. 모델(네트워크)은 어떤 일을 하는지, 모델을 만드는 것에 대해 설명
- 컴퓨터는 왜 이미지의 숫자를 이해할 수 없을까?
모델을 돌리기 전의 이미지의 픽셀 값만으로는 컴퓨터가 그 이미지가 무엇인지 직접 파악할 수 없다. 사람이 보기에는 특정한 패턴이 있는 것처럼 보이지만 컴퓨터가 인식하기에는 그저 숫자의 단순한 데이터 표현이기 때문이다.
컴퓨터가 이미지를 읽을 때, 그 이미지는 픽셀로 이루어진 숫자 배열로 표현된다. 예를 들어 28x28 크기의 흑백 이미지는 784개의 숫자로 이루어져 있다.
이 숫자 배열은 각 픽셀의 밝기나 색상을 나타내지만 이 자체로는 이미지가 무엇을 나타내는지에 대한 정보는 없다. 숫자는 단순히 데이터일 뿐, 그 데이터가 의미하는 바를 이해하기 위한 어떤 맥락도 없기 때문이다.
*모델이란?*
딥러닝에서 네트워크(신경망)를 의미한다. 모델이라고 부르는 것은 일반적으로 신경망(Nueral Network) 구조를 말한다.
이 네트워크는 인공지능이 학습하고 예측하는 데 필요한 구조를 제공한다. 신경망(layer)은 여러 층으로 구성되며, 각 층에는 여러 개의 뉴런이 있다. 이 뉴런들은 서로 연결되어 있으며, 이 연결 구조가 곧 네트워크이다.
- 모델은 이미지를 이해하기 위해 패턴을 추출한다.
사람은 이미지를 볼 때 각 픽셀 간의 복잡한 패턴과 관계를 인식하여 이미지를 이해한다. 고양이를 예시로 고양이의 이미지에서 눈, 귀, 털 등의 특징을 인식하고 이를 결합하여 "고양이"라는 결론이 도출한다.
하지만 컴퓨터는 이러한 패턴과 관계를 자동으로 인식하지 못한다. 단순히 숫자 배열만 본다면, 그 배열이 어떤 객체를 나타내는지 알 수 없다.
그렇기에 모델은 이 역할을 대신해 이미지를 잘게 나누어 숫자 배열에서 패턴을 추출하고 분석하여 이미지의 의미를 파악한다.
- 모델 예시
모델(CNN or ViT)은 숫자 배열에서 패턴을 추출하고 픽셀 간의 관계를 분석하여 이미지가 무엇을 나타내는지 파악하는 데 필수적인 역할을 한다.
- CNN(Convolutional Neural Network)
합성곱 연산을 통해 이미지의 작은 부분에서 특징을 추출하고, 이 특징들을 결합하여 이미지의 전체적인 의미를 이해한다.
Inductive Bias: CNN은 국소적인 특징을 먼저 학습하며 점진적으로 전체적인 맥락을 이해하는 구조이다. 이로 인해 CNN이 적은 데이터로도 효과적으로 학습할 수 있는 이유를 설명하는 데 중요한 역할을 한다. 정리하면 CNN 구조로 인해 inductive bias로 해석할 수 있다로 본다.
CNN에 쓰이는 컨볼루션에 대한 자료를 첨부하겠다
https://supersumin.tistory.com/16컨볼루션(Convolusion)이란?
[위 글은 "3Blue1Brwon"의 "그런데 컨볼루션이란 무엇입니까?"를 참고하여 제작하였다] 두 개의 다른 숫자 목록(혹은 두 개의 함수)을 결합하여 새로운 숫자 목록(혹은 새로운 함수)을 생성하기 위해
supersumin.tistory.com
- ViT(Vision Transformer)
이미지를 패치로 나누고, 각 패치 간의 관계를 분석하여 전역적인 정보를 바탕으로 이미지를 인식한다. 많은 계산을 필요로 하지만 전역적인 정보 학습에 유리하다.
* 패턴이란? *
이미지에서 패턴은 픽셀의 밝기나 색상 분포, 또는 구조적인 형태를 말한다. 예를 들어, 고양이 이미지에서 눈, 귀, 수염 등의 위치와 모양이 패턴을 형성한다. 패턴을 통해 컴퓨터는 이미지를 분류하거나 물체를 인식할 수 있다.
- 이미지를 잘게 나누는 목적을 무엇일까?
이미지를 작은 패치(영역)로 나누면 이미지의 각 부분을 개별적으로 분석할 수 있는데 이는 전체 이미지를 한 번에 처리하는 것보다 더 정교한 분석을 가능하게 한다.
또한 이를 통해 더욱 풍부한 정보를 얻을 수도 있는데 자동차 이미지를 분석할 때 전체 이미지를 한 번에 처리하는 것보다 바퀴, 창문, 문 등 각 부분을 개별적으로 분석하는 것이 더 효율적이다. 각 부분에서 추출된 특징이 결합되어 더 풍부한 정보를 제공한다.
- 이미지를 처리의 응용
이를 통해 다음과 같은 정보를 얻을 수 있다.
- Classification(분류): 이미지 전체를 특정 카테고리로 분류하는 작업이다.
- Localization(위치 지정): 이미지 내 특정 객체의 위치를 찾는 작업, 이미지에서 하나의 객체를 찾아내고, 그 객체가 이미지 내에서 어디에 위치하는지를 지정하는 작업이다.
- Object Detection(객체 탐지): 이미지 내에서 특정 물체가 어디에 있는지를 찾아내는 작업, 다수의 객체를 탐지하고 각 객체가 무언인지와 그 위치를 모두 찾아내는 작업이다.
- Instance Segmentation(인스턴스 세그멘테이션): 이미지에서 각 객체의 정확한 경계를 찾아내는 작업이다.
4. 모델의 학습 과정
- Supervised Learning(지도학습)
- 모든 데이터의 정답이 주어져 있으며 모델은 주어진 데이터를 학습하여 주어진 입력에 대한 정확한 출력을 예측하도록 훈련한다. 을 알려주면서 학습한다.
- 높은 정확도를 달성할 수 있으며 모델의 성능을 명확하게 평가할 수 있다.
- 라벨링된 데이터를 준비하는 데 많은 시간과 비용이 소요된다.
- 이미지 분류(개와 고양이를 분류), 스팸 필터링, 감성 분석 등에 쓰인다.
- Semi-supervised Learning(준지도학습)
- 일부 데이터에만 정답이 있고 나머지는 정답이 없는 데이터를 함께 학습한다.
- 라벨링되지 않는 데이터를 활용하여 라벨링돈 데이터의 부족을 부완할 수 있다
- 모델의 성능이 라벨링된 데이터의 품질과 양에 크게 의존한다. 비교적 마이너하다.
- 텍스트 분류에서 일부 문장에만 라벨이 있는 경우, 나머지 문장을 학습에 활용하여 성능을 향상시키는 경우
- Unsupervised Learning(비지도학습)
- 데이터에 대한 정답이 전혀 없이 학습하여 데이터의 구조나 패턴을 발견하는 것이 목표이다
- 라벨링된 데이터가 필요 없으며 숨겨진 패턴이나 그룹을 찾을 수 있다.
- 발견된 패턴이 실제로 의미가 있는지 판단하기 어려울 수 있다.
- clustering(클러스터링, 고객 세분화, 유사한 이미지 그룹화), 차원 축소(PCA, t-SNE)에 활용된다.
- Self-supervised Learning(자기지도학습)
- 데이터 자체에서 정답을 생성하는 방식으로 학습한다. 입력 데이터를 변형하거나 일부를 제거하여 원본을 복원하는 과정을 통해 학습한다.
- 별도의 레이블(정답)이 필요 없고, 데이터의 특성을 잘 파악하는 데 유용하다. 이후 다른 과제에 활용할 수 있는 강력한 전이 학습 모델을 구축할 수 있다.
- 단독으로 특정 과제를 수행하기보다 다른 학습 방식의 사전 학습 모델로 사용된다.
- 이미지의 일부를 가려 원래 이미지를 복원하는 학습, 덱스트에서 일부 단어를 제거한 후 원래 문잘을 예측하는 BERT 모델 등이 있다.
- Reinforcement Learning(강화학습)
- 에이전트가 환경과 상호작용하면서 보상을 최대화하는 행동을 학습한다. 예를 들어 오른쪽으로 가면 채찍, 왼쪽으로 당근을 주는 환경을 제공하면 모델이 이를 학습하게 된다.
- 복잡한 환경에서의 최적화 문제를 해결할 수 있으며 스스로 학습하며 개선할 수 있다.
- 학습 과정이 매우 복잡하고 시간이 오래 걸릴 수 있으며 적절한 보상 설계가 필요하다.
- 알파고(바둑에서 승리하기 위한 전략 학습), 게임 AI, 로봇 제어 등에 쓰인다.
5. Open-set 문제를 해결하기 위한 하나의 방법: 유사도 검색 기반 설계
- 얼굴 인식을 어떤 점이 어려울까?
컴퓨터 비전 문제에서 다양한 환경, 각도, 표정, 조명 등에서 얼굴을 인식하는 것을 어렵다. 또한 새로운 얼굴이 들어오면 이를 학습 데이터에 추가하고 모델을 다시 학습해야 하는 경우가 많다.
얼굴을 128차원 등의 고차원 벡터로 인코딩하여 데이터베이스에 저장하기 때문에 매전 새로운 얼굴이 추가될 때마다 모델을 재학습하는 것은 비효율적이며, 현실적으로 불가능 할 수 있다.
- Open-set 문제를 해결하는 유사도 검색 기반 설계
Open-set 문제는 모델 혹은 시스템이 훈련 데이터에 없는 즉, 새로운 클래스(새로운 사람, 새로운 물체 등)에 대해 인식할 수 있도록 하는 것이다.
유사도 검색 기반 설계는 얼굴 인식에서 새로운 얼굴이 추가될 때마다 학습 과정을 거치지 않고도 인식이 가능하도록 하는 방법이다. 이 설계는 아래와 같은 요소들로 구성된다.
- 인코딩 및 표현
얼굴을 인코딩하는 단계에서는 얼굴을 일정한 차원의 벡터로 변환한다. 이 벡터는 각 얼굴의 고유한 특징을 가진다.
- 데이터베이스에 저장
각 인코딩된 얼굴 벡터는 데이터베이스에 저장되며 새로운 얼굴이 추가되면 이 벡터를 추가적으로 저장된다.
- 유사도 계산
새로운 얼굴이 주어지면 해당 얼굴을 인코딩하여 데이터베이스에 저장된 모든 얼굴 벡터와의 유사도를 계산한다.
- 최적 매칭
유사도가 가장 높은 얼굴 벡터를 찾아서 해당 인물로 식별하거나, 일정 유사도 이하일 경우 새로운 사람으로 판단한다.
- 장점과 단점
장점: 기존 모델은 데이터베이스에 저장된 얼굴 벡터와 새로운 얼굴 간의 관계를 유사도 기준으로 판단하기 때문에 추가적인 학습이 필요하지 않다. 이는 얼굴 인식 시스템이 실시간으로 동작해야 하는 상황에서 매우 유용하다.
단점: 데이터베이스가 커질수록 유사도 계산에 필요한 시간이 증가할 수 있다. 또한 인코더의 정확성을 보장하기 위해 주기적인 재학습 또는 업데이트가 필요하다.
'얼굴 인식에 대한 이해' 카테고리의 다른 글
얼굴 인식을 이해하고 서비스를 만드는 방법 (3) (4) | 2024.08.25 |
---|---|
얼굴 인식을 이해하고 서비스를 만드는 방법 (2) (0) | 2024.08.15 |
컨볼루션(Convolusion)이란? (0) | 2024.08.12 |