Hafoom.com

딥러닝......

DeepLearning2019.09.17 01:23

나는 석사과정을 영상처리/패턴인식 연구개발 했다.

박사과정은 하드웨어/프로세서 설계에 관한 연구를 했다.

 

전혀 연관 짓기 힘들 것으로 보았던 두 분야가.......

사실상 현재 최강 조합이 되었다...

그렇다고 내가 최강인건 아니고.....

 

내가 석사과정 때 주로 한건(정확히는 학사3학년부터)

cam shift 기반 hand tracking, finger tracking 으로 시작해서..

라이브러리 없이 화소를 바탕으로 한 feature 기반 문자 인식(인식률 80% 폭망)

트레이닝 데이터부터 , 트레이닝 프로그램, 테스트 프로그램 혼자 개발...(물론 코치는 있었음)

잡지나 책 이미지를 대상으로 텍스트/비텍스트/표 영역 분할(석사학위논문)

악보 인식을 위한 이진화, 차 번호판 인식 등이 있다.

차 번호판 인식은 학부 졸업논문인데... 일반적인 학부생 수준은 넘어 선다....

독착성이 없을 뿐이지... 난이도는 상당히 높다.

학부생들 프로젝트 검사를 해보면서 요즘 애들 수준을 가늠해보면...

요즘 영상처리 라이브러리가 상당히 잘 되어있어서 거즘 예제를 갖다 쓰더라...

 

지금 딥러닝을 다시 보니... 예전 2013년도 쯤에 딥러닝이라는 걸 접한게 기억난다.... 붐은 아마 2015년엔가 일어난 것으로 보인다. 그 때 지인은..딥러닝을 무시했는데..그 다음 딥러닝이 떴었지.......(그.. 지인은 최근 딥러닝SCI를 썼다..)

 

기존의 뉴럴 네트워크야 패턴인식 교수님들이 기본적으로 깔고 가는 것으로.. SVM보다 간혹 오히려 구렸으나...

갑자기 feature extraction 부분을 붙여서 CNN을 만든다. 

콘볼루션이라는건...나도 2013년도 번호판 인식을 할 때 feature extraction 에 많이들 사용하는 거 갖다 썼는데.. 그런 것들을 전부 학습기에 붙였다고 한다...

콘볼루션이야..영상처리의 기초중의 기초라..........(매트랩 가지고 2년 가까이 콘볼루션 짓거리만 한 나로써는....)

 

따라서. 별 거 없다.......(기존 고전적인 신경망에서 조금 업그레이드 수준..)

 

뭐 성능은 상당히 좋아졌다고는 하는데..... 

아무튼...많은 연산 처리와 임베디드 하드웨어(모바일)의 발달에 따라 하드웨어 관점에서의 신경망 가속 처리가 중요해졌다.

난 SIMD 구조인 GPU를 연구했으나, NPU와 같은 뉴럴네트워크를 위한 아키텍처는 GPU로 최적화하긴 힘들다.

현재 분석중이나, 결국 메모리가 문제다...

 

 

'DeepLearning' 카테고리의 다른 글

딥러닝......  (0) 2019.09.17
딥러닝 공부  (0) 2019.09.10

Comment +0

딥러닝 공부

DeepLearning2019.09.10 00:56

딥러닝 중 CNN 모델에 관한 좋은........자료

 

http://aikorea.org/cs231n/convolutional-networks/

 

CS231n Convolutional Neural Networks for Visual Recognition

Table of Contents: 컨볼루션 신경망 (ConvNet) 컨볼루션 신경망 (Convolutional Neural Network, 이하 ConvNet)은 앞 장에서 다룬 일반 신경망과 매우 유사하다. ConvNet은 학습 가능한 가중치 (weight)와 바이어스(bias)로 구성되어 있다. 각 뉴런은 입력을 받아 내적 연산( dot product )을 한 뒤 선택에 따라 비선형 (non-linear) 연산을 한다. 전체 네트워크는 일반 신경망과

aikorea.org

 

 

'DeepLearning' 카테고리의 다른 글

딥러닝......  (0) 2019.09.17
딥러닝 공부  (0) 2019.09.10

Comment +0

[D2] 2019.06.26

ARM+@2019.06.26 14:57

[AVR/ARM]

JMOD-128-1 도착함.

isp내장이라 다운로더 필요없음. 뭐 작품만들려고하면 상대적으로 무게가 있으니 안쓰겠지만

난 어차피 공부용이니까

4년전에 AVR 타이머 선풍기 만들었는데 기억이 안난다.

구입한 도서 기반으로 Atmega128 하드웨어 제어 공부 시작.

아직 ST-링커가 도착 안해서.. Cortex-M4는 보류.

Tool 설치 - Atmel Studio 7.0, Truestudio, STM32CubeMX

 

 

[펌웨어]

커널 단순 컴파일은..제조사 제공으로 어렵지 않게 해봤으니

개념정리와 함께 device driver 공부.

실제 작성은 다음에

 

 

