Skip to main content

임베딩

그 다음에 이미지 임베딩 이것도 있는데 얼굴로 잠금해제 같은 걸 할 때 이 얘기도 전에 살짝 드리긴 했는데 우리가 했던 이미지 분류 방식으로는 어려워요.

왜냐하면 이미지 분류 같은 방식은 데이터를 굉장히 많이 넣어줘야 되는 방식이기 때문에 잠금해제 이런 데는 맞지 않고 그 다음에 같은 사람 얼굴이라도 날마다 조금씩 달라지기 때문에 핸드폰을 사셨으면 2년 3년 동안 써야 되는데 2년 3년 동안 여러분 얼굴이 계속 변하잖아요.

근데도 얼굴로 잠금해제가 계속 된단 말이에요.

그 이유는 뭐냐면 뭔가 사람 얼굴에서 좋은 특징을 추출을 하는 거죠.

좋은 특징을 추출을 해서 이거는 잘 변하지 않는다.

그 특징만 저장해놨다가 셀카모드로 딱 얼굴을 비치기만 해도 그 특징만 빠바박 비교해가지고 일치하면 풀어주고 불일치하면 안 풀어주고 이게 굉장히 까다로운 게 다른 사람하고는 구별이 되어야 되지만 같은 사람은 같아야 되고 그렇다고 예를 들면 형 얼굴을 찍었는데 동생이 형하고 되게 닮았어요.

동생 얼굴로는 풀리면 안 된다.

이런 경우 되게 까다로운 조건입니다.

근데 이제 가끔 뭐 아빠하고 아들하고 되게 닮았다든지 엄마하고 딸하고 되게 닮았다든지 그럴 수도 있잖아요.

아니면 언니하고 동생하고 닮았다든지 그래도 풀리면 안 된다.

이런 게 사실 좀 더 까다로운 건데 가끔 가족 얼굴로 풀릴 때가 있어요.

완벽하게 만들기는 어렵기 때문에 그렇다.

그래서 이제 어떻게 하느냐 하면 인베딩이라는 걸 만듭니다.

인베딩이라는 거는 어떤 이미지가 있을 때 그 이미지의 특징을 모아놓은 건데 특징, 보통 이미지가 이렇게 있으면 예를 들어서 가로 200 세로 200이다.

그럼 이 이미지를 구성하는 점이 4만 개가 있겠죠.

여기다가 칼나면은 3을 곱하니까 12만 개의 어떤 숫자로 이루어져 있는데 보통 이제 인베딩은 굉장히 작은 개수로 이루어집니다.

자리야 256, 512 아니면 768 이 정도 그래서 이거를 엄청나게 압축을 하는데 그 압축을 하면서도 얼굴을 비교할 때 틀림없이 비교를 할 수가 있어야 되는 거죠.

그래서 이런 것을 흔히 디지털 지문 뭐 이렇게 얘기를 할 수 있습니다.

그래서 재밌는 영상을 하나 보여드리고 이러면 다시 유튜브로 돌아가서 이게 이제 오묘께로 전자상가라고 SBS에서 운영하는 유튜브 채널인데 여기서 보면은 이제 옛날 영상을 검색을 해야 되는데 옛날에 그 순풍산부인과에 아이맥이 나왔다.

그럼 이제 이걸 어떻게 찾느냐

그래서 이제 찾으라고 하니까 이제 사직서 쓰고 뭐 이런 장면인데요.

그래서 이거를 이제 방송국에 가면은 기존에 방송했던 걸 전부 이렇게 다 파일로 저장을 해놓는 거예요.

그래서 핫드라이브에 안 들어가니까 테이프 같은 데다가 녹화를 해가지고 자기 테이프에다 녹화해서 저장을 하거든요.

근데 이제 그러면은 이제 검색을 해야 되는데 기존에는 어떻게 검색을 하냐면 그 파일을 이제 이걸 장면별로 파일을 잘라가지고 저장을 할 때 옆에다가 그걸 다 써놔요.

