2016년도 소프트웨어종합설계

최종 보고서

2016. 12.

2016년도 소프트웨어종합설계2 최종 보고서
①보안등급	[ ]보안, [○]일반			②공개가능여부		[○]가, [ ]부
③과 제 명	국문	CCTV를 이용한 화재 감지 시스템 구축
	영문	Build up fire detecting system via CCTV
④팀 이름	EagleEye
⑤연구책임자	성명	오동현		소속		단국대학교 소프트웨어학과
	휴대전화	010-5303-1725		E-mail		eclipse1725@gmail.com
⑥총 연구기간	2016 년 9 월 07 일 ~ 2016 년 12 월 14 일 ( 3 개월)
⑦참여인력(M/M)	총 : 4 명( 12 M/M)
⑦참여인력 1	성명	이예은		소속		단국대학교 소프트웨어학과
	휴대전화	010-4603-8783		E-mail		cherie3e@nate.com
⑧참여인력 2	성명	박현묵		소속		단국대학교 소프트웨어학과
	휴대전화	010-8263-7903		E-mail		ehxhfl2002@gmail.com
⑨참여인력 3	성명	유지은		소속		단국대학교 소프트웨어학과
	휴대전화	010-9377-4074		E-mail		yugioun0215@gmail.com
⑩핵심키워드	국문	기계 학습			영상 정보 처리		클라우드 서비스
	영문	Machine Learning			Image data Processing		Cloud Service
관계 규정과 모든 지시사항을 준수하면서 이 연구개발사업을 성실히 수행하기 위하여 아래와 같이 연구개발계획서를 제출합니다. 2016 년 12 월 13 일 주관연구책임자: 오 동 현 □ 최종무교수님 귀하

목  차

1. 연구 개발 개요	4

가. 설계 주제	4

나. 연구개발의 필요성	4

1) 빠른 화재 감지가 이루어지지 못하는 현황	4

2) 영상정보처리 기술의 필요성	4

3) 머신러닝을 통한 이미지 분석의 필요성	4

다. 국내 외 기술 현황 및 차별성	4

1) 스프링클러 및 화재감지 시스템	4

2) Smart CCTV	5

3) 차별성	5

2. 연구개발의 목표와 내용	6

가. 최종목표 및 세부목표	6

1) 연구개발과제 최종 예상 결과물	6

나. 시나리오	7

1) 시연 시나리오	7

2) Use-Case	7

다. Design	8

1) Hardware Component	8

2) Software Component	8

라. Required Items	8

3. 연구개발 추진 전략 및 추진 체계	9

가. 연구개발 추진전략	9

1) 신뢰성	9

2) 보안성	9

3) 동시성	9

나. 연구개발 인력분배	9

다. 연구개발 추진일정	10

1) Gantt Chart	10

2) Milestone	10

목 차

4. 연구 개발 최종 결과	11

가. 연구 개발 동영상	11

나. 연구 개발 알고리즘	11

1) OpenCV	11

2) Socket IO	11

3) Tensorflow	11

다. 주요 내용 설명	12

1) OpenCV	13

2) Socket IO	13

3) Tensorflow	13

라. 개발 환경	15

5. 문제점 및 해결방안	16

가. 프로젝트 관리 측면	16

1) 프로젝트 자원	16

2) 불 이미지	16

나. 프로젝트 개발 측면	16

1) 불 감지	16

2) 불 이미지 저장	16

3) Tensorflow 학습	16

6. 기대효과 및 활용분야	17

가. 기대효과	17

1) 신속하고 정확한 불 감지	17

2) 실외, 무인 환경에서 불 감지	17

3) 화재 감지, 신고 시스템 자동화	17

나. 활용효과	17

1) 감지 범위 확장	17

2) 빅데이터 활용	17

7. 기타	17

가. 참고문헌	17

나. 참고 URL	17

1. 연구 개발 개요

가. 설계 주제

CCTV를 이용한 화재 감지 시스템 구축

나. 연구개발의 필요성

1) 빠른 화재 감지가 이루어지지 못하는 현황

