딥러닝 컨볼루션 신경망(CNN) 응용방법
Basler
신경망은 무엇이며, 신경망이 산업용 화상 처리 분야에서 많은 관심을 끌고 있는 이유는 무엇일까? 신경망은 개발자들이 기준을 정의해야 할 필요성을 없애준다. 신경망은 스스로 기준을 학습하고 이러한 ‘지식’ 을 정밀 작업에 적용한다. 본문에서는 이러한 교육의 수행방법, 이를 위한 준비 절차, 그리고 신경망 설치와 관련된 각각의 개발 단계를 자세히 설명한다.
1. 소개
1.1 사과와 배
사과와 오렌지는 절대 비교하지 말라는 말이 있는데 머신 비전시스템에서는 사과와 배의 경우도 비교를 해야 한다. 이렇게 이미지 데이터를 바탕으로 두 종류의 과일을 분류하는 작업을 정밀하게 처리할 수 있는 시스템에 대한 수요가 증가하고 있다. 개발자들은 오랫동안 두 가지 과일을 구분하는 데 필요한 기준이 무엇인지 고민해왔다. 사과가 비교적 붉은 색조가 강한 데 비해 배는 녹색을 띤다는 비교적 간단한 접근 방법을 상상할 수도 있다. 이렇게 하면 색상 정보가 기준이 될 수 있다. 하지만 설익은 사과는 녹색을 띠기도 한다. 색상만을 기준으로 하면 설익은 사과를 배로 잘못 판단할 수 있다.
높은 정확도 보장을 위해선 기준을 추가하는 것이 합리적이다. 서로 다른 종류의 사과를 구분해야 할 경우라면 어떻게 해야 할까? 구분이 가능할 정도로 색상과 모양의 차이가 충분하지 않을 수도 있다. Basler는 자체 정의한 특징들을 그 한계까지 최대한 적용했다. 서로 다른 종류의 물체들에 대한 분류가 어려울수록 서로 구분할 수 있는 특징들을 자동으로 탐지할 수 있는 알고리즘을 만드는 것이 개발자들에겐 더욱 중요하기 때문이다.
머신러닝 알고리즘, 특히 컨볼루션 신경망, 줄여서 ‘CNN’은 전망이 밝은 솔루션이다. CNN은 사물을 구분하는 데 필요한 기준을 자동으로 학습한다. 이로 인해 CNN은 가장 까다로운 분류 문제에 대해서 뿐만 아니라 융통성이 필요한 모든 애플리케이션에서도 유용한 역할을 한다.
1.2 컨볼루션 신경망(CNN): Success Story
CNN의 컨셉은 새로운 것은 아니다. 1968년에 캐나다의 신경생리학자인 David Hubel은 스웨덴의 신경생리학자인 Torsten Wiesel 과 고양이의 시각피질에 대한 공동 연구를 수행했다.
시각피질은 뇌의 한 부분으로 시각 데이터를 이용 가능한 정보로 가공하는 일을 담당한다. 이들의 목표는 눈을 통해 뇌에 전달되는 시각적 이미지 정보로부터 뇌가 물체에 대한 문맥상 유용한 정보를 생성하는 방식에 관한 것이었다. 두 연구원은 다양한 방향에서 고양이에게 조명 막대를 보여 주고 막대 방향에 따라 시각피질의 세포들 중 어떤 것들이 활성화되는지 파악했다. 또한 눈 모양과 같은 복잡한 빛의 패턴에 따라 시각피질 중 깊은 곳에 있는 부분의 세포들이 활성화되는 것을 증명했다.
Hubel과 Wiesel의 노력으로 세포 활성화 및 구체적인 이미지 정보의 전달을 설명할 수 있는 모델이 만들어졌다. 이는 컴퓨터를 이용한 이미지 분류 모델의 기반이 형성되었다. 30년 뒤, 프랑스의 컴퓨터 공학자인 Yann LeCun이 이들의 연구를 이어서 시각피질의 기능에 대한 설명을 알고리즘에 더해 최초의 CNN을 만들었다. 하지만 그의 노력에도 불구하고 CNN은 실용적인 애플리케이션으로는 사용되진 않았다.
그 이유는 CNN에 엄청난 컴퓨팅 성능이 필요했기 때문이다. 데이터 레코드를 하나씩 순차적으로 처리하는 시리얼 테크닉을 이용해 데이터를 처리하는 CPU 프로세서들로는 네트워크가 제대로 작동할 만큼 충분히 학습할 때까지 여러 해가 소요됐다. CNN 모델이 다시 주목받게 된 것은 그래픽 프로세서 유닛(GPU)을 사용하면서부터다. 최근 몇 년 사이 이 모델은 완전히 다시 태어났다. 연구원들은 필기 인식, 의료 진단, 자율주행차량을 위한 조기 경보시스템, 로봇 공학과 생물 통계학의 사물 인식 등 수많은 분야에서 활용되고 있다.
또한 Google, IBM, Microsoft, Facebook 과 같은 거대 기업들이 수십억 달러를 투자한 것은 이 기술에 대한 엄청난 관심과 잠재력을 보여준 것이다. CNN은 단순히 프로세서만 집약해 놓으면 되는 것이 아니라 많은 양의 데이터도 필요하다. 백지 상태에서 CNN을 훈련시키려면 이미 분류되어 있는 이미지 데이터가 많이 필요하다. 오늘날 개발자들은 이러한 정보가 축적되어 있는 데이터베이스를 자유롭게 액세스할 수 있다. 가장 인기 있는 이미지 데이터베이스는 ImageNet 이다. 이 데이터베이스에는 분류되어 있는 이미지 1,400만 건이 담겨 있다. 특정 분류 문제에 특화된 데이터베이스도 있다.
예를 들어, German Traffic Sign Recognition Benchmark 라는 이름의 데이터베이스에는 50,000 건의 교통 신호 이미지가 포함되어 있다. 이 사례에서 CNN은 2012년에 99.46%의 성공률을 보였는데 이는 사람이 직접 분류했을 때의 성공률인 98.84%보다 우수한 결과이다. 하지만 개발자들은 대개 분류 문제에 부딪히고 이에 대한 이미지 데이터를 직접 확보할 방법이 없다.
그러나 최근 기술은 다행히 수백만 건의 이미지를 수집할 필요가 없다. '전이학습(transfer learning)'이라고 부르는 기술적 트릭을 이용하면 필요한 볼륨을 크게 줄일 수 있으며 경우에 따라서는 겨우 수백 또는 수천 장의 이미지로도 가능하다.
2. CNN 개발 과정
사과와 배를 구분해야 하며, 이에 더해 과일별로 다시 품질 기준으로 자동 분류해야 한다고 생각해 보자. 다음과 같은 공정이 필요할 것이다.
1. 이미지 데이터 수집
2. CNN 설계
3. 셀프러닝 알고리즘의 실행
4. 훈련된 CNN 평가(필요에 따라 재수행)
5. 훈련된 CNN의 배포
2.1 이미지 데이터 수집
머신러닝에는 많은 예를 이용해 컴퓨터를 훈련시키는 일이다. 과일 분류 라인의 경우 다양한 유형, 품질 및 크기의 개별 사과나 배를 보여 주는 많은 사진을 촬영해야 한다. 또한 각 이미지에서 볼 수 있는 것들에 대한 꼼꼼한 설명도 기록해야 한다. 이는 세 가지 모든 속성에 대한 구체적인 값(레이블)을 의미한다(그림 2). 이는 컴퓨터의 눈에 거의 글자 그대로 표시되어 이미지에 따른 응답(Braeburn, Class I, Size M)을 알려 주는 입력/출력 쌍 세트를 만들어 준다.
이 데이터 레코딩 중에는 측정해야 할 가능한 모든 속성 조합(종류, 품질, 사이즈)이 이미지에 존재해야 한다. 일반적으로 샘플 이미지에는 애플리케이션의 시각적 차이가 존재한다는 점을 감안해야 한다(이미지에서의 조명 조건, 배경, 과일 위치).
촬영은 최종 생산 환경에서 동일한 방식으로 정교하게 이미지를 촬영하는 것이 좋다. 각각의 이미지에서 과일의 종류, 품질 및 사이즈 속성을 기록하는 일은 숙련된 전문가가 맡아야 한다. 시스템 프로그래머가 아닌 실제 과일 판매원만이 상품의 품질을 올바로 평가 할 수 있다.
데이터 수집 중에 아주 중요한 질문 하나는 필요한 샘플 이미지 개수이다. 이미지의 변화가 클수록 샘플 이미지 개수가 더 많이 필요하다. 수집된 데이터는 이미지의 색조, 이미지 변경, 크기 조정 뒤 새로운 샘플로 사용함으로써 인위적으로 확대(데이터 증가)될 수 있다. 아주 저렴한 데이터 수집을 위해 크라우드소싱 방식을 이용하는 서비스 파트너와 협력할 수도 있다.
2.2 CNN 설계
최첨단 CNN은 다양한 기능을 가진다. 기본 멀티레이어 개념과 달리 현재의 네트워크는 교차식 컨볼루션 및 풀링 레이어(그림 3)로부터 형성된다.
컨볼루션 레이어는 수학적 ‘컨볼루션’ 연산을 적용함으로써 입력 이미지의 인접 영역에 대한 픽셀 값을 단일 값으로 변환한다. 컨볼루션 연산은 이미지에서 구체적인 속성들만 찾아내는 특징 탐지기 역할을 한다(예: 가로 방향 에지 인식).
풀링 레이어는 보다 넓은 이미지영역에 대해 이러한 특징 탐지기의 폭을 요약해 프로세싱 체인에서 더 멀리까지 확립된다. 이들 레이어는 피라미드 형태를 만들어 점점 넓은 이미지 영역을 평가하는 점차 전문화된 특징 탐지기로 이어진다.
과일 분류의 예로 돌아가서 네트워크의 첫 번째 레이어가배의 특징인 점들로 이루어진 패턴에 응답한다고 상상할 수 있다. 상부 레이어는 이와 대조적으로 사과 종류의 시각적 동질성, 그림자 및 상부가 신경망이 과일 종류, 품질 및 사이즈를 계산할 수 있을 정도로 모두 일치하는지 검증한다.
CNN의 정밀 구조는 사실 대부분 AlexNet5, VGG Net6 또는 GoogLeNet7 과 같은 연구 집단에 의해 개발된 네트워크에서 변형된 것이다. 이 네트워크는 소프트웨어 기능으로 컨볼루션 레이어를 포함한 다양한 핵심 요소들을 제공하는 앞서 언급한 오픈 소스 딥 러닝 프레임워크를 이용해 프로그램 된다. 요구 사항에 따라 상당한 수준의 전문 지식이 필요하다. 초기는 단 몇 번의 사용자 정의만으로 구현할 수 있지만 진정한 의미의 100% 최적화된 솔루션을 구현하려면 고도로 숙련된 전문가들의 집중적인 작업이 필요하다.
2.3 셀프러닝 알고리즘의 실행
일단 CNN의 데이터 설계가 끝나고 나면 셀프러닝 알고리즘을 실행해야 한다. 이 알고리즘은 딥 러닝 프레임워크의 일부이다. 이 알고리즘은 코어에 확률적 최적화 프로세스가 있는 ‘백 프로파게이션(back propagation)’ 알고리즘을 바탕으로 한다. 이 알고리즘은 제공된 데이터로 신경망이 작동되도록 CNN의 자유 매개변수를 구성해야 한다. 따라서 셀프러닝 알고리즘은 신경망을 ‘훈련’ 하는 데 사용된다.
이런 종류의 셀프러닝 알고리즘 실행은 애플리케이션 솔루션을 위한 전체 공정에서 가장 프로세서 집약적인 단계이다. 수백 만 개의 샘플 이미지를 사용해야 할 경우 한 대 이상의 고성능 GPU 서버를 사용해야 하며 데이터 처리에는 며칠에서 몇 주까지 걸릴 수 있다. 이러한 복잡한 일을 피할 수 있는 방법은 애플리케이션을 위해 전이 학습(transfer learning) 기법을 사용하는 것 뿐이다.
신경망 설계와 마찬가지로 품질 기대치에 따라 전문 지식 수준도 달라진다. 이용 가능한 모든 셀프러닝 알고리즘은 서로 다른 변수(학습 또는 감소율, 배치 크기)를 갖게 되며 해당 변수에 따라 성능이 좌우된다.
CNN을 보다 강력하게 만들어 주는 드롭아웃(Dropout), 배치(Batch) 레이어 정규화(Layer Normalization)프로시저와 같은 트릭도 있다. 이러한 알고리즘에는 항상 확률적 요소도 포함되어 있다. 이는 개발자들이 보통 중간결과를 평가하고 알고리즘 실행에 직접 변화를 줘야 함을 의미한다.
2.4 네트워크 평가
셀프러닝 알고리즘에서 얻어지는 훈련된 CNN은 통계적으로 평가해야 한다. 개발자가 어떻게 보이는지 이미 알고 있는 샘플 이미지 세트를 확보한 뒤 신경망에 의해 계산된 값과 비교하는 일이다. 이를 통해 신경망에 의해 정확히 식별된 이미지 컨텐츠 속성 오류율을 얻을 수 있다. 결과가 사전 정의된 요구사항을 만족시키지 못하면(사과 중 5%를 배로 식별하는 것은 허용되지 않음) 앞의 단계 개발과정으로 돌아가 개선해야 한다.
평가에 중요한 것은 이미 본 적이 있는 이미지를 이용해 테스트하지 않는 것이다. 이렇게 하면 생산 중에 오류가 나타난다. 테스트와 훈련 데이터가 완전히 일치한다면 신경망은 해당 이미지를 외워서 학습하고 평가 중에 완벽한 점수를 얻게 된다. 그 뒤 생산 시스템에 새로운 이미지가 입력되면 엄청난 오류를 범할 수 있다. 이러한 문제를 피하기 위해서는 교차검증(cross-validation)과 같은 절차를 도입해 훈련과 평가 단계 중에 데이터를 체계적으로 구분하는 것이 중요한다.
2.5 훈련된 CNN의 배포
마지막 단계의 결과가 만족스러우면 다음 단계는 훈련된 신경망을 생산 시스템에 이전하는 것이다. 딥 러닝 프레임워크는 다른 시스템 구성 요소(연결된 카메라)에 서로 연결될 수 있도록 신경망에 필요한 다양한 요소들을 소프트웨어 라이브러리로 묶거나 탐지된 이미지 컨텐츠에 대한 반응을 제어하는 많은 툴들을 제공한다.
CNN에 의한 이미지 평가 중에 구체적인 실시간 성능 요구 사항이 있다면 추가 작업이 필요하다. 이미 훈련된 신경망을 대상 시스템에 맞게 특수한 방법, 양자화를 사용할 수도 있다. 기술적으로 까다로운 이런 기능은 신경망을 제대로 설계하면 된다.
3 전이 학습
이미 언급한 바와 같이 CNN은 본질적으로 데이터를 상당히 많이 필요로 하며 훈련 중에도 프로세서를 많이 사용한다. 다행히 개발자 입장에서 문제를 간단하게 해 주는 좋은 옵션이 있는데 바로 ‘전이학습’이다. 이렇게 하면 수많은 일반 이미지를 사용해 훈련된 신경망을 가져와 단 몇 개의 특정 분야에 적합한 이미지만 갖고 있는 애플리케이션에 적용할 수 있다.
개발자는 AlexNet, VGG Net 또는 GoogLeNet 과 같은 신경망에 애플리케이션별 훈련이미지를 보여 준 뒤 결과값을 특징 벡터(feature vector)로서 신경망의 마지막 레이어 중 하나에 저장한다. 이러한 벡터는 매우 압축된 형태로 신경망에 제시된 이미지를 보여주고 로지스틱 회귀분석(multinomial logistic regression), 지원 벡터 머신 또는 ‘간단한’ 다층 퍼셉트론(Multilayer Perceptron)과 같은 표준 머신러닝 프로시저를 통해 분류할 수 있다.
이런 방식으로 CNN은 Houghtransformation, SIFT Feature, Harris Corner 또는 Canny Edge 탐지기와 같은 화상 처리 툴들을 대체한다.
4 CNN용 프로세서
CNN 개발 중에 훈련된 애플리케이션 프로세스가 위에 표시된 바와 같이 구분된다. 이 두 단계 하드웨어 요구 사항에는 상당한 차이가 있다. CNN 훈련 프로세스용으로 고성능 GPU 처리 장치를 사용해야 한다. NVIDIA 와 같은 제조업체는 이러한 작업에 특화된 DGX-1과 같은 AI 슈퍼컴퓨터를 공급한다. 또한 훨씬 저렴한 NVIDIA Titan X 카드를 사용할 수도 있다.
이들 제품이 일반적인 CPU에 비해 CNN을 최대 80배 빨리 훈련시킬 수 있다. 일단 신경망이 훈련되고 나면 임베디드 비전시스템에 옮길 수 있다. 처리 장치로는 이미지 데이터를 병렬로 고속 처리할 수 있는 FPGA(FieldProgrammable Gate Arrays)가 바람직하다. 따라서 이런 유형의 임베디드 비전시스템에서 핵심 구성 요소는 분류할 이미지 데이터를 녹화할 수 있는 카메라, 해당 이미지 데이터를 전송하기 위한 케이블, 그리고 이미지 데이터를 분류하는 데 CNN이다.
임베디드 카메라는 유연한 리본 케이블을 통해 FPGA(XilinxZynq)내장 처리 장치에 연결된다. 이미지 데이터 분류는 FPGA에서 실행되며 실시간으로 계산할 수 있다.
FPGA를 지원하는 임베디드 비전시스템은 여러 가지 장점이 있어 CNN과 함께 사용하기에 좋다. FPGA는 병렬로 모든 이미지를 빠르게 분류하기 위해 신경망에 필요한 컨볼루션 연산 및 기타 수학적 연산을 수행할 수 있다. 실시간 이미지 분석과 분류 기능을 제공한다. FPGA는 GPU에 비해 전력 소모가 적어 저전력 임베디드 시스템에 적합하다.
Microsoft Research에서 최근 발표한 보고서에 따르면 FPGA가 GPU에 비해 최대 10배 이상 에너지 효율이 뛰어나다. FPGA는 커다란 온칩 스토리지와 대역폭을 갖고 있어 CNN이 실시간으로 고해상도 이미지를 분류할 수 있게 해 준다. FPGA에 직접 연결된 카메라(예: Basler dart BCON)는 데이터를 FPGA에 직접 전송한다. 이는 USB를 통해 전송된 데이터가 FPGA에 도달하기 전에 다양한 하드웨어 구성 요소(호스트 컨트롤러)를 거쳐야 하기 때문에 CNN과 같이 프로세서 집약형인 애플리케이션에서 중요한 장점이다. 카메라, FPGA와의 직접 연결로 인해 구현 효율이 높아진다.
5 요약
1. 분류 문제를 다루는 개발자들이 자체적으로 '특징' 또는 기준을 추출해야 했던 데 반해 CNN은 이러한 분류 기준을 스스로 학습한다.
2. CNN은 이미지 세트를 이용해 이러한 분류 기준을 자동으로 학습한다. 이러한 학습 과정에는 처리 능력뿐 아니라 필요한 이미지의 많은 리소스가 필요하다.
3. 그렇지만 전이 학습의 원리는 적은 양의 이미지와 처리 능력으로 솔루션을 구현할 수 있다.
4. 카메라 FPGA 직접 연결을 지원하는 임베디드 비전시스템은 CNN과 함께 사용하기에 매우 적합하다.
자료 제공: Basler(www.baslerweb.com)