말로.

백정원, 김성주, 금새록, 골목식당, 백정원, 분노, 백정원솔루션, 춘천식, 닭갈비집 이렇게 써놓고 검색할 때 사실 이미지를 검색하는 게 아니라 텍스트를 검색을 하는 거예요.

그래서 이 텍스트가 일치해야만 이 영상을 찾을 수가 있어요.

그래서 이 텍스트가 일치해야만 이 영상을 찾을 수가 있어요.

그래서 이 텍스트를 검색을 하는 거예요.

근데 만약에 백정원이 아니라 뒤에 지나가는 무명 배우가 있었다.

그러면 그 무명 배우는 나중에 찾을 거라고 생각을 안 하니까 이름을 안 써놓을 거 아니에요.

그러면 문제가 뭐냐면 나중에 그 무명 배우가 빵 떴을 때 그 무명 배우가 옛날에 우리 SBS 골목식당에 출연했었는데 라고 해도 그 수많은 에피소드 중에 어느 장면에 출연했는지를 알 수가 없죠.

이름을 미리 안 써놓으니까.

근데 이제 요즘에는 어떻게 되냐면 이미지 검색이 SBS 이런 방송국에도 다 들어가 있어서 이미지 검색이 SBS 이런 방송국에도 다 들어가 있어서 인베딩을 이용한 검색을 해요.

그래서 사람 얼굴 같은 걸 넣으면 그 얼굴에서 특징 넥터를 뽑아서 자동으로 찾아줄 수가 있습니다.

자동으로 찾아줄 수가 있습니다.

그래서 대체 원리가 뭐임?

이미지 DNA 이런 표현을 쓰는데 이게 인베딩입니다.

쉽게 설명하려면 보통 DNA가 DNA?

지문?

이런 식으로 설명하는 거죠.

DNA?

지문?

이런 식으로 설명하는 거죠.

그래서 이게 오징어게임에 나온 그 저기 원로 배우 분이신데요.

이 분 얼굴을 넣으면 지금 현재 2020 몇 년의 얼굴을 가지고 연예가 정보에 20초 잠깐 나왔던 것을 찾을 수가 있어요.

심지어 이제 나이가 그럼 몇 살 차이 나요?

지금 80대니까 이 분이 30년 전이고 50대대 얼굴이죠.

30년 전이고 50대 얼굴이죠.

30년 전이고 50대 얼굴이죠.

그래서 이제 이런 것들이 이미 방송국 이런데서 다 이제 사업화 되서 쓰이고 있고 그래서 이제 원리는 이런식으로 됩니다

그러면은 우리가 회사에서도 이제 이런걸 생각해 볼 수 있겠죠

회사에서 얼굴 검색 할 일은 잘은 없는데 굳이 따지자면 예를 들어 출입 게이트 같은데 보안 그게 있는데 지금은 보통 카드 찍고 들어가는데 조금 더 하면은 이제 카드 찍고 얼굴 확인까지 해가지고 이 카드 정보랑 얼굴이랑 일치하는가 아니면 더 나가면 카드 안찍어도 얼굴만 보고 아 이거 우리 회사 직원이다 들어 보내주고 안보내주고 뭐 이런걸 할 수 있겠죠

아니면 이제 보안구역 같은 데가 있으면 허용되지 않는 인원이 이제 출입하려고 하면 자동으로 막아준다든가 물론 카드 찍고 들어가면은 이제 그 카드가 이제 출입되고 있는지 잘 알 수 있겠죠.

근데 카드가 자꾸 잊어먹기도 하고 그 다음에 이제 카드 같은거 이제 빌려줄 수도 있잖아요

뭐 이렇게 아 저희 들어가야 된다 좀 빌려줘 뭐 이런 경우도 있고 제가 본 것 중에 제일 웃긴 것은 이제 금융회사인데 그래서 보안이 되게 철저해서 금융회사는 자기 개인 pc 가 있으면 작업 pc 에 자기 지문을 찍어야만 pc 가 풀려요