- 대부분의 화재는 사람들이 평소 많은 관심을 들이지 않는 장소에서 부주의에 의해 발생한다.

- 감지기(sensor)를 사용한 다른 화재감지 방법도 많지만, 감지기로부터 먼 거리에서 발생한 화재는 감지하기 어렵다.

- 실내에서는 시스템 구축이 편하지만 상대적으로 실외는 그렇지 못한 편이다.

- CCTV 등을 이용하여 실시간 모니터링을 하고 있다고 해도 사람이 모든 CCTV를 관제하기에는 한계가 있다.

2) 영상정보처리 기술의 필요성

- CCTV는 꾸준히 증가하는 추세이며 이를 이용한 영상정보 처리 기술 또한 점차 중요해지고 있다.

- 상대적으로 영상 정보 처리가 까다로운 불 탐지기를 구현하게 된다면, 불 탐지 외의 다른 기능들을 적용하기는 상대적으로 수월할 것이다.

- 영상 정보 처리를 통해 화재 상황을 포착할 수 있다면 센서와 같은 추가적인 하드웨어 설치비용을 줄일 수 있다.

3) 머신러닝을 통한 이미지 분석의 필요성

- 빅 데이터 시대가 열리면서 머신러닝이 다시 주목받기 시작하고 있으며, 머신러닝을 이용한 이미지 처리가 중요하게 여겨지고 있다.

- 머신러닝을 이용하면 보다 정교한 분석이 가능하며 이에 따라 화재 감지 정확도도 높일 수 있다.

다. 국내 외 기술 현황 및 차별성

1) 스프링클러 및 화재 감지 시스템

① 스프링클러

- 스프링클러는 화재가 발생했을 때 이상고온을 감지하여 자동적으로 방수하는 설비이다. 배관을 실내의 천장에 배치하고 곳곳의 분기관 선단에 스프링클러 헤드를 부착하여 일정온도에 도달하면 퓨즈가 끊어져 물이 살수되는 것으로 초기 소화용으로 사용되고 있다. 화재 감지 시스템은 설치 이후의 유지보수가 굉장히 중요하다.

② 연기 감지기

- 연기 감지기는 크게 이온화식 감지기와 광전식으로 분류할 수 있다. 이온화식이란 검지부에 연기가 들어가면 전류가 변하는 성질을 이용하여 화재를 감지하는 방식이며, 광전식이란 검지부안에 연기가 들어가면 이 연기에 의해 평상시 광전 소자에 의해 일정하게 흐르던 전류의 값을 변화시켜 화재를 감지하는 방식이다.

2) Smart CCTV

Smart CCTV는 단순히 영상을 녹화하고 보여주는 역할만을 해왔던 기존의 CCTV에서 더 나아가 영상에서 다양한 움직임 등을 포착하여 방범과 재난 예방 기능을 수행한다. 뿐만 아니라 소리 정보를 알아듣는 음원 CCTV나 침입감지 정확도를 비약적으로 높인 Smart CCTV 또한 많이 개발되고 있다. 이미 시중에 나와 있는 다양한 종류의 Smart CCTV들 중 화재감지용 Smart CCTV는 다음과 같은 과정으로 화재를 감지하게 된다.

⑴ CCTV로 입력되는 영상을 서버(DVR, NVR)로 전송한다.

⑵ 영상을 전송 받은 서버의 CPU는 SW를 사용하여 화재 상황을 판단하게 된다.

⑶ 화재 상황이라 인식하면 경보상황을 알린다.

[그림 1-1] Smart CCTV 동작 과정

폭발적으로 증가한 CCTV 설치 대수에 비해 현저히 부족한 모니터링 인력 문제 해결을 위한 자동화된 인식 시스템의 수요가 증대되고 있는 실정이다. 이에 지능형 영상 분석 기술이 각광받고 있으며 이를 적용한 Smart CCTV가 많은 관심을 받고 있다.

3) 차별성

① 스프링클러와의 차별성

- 스프링클러는 설치하는데 추가적인 비용이 매우 많이 든다. 하지만 EagleEye는 추가적인 센서 없이 단일 CCTV로 불을 탐지 할 수 있다.

