본문 바로가기
Computer Science/Deep Learning

[비전공자용] 딥러닝은 대체 어디에 사용하는 걸까? (스크롤 압박 주의)

by 롱일스 2020. 7. 30.
반응형

많은 분들이 아시다시피 딥러닝은 이미지, 음성, 자연어 등 많은 분야에서 뛰어난 성능을 보여줍니다.

이번 포스트에서는 딥러닝을 활용해서 할 수 있는 일들에 대해서 자세히 알아보려고 합니다.

 


 

1. 사물 검출

딥러닝으로 사물 검출 예 (네.. 접니다..ㅎ) 

사물 검출은 이미지 속에 담긴 사물의 위치, 종류, 클래스 등을 알아내는 기술입니다.
사물 검출과 사물 인식의 차이는

사물 인식은 이미지 전체를 보고 뭔지 맞히는 거고
...
사물 검출은 어떤 이미지를 보고
그 이미지 속에 어디에 있는지도 모르는 
사물의 위치도 파악하고
그게 뭔지도 파악하는 일입니다.
(이미지 속에 사물이 여러 개 있으면 더 어렵겠죠.)  

사물 검출이 당연히 훨씬 어려운 기술입니다.

이런 사물 검출 문제를 해결하기 위한 CNN을 기반으로 한 기법 몇 가지가 있습니다.

그 중 가장 유명한 것 중 하나가 R-CNN입니다.

R-CNN : Regions with Convolutional Neural Network

R-CNN의 처리흐름

R-CNN의 작동 방식은 다음과 같습니다.

1. 이미지를 입력 데이터로 넣는다

2. 후보 영역을 추출한다

3. 추출한 각 영역에 CNN을 적용해서

4. 클래스(사물)를 분류한다

이미지를 사각형으로 변형하거나 분류할 때
서포트 벡터 머신 (SVM, Support Vector Machine)을 사용합니다.
SVM에 대해서는 후에 자세히 다뤄보겠습니다.

후보 영역을 추출은 사물처럼 보이는 물체를 찾아서 처리하는 것을 말합니다.
R-CNN에서는 Selective Search 기법을 사용했습니다.

현재는 후보 영역 추출도 CNN을 적용해서
처리하는
Faster R-CNN 기법도 나왔습니다.


2. 분할

분할은 영어로 Segmentation입니다.

분할이란 이미지를 픽셀 수준에서 분류하는 문제입니다.

그럼 딥러닝을 이용해서 분할 문제를
다룬다는 것은
어떤 의미일까요?

픽셀 단위로 객체마다 색칠되어 있는 지도(supervised) 데이터를
사용해서 학습시키고 추론할 때 (test 시에) 
입력받은 이미지의 모든 픽셀을 분류하는 것을
가리킵니다.
(지도 학습은 답이 정해져 있는 상태로 데이터를 학습시키는 걸 말합니다)

분할의 예 (왼쪽이 입력데이터, 오른쪽이 지도supervise용 이미지)

분할에 있어서 가장 유명한 기법 중 하나는
FCN입니다.

FCN - Fully Convolutional Network

"합성곱 계층으로만 구성된 네트워크"라는 의미입니다.

FCN의 전체 그림

FCN에서는 완전연결 계층을
같은 기능을 하는 합성곱 계층으로
바꿉니다.
(일반적인 CNN은 평범한 완전연결 계층을 이용합니다.)

이렇게 하면, 
일반적인 CNN에서는 
완전연결 계층에서 중간 데이터를
1차원으로 변환한,
한 줄로 된 노드들이 처리했지만

FCN에서는
중간 데이터의 다차원 형태를 유지한 채
마지막 출력까지 처리할 수 있습니다.

NOTE
완전 연결 계층은 출력이 모든 입력과 연결되어 있습니다.
이 구성을 합성곱 계층으로 구현한다면 어떻게 할까요?

입력 데이터 크기: 32 X 10 X 10
(채널 32개, 높이 10, 너비 10)

입력 데이터 크기가 위처럼 주어진다면

합성곱 계층: 32 X 10 X 10
으로 구성하면 완전 연결 계층과 같은 효과를 낼 수 있습니다.

만약에 완전연결 계층의 출력 노드가 100개면
합성곱 계층의 (32 X 10 X 10)필터를 100개 준비하면 됩니다.

 

