누군가에 지식을 받아 먹고 있습니다. 제가 알고 있는 여러분야의 지식들이 있지만 그걸 펼칠 시간이 부족합니다. 조금 시간이 지나면 저의 지식들로 블로그를 꾸려나갈 예정입니다..
Posted by 이성윤

▶ Virtualenv

   virtualenv는 한 컴퓨터에서 여러 프로젝트를 작업할 때 파이썬 패키지의 의존성이 충돌하지 않도록 관리해주는 툴이다. 즉 virtualenv를 사용하여 텐서플로를 설치하면 의존성 때문에 같이 설치되는 패키지들이 다른 프로젝트에서 설치한 같은 패키지들을 덮어쓰지 않게 된다.

Posted by 이성윤

▶ Machine Learning

   Machine Learning은 컴퓨터에게 사람이 직접 명시적으로 Logic을 지시하지 않아도 데이터를 통해 컴퓨터가 ‘학습’을 하고 그것을 사용해 컴퓨터가 자동으로 문제를 해결하도록하는 것을 의미한다.

   머신러닝은 ‘기계’가 일일이 코드로 명시하지 않은 동작을 데이터로부터 ‘학습’하여 실행할 수 있도록 하는 ‘알고리즘’을 개발하는 연구 분야이다


▶ TensorFlow Object Detection API

   사진속의 다양한 물체의 위치를 특정하고 종류를 분류해주는 기능을 오픈소스 형태로 제공한다. 연구자들에게는 이 모델을 기초로 더 빠른 연구를 진행하게 하고 애플리케이션 개발자들에게는 딥러닝 모델을 직접 만들고 학습시키지 않아도 관련기술을 사용할 수 있게 하는데에 목적이 있다. TensorFlow API는 NestCam, 스타일 기반 이미지 검색, 구글 스트리트 뷰에서의 글자인식과 같은 구글 서비스에서 사용되고 있는 API와 같은 API라고 한다.

   참조:

    https://github.com/tensorflow/models/tree/master/research/object_detection

    https://research.googleblog.com/2017/06/supercharge-your-computer-vision-models.html


▶ Model

    어떤 상황을 해결하기 위한 문제를 세우고 그 문제를 풀기 위한 모델을 만들기 위해 데이터에 대한 가설을 세우고, 그 가설에 부합하는 알고리즘을 개발하는 과정이다.


  ㅇ 어떤 대상을 모두에게 공통적으로 이해되도록 약속된 방식(수식,그림 등)으로 표현하는 것
     - 복잡한 현실세계를 단순화(추상화) 즉, `추상적 체계적으로 표현하는 작업 또는 방법`
        . 통상, 관련자들끼리 상호이해를 쉽게 하도록 다이어그램화 함

  ㅇ 공학적으로는, 시스템(체계)적인 특성을 `수학적으로 표현하는 과정(수식화)`
     - 정량적으로 표현되도록 수학적 언어로 전환시키는 과정
        . 좋은 모델링 이란?   컴퓨터를 이용하여 해석,시뮬레이션,설계하기 쉬운 모델


▶ SSD: Single Shot Multibox Detector Model  

    1번의 네트워크 forwarding 만으로 여러 물체를 검출하는 모델입니다. R-CNN류에서 상대적으로 좋은 성능이 나오다가, 이 논문을 통해 Single shot detector로도 충분히 좋은 성능이 나올 수 있다는 것을 보여준 것 같습니다. 특히, 속도가 빠르다보니 실시간 물체 검출에 사용됩니다.

  • YOLO 보다 빠르면서 R-CNN류만큼 정확한 성능
    • SSD : 72.1% mAP @ 58FPS
    • Faster R-CNN : 73.2% mAP @ 7FPS
    • YOLO : 63.4% mAP @ 45FPS
  • 여러 Feature Scale을 잘 사용할 수 있도록 모델링
  • 학습이 쉽도록 각 filter별 역할을 잘 분리시켜, location 정보와 class 정보 등을 출력하도록 함
  • 학습이 쉽도록 각 feature map은 서로 다른 scale을 담당하도록 하고, anchor 설계를 함.