- 스프링클러는 물리적인 유지보수가 필요하므로 번거롭다. 때문에 제대로 유지보수가 이루어지지 않아 오작동하는 경우가 많다.

- 스프링클러는 보통 실내에 설치하며 실외에서는 사용되지 않는다. 하지만 CCTV는 실내와 실외를 가리지 않고 설치되어 있기 때문에 어디에서든 화재를 감지 할 수 있다.

② Smart CCTV와의 차별성

- 보통의 화재 감지 Smart CCTV는 자체개발한 알고리즘을 사용하지만 EagleEye는 머신러닝을 이용하여 높은 인식률을 가진다.

- 기존 Smart CCTV는 영상을 서버로 전송하고 이곳에서 화재 상황의 판단여부를 결정한다. 하지만 EagleEye는 클라이언트 단에서 화재여부를 판단하며, 화재 경보 기능만을 서버에서 다루기 때문에 서버 처리의 부담이 적다.

2. 연구개발의 목표와 내용

가. 최종목표 및 세부목표

1) 연구개발과제 최종 예상 결과물

[그림 2-1] EagleEye

위 [그림 2]와 같이 Deep Learning과 OpenCV가 적용된 하나의 시스템인 EagleEye를 개발한다. EagleEye을 이용하여 화재를 감지하면 이 정보를 Cloud Server까지 전송되게 하는 하나의 시스템을 구축하고자한다.

구분	내용
최종목표	CCTV의 영상 정보를 이용하여 화재를 감지 할 수 있는 시스템을 구축한다. 다른 불 감지 시스템과는 다르게 두 번에 걸친 탐지 및 검증을 통해 정확성을 높이고자 한다.
세부목표	◇ 개발 계획 수립 ◇ 개발 환경 구성 ◇ Tensorflow를 이용한 탐지 기본 틀 제작 ◇ OpenCV를 이용한 1차 탐지 기본 틀 제작 ◇ Tensorflow와 OpenCV와 단일 프로그램 동작을 위한 통합 작업 ◇ OpenCV에 심도 있는 기준치 적용 ◇ CloudeServer 알리미 제작 ◇ Tensorflow 불 탐지 학습 ◇ 시연 준비 ◇ 테스팅 및 유지보수

[그림 2-2] 최종 및 세부목표

최종 산출물은 학습된 Tensorflow와 OpenCV를 담고 있는 무형의 소프트웨어이다. [표 1]의 모든 세부 목표를 수행하면, 목표로 하였던 최종 산출물을 얻을 수 있다.

나. 시나리오

1) 시연 시나리오

[그림 2-3] EagleEye 화재 감지 시나리오

소프트웨어의 최종 결과 발표 시나리오는 위 [그림 3]과 같다. 1차적으로는 카메라(CCTV)를 통해 얻은 영상을 이용하여 1차 화재 후보군을 선출한다. 2차적으로는 해당 부분이 실제 화재인지 심도 있는 검증을 수행한다. 2차 검증을 통해서 화재 상황이라 판단되면 클라우드 서버를 통해 고객에게 문자를 전송하며, 고객이 원한다면 추가적인 방법을 통해 화재 경보를 보낸다. 예를 들어 119 구조대에 자동으로 연결하여 화재 정보를 전송하는 방식 등이 있을 수 있다.

2) Use-Case

① User 입장에서의 Use-Case

[그림 2-4] User Use-Case

② System 입장에서의 Use-Case

[그림 2-5] System Use-Case

다. Design

1) Hardware Component

- EagleEye의 구성 요소 중 Hardware는 넓은 의미에서는 CCTV가 포함될 수 있지만 실질적으로 개발과정에서 CCTV는 필수적이지 않다. 실제 구현하는 부분은 소프트웨어적인 구성 요소가 전부라고 할 수 있으며, 추가적으로 CCTV 뿐만 아니라 영상을 받아올 수 있는 모든 장비에 본 소프트웨어를 적용 할 수 있다.