그래서 다른 사람이 그 컴퓨터를 못쓰게 돼 있거든요

왜냐하면 민감한 정보를 다루니까 근데 진짜 웃기는게 그런 문제가 뭐냐면 내가 외근 나갔을 때 내 컴퓨터에 뭐 파일인데 그 나한테 보내줘

이게 안돼요

자기만 열 수 있거든요

그래서 어떻게 하냐면 원래 지문을 등록하는데 지문을 두개까지 등록할 수 있거든요

왼손 오른손 그래서 한 손은 자기 걸로 하고 한 손은 옆사람 걸로 합니다

그래서 사무실에 전화해가지고 아 나 거 컴퓨터 열어가고 풀어줘 서로 남의 컴퓨터 다 볼 수 있어요

그래서 아니 이게 무슨 보안정책이 무슨 의미가 있나 약간 이런 생각을 했는데 그래서 약간 그 카드사 이런 데서 보안정보 유출되고 사고나는데 다 이유가 있습니다

이게 보안정책을 만들어도 이게 보안이 철저하면 철저할수록 불편하거든요

다 이제 직원들이 일하는데 방해가 되니까 다 꼼수를 만들어 가지고 다 이렇게 편하게 일하려고 이렇게 하다가 보안사고가 터지는 건데 어쨌든 이제 뭐 보안구역에 이제 카드 찍고 들어가게 하는데 우리가 얼굴로 인식을 한다든지 이런 것도 있을 수 있고 아니면 꼭 얼굴인식이 아니더라도 예를 들어서 우리가 어떤 부품 같은 게 있는데 부품이 계속 종류가 바뀐다던가 뭐 이러면은 우리가 매번 이미지 분류로 학습을 시킬 수가 없습니다

그러면은 이미지 분류로 하는 게 아니라 부품 사진을 주면은 이거랑 얼굴이나 부품이 어떤 형상인건 똑같으니까 데이터베이스에 저장되어 있는 부품들 중에서 비슷한거 한다든지 아니면은 뭐 제가 잘은 모르겠지만 예를 들면 조선이라고 하면 이제 배를 만드시는데 아 예전에 이거랑 우리가 비슷한 배를 만든 적이 있는데 하면은 이미지를 가지고 검색을 한다

기존에 뭐 우리가 이제 과거에 만든 그 배 데이터베이스 같은게 있어가지고 이미지로 넣으면 뭐 이거랑 비슷하게 생긴 배를 찾아 준다든지 뭐 이런거에다가 이제 활용을 할 수 있겠죠

그래서 이제 인베딩을 그렇게 활용을 할 수 있는데 아 이거 이제 넘어가구요

넘어가고 그래서 이미지 인베딩을 하면은 출입 시스템 같은 데도 쓸 수 있고 얼굴로 잠금해제 이런 것도 쓸 수 있고 아까 얘기했듯이 뭐 추천 시스템 이런거에도 쓸 수 있고요 그 다음에 cctv 같은 경우에 지금은 그 특정 대상을 추적하는 게 안돼서 사람이 일일이 이렇게 봐야 되는데 그래서 뭐 그 무슨 범죄 이런거 발생해서 cctv 영상으로 뭐 추적을 하면은 무슨 대단한 기술을 쓰는게 아니라 형사분이 이렇게 cctv 마다 다니면서 영상을 받아오신 다음에 하나하나 다 돌려봐 가지고 아 이쪽 오른쪽으로 도망갔으니까 오른쪽 cctv 화면 구해가서 또 그 다음에 어디였는지 이렇게 보거든요

근데 이제 어 만약에 우리가 얼굴 같은거를 특징을 뽑을 수 있다 그럼

요 화면에 사라진 사람이 다음에 어느 화면에서 튀어나오는지 계속 추적을 할 수 있겠죠