▶ Google Inception Model

    Tensorflow 공개 후 우리가 가장 많이 사용하는 Conv-Net 모델


▶ Inception. v1. (a.k.a GoogLeNet) Model

    #google 에서 ‘Inception’ 이라는 이름으로 부르는 네트워크 구조를 처음으로 밝힌 논문입니다. 22개의 네트워크를 쌓아서 2014년 ILSVRC에서 우수한 성적을 보고했습니다.

  • 알렉스넷에 비해 12배나 적은 파라미터 수, 훨씬 정확한 성능
  • 더욱 효율적임
  • 단일 Convolutional Operation을 쌓아서 네트워크를 구성하던 기존의 방식과는 다르게 Layer하나가 더욱 많은 계산을 하도록 설계. Network in Network1과 유사.
  • Network in Network1에서는 MLP로 Convolutional Filter를 대체했다면, 이 논문에서는 Inception Module로 해당 기능을 대체.

     참조:

      http://openresearch.ai/t/inception-v1-going-deeper-with-convolutions/40


▶ Inception. v2 Model

     2015.12  개선된 Inception Module과 Label Smoothing 제안. 약간의 성능 향상.


▶ Inception. v3 Model

     약간 큰 사이즈로 더 높은 정확도를 제공한다. 기술은 MobileNet과 유사하다

     Inception.v2 구조도를 그대로 Inception.v3 라 생각해도 된다.

       ◦Inception.v3 모델을 Inception.v2++ 정도로 봐도 무방

▶ MobileNet Model

     1000개의 object 클래스들은 디텍션하는 모델을 모바일과 임베디드에 맞춰서 다시 진행


▶ ResNet Model

    #microsoft::Tag 에서 Resnet 이라는 이름으로 제안한 네트워크 아키텍쳐입니다.

  • 100개, 1000개가 넘는 Layer를 쌓아 Imagenet 3.5% 에러 수준을 달성
  • Residual Learning이라는 개념의 소개로, Skip connection을 도입해 네트워크를 deep하게 쌓음

▶ RCNN 

Multiple-Object Detection에 대한 관심을 가지게 된다면 가장 먼저 접하게 될 테크닉이 바로 R-CNN이다. Region의 R을 CNN에 붙인 이 방법은 사실 간단한 프로세스를 거친다. 

  1. CNN을 fine-tuning한다.
  2. Input Image에 Selective search를 적용하여 object detecting을 수행한다.
  3. Detected Object(proposals)를 CNN에 넣고 feature extract를 수행한다.
  4. 분석된 Feature들을 softmax classifier나 SVM에 붙여서 각 proposal의 score를 매긴다.
  5. Non-Maximum Suppression(NMS)을 이용하여 bounding box를 구한다.

  6. <span style="font-size: 8pt;">*여기서 사용된 Selective search와 NMS는 다음 포스트에서 설명하기로 한다. </span>

간단히 말하자면, R-CNN은 Input image에서 수많은 Object 후보들을 찾아내고 이들을 모두 CNN에 넣어서 Feature를 뽑아낸다. 그리고 뽑아낸 Feature들을 SVM등의 Classifier에 넣어서 분류작업을 수행하고 NMS와 같은 기법으로 Bounding Box를 이미지 위에 그려내는 방법이다. 다음 그림은 전체적인 과정에 대한 이해를 도와준다.


▶ COCO(Common Objects in COntext) Detection Challenge

    마이크로소프트에서 만든 이미지 인식(recognition), 분리(segmentation), 캡션 붙이기(captioning), 사람의 키포인트(keypoint) 찾기 등을 위한 데이터입니다. 대단히 많은 데이터로 구성되어 있고 MS에서 작정하고 만든 데이터입니다. 매년 챌린지가 열리고 있습니다!

    마이크로소프트의 COCO(Common Object in COntex) 프로젝트는 이미지 객체 인식을 확장한 장면 이해를
목표로 91종의 객체 유형에 대해 라벨링된 33만장 규모의 새로운 DB를 공개

   참조:

    http://cocodataset.org/#home