2) Software Component

① OpenCV

- 영상 정보를 처리하기 위해 사용할 수 있는 여러 가지 툴이나 오픈소스들이 존재하지만, 가장 쉽고 널리 사용되며, 무료로 사용할 수 있는 툴 중 대표적인 것이 OpenCV이다. 따라서 본 연구개발에서는 OpenCV를 사용하여 이미지 프로세싱을 통한 1차 검증을 수행하려 한다. 따라서 OpenCV를 이용한 구현 부분에서 가장 중요한 것은 불로 보이는 모든 영역을 정확하게 포착하여 후보군으로 설정해야 한다는 것이다. 만약 1차적으로 불을 정확히 탐지하지 못한다면, 정밀 검사를 위한 2차 판별 또한 없을 것이며 정확한 화재 탐지가 발생하지 않기 때문이다. 따라서 이 부분에서는 불을 잡을 수 있는 최소한의 검증을 수행한다.

② Deep Learning

- 딥러닝은 데이터 분석의 일종으로 EagleEye에서는 Tensorflow를 사용하여 Deep Learning을 수행하려 한다. 또한 기계학습을 수행하는 데에 매우 많은 시간이 소모되기 때문에 Nvidia GPU의 CUDA를 병행하여 기계학습의 효율을 높이려 한다. 이는 1차적으로 판단한 OpenCV 결과 값을 받아와 해당 영역을 2차 판별하여 불인지 아닌지 정밀 검사를 수행하는 역할을 맡는다.

③ Cloud Server

- 실제로 불이 날 확률은 그리 크지 않으며, 24시간 내내 고객을 위한 일반 서버를 사용하는 것은 불필요할 수 있다. 따라서 클라우드 서버를 사용하여 고객 알람 전달 및 구조대 신고에 필요한 비용만 지출한다면 효율적인 자원의 사용이 가능하게 될 것이다. 본 연구개발제안서에서는 클라우드 서버로 Amazon의 AWS를 사용할 것을 제안한다.

라. Required Items

⓵ CUDA 프로그래밍이 가능한 GPU를 장착한 컴퓨터 (GPU Linux Machine)

⓶ 웹캠이 장착 된 노트북 혹은 CCTV와 같이 영상정보를 받아올 수 있는 장비

⓷ 머신러닝에 대한 구체적인 자료와 참고 코드

3. 연구개발 추진 전략 방법 및 추진 체계

가. 연구개발 추진 전략 방법

연구개발 추진 전략에는 크게 3가지 차별성, 보안성 그리고 동시성을 두었으며, 이를 EagleEye의 추진 전략이자 특징으로 삼아 개발 및 필요성에 강력한 동기를 주려 한다.

1) 신뢰성

① 정확한 화재 구분 기준치 설정

- 신뢰성은 해당 연구에서 가장 중요하면서 민감한 문제이다. 신뢰성에 대해서는 설계 및 개발하는 내내 연구 진행자들과의 의견 공유와 끊임없는 실험이 이루어져야 하며, 높은 신뢰도를 얻기 위해서 여러 논문들과 과거에 진행되었던 연구, 그리고 팀 내에서의 검증을 통해 점차 나은 결과 값을 얻어 적용시킬 예정이다.

2) 보안성

① CCTV 영상정보에 관한 문제

- CCTV의 영상정보를 남에게 넘겨주는 것은 개인의 사생활 문제가 포함되어 있기 때문에 민감한 사항이다. 따라서 EagleEye 소프트웨어를 클라이언트 서버에 직접적으로 설치하여 영상 정보가 유출되는 상황을 막으려 한다. 또한 클라우드 서버로 보내는 신호는 영상정보가 아닌 단순한 화재 감지 알람으로 설정하였기 때문에 네트워크 통신에서 발생할 수 있는 Man In The Middle Attack과 같은 여러 취할 수 있는 문제들을 해결하려 한다.

3) 동시성

① 동시 개발 수행