추가로 FCN에서는 마지막 층에서
공간 크기를 확대하는 처리를 도입했다는 것도
특징적입니다.

이렇게 확대하면
줄어든 중간 데이터를 
입력 이미지와 같은 크기까지로 
단번에 확대가 가능합니다.

이 확대는 이중 선형 보간에 의한 선형확대로
역합성곱 연산을 통해 수행하고 있습니다.
(자세한 사항은 FCN 논문을 참고하세요)


3. 사진 캡션 생성

컴퓨터 비전 + 자연어
둘을 융합하면 사진 캡션 생성이 가능합니다.

출처:https://mc.ai/how-to-design-an-automated-image-caption-generator-i/

위의 사진처럼 이미지가
입력 데이터로 주어졌을 때
사진을 설명하는 문장을 만들어내는 것을
사진 캡션 생성 기술이라 합니다.

딥러닝을 이용해서 사진 캡션을 생성하는
방법 중에는 NIC 모델이 가장 대표적입니다.

NIC - Neural Image Caption

NIC는 심층 CNN과 자연어를 다루는 RNN(재귀 신경망)으로 구성됩니다.

Credit - Google

RNN - Recurrent Neural Network

RNN은 순환적 관계를 갖는 신경망으로
자연어나 시게열 데이터 등 연속된 데이터를
다룰 때 많이 사용합니다.

NOTE
RNN에서 순환은 신경망의 순환적 네트워크 구조를 말합니다.
순환적인 구조로 이전에 생성했던 정보의 영향을 받게 됩니다.
-> 과거의 정보를 기억한다는 말입니다.

예를 들면,

'나'라는 단어를 생성하고 그 후에 '잤다'라는 단어를 생성하면
먼저 만들었던 '나'라는 단어를 기억해서
'는'이라는 조사를 자동으로 만들어내면서
'나' '는' '잤다' 
라고 문장을 생성하게 됩니다.

 

다시 NIC 얘기로 돌아와서 설명드리겠습니다.

NIC는 

CNN으로 사진에서 특징 추출
--> 그 특징을 RNN에게 넘깁니다.
--> RNN은 받은 특징을 초깃값으로 해서
--> 텍스트를 순환적으로 생성합니다.

기본적으로 NIC는 2개의 신경망인
CNN과 RNN을
조합한 비교적 심플한 구성을 가집니다.

추가로,
사진이나 자연어 같은 여러 종류의 정보를 조합하고 처리하는 것을
멀티모달 처리라고 합니다.
(Multimodal processing)
딥러닝의 분야 중에서 크게 이슈가 되고 있는 분야입니다.


4. 이미지의 스타일(화풍) 변환 

딥러닝을 활용해서 그림을 그릴 수도 있습니다.
(인간의 일자리를 얼마나 더 뺏을 셈이야!)

입력 데이터로 두 이미지를 주면
이 두 이미지를 조합해서 새로운 그림을 그려줍니다.

'내용(콘텐츠) 이미지' + '스타일 이미지'
두 가지 이미지가 필요합니다.

Credits - (A Neural Algorithm of Artistic Style, Leon A. Gatys) 

위의 그림처럼
컨텐츠가 되는 왼쪽 상단의 사진에다가
유명한 작품들을 스타일 이미지로 더해서
유명한 작가들의 화풍을 가진 그림으로 만들어냈습니다.
(고흐, 칸딘스키, 뭉크, 피카소..가 살아돌아온 효과)

간단히 어떻게 한 건지 말씀드리면
딥러닝 네트워크의 중간 데이터가
컨텐츠가 되는 이미지의 중간데이터와
비슷해지도록
학습하는 것입니다.

이렇게 하면 유명화가의 스타일을 가진
컨텐츠 사진으로 만들 수 있는 것입니다.

또, 스타일 이미지의 화풍을 적용하기 위해
스타일 행렬이라는 개념을 도입해서 사용했습니다.
대표적으로 이 개념을 도입한 어플이
Prisma입니다.

이제는 동영상에도 화풍을 끼얹을 수 있게 되었답니다.

 


5. 無에서 이미지 생성

이제는 아무 이미지가 없어도 새롭게 이미지를 생성해 낼 수 있습니다....
(점점 소름이 끼치네요...ㅋㅋㅋ)