▶ ImageNet

    ImageNet은 ILSVRC 챌린지에서 사용하는 데이터입니다. ImageNet 전 세계에서 모은 이미지들로 챌린지를 열어 누가 컴퓨터 비젼 분야에서 제일 뛰어난 기술을 갖고 있는지를 겨룹니다. 매년 새로운 승자가 등장하고, 그렇게 등장한 기술들은 거의 대부분 반드시 사용해야만 하는 기술이 되곤 합니다. 아쉽게도 2017년을 마지막으로 한다는 뉴스가 있었습니다.

1,000 종류의 1,281,167 개 데이터가 주어지고 데이터가 어떤 물체인지를 맞추는 챌린지입니다. 각 종류별 데이터의 갯수도 다릅니다. 분류 외에도 탐지(detection) 등 다른 부문도 있지만, 제일 유명한 것은 1,000 종류 분류입니다. 엄청나게 많은 데이터인데다, 전체를 합치면 200GB에 가깝습니다. 이 크기는 절대 GPU에 들어갈 수 없기 때문에 보통 특별한 방법을 써서 GPU 훈련을 시킵니다.


   ILSVRC: ImageNet Large Scale Visual Recognition Competetion


    논문에서 사용하는 ImageNet 데이터는 ILSVRC 2012 의 분류 문제에 사용된 데이터입니다. 실제로 ImageNet 데이터는 저게 전부가 아니고, 훨씬 많은 전 세계에서 모은 데이터들을 모아 놓은 사이트입니다. 다만 이 중 일부를 떼서 챌린지 용으로 사용하는 것 뿐입니다. ImageNet 회원이 되면 비상업적 목적으로 원본 이미지를 다운받을 수도 있고, 이미지의 URL만 받아 불러올 수도 있습니다. 하지만 훈련을 위해서는 역시 원본 이미지가 있어야 합니다. 이미지들의 크기도 전부 다르기 때문에 전처리도 필요합니다. 
    참조:

     http://www.image-net.org/



+ MAP

+ Pre-trained

+ TFRecord

+ CloudML

+ Oxford-IIIT Pets lives

+ Annotate

+ Label

...

Posted by 이성윤


1. 용어정리

+ COCO(Common Objects in COntext) Detection Challenge

   http://cocodataset.org/#home

+ TensorFlow Object Detection API

   https://github.com/tensorflow/models/tree/master/research/object_detection

+ Model

  https://github.com/tensorflow/models

+ COCO-trained models

+ Kitti-trained models