- 본 연구개발의 핵심은 OpenCV와 Tensorflow를 통한 머신러닝이다. 이 때, 모든 팀원들이 한 번에 같은 개발을 수행하는 것은 비효율적일 수 있으므로 OpenCV와 Tensorflow의 틀을 동시 개발한다. 이후 모든 통합 개발까지 마친 시점에서 기준치를 설정할 때, Tensorflow는 스스로 학습을 수행하며 동시개발을 이루어 효율적인 연구를 진행하려 한다.

나. 연구개발 인력분배

본 연구에는 여러 세부목표가 있지만, 이 세부 목표 또한 각각 다각도로 접근 및 개발이 가능하다. 따라서 각각의 팀원들이 따로 개발을 수행하는 것이 아니라 같은 주제의 개발을 여러 가지 방향으로 구현하려 한다. 또한 머신러닝과 같이 난이도가 있는 분야에 대해서는 머신러닝 내에서도 분야를 나누어 각각의 분야에 리더를 맡아 해당 내용의 세부 수행을 이끌어 나가기로 하였다.
특히 불을 탐지하는 기준점이 매우 중요하게 작용하기 때문에 팀원 모두가 각자 자신의 연구 결과 및 조사 결과를 모아 좋은 Output을 내는 결과 값을 채택하는 방법으로 연구를 진행하려 한다. 따라서 모든 연구를 협업하여 진행함으로써 가장 효율적인 산출물을 제작하려 한다.

다. 연구개발 추진일정

1) Gantt Chart

연구 개발 내용	추진 일정
	9월	10월				11월					12월
	28	5	12	19	26	2	9	16	23	30	7	14
주제 구체화
개발 계획 수립
개발 환경 구성
Tensorflow 개발								①
OpenCV 개발							②
통합 작업								③
OpenCV 기준치 적용									④
CloudSever 알리미										⑤
Tensorflow 학습												⑥
시연준비
시연
자료수집
Testing

[그림 3-1] Gantt Chart

2) Milestone

월 / 주차	구분			마일스톤 명	개발기간		비고
					시작일	종료일
11월 / 1주차				머신 러닝을 위한 Tensorflow 기본 틀 제작	2016.10.12	2016.11.16	데이터(사진)를 넣으면 분석하는 기본 틀 제작
		①
11월 / 2주차				화재 감지 1차식별을 위한 OpenCV 개발	2016.10.12	2016.11.9	영상 분석 및 1차적인 화재 탐지 수행 틀 제작
		②
11월 / 3주차				OpenCV와 Tensorflow의 통합 작업	2016.11.9	2016.11.16	Tensorflow와 OpenCV를 연동하여 단일 처리 개발
		③
11월 / 4주차				OpenCV 기준치 적용	2016.11.2	2016.11.23	1차식별 시 불 탐지의 정확도를 향상
		④
11월 / 5주차				CloudSever에서 고객 및 신고대 알리미 제작	2016.11.23	2016.11.30	사용자에게 문자 전송을 통한 알림 기능 개발
		⑤
12월 / 3주차				Tensorflow 학습을 이용한 화재 2차 정밀 탐지	2016.10.26	2016.12.14	화재 사진을 넣을 경우 이를 불로 탐지하는 정확도 향상
		⑥

[그림 3-2] Milestone

4. 연구개발 최종 결과

가. 연구개발 동영상

https://youtu.be/d-UAaEFu1Ek

나. 연구개발 알고리즘

1) OpenCV

① CCTV 영상을 프레임 단위로 받아온다.

② 영상 이미지에서 노이즈를 제거한다.

③ 각 픽셀의 RGB영역을 통해 불에 해당되는 색인지 여부를 판단한다.

④ ③에서 불에 해당되는 색이라고 인지되면 픽셀의 위치를 비교하여 최솟값과 최댓값을	저장한다.

⑤ ③,④ 단계를 반복한다.

⑥ 저장된 픽셀 영역의 최솟값과 최댓값을 이용하여 불에 해당되는 픽셀을 포함하는 사각형을	이미지 안에 그려준다.

⑦ ①~⑥ 단계를 반복하며 일정 프레임동안 불을 인지하면 마지막으로 감지된 영역을 자른다.