그래서 이제 감시 라든가 이런거를 할 때도 이제 쓸 수 있구요 만약에 하려고 하면은 어디에다 다 저장을 해야 검색을 할 수 있는거 아닌가요?

cctv 같은 경우는 각각 저장되어 있잖아요

그쵸 그걸 어떻게 하나 합쳐야 되는거 아닌가요?

아 그쵸 영상 구하는건 이렇게 별개입니다

어떤 건물별로 저장되어 있는걸 어떤 한 서버 같은 데로 옮겨야 되는거 아닌가요?

그쵸 그런거는 회사 같은 데서는 어차피 하나의 시스템으로 되니까 이걸 쓸 수 있구요 검색을 그렇게 해야 된다는 말씀이신거죠?

예 그니까 이제 형사분들 같은 경우는 영상을 구해오는 것까지는 직접 하셔야죠

그거는 뭐 다 따로 cctv라는게 말 그대로 클로즈드 서킷이라서 다 따로 저장되니까 제가 드리는 말씀은 영상이 모여있다 치면 그 안에서 이 영상에서 오른쪽으로 간 사람이 그 다음에 어느 영상에서 튀어나오는지 이런걸 우리가 찾을 수 있다는거죠

아까 보면 sbs 같은거는 옛날 프로그램에서 찾는데 cctv에서는 동시간에 찍었는데 cctv가 그렇게 촘촘하지가 않아서 예를 들면은 여기 어떤 공간이 이렇게 있는데 cctv a는 이렇게 비추고 있고 b는 이렇게 비추고 있고 이런식으로 이렇게 하잖아요?

그러면 이제 비추다보면은 여기 있던 사람이 일로 갔는데 사각이 있겠죠

사각으로 갔는데 일로 튀어나올 수도 있고 일로 튀어나올 수도 있고 일로 튀어나올 수도 있는데 지금은 이제 트래킹이 안되니까 영상을 일일이 사람이 보면서 같은 시점에 이 사람 사라졌다

그럼 옆에 있는 cctv를 일일이 사람이 다 돌려 가지고 어디서 튀어나오는지 봐야 되는데 만약에 트래킹이 되면은 그냥 이 cctv서 요 사람 얼굴에다 딱 클릭을 해 놓으면 계속 검색을 하니까 이쪽으로 갔다가 뭐 이렇게 갔다가 이렇게 하면은 그거를 그 사람 나오는 장면만 아까 말씀드렸던 것들로 그러면은 그 사람 나오는 장면만 아까 말씀드렸던 것들로 그러면은 그 사람 나오는 장면만 아까 말씀드렸던 것들로 검색 엔진처럼 쫙 뽑아 가지고 이어 붙여 줄 수 있는 거죠

그래서 이런 것도 된다

사실 아마 중국이란 데 이미 이렇게 하고 있을 겁니다

중국은 뭐 기차 탈 때도 여권 찍어야 된다고 하더라구요

거기는 뭐 개인정보 보호 이런게 잘 안되니까 사실 그 생각보다 중국도 그렇고 미국도 개인정보 보호가 별로 그렇게 빡세지 않더라구요

한국이 의외로 개인정보 보호가 되게 잘 되어 있습니다

그래서 우리나라는 이제 우리나라는 이제 개인정보 보호가 되게 잘 되어 있습니다

그래서 우리나라는 이제 개인 입장에서 보면은 개인정보 보호가 잘 되서 좋은데 약간 기업 입장에서 보면은 개인정보 보호가 되게 빽빡해 가지고 뭐 할 수 있는게 좀 잘 없을 때가 있거든요

cctv 이런것도 다 뭐 동의 받아야 되고 이렇게 그 고지 안내판 붙여야 되고 뭐 이래서 뭐가 좋은건가 잘 모르겠지만 어쨌든 그래서 이제 인베딩 을 구현을 해야 되는데 인베딩을 어떻게 구현하느냐 하면 여러가지 방법이 있는데요