[VHDL]

보류. 일단 다른거 좀 진도 빼고...

한번에 3개 스타트하기엔 부담이

'ARM+@' 카테고리의 다른 글

[D2] 2019.06.26  (0) 2019.06.26
용어 정리*개념정리  (0) 2019.06.25
[D1] 6.25 background 공부 및 준비  (0) 2019.06.25

Comment +0

임베디드 시스템 순서

기구 -> 아트웍 -> 회로 -> 펌웨어,디바이스드라이버,BSP -> 커널 -> 어플리케이션

 

 

 

BSP(Board Support Package)

https://msnayana.blog.me/80065524365

 영어 그대로 해석하면 되겠지만, 쉽게 말해 부트로더 + 실시간 운영체제를 로드하기 위한 최소한의 장치를 지원하고 주변 장치를 지원하기 위한 드라이버를 총칭한다.

루트 파일 시스템(root file system), 툴체인(toolchain) 등을 포함하기도 한다.

(커널은 통상적으로 제외된다. )

 칩 제조업체(S사) 를 예로 레퍼런스 보드를 개발하여 보여준다 하면, BSP까지는 공급하여 테스트를 하게 된다.

한마디로, 최소한 보드의 기능 및 성능을 확인할 수 있도록 동작시키는 패키지로 보면 되겠다.

MS사의 설명을 따르면, 특정 하드웨어 플랫폼에 임베디드 운영체제를 빠르게 구축하는데 사용되는 소스 바이너리 소프트웨어 패키지라고 한다. 드라이버+OAL(OEM적응 계층)+HAL(하드웨어 추상화 계층) + BIOS 라고 한다.

정리하자면, 부트로더+드라이버+BIOS+파일시스템+툴체인 정도로 보면 되겠다. (정확한 요소를 딱 집지는 못하겠다)

 

 

모놀로식 커널과 마이크로 커널

https://selfish-developer.com/entry/%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9DMonolithic-kernel%EA%B3%BC-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9CMicro-%EC%BB%A4%EB%84%90

커널을 공부한다면 필수적으로 알아야하는 개념으로 사료된다. 

마이크로 커널 : OS는 각 기능을 서브 시스템으로 분할하여 핵심 기능만을 커널에 담고 코어 부분에서 담당하도록 한다. (하나의 서비스가 죽더라도 전체 커널이 panic되지 않기 때문에 임베디드에 쓰인다는데 이해가 잘 안간다.) File system이나 Driver는 유저 공간에서 실행된다.

모놀리식 커널 : 단일형 커널이라고도 한다. 입출력, 네트워크, 장치 지원 등 일반적인 기능들을 동일한 메모리 공간에 적재 및 실행한다. 리눅스는 하나의 프로그램으로 수행되므로 모놀리식이다. 어플리케이션을 제외하고 모두 커널이 관리한다. 

 

 

 

Kernel Module

 마이크로 커널이 가지는 모듈 기능을 모놀로식 커널에 도입함으로써 '커널 모듈'개념이 등장한다.

 커널 모듈(Kernel modules, KMOD) 등의 여러가지 이름으로 쓰인다.... LKM(Loadable kernel module)이라는 표현도 쓴다. OS에서 실행중인 커널을 확장하는 코드를 포함하는 목적파일로써, 새로운 하드웨어(디바이스 드라이버)나 파일시스템을 지원하거나 시스템 호출을 추가하는데 사용된다.

 리눅스 측면에서 얘기하자면 v2.x 가 되면서 커널 모듈개념이 추가되었다. 커널 크기를 줄이기 위한 방법 중 하나로 커널 전체를 컴파일할 필요 없이 모듈단위로만 컴파일해서 동적으로 커널에 추가해주는 개념이다.

혹시 모르니 이것저것 다 포함해주는 커널과 다르게 나중에 필요에 따라 추가하므로 확장성, 재사용성을 높일 수 있다.

다시 말해, 디바이스와의 연결 및 구동을 제어하기 위한 커널은 매번 새로운 기능을 추가하거나 디바이스를 추가할 때마다 커널을 다시 컴파일하거나 시스템 재부팅을 해야할 필요성이 사라지게 된 것이다. 

 

 

Evaluation Board (평가보드, 샘플보드) 

http://sewoon.com/mall/kims_lib/board/dictionaryboard.php?table=Dictionary&action=print&l=488
Evaluation이란 용어는 무언가의 가치를 평가해본다는 의미이다. 이것은 S/W와 H/W 전반에 걸쳐 사용되는 용어로서, 해당 제품을 구매하기 전에 샘플 혹은 데모버전으로서 사용해본다는 의미가 담겨있다.

Evaluation board란 주로 IC등의 성능을 테스트해보기위한 일종의 Jig board를 의미한다. 즉 실제로 똑같이 사용될지는 알수 없지만, 시스템 제작을 위해 해당 IC가 어느 정도 성능을 낼 수 있는지 보여주기 위해 IC제작사측에서 측정용 Jig board를 꾸리고 칩을 실장하여 만들게 된다.