⑧ 잘라진 부분을 jpg 파일형식으로 저장한다.

2) Socket.IO

① 일정 프레임동안 불로 인지하면 서버와 소켓 연결을 시도한다.

② 서버와 연결되면 저장된 jpg형식의 불 이미지를 4096바이트로 나눠 서버로 전송한다.

③ OpenCV로부터 이미지를 전송받으면 서버에서 그 이미지 파일의 유효성을 판단한다.

④ 이미지 파일의 유효성은 파일 시그니처와 JPEG 헤더를 이용하여 검증한다.

⓹ 이미지 파일이 유효하면 학습된 Tensorflow로 보내 2차 판단을 실시한다.

3) Tensorflow

① 사전에 불 이미지를 통해 학습하여 모델을 제작해 놓는다.

② 서버를 통해 받아온 이미지를 학습된 Tensorflow에 넣어 처리한다.

⓷ ②에서 나온 결과 값이 불 임계치를 넘지 못하면 0을 반환하고 넘을 경우 1을 반환한다.

다. 주요 내용 설명

1) OpenCV

① 영상 재생

[그림 4-1] Eagle Eye 영상

본 연구개발에서는 cvCaptureFromAVI 또는 cvCaptureFromCAM 함수를 이용하여 영상에 연결한다. cvQueryFrame 함수를 이용하여 연결된 영상의 프레임 정보를 가져와 사용자에게 현재 영상을 보여준다. 이렇게 영상을 보여줌으로써 사용자에게 CCTV 영상을 체계적으로 관리할 수 있게 도와준다. [그림 6]은 평상시 불이 감지되지 않았다고 가정하였을 때, 웹캠으로 촬영되는 실시간 영상이다.

② 노이즈 제거

[그림 4-2] Eagle Eye 영상

[그림 4-3] 노이즈 제거 영상

본 연구개발에서는 해당 픽셀 주변 값의 평균을 계산하여 노이즈를 제거한다. 주변 5픽셀의 평균값을 통해 기존 영상에서 노이즈 값을 제거하여 보다 정확한 불의 범위를 감지한다. [그림 4-2]은 사용자에게 보이는 영상이고 [그림 4-3]은 [그림 4-2]에서 노이즈를 제거한 영상으로 사용자에게는 보이지 않는다.

③ 불 감지

[그림 4-4] 불 감지 영상

[그림 4-5] 저장 이미지

본 연구개발에서는 [그림 4-4]와 값이 화재가 난 직접적인 부분을 사용자가 확인할 수 있도록 빨간색 사각형으로 영상 위에 표시한다. 일정 프레임 동안 불이 감지되면 [그림 4-5]와 같이 사각형 부분의 이미지를 따로 JPG 파일로 저장한다. 저장된 파일은 Socket 통신을 통해 Tensorflow 환경으로 전송되어 2차 판독에 사용된다.

2) Socket.IO

⓵ 소켓

Socket Server, Socket Client로 구성되며 OpenCV가 돌아가고 있는 쪽을 Socket Client, Tensorflow가 돌아가는 쪽을 Socket Server라고 할 수 있다. 본 연구개발에서는 소켓 통신을 이용하여 불이라고 특정 지어진 부분의 이미지를 주고받는다. 이 때, 서버에서는 여러 신호를 동시에 처리해야하기 때문에 동시성 처리의 개념을 가지고 있는 python의 gevent 모듈을 사용한다. 따라서 본 연구개발에서는 서버는 여러 개의 신호를 동시에 처리 할 수 있다.

3) Tensorflow

① 기계학습

본 연구개발에서는 CNN을 이용하여 2차 불 감지를 수행한다. CNN(Convolution Neural Network)는 사람이 사물을 인식할 때 원리를 모방한 것으로 전체 이미지를 한 번에 인식하는 것이 아니라, 이미지의 각 부분들을 먼저 인식하고 이것들을 최종적으로 통합함으로써 하나의 사물로 인식하는 기법이다. CNN은 크게 Convolution, ReLU, dropout, max-pooling, Fully Connected Layer로 이루어져 있다. 이는 순서와 과정이 모두 정해져 있지 않으며 어떻게 구현하는가에 따라서 성능이 나뉜다고 할 수 있다.