제일 많이 사용하는 방법은 대조 손실이라는 방법을 사용합니다.

그래서 우리가 이제 오토인코더에서 하듯이 하면 오토인코더도 쓸 수는 있는데 문제가 뭐냐면 오토인코더는 어떤 Z로 압축을 했다가 복원하는 게 포인트거든요.

이미지를 복원하는 게 포인트이기 때문에 예를 들면 X1, 똑같은 사람의 X1에 얼굴이 있고 똑같은 사람의 X2가 있는데 똑같은 오토인코더에 넣었을 때 X1은 Z1이 나오고 X2는 Z2가 나오겠죠.

그 다음에 X1은 X-1이 나오고 X2는 X2-가 나오는데 만약에 얘네 둘이 같은 사람 얼굴이다.

그럼 얘네도 비슷하게 나오겠죠.

그런데 문제는 얘네 둘이 비슷하다는 보장이 없어요.

Z가 비슷하다는 보장이 없습니다.

왜냐하면 우리가 모델을 만들 때 X1이 들어가면 똑같은 게 나와라 라고 했지 여기에 어떤 제한이 없었죠.

제한을 준 적이 없습니다.

그래서 Z는 똑같은 이미지라도 Z는 굉장히 다른 게 될 수 있다.

그래서 오토인코더로는 우리가 원하는 검색용 인베딩을 만드는 데는 적합하지가 않고 그래서 어떻게 하냐면 우리가 대조 손실이라는 걸 쓰는데 대조 손실은 뭐냐면 아까 오토인코더에서 인코더만 남기는 거예요.

오토인코더만 남긴 다음에 그러면 만약에 같은 사람의 얼굴을 두 개를 이렇게 집어넣으면 Z1하고 Z2가 나오겠죠.

그러면 얘네 둘은 무조건 비슷하도록 해주고요.

만약에 서로 다른 사람의 얼굴을 넣었다.

그러면 얘네는 서로 최대한 멀어지도록 하는 겁니다.

서로 달라지도록.

그래서 그런 식으로 계속 반복해서 학습을 시키면 나중에는 새로운 사람의 X10하고 X11이 있는데 두 사람이 같은 사람이다.

그러면 이거를 모델에 한 번도 넣은 적이 없어도.

Z10하고 Z11은 비슷하게 됩니다.

그래서 대조 손실을 만들려면 먼저 데이터를 만드셔야 되는데 어떤 데이터를 만들어야 되냐면 둘씩 짝을 지어가지고 비슷한 경우 안 비슷한 경우 보통은 사람 얼굴로 한다고 하면 같은 사람을 두 번 찍으면 되겠죠.

그러면 당연히 비슷할 거고 다른 사람을 찍으면 당연히 다를 테니까 그런 거는 데이터 만들기가 쉽습니다.

그래서 특히 보통 이미지 같은 경우에는.

그래서 특히 이미지 같은 경우에는.

같은 걸 두 번 찍으면 당연히 같을 테니까.

근데 두 번 찍을 때 각도를 좀 다르게 찍는다든지 조명을 좀 다르게 찍는다든지 이렇게 해서 사진을 두 번씩 찍어서 그렇게 해서 데이터를 만들게 돼요.

그래서 이런 식으로 데이터를 만들게 되고.

그렇습니다.

그래서 이것도 예제 코드가 있긴 한데 우리가 이거는 이것도 이렇다.

이렇게 하고 건너뛰겠습니다.

그래서 이제 검색을 밑에는 검색 예제인데 그래서 숫자 5를 이미지로 넣고 검색을 하면 비슷한 숫자가 이렇게 나오는데 대체로 보면 모양이 비슷하죠.

숫자 5의 모양이 이거는 나중에 한번 해보시면 비슷한 모양을 넣으면 비슷한 모양이 나오는 그런 검색을 할 수가 있습니다.