RF에선 RFIC나 MMIC 등의 성능을 가늠해보고 튜닝성을 검증하기 위해 대부분 Evaluation board를 제공한다. 하지만 실제 사용될 시스템의 PCB에서는 특성이 많건 적건 변하게 되는데, 시스템 설계자가 해야되는 중요한 작업 중 하나가 바로 이러한 상황에 대한 튜닝 작업들이다.

그러므로 Evaluation Board 상의 소자 배치와 값을 그대로 믿고 쓰기보다는, 해당 RFIC/MMIC에서 끌어낼 수 있는 성능이 어떤 지를 검증해보기 위한 용도라고 보는 것이 더 적합하다.

수GHz 대역의 RFIC류는 이런 evaluation board가 기본적으로 제공될 수 있지만, 수십GHz 대의 MMIC의 경우는 패키징 자체가 매우 어려워서 bare chip으로만 제공하는 경우가 많다. 즉 사용자가 직접 패키징을 해서 성능을 검증해야 한다. 반면 특수하게 세라믹/에폭시 패키지를 응용하여 evaluation board를 제공하는 경우도 있지만 그리 많지는 않다.

 

 

 

 

'ARM+@' 카테고리의 다른 글

[D2] 2019.06.26  (0) 2019.06.26
용어 정리*개념정리  (0) 2019.06.25
[D1] 6.25 background 공부 및 준비  (0) 2019.06.25

Comment +0

공부 배경 공부 및 목표 수립

 

1. Background

임베디드 시스템은 3가지 개발단계로 나눌 수 있음. ( 더 나눌 수 있지만...)

1) 하드웨어 개발 : 회로단

2) 펌웨어 : 쉽게말해 하드웨어를 제어하는 소프트웨어라고 표현들 하지만 그런 수준의 개발이 워낙 세부적으로 많아서 정확히 파악이 안됨. 부트로더와 디바이스 드라이버를 포함하는지도 의문이고. 펌웨어와 디바이스 드라이버 개발을 따로 보기도 하던데...

기본적인 동작. 예를들어 카메라의 기본적인 캡쳐 및 데이터 전송동작정도가 될 듯 싶다.

3) 소프트웨어 : 임베디드소프트웨어도 있고 유저 애플리케이션이라는 표현도 있어 정확히 어느 범주로 묶을지 헷갈린다. 

 

 

2. 보유 키트 

H-SMART4412TKU (FPGA, ATMEGA128, Exynos 4412 - 쿼드코어 1.4기가헬쯔)

STM324F407 discovery board

라즈베리파이 3, 4

아두이노 각 시리즈 및 센서

atmega128 및 연결 센서

 

 

3. 공부방향

1) RISC(ARM)에 대한 아키텍처 이해와 디지털회로(VHDL) 학습

2) 전자회로 지식 - 회로도 기본보는 연습(CAD 따라하는 방법도 좋다고 한다)과 오실로스코프 공부(전자회로 이름 붙은 책을 탐닉)

3) 리눅스에 대한 공부. 나는 Loader, kernel, root image, ramdisk 쪽 동작만 보면 될듯(이부분은 커널공부로 할것)

4) 통신 프로토콜, I/O Model 공부 - 방법을 몰라 일단 보류

5) 마이컴 학습 - 이부분은 심도있게..주 공부 범위로

 

Part 2

6) 리눅스 커널 공부. 전체적인 흐름만 알면 된다고 함(추천책 Uinx kernel 완전분석으로 가는길)

7) 펌웨어 공부 - 부트로더 공부가 핵심이라고 한다. PC와 다르게 임베디드에선 중요한 파트. 

                      보통 부트로더를 자신의 시스템에 맞게 변경하므로, 부트로더를 미리 이해놓는 것이 중요.

   ◦ 프로세서 초기화 루틴

   ◦ 프로세서 동작 환경 설정 루틴

   ◦ 프로세서 동작 환경 검사 루틴

   ◦ 주변 디바이스 초기화 루틴

   ◦ 주변 디바이스 이상 유무 검사 루틴

 

 

 

4. 계획

6월 ~30일 :

[FPGA] VHDL 분주 및 시계 등의 기본 로직 작성(키트기반)

[ARM] PWM 이용, 기본적인 내부 제어 신호(CortexM4)

[펌웨어] 부트로더 쪽 이론 공부

          

 

7월 1일 - 7월 15일 : 

[FPGA] VHDL 기반 mini 프로젝트(하드웨어 제어, 회로 구성 등)

[ARM] 보드간 통신? 실습 생각중

[펌웨어] 리눅스 커널 소스 분석(컴파일 및 포팅경험은 이미 있음)

'ARM+@' 카테고리의 다른 글

[D2] 2019.06.26  (0) 2019.06.26
용어 정리*개념정리  (0) 2019.06.25
[D1] 6.25 background 공부 및 준비  (0) 2019.06.25

Comment +0