■ Convolution

이미지

필터

해당 구역이 화재 상황이 정도 값

[그림 4-6] Convolution

이 단계는 이미지를 여러 조각으로 나누고 필터에 통과시켜 하나의 값으로 바꿔준다. 이때 추출된 하나의 값은 해당 조각이 화재상황에 적합한 정도를 의미한다. 즉, 이 값이 클수록 해당 조각은 화재 상황에 근접한 것이다.

■ ReLU

[그림 4-7] ReLU

convolution의 과정으로부터 온 값이 어떠한 임계값 에 미치지 못하면 무시해버리고 임계 값 이상인 값들에 대해서만 취급하여 좀 더 의미 있는 값들에 대해서만 처리하게 해준다.

■ Dropout

[그림 4-8] Dropout

그림을 보면 일부 뉴런에 대해서는 disable 시키는 것을 볼 수 있다. 각각의 뉴런들은 어떤 특징을 잡아내는데 있어서 전문가라고 생각할 수 있는데 학습할 때에는 일부 뉴런들을 랜덤하게 누락시켜서 overfitting을 방지하는 효과를 내게 된다. 단, 실제 테스트할 때에는 누락시키는 것 없이 모두 처리한다.

■ Max-pooling

[그림 4-9] Max-pooling

pooling은 이미지를 간략화해주는 sampling의 단계라 생각하면 된다. 이때에 max-pooling은 부분 구역 안에 있는 값들 중 가장 큰 값만을 남김으로써 sampling 하는 방식이다. 그림을 보면 알 수 있듯이 각각의 구역 중 그 구역을 대표하는 값, 즉 제일 큰 값만이 추출되어 나오게 된다. 이 과정 또한 Relu 함수와 마찬가지로 의미 있는 값들에 대해서만 처리하도록 만들어 준다.

■ Fully Connected Layer

[그림 4-10] Fully Connected Layer

convolution, relu, max-pooling의 요소들로 구성된 반복된 과정을 마치고 나온 결과는 해당 이미지가 라벨과 부합하는 정도에 대한 값이다. 그리고 이 결과를 softmax에 통과시켜 주게 되면 이미지가 해당 라벨일 확률, 즉 0에서 1사이의 값으로 변환 시켜주게 된다. 따라서 softmax를 통과한 모든 값들을 더하면 100% 즉, 1이 된다.

라. 개발 환경

[그림 4-11] 개발 환경

구분		상세내용
S/W 개발환경	OS	Ubuntu 64bit 16.04, Windows 10 64bit
	개발 환경(IDE)	Visual Studio 2015
	개발 도구	putty, AWS, sublime text
	개발 언어	python 2.7.11, C++
	기타 사항	tensorflow, OpenCV
프로젝트 관리환경	형상 관리	Google Drive
	의사 소통 관리	Kakao Talk

5. 문제점 및 해결 방안

가. 프로젝트 관리 측면

1) 프로젝트 자원

① 문제점 : GPU가 탑재된 컴퓨터를 구하기 힘들어, Tensorflow를 빠르게 학습시키는 CUDA를 사용하지 못하는 문제가 발생하였다.

② 해결방안 : AWS(Amazon Web Service)를 통해 자원을 빌려서 Deep Learning을 수행한다. 이를 통해 보다 빠르게 학습시킬 수 있었다.

2) 불이미지

① 문제점 : 불을 학습시키기 위해서 명확한 불 이미지가 필요했다. 하지만 불만 존재하는 이미지가 많지 않아 학습에 차질이 생겼다.

② 해결방안 : ImageNet을 통해 좋은 불 이미지를 찾을 수 있었으며, 그 중에서도 괜찮은 이미지로 직접 정제하는 단계를 거쳐 학습시킬 이미지를 준비했다.

나. 프로젝트 개발 측면

1) 불 감지