물론, 학습을 시킬때는 이미지를 이용합니다. 
학습이 끝난 후에는 입력 데이터로
이미지를 주지 않아도

사진처럼 고화질의 새로운 이미지를
출력해냅니다...

아무것도 없는 상태에서 
침실 이미지를 새롭게 만들어낼 수 있는 
DCGAN 기법이 대표적입니다.

DCGAN - Deep Convolutional Generative Adversarial Networks

DCGAN으로 새로 만들어낸 침실 이미지...

학습 데이터로 넣었던 이미지 중에는 없는 
새로 만들어낸 이미지입니다.
(이걸로 인테리어 해도 되겠... 인테리어 직업도 가져가냐... 그렇게 다 가져야만 속이 후련했냐!!!!!)

기계에 지지 않으려는 인간의 발악

(여기까지 읽으시느라 많이 지치셨죠.. 
저도 DCGAN 기술을 설명해야하나 고민이 되는데 
어차피 볼 사람은 볼테니 마저 설명하고 넘어가겠습니다...)

DCGAN 기술의 핵심은 생성자와 식별자로 불리는
2개의 신경망을 이용한다는 점입니다.

생성자(Generator)가
진짜와 같은 이미지를 생성하면
식별자(Discriminator)가
그 이미지가 실제로 촬영된 이미지인지 아니면 생성자가 만든 이미지인지
판단합니다.

이렇게 둘이 서로 경쟁하듯이 학습시키면
생성자는 더 정교한 가짜 이미지를 만들고
식별자는 더 정확하게 간파할 수 있는 감정사가 됩니다.

(경찰과 사기꾼같은 개념이라고 보시면 됩니다.
사기꾼은 경찰한테 안 걸리려고
더 정교한 수표를 제작하고

경찰은 그런 사기꾼을 잡으려고 더 치밀하게 검사하고...) 

이렇게 둘의 능력을 갈고닦게 하는 것을
GAN 기술이라고 부릅니다.

GAN - Generative Adversarial Network

참고로 정답이 없이 학습하는 문제를
자율학습 Unsupervised 문제라고 합니다.

DCGAN 기법이 이런 자율학습 문제를 
다루는 기술이죠.


6. 자율 주행

티비에서도 많이 나오죠. 사람 대신 컴퓨터가 자동차를 운전하는 시대가 왔습니다.
(하... 그래 다 가져가라...)

이 기술을 바로 자율 주행이라고 합니다.
(사실 저는 운전을 드릅게 못해서 반가운 기술이긴 합니다.)

자율 주행에는 여러 기술이 필요하지만 
그 중에서도 주위 환경을 정확하게
인식하는 기술이

아주 중요합니다.

왜냐고 물어보신다면 설명해드리겠습니다.

자... 컴퓨터가 운전한다고 할 때 가장 불안한 게 뭡니까..

지금 오른쪽 차선의 어떤 놈이 내 앞에
끼어들라하는데

그걸 잘 캐치해서 안 비켜줄 수 있는지
앞에 갑자기 고라니가 지나갈 때 멈출 수 있는지...

이해가 가시죠? ^^

주위 환경을 인식하는 기술에서도
딥러닝이 활약하고 있습니다.

대표주자로 SegNet이라는 신경망입니다.

SegNet은 CNN 기반의 신경망으로 아래 사진처럼
주변 환경을 정확하게 인식합니다.
아까 2. 분할에서 봤던 사진이죠?

SegNet으로 이미지 분할한 예, 도로, 차, 인도 등을 인식

맞습니다. 딥러닝을 활용해서 이미지를 분할해서
사람인지 자동차인지 고라니(미안해 라니야..)인지 구분해내는 기술입니다.

아무도 관심 없겠지만 저도 한 번 해봤었습니다.. 허접하게 차선만 인식하네요...

ㅎ ... yolov3로 했슴둥

입력 이미지를 픽셀 수준으로 판정해서 분할하는 SegNet 기술을 살펴봤습니다. 

 


7. Deep Q-Network 강화학습

이번에 알아볼 분야는 강화학습입니다.

딥러닝이 뭔지 제대로 몰랐던 분들 중
대다수 분들이
아마
강화학습을 우리가 흔히 말하는

딥러닝이라고 인식하고 있었을 겁니다.

강화학습은 가르침, 지도에 의존하는
지도 학습과 달리
시행착오를 겪으며 
컴퓨터 스스로
학습하게 하는 분야입니다.