+ Open Images-trained models {#open-images-models}

+ MAP

+ Pre-trained

+ TFRecord

+ CloudML

+ Oxford-IIIT Pets lives

+ Annotate

+ Label
...


2. AI 관련 기법 정리

+ 각종 모델 정리

+ 학습을 위한 두 가지 방법 정리(We can use a pre-trained model, and then use transfer learning to learn a new object, or we could learn new objects entirely from scratch)

...


3. Object Detection API 내 파일 정보 정리

+ Check point (model.ckpt.data-00000-of-00001, model.ckpt.index, model.ckpt.meta)

   텐서플로우 학습 체크 포인트로, 나중에, 다른 데이타를 학습 시킬때 Transfer Learning을 이용할

   때, 텐서플로우 그래프에 이 체크포인트를 로딩하여, 그 체크포인트 당시의 상태로 학습 시켜놓

   을 수 있다. 이 예제에서는 사용하지 않지만, 다른 데이타를 이용하여 학습할때 사용한다.

학습된 모델 그래프 (frozen_inference_graph.pb)

    학습이 완료된 그래프에 대한 내용을 Export 해놓은 파일이다. 이 예제에서는 이 모델 파일을 다시 로딩하여

     Prediction을 수행한다.

Graph proto (pgrah.pbtxt)

라벨맵

    라벨맵은 {Object Detection API 설치 디렉토리}/models/object_detection/data  디렉토리 안에 몇몇 샘플 모

    델에 대한 라벨맵이 저장되어 있다. 라벨맵은 모델에서 사용한 분류 클래스에 대한 정보로

    name,id,display_name 식으로 정의되며, name은 텍스트 라벨, id는 라벨을 숫자로 표현한 값 (반드시 1부

    터 시작해야 한다.), display_name은 Prediction 결과를 원본 이미지에서 인식한 물체들을 박스처리해서 출

    력하는데 이때 박스에 어떤 물체인지 출력해주는 문자열에 들어가는 텍스트 이다.
    여기서 사용한 라벨맵은 mscoco_label_map.pbtxt 파일이 사용되었다.

학습 CONFIG 파일

   모델 학습과 예측에 사용되는 각종 설정 정보를 저장한 파일로 위에서 미리 정의된 모델별로 각각 다른 설정 

   파일을 가지고 있으며 설정 파일의 위치는  {Object Detection API 설치 디렉토

   리}/models/object_detection/samples/configs 에 {모델명}.config 에 저장되어 있다.

Annotation XML 설정값들 정리

pbtxt 역할에 대해서 정리하기.

Configuring jobs(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/configuring_jobs.md)

...


4. 학습 관련 도구 정리

- 이미지 라벨링 학습도구 목록 업데이트

...


5. 소스코드 분석


Posted by 이성윤
http://cafe.naver.com/telcosn/554 주소복사 게시글분석

강의를 듣기 시작했다.

강의를 2강의 쯤 들었을때 수학이 필요하겠다라는 생각이 들었다.

텐서플로우는 파이썬 기반으로 개발이 된듯 하다. 파이썬으로 가벼운 프로그램 만들 수 있는 수준이라면

강의 듣는데는 문제가 생기진 않는다.

수학 공부를.. 제대로 하지 않은 나로서는 고민이 많이 되었다.  필요한 수학을 먼저 공부하고 들을지

아니면 어차피 제공되는 TensorFlow API를 쓰면 되는거라 대략 이해되면 넘어갈지.


고민하던차에, 먼저 강의를 쭈욱 들어보기로 했다. 현재 섹션 7까지 들었다.

섹션 4까지는 그리큰 시간을 투자하지 않아도 언급되는 수학 수식에 대한 이해가 그렇게 어렵지는 않았다.

Logistic (Regression) Classification에서 부터는 어려움을 느꼈고, 수식이 정확히 이해되지 않아도 큰 그림과 설명하는 의도가 이해가 되면, 그냥 넘어가면서 섹션 7까지 왔다.


섹션7까지 오면서, 점점 더 언급되는 수식이라도 정확히 이해하고 강의를 듣고 싶은 마음이 들었다. 수식을 이해하고 있다면 좀더 재미를 느낄 수 있지 않을까 라는 생각이 들기도 한다.

그래서 잠시.. 갈길을 멈추고, 수식을 먼저 공부하고자 한다.



섹션 0. 오리엔테이션
수업 소개와 개요 미리보기 00:10:00
섹션 1. 머신러닝의 개념과 용어
기본적인 Machine Learnnig 의 용어와 개념 설명 미리보기 00:12:00
TensorFlow의 설치및 기본적인 operations (new) 00:17:00
섹션 2. Linear Regression 의 개념
Linear Regression의 Hypothesis 와 cost 00:13:00
Tensorflow로 간단한 linear regression을 구현 (new) 00:15:00
섹션 3. Linear Regression cost 함수 최소화
Linear Regression의 cost 최소화 알고리즘의 원리 00:16:00
Linear Regression 의 cost 최소화의 TensorFlow 구현(new) 00:15:00
섹션 4. 여러개의 입력(feature)의 Linear Regression
multi-variable linear regression (new) 00:17:00
lab 04-1: multi-variable linear regression을 TensorFlow에서 구현하기 미리보기 00:08:00
lab 04-2: TensorFlow로 파일에서 데이타 읽어오기 (new) 00:06:00
섹션 5. Logistic (Regression) Classification
Logistic Classification의 가설 함수 정의 00:15:00
Logistic Regression의 cost 함수 설명 00:14:00
TensorFlow로 Logistic Classification의 구현하기(new) 00:15:00
섹션 6. Softmax Regression (Multinomial Logistic Regression)
Multinomial 개념 소개 00:10:00
Cost 함수 소개 00:15:00
lab 06-1: TensorFlow로 Softmax Classification의 구현하기 (new) 00:12:00
lab 06-2: TensorFlow로 Fancy Softmax Classification의 구현하기 (new) 00:16:00
섹션 7. ML의 실용과 몇가지 팁
학습 rate, Overfitting, 그리고 일반화 (Regularization) 00:14:00
Training/Testing 데이타 셋 00:09:00
lab 07-1: training/test dataset, learning rate, normalization (new) 00:11:00
lab 07-2: Meet MNIST Dataset (new) 00:13:00

 

Posted by 이성윤

TensorFlow를 본격적으로 시작하기전에, 관련된 블로그, 책, 까페, 강의 뭐 이런것들에 대한 정보를 수집하였다.


처음엔 팀장님이 말한 CNN위주로 검색을 했지만, 키워드를 TensorFlow와 머신러닝에 맞추었다.


다행이도, 가장 먼저 아주 훌륭한 TensorFlow강의를 발견하게 되었다.


강의제목

모두를 위한 머신러닝/딥러닝

강의URL

https://www.inflearn.com/course/%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B0%95%EC%A2%8C/

1. 강좌 소개

알파고와 이세돌의 경기를 보면서 이제 머신 러닝이 인간이 잘 한다고 여겨진 직관과 의사 결정능력에서도 충분한 데이타가 있으면 어느정도 또는 우리보다 더 잘할수도 있다는 생각을 많이 하게 되었습니다. Andrew Ng 교수님이 말씀하신것 처럼 이런 시대에 머신 러닝을 잘 이해하고 잘 다룰수 있다면 그야말로 “Super Power”를 가지게 되는 것이 아닌가 생각합니다.

더 많은 분들이 머신 러닝과 딥러닝에 대해 더 이해하고 본인들의 문제를 이 멋진 도구를 이용해서 풀수 있게 하기위해 비디오 강의를 준비하였습니다. 더 나아가 이론에만 그치지 않고 최근 구글이 공개한 머신러닝을 위한 오픈소스인 TensorFlow를 이용해서 이론을 구현해 볼수 있도록 하였습니다.

이 머신러닝, 딥러닝 강좌는 수학이나 컴퓨터 공학적인 지식이 없이도 쉽게 볼수 있도록 만들려고 노력하였습니다.

2. 도움되는 분들

  • 인공지능에 대해 관심이 있는 누구나
  • 머닝러신, 딥러닝의 개념을 이해하고 싶으신분
  • 머닝러신의 직접 구현해보고 싶으신 분

3. 참고자료

이 비디오는 저도 인터넷등을 통해 공부하면서 만든것이며 아래 자료를 많이 사용하였습니다.

4. 지식공유자 소개

김성훈

Hong Kong University of Science and Technology 에서 컴퓨터 공학쪽으로 연구를 하고 있습니다.
비디오나 강의에 대한 의견이 있으시면 아래로 이메일을 보내 주시면 됩니다.
hunkim+ml@gmail.com


강의를 듣다가 이것저것 검색하다보니, 굳이 위의 사이트를 가입하지 않아도 볼 수 있었다..

http://hunkim.github.io/ml/


한마디 더 붙이자면, 김성훈 교수님같이 자신의 시간을 투자하여 아낌 없이 가지고 있는 지식을 공유하는분들이

점점 늘어나고 있다. 덕분에 많은 도움을 받고있다. 감사합니다.

Posted by 이성윤


팀에서 CCTV에서 송출하는 영상을 이미지로 변환하여 사람을 담고 있는 이미지의 좌표를 얻어내어 화면에 박스를 쳐주는

프로젝트를 부서 자체적으로 진행하고 있다.

지금은 R업체 솔루션의 프레임워크를 클라이언트/서버 형태로 분석 솔루션을 제공받아서 데모를 위한 분석서버 프로그램 개발이 완료된 상태이다.


구조는 아래와 같다.

데모의 결과를 평가하기전에 분석서버의 제원은 아래와 같다.

GPU: NVIDIA TITAN X

CPU: I7-7700(3.6~4.2Ghz) 쿼드코어

MEM: DDR4-2400MHZ (32GB)

SSD: M.2 512GB

OS: CentOs7.0


데모를 하기전에 R업체와의 몇번의 미팅에서 분석과 관련된 성능에 대해서 들은바는 아래와 같다.

- TITAN X에서 분석할 수 있는 최대 FPS는 50FPS이다.

- 다양한 오브젝트를 처리하지 않고 사람에대한 분석만 한다면 조금더 올라갈 수 있다 예상 70FPS

- 사람에 대한 정확도는 90%로 이상


사실, 여기까지만 들었을때도.. 과연 상용 제품으로서 판매 가치가 있을까라는 의문이 들었다. 그 이유는

우리팀에서 데모용도로 구매한 서버의 비용이 총 430만원이 들었다.(GPU: 175, PC:255)

위의 최대 FPS수치 대로라고 한다면 서버 한대당 GPU 한개를 장착 했을때 카메라 3대 밖에 처리 할 수 없다

보통의 카메라는(15FPS이상)이기 때문이다. 

서버 한대에 GPU를 더 장착해서 처리할 수 있는 카메라 대수를 늘린다고 하더래도 서버 한대당 10대 이상의

카메라를 분석하기는 힘들어보인다.

기존 고객사에서 사용하는 비전방식의 영상분석 수행시 서버한대당 몇 백대 이상 처리하고 있음(비전 방식은 정확도 60%이하 라고함)


여기까지만 해도.. 썩 와닿는 프로젝트가 아니지만.. 실제 데모의 결과는 더 참담하다.


R업체에서 제공해주는 로컬 분석시 15FPS 언더로 분석

R업체 솔루션에서 통신 방식으로 분석처리 할 경우 7FPS 분석

정확도: 70%이내 인듯하다.(내생각)


성능이 지나치게 안나온 이유는, 현재는 데모이기 때문에 튜닝이 많이 안되어 있는 상황이다.

사람을 분석하기 위한 학습데이터 정도에 기본 설정이 되어있는 상황이다.

모든게 정밀하게 다 갖춰졌을때 어느정도에 효과를 볼 수 있을지 큰 기대는 안되는 상황이기도 하다.


B 프로젝트를 진행하면서 짬짬히 VA서버 개발하는 것을 도와주었다.

영상과 이미지 관련하여 조금씩 스킬업이 되어가는것 같기도하다. 정리하자면,

- RTSP 프로토콜 개발(C)

- RTP프로토콜 개발(C)

- RTMP 프로토콜 개발(C)

- RTSP 스트리밍 클라이언트/서버 개발(C)

- RTMP 스트리밍 클라이언트/서버 개발(C)

- GOP 프레임 단위 파싱(I프레임, P프레임)(C)

- 프레임을 이미지로 변환(FFMPEG)

- 좌표를 이미지에 오버레이(Python-Opencv)


머신러닝을 보기전까지의 관심사는,

1. RTSP/RTP 클라이언트/서버를 네티로 개발해보자.

  - 자바 네트워크 소녀 정독

  - 자바 네트워크 소녀 개발 환경 및 테스트 환경 구축

  - 완벽하게 이해하려면 1달 정도 소요(디버깅 중)

2. FFMPEG 라이브러리에 위대함을 느끼고, FFMPEG API를 잘 활용 할 수 있도록 지금까지 만들어둔 서버들을

   FFMPEG을 이용하여 만들어보자.

  - 영상 및 음원을 로딩하여 SDP 생성

  - 영상 및 음원을 로딩하여 H264/AAC로 변환하여 전송하는 부분 소스코드 분석중

  - FFMPEG은 엄청나게 방대하여 조금씩 알아가야 할듯 함

이전까지는 이런 상황이었다.


B 프로젝트 적용이 완료된 지금 팀장님이 미션을 주심.

R업체 솔루션을 쓰지 말고 자체적으로 텐서플로우를 익혀서 자체기술로 가져보자는 것이다.

그러면서 처음 들어본 CNN이라는 개념을 이해하고 공유해달라는 것이다.


다른건 모르겠고, 스터디 기간이 2달정도 확보 되는 것과 괜찮은 스킬업이 되지 않을까? 더 나은 모습을 위함이라는 기대를 가지고,


그리하여.. 시작하게 되었다. Machine Learning, Deep Learning, TensorFlow

Posted by 이성윤