① 문제점 : 영상의 노이즈가 불의 특징과 유사하게 판단되어 화면 전체가 불로 인식되는 문제가 발생했다.

② 해결방안 : 노이즈를 제거한 이미지의 RGB값을 통해 불 여부를 판단하고 특징 값을 더 세밀화 하였다.

2) 불 이미지 저장

① 문제점 : 불로 감지 시, 영상 내의 사각형이 존재한 상태로 이미지가 저장되었다. 영상 내에 그려진 사각형은 이전 이미지를 복사하지 않으면 지울 수 없는 문제가 발생하였다.

② 해결방안 : 좋은 데이터 셋을 남기기 위해 또한 메모리의 효율적 관리 그리고 정확한 2차 판별을 얻기 위해 사각형을 따라 사진을 잘라 저장하는 방법으로 해결하였다.

3) Socket

① 문제점 : 지금은 하나의 클라이언트와 통신을 위해 열려있지만, 차후에는 많은 클라이언트들이 하나의 서버에 접속하여 제대로 통신하지 못하는 경우가 발생할 수 있다.

② 해결방안 : python의 gevent 모듈을 이용하여 동시성 문제를 해결하였다.

4) Tensorflow 학습

① 문제점 : 딥러닝이 워낙 어려운 주제이고, 아직 연구가 진행되고 있는 분야라 공부와 개발에 참고할 수 있는 자료가 많지 않아 어려움이 많았다. 특히 훈련시킬 데이터 셋을 만드는 것이 특히 어려워 개발에 큰 차질이 있었다.

② 해결방안 : Tensorflow 홈페이지와 매뉴얼 정독과 현재 구글이 개발해 오픈소스로 공개한 InceptionV3 외의 많은 오픈소스를 참고하여 공부하고 개발하였다.

6. 기대효과 및 활용분야

가. 기대효과

1) 신속하고 정확한 불 감지

① 실시간 영상에서 불을 감지하여 신고 시스템을 최적화한다.

② 총 3차의 감지 시스템을 통해 불로 오인할 수 있는 환경을 최소화한다.

2) 실외, 무인 환경에서 불 감지

① 초기 화재 진압이 비교적 어려운 실외에서 불을  빠르게 감지하여 피해를 최소화한다.

② 사람이 없는 환경에서 감지 및 신고 시간을 단축시켜 화재 진압을 돕는다.

3) 화재 감지, 신고 시스템 자동화

① CCTV 관제 및 관리에 이용되는 인적 자원을 다른 방안으로 효율적으로 사용할 수 있다.

② 24시간 관측, 관리하여 보다 신속한 처리가 가능하다.

나. 활용분야

1) 감지 범위 확장

① 지진, 쓰나미 등 각종 재난을 감지하여 빠르게 대처할 수 있는 시스템으로 확장 가능하다.

② 재난을 비롯하여 신고할 수 없는 상황에서 자동으로 신고를 해줘 피해를 최소화한다.

2) 빅데이터 활용

① 화재가 발생한 위치 데이터를 분석하여 계절, 위치별 화재 발생을 예측할 수 있다.

② 빅데이터를 통해 화재 발생시, 불이 번지는 장소를 예측하여 화재 범위를 최소화할 수 있다.

6. 기타

가. 참고문헌

1) 박장식, et al. "화재 조기 인식을 위한 화염 및 연기 검출 알고리즘 개발." 한국화재소방학회 논문지 22.4 (2008): 27-32.

2) 조경래, and 배성호. "화염의 칼라와 움직임을 이용한 화재감지." 멀티미디어학회논문지 17.1 (2014): 8-14.

3) 박봉희, et al. "YCbCr 칼라 모델에서 화재의 움직임 정보를 이용한 화재검출 알고리즘." 2010 년도 추계학술발표논문집 (2010): 431-433.

나. 참고 URL

1) https://github.com/tensorflow

2) http://www.gevent.org/

3) https://hunkim.github.io/ml/

4) https://www.tensorflow.org/

5) https://codeonweb.com/entry/b6c7b68b-0950-4ec5-a0c7-b6405cad56ca