강화학습의 기본 틀: 에이전트는 더 좋은 보상을 받기 위해 스스로 학습한다.

 

강화학습에서는 에이전트라는 새로운 개념이 나옵니다.

에이전트는 환경에 맞게 행동을 선택하고,
그 행동에 의해서 환경이 변한다는 게 기본적인 틀입니다.

환경이 변화하면 에이전트는
어떤 보상을 얻게 됩니다.

강화학습의 목적은
더 나은 보상을 받는 쪽으로 
에이전트의 행동 지침을 바로잡는 것입니다.
(점점 사람같아 지네요...)

보상은 정해져있는 것이 아니라 '예상 보상'입니다.

예를 들어서
게임을 하다가 몬스터를 해치웠을 때 보상을 받게 돼죠.
근데 그 때 똑같은 행동을 했었더라도 같은 팀원들이 아무 기여를 안했으면
내가 더 많은 보상을 가져가고 내가 기여도가 낮으면 보상을 적게 가져가죠.
이렇게 불명확한 상황에서 게임 점수나 게임 종료 등의
명확한 지표로부터 역산해서 '예상 보상'을 정해야 합니다.

딥러닝을 사용한 강화학습 중 대표적인 방법이
Deep Q-Network (DQN) 입니다.

이 방법은 Q학습이라는 강화학습 알고리즘을 기초로 합니다.

Q학습에서는 최적 행동 가치 함수로
최적인 행동을 정합니다.

DQN은 이 함수를 CNN으로 비슷하게 흉내내서 사용합니다.

DQN으로 비디오 게임 조작을 학습해서
사람보다 훨씬 뛰어나게 게임 조작을 한 사례가 있었습니다.
(이제 뭔 게임이든 1등 할 생각은 집어치웁시다 여러분...)

Deep Q-Network로 비디오 게임 조작 학습(비디오 게이머가 되는 길...)

DQN에서는 입력 데이터로
비디오 게임 영상만 주고 

학습시켜서 프로게이머로
컴퓨터를 성장시킵니다 ㅎ

(이미 수많은 게임에서 사람보다 우월함을 보여주고 있다고...)

많은 분들이 딥러닝에 대해 처음 알게 된 계기인
알. 파. 고. 
인공지능 로봇이 
대한민국의 자랑인 바둑 챔피언
이세돌을 꺾었었죠...

이세돌님 졌잘싸!!!!! 수고하셨어요!!! 저놈은 괴물이에요!!!!!

알파고도 이 딥러닝과 강화학습을 이용했습니다.

알파고는 3,000만 개의 프로 기보를 보며
학습하고

지 혼자서 나 자신과의 대결을
수없이 반복하며

수련했다고 합니다.

알파고와 DQN은 모두
구글이 인수한 딥마인드DeepMind가
진행했던 연구의 결과입니다.
(구글 ..... 인정.... )


지금까지 딥러닝을 활용하는 다양한 분야에 대해서 알아봤습니다. 
유난히 내용이 많았는데 여기까지 보셨다면 정말
박수!!!를 쳐드리고 싶습니다!

우리 컴퓨터한테 지지말고
저놈들을 이용할 수 있는 사람이 됩시다.

인간은 언제나 시련을 마주치지.
하지만 언제나 인간은 승리한다.

그럼 다음 포스트에서 만나요~

 

딥러닝이 뜨게 된 배경에 대해 궁금하신 분들은 아래 포스트를 확인해주세요~!

2020/07/30 - [Computer Science/Deep Learning] - [비전공자용] 딥러닝이 몇 년 전부터 뜨고 있는 이유 (feat. AlexNet) VGG, GoogLeNet, ResNet은 무엇?

 

[비전공자용] 딥러닝이 몇 년 전부터 뜨고 있는 이유 (feat. AlexNet) VGG, GoogLeNet, ResNet은 무엇?

이번 포스트에서는 딥러닝이 어떻게 주목받게 되었고 왜 많은 사람들이 딥러닝에 열중하는 지 그 이유에 대해서 알아보려고 합니다. 추가로 핫한 딥러닝 기법에 대해서도 맛보기로 소개하겠습�

huangdi.tistory.com

 

[출처] Deep Learning from Scratch, ゼロ から作る

728x90
반응형