[Let's Swift 2019] iOS 앱에서 머신러닝이 해결 할 수 있는 문제들Doyoung Gwak
iOS에서 머신러닝으로 해결할 수 있는 문제들을 다양한 예시와 함께 소개합니다. 기존에 룰베이스 알고리즘으로는 해결하기 힘들었던 어려운 문제들을 머신러닝이 어떻게 해결할 수 있는지 설명하고, 간단한 코드 예제와 함께 Core ML 사용법을 알려드립니다. 또한 서비스에 사용하는 모델의 경우 어떤 추가적인 고려를 해야하는지도 간략히 소개하고 있습니다.
본 발표에 공유된 대부분의 데모는 https://github.com/motlabs/awesome-ml-demos-with-ios 저장소에 올라가있어, 코드 레벨까지 궁금한 분들께서는 이 저장소를 확인해주세요.
발표영상: https://www.youtube.com/watch?v=zKPB8rnS-EM
Graduation Report - 졸업작품 최종 보고서
Nginx, Flask, uWSGI architecture for face detection sample webpage.
Rendering time reduce by flask streaming
histogram, opticalflow using in OpenCV technology
(Realtime tensorflow failed - appendix)
[Let's Swift 2019] iOS 앱에서 머신러닝이 해결 할 수 있는 문제들Doyoung Gwak
iOS에서 머신러닝으로 해결할 수 있는 문제들을 다양한 예시와 함께 소개합니다. 기존에 룰베이스 알고리즘으로는 해결하기 힘들었던 어려운 문제들을 머신러닝이 어떻게 해결할 수 있는지 설명하고, 간단한 코드 예제와 함께 Core ML 사용법을 알려드립니다. 또한 서비스에 사용하는 모델의 경우 어떤 추가적인 고려를 해야하는지도 간략히 소개하고 있습니다.
본 발표에 공유된 대부분의 데모는 https://github.com/motlabs/awesome-ml-demos-with-ios 저장소에 올라가있어, 코드 레벨까지 궁금한 분들께서는 이 저장소를 확인해주세요.
발표영상: https://www.youtube.com/watch?v=zKPB8rnS-EM
Graduation Report - 졸업작품 최종 보고서
Nginx, Flask, uWSGI architecture for face detection sample webpage.
Rendering time reduce by flask streaming
histogram, opticalflow using in OpenCV technology
(Realtime tensorflow failed - appendix)
4D BIM 서비스란, 싱크로 프로페셔널 소프트웨어를 사용하여 고객의 문제를 3D로 만들어 4D 시뮬레이션을 하고, 4D 에서 생성된 자료를 사용하여 프레젠테이션 자료와 동영상 애니메이션을 만들고, 공사진척상황을 계획과 대비한 월간 프로젝트 모니터링 보고서를 작성합니다.
싱크로 팀의 목표 - 고객 기대수준 이상의 서비스를 제공하므로써 고객이 소프트웨어 구매결정을 유도하는것이 팀의 목표입니다.
한국 표준(?) 자바셋(Java 1.6+Spring 3.x+MyBatis)과 Monolithic 아키텍처를 사용하고 있었던 제 조직 내에서 기술적 변화를 이끌어가는 것에 관련된 내용입니다.
변화를 유도하기 위해서 어떻게 해야 하는지가 핵심이며,
Architecture, Frontend, Backend, 방법론/프로세스의 영역을 각각의 단계로 나누어서 Phase1을 수행한 것과 Phase2를 수행 중인 내용에 대해서도 다룹니다.
Phase1
- Architecture : Frontend / Backend 명시적 분리
- Frontend : Angular.js, Grunt, Bower 도입
- Backend : Java 1.7/Spring4, ORM 도입
- 방법론/프로세스 : Scrum, Git
Phase2
- Architecture : Micro-Service Architecture(MSA)
- Frontend : Content Router, E2E Test
- Backend : Polyglot, Multi-Framework
- 방법론/프로세스 : Scrum+JIRA, Git Branch Policy, Pair Programming, Code Workshop
4D BIM 서비스란, 싱크로 프로페셔널 소프트웨어를 사용하여 고객의 문제를 3D로 만들어 4D 시뮬레이션을 하고, 4D 에서 생성된 자료를 사용하여 프레젠테이션 자료와 동영상 애니메이션을 만들고, 공사진척상황을 계획과 대비한 월간 프로젝트 모니터링 보고서를 작성합니다.
싱크로 팀의 목표 - 고객 기대수준 이상의 서비스를 제공하므로써 고객이 소프트웨어 구매결정을 유도하는것이 팀의 목표입니다.
한국 표준(?) 자바셋(Java 1.6+Spring 3.x+MyBatis)과 Monolithic 아키텍처를 사용하고 있었던 제 조직 내에서 기술적 변화를 이끌어가는 것에 관련된 내용입니다.
변화를 유도하기 위해서 어떻게 해야 하는지가 핵심이며,
Architecture, Frontend, Backend, 방법론/프로세스의 영역을 각각의 단계로 나누어서 Phase1을 수행한 것과 Phase2를 수행 중인 내용에 대해서도 다룹니다.
Phase1
- Architecture : Frontend / Backend 명시적 분리
- Frontend : Angular.js, Grunt, Bower 도입
- Backend : Java 1.7/Spring4, ORM 도입
- 방법론/프로세스 : Scrum, Git
Phase2
- Architecture : Micro-Service Architecture(MSA)
- Frontend : Content Router, E2E Test
- Backend : Polyglot, Multi-Framework
- 방법론/프로세스 : Scrum+JIRA, Git Branch Policy, Pair Programming, Code Workshop
1. Mosaicer
: 얼굴 자동 인식 모자이크 처리 시스템
시스템 목적 및 소개
기술의 발전과 더불어 많은 CCTV 를 거리뿐만 아니라 실내, 심지어 가정집 안까지 설치하는
경우가 증가하고 있다. 또한 현재 대부분의 자동차에는 블랙박스가 설치된다. 이로 인해 사생활
침해 문제가 심각하게 드러나고 있다. 예를 들어, 범죄 현장에 증거 영상으로 사용하기 위해 경찰
혹은 검찰에서 영상을 가져가는 경우가 있다. 이때 범죄자가 아닌 다른 사람들이 영상에 함께
나와 그들이 무슨 일을 하는지 드러나게 된다. 블랙박스 혹은 CCTV 영상뿐만 아니라 방송으로
나오는 자료 영상 혹은 인터뷰 영상에서도 사생활 침해 문제를 볼 수 있다. 실례로 뉴스에서
사용한 영상에 지나가는 행인이 찍혀 방송사가 고소를 당한 경우가 있다. 또한 우리나라는 보통
범죄자의 얼굴을 모자이크 처리를 하고 형사나 기자들의 얼굴은 모자이크 처리를 하지 않는다.
이로 인해 보복 범죄가 일어나는 경우가 있다.
이러한 문제들을 해결하기 위해 주요인물을 제외한 모든 사람들의 얼굴을 모자이크 처리를
해야 하는 과정이 필요하다. 지금까지는 사람이 모자이크 처리할 부분에 대해 지정하면 선택된
영역에 대해 모자이크 처리를 한다. 따라서 현실적으로 모든 영상에 대해 모자이크 작업을 하는
것은 불가능하다. 이를 대체하고자 영상에 나온 당사자에게 영상의 사용 허가를 받아 사용을
한다.
이와 같은 과정을 줄이기 위해 본 프로젝트는 얼굴인식을 통한 자동 모자이크 처리 시스템을
제안한다. 경찰이나 검찰에서 증거용 영상을 가져가기 전 혹은 인터뷰 영상으로 촬영된 영상을
활용하기 전 얼굴을 모자이크 처리를 하면 안 되는 사람에 대한 얼굴 사진을 DB 에 넣는다. 이
DB 를 바탕으로 컴퓨터는 학습을 진행한다. 학습이 끝나면 사용자는 영상을 본 시스템에
입력한다. 입력된 영상에 원하는 사람을 제외한 나머지 사람들의 얼굴에 대해 모자이크 처리를
한다. 따라서 사용자가 원하는 사람의 얼굴 사진 DB 만 갖고 있다면 모자이크 처리가 자동으로
된 영상을 얻을 수 있다.
본 시스템은 블랙박스, CCTV 회사에서 응용하여 자동적으로 모자이크 처리를 해주는 것으로
사용 가능하다. 또한 방송사에서도 인터뷰 영상 혹은 자료 영상으로 사용할 때 자동적으로
시스템을 거치도록 설계하여 사용할 수 있다. 또한 DB 에 범죄자의 사진을 넣어서 학습시킨 후
인터뷰 영상 혹은 자료 화면에서 사용한다면 자동적으로 범죄자의 얼굴은 가리지 않고 주변의
형사나 기자들의 얼굴을 가리는 영상을 얻어내어 방송할 수 있다. 로드뷰 서비스를 제공하는
업체에서도 사람의 얼굴을 자동으로 모자이크 처리를 해줌으로써 활용할 수 있을 것이다.
2. 제안된 알고리즘
본 시스템은 크게 Tensorflow 라이브러리를 통해 얼굴을 분류하는 딥러닝 모듈과 동영상을
OpenCV 라이브러리를 통해 처리하는 동영상 처리 모듈로 구성되어있다. 딥러닝 모듈은 모자이크
처리하고자 하는 사람의 얼굴 사진을 학습하고 새로 입력되는 얼굴 사진에 대해 classification 을
한다. 동영상 처리 모듈은 OpenCV 라이브러리를 통해 동영상을 입력 받아 얼굴영역을 추출하고
모자이크 처리를 담당한다.
1) Training
딥러닝 모듈을 이용하여 training 을 진행한다. 모든 과정에서 영상, 음성 분야에 좋은
성능을 보이는 Tensorflow 의 CNN 알고리즘을 사용한다. 먼저 학습단계에서 모자이크
처리를 원하지 않는 얼굴과 기타 다른 사람들의 얼굴로 라벨을 나누어 모델링을 한다. 이때
모자이크 처리를 원하지 않는 얼굴의 라벨을 target 이라 한다.
2) Test
먼저 사용자로부터 동영상을 입력 받는다. 동영상 처리 모듈에 입력 받은 동영상의 각
프레임에서 Face Detection 을 진행하여 프레임에서 얼굴인 부분을 추출하고 미리 지정된
위치에 사진으로 저장한다. 추출된 얼굴 사진은 딥러닝 모듈의 입력 값으로 사용된다.
딥러닝 모듈은 저장된 사진을 불러와 classification 을 진행한다. Classification 이 종료되면
입력 받은 얼굴이 기존의 training 해놓은 모델에서 각각의 라벨에 속할 확률을 반환한다.
Target 라벨과의 일치율이 미리 정해놓은 Threshold 를 초과할 경우 동영상 모듈은
모자이크를 처리를 하지 않고 다음 얼굴 부분으로 넘어간다. 반면 Threshold 를 초과하지
않을 경우 해당 얼굴 부분에 대해 모자이크 처리를 한다. 모든 프레임, 모든 추출된 얼굴
부분에 대해 처리를 마치면 해당 동영상을 반환하여 저장한다.
3. 적용된 주요 기술
1) Tensorflow
머신러닝을 위해 구글에서 만든 오픈소스 라이브러리로 기본적으로 CNN알고리즘을 이용
하고 있다. CNN의 주요 목적은 테두리(edge), 선(line), 색깔 등 이미지의 시각적 특징이나
성질을 감지하는 것이다. Random forest
나 다른 supervised 알고리즘들과는 달
리 CNN은 사용자가 직접 feature를 추
출하지 않기 때문에 좀 더 의미 있는
feature 추출이 가능해진다. 따라서 사
진을 이용한 물체 혹은 다양한 인식에
탁월한 성능을 보이고 있다. 왼쪽 사진
은 CNN 알고리즘의 계략적인 과정을
보이고 있다.
2) Haarcascade
OpenCV에서 사용하는 Face Detection 함수인 Haarcascade는 다음과 같은 4가지의 과정
으로 구성되어있다.
① Haar-like feature
사람의 얼굴에는 특정한 패턴이 있다. 왼쪽 그림
과 같이 일정 부분은 밝고 일정 부분은 어둡다. 이
러한 모양이 모든 얼굴에서 발견된다. 이와 같은 패
턴을 미리 학습하여 정해진 모델을 OpenCV는 xml
파일에 미리 저장해두고 있다. 개발자는 해당 xml파
일을 불러와 자신이 갖고 있는 사진의 패턴과 비교
하여 해당 사진에 얼굴이 있는지 없는지를 판단한다.
② Integral Image
위의 ①의 계산을 좀 더 쉽게 하기 위한 방법이다. 매 순간 동일한 패턴인지 판단하기
위한 계산을 하려면 많은 시간이 소요 된다. 따라서 이미지 전체에 대해 미리 기본 연산
을 해놓고 그때 그때 필요한 부분에 대해 간단한 연산으로 값을 얻어내는 방식이다.
③ Adaboost
엉뚱한 곳을 얼굴이라고 인식하는 문제를 해결하기 위해 사람의 얼굴에 대한 여러 가
지 패턴을 만들어 여러번 classify를 한다. 가중치를 이용하여 좀 더 나은 결과물을 만들
어낸다.
④ Cascade classifier
위의 여러 가지 결과를 두고 그 모든 결과들이 만장일치로 통과하지 않는다면 부결하
는 방식이다.
[출처] http://msnayana.blog.me/220659604108
출처]http://blog.naver.com/ocllos/194366766
4. 시스템 적용 예시
- Mosaicer Cloud (https://github.com/seongahjo/Mosaicer/tree/master/node)
본 시스템은 모든 기능을 REST API로 제공하여 타 개발자들이 쉽게 사용할 수 있도록 만든
웹 모듈을 포함하고 있다. Mosaicer Cloud는 웹 모듈을 이용하여 만들어진 머신러닝 클라우
드 서비스이다. Tensorflow에 대해 잘 모르는 일반 사용자도 손쉽게 머신러닝을 사용할 수
있도록 만들어진 서비스이다. 아래의 사진과 같이 간단한 인터페이스로 사용자는 학습시킬
사진들을 업로드하고 업로드된 사진을
바탕으로 모델을 생성할 수 있다. 또한
학습된 모델을 바탕으로 사진을 입력받
아 classification이 가능하다. 뿐만 아니
라 모자이크 모듈을 추가로 적용하여
동영상을 입력하면 모자이크 처리할 수
있는 기능을 제공한다.
이 서비스를 사용하면 단 두 번의 버튼
클릭을 통해 딥러닝 이미지 학습, 분류
를 할 수 있다.
위와 같이 본 시스템 적용이 가능하며 간단히 REST API 호출을 통해 다양한 분야에 적용 가능하
다.
이후 개선할 사항
현재 본 시스템은 OpenCV의 Face Detection 함수에 종속적이다. 따라서 만약 OpenCV의 함수
가 얼굴을 찾아내지 못한다면 해당 시스템은 동작하지 못한다. 실제 데모 영상에서도 볼 수 있듯
이 얼굴이 측면으로 나오거나 눈을 완전히 감는 상황에서 얼굴로 인식하지 못해 모자이크 처리가
되지 않는 것을 확인할 수 있다. 혹은 얼굴이 아님에도 얼굴로 인식되어 모자이크 처리가 되는
부분을 확인할 수 있다. 따라서 이러한 부분을 개선하고자 OpenCV의 함수 보다 나은 알고리즘을
이용하여 수정하는 작업이 필요하다.
현 알고리즘은 동영상의 매 프레임마다 얼굴을 찾고 딥러닝 모듈을 이용하여 target이 맞는지
확인한 후 모자이크 처리를 하는 과정을 거치고 있다. 이 모든 과정이 매우 오래 걸리기 때문에
시스템이 종료되는데 매우 오래 걸린다. 따라서 이러한 단점을 보안하고자 매 프레임을 처리하지
않고 3 프레임당 처리하는 방식으로 알고리즘을 수정하는 부분이 필요하다.