-
Notifications
You must be signed in to change notification settings - Fork 2
회의록
2018/9/14
기본적으로 프로젝트는 on-device-AI 어플리케이션 제작과 nnfw를 Tf Lite에 연결하는 작업을 두 축으로 동시에 진행하게 될 것
어플리케이션 제작은 모델 코딩, 학습, 실제 동작 확인의 과정으로 이루어질 것. visualization은 반드시 필요하지는 않음
프로젝트가 타이젠 기반이기 때문에 nnfw를 사용하는 것이 나아보임. 계기판 인식을 위한 학습을 새로 시켜야 하는데 nnfw는 이미 학습된 모델은 아닌지
- 담당자님 : 학습 모델이 일반적인 것이라 웬만큼 성능이 나오는 것으로 알고 있음. 일단 써서 인식률을 확인해봐야 할 것. 직접 학습 구조를 설계하는 것은 너무 어려운 작업
Tf Lite는 Tf에서 이미 학습된 모델을 가지고 동작
이미지 -> 설계된 모델이 포함된 Tf-> 학습된 모델 완성 -> Tf Lite에 그 모델을 넣으면 이를 기반으로 새로운 이미지 입력에 대해 판단
nnfw 자체로 모델을 만들어서 학습시킬 수 있음 -> nnfw만 사용할 것인지, Tf Lite와 연결해 쓸 것인지, Tf Lite만 쓸 것인지 결정해야 함.
cpu만 쓰는 것은 우리 프로젝트의 목적에서 벗어나는 것이므로 Tf Lite만 사용하는 것은 제외.
nnfw를 연결해서 gpu를 사용하도록 해야 함. nnfw와 텐서플로우 라이트는 별개임. nnfw가 Tf Lite와 독립적으로 동작함.
연결 부분은 회사에서 진행되고 있는 것이 있는지 정확히 알 필요가 있음.
만약 gpu를 쓴다면 nnfw를 쓸 수밖에 없는데, 지금 Tf Lite와 연결이 안 되어있다면 연결시키는 것이 가장 큰 프로젝트가 될 것임.
nnfw가 안드로이드 nn api의 헤더를 가져와서 동작하기 때문에 함수가 다 구현이 되어있고 그 이름만 같으면 Tf Lite가 부르는 오브젝트 이름을 바꿔주기만 하면 될 수도 있어서 의외로 간단할 수 있음. -> 담당자님은 Tf Lite의 수정이 없이 Tf Lite에서 부르기만 하면 되는 것으로 아는데 회사에 확인해 보시겠다고 하셨음.
우선 주말에 nnfw 부르는 것으로 시도해보면 좋을 것 같다
Tf Lite와 nnfw가 연결이 제대로 되었는지 어떻게 확인할 수 있는지?
- nn api가 없다고 나오지 않는다면 연결 된 것이라고 볼 수 있음. nnfw로 연결이 되었다는 것이 확인 된다면 gpu를 사용하고 있는 것임
기본적으로 Tf Lite와 타이젠의 nnfw로 테스트해서 연결 되는지 확인해보기. 안되면 연결할 수 있는 방법을 찾도록. 그것도 어려우면 Tf Lite 없이 nnfw만을 써서 할 수 있는 방법을 찾아본다.
사진을 입력으로 넣을 때 이미지 사이즈와 같은 형식을 맞춰주어야 하는데 그 부분을 어떻게 해야 할지
- Tf Lite를 사용하면 다른 사람이 만든 모델 중 적합한 것을 선택해서 사용하면 될 것
nnfw도 Tf Lite처럼 gbs로 빌드해서 rpm으로 올려서 쓰면 될 것.
nnfw와 Tf Lite를 연결한 뒤에는 최적화. 우리에게 필요한 코드만 남기고 정리하기. 코드 경량화 그 자체도 훌륭한 오픈소스가 됨.
어플리케이션 제작은 우선 CPU버전으로 돌아가는 뭔가를 만들면 될 것. 그 후에 수정해 나가도록
Tf Lite는 파이썬 지원하지 않는데 C++로 해야 하는지?
- 학습은 Tf에서 구현한 뒤 Tf Lite로 변환할 수 있으므로 이미지를 모델에 던져주는 부분만 C++로 구현하면 될 것.
역할분담
-
어플리케이션 박호준 조세현
-
nnfw 모준상 박영우 박지연 윤태규
2018/09/21 AI app | Tf Lite | nnfw | openCl armCl
Tf는 총 90개의 operator 존재. 어떤 operator를 호출하는지는 아무도 모름. Tf가 알아서 호출하는 것이기 때문에. nnfw가 없으면 90개 operator를 cpu를 통해서 씀. 안드로이드 nn이 있으면 안드로이드가 90개 오퍼레이터를 다 못 받아줌. 현재 안드로이드 nn은 31개까지 만들어짐. 타이젠 nn은 열 몇 개... 개발 중. Tf에서 학습시킨 결과물을 Tf Lite에서 써야함. 컨버터를 통해야 쓸 수 있음. 문제는 컨버터가 완벽하지 않음. Tf의 오퍼레이터들이 그대로 1대1로 컨버팅 되지 않음. 어떻게 컨버팅 되는지도 모름. 아래에서 지원되지 않는 오퍼레이터를 부르면 죽음. 앱에서 안쓰는 오퍼레이터 떼어내는 것...최적화 어떤 오퍼레이터를 쓰는지는 모름. 하나씩 해보면서 찾아야
일단 어플리케이션을 만들어야 최적화 가능?
오퍼레이터를 어떻게 쓰는지 안다면 텐서플로우는 필요 없음. 내가 앱 만들고 직접 오퍼레이터를 불러주면 됨. 인간이 어떻게 부르는게 최적인지 모르는 것 뿐. 우리가 그 모델을 못만들기 때문에 텐서플로우가 필요함. 지난주에 말한 부분.
armnn도 마찬가지. 위에 텐서든 카페든 위에 올라가야 사람이 쓸 수 있음.
간단한건 오퍼레이터 지정해서 사용할 수 있을 수도.
앱을 어떻게 할지 다시 고민해야 함. -> 앱은 아무거나 간단하게 만들 수 있음. 공개된 것을 올려놓을 수도 있고.
10월 초 중순 까지 이미지 클래시파이어를 구현하고 10월에 코드가 나오면 수정해보기? 지금도 수정해보는 연습 해볼 수 있음
오늘 이후로 바로 nnfw 타이젠 깃에 있는 것을 코싸 깃으로 옮겨서 공부. 각자 오퍼레이터 하나씩 잡아서 떼어 보기? 어떻게 하면 될지 공유해도 되고
원래 목적은 어플리케이션을 만들어서 이 것에 대한 nnfw를 최적화 시키는 것이 목표였는데 nnfw에서 사용되지 않는 오퍼레이터를 지우는 것이랑 어떻게 크게 다른 것인지? ->있는 오픈소스를 가지고 최적화 하는 것. 최적화 된 것을 보여주기 위해 앱이 필요한 것. 앱은 간단해도 됨. 그것에 대해 최적화 시켜보자는 것.
원래 목적은 특정 목적의 어플을 만드는 것이었는데 지금은 최적화 과정이 중요하다고 봐도 될지? 어떻게 오퍼레이터를 뺄 수 있는 지를 시도해보고 나중에 다른사람이 어떻게 최적화 할 수 있을지 가이드를 줄 수 있도록??
원래 있던 것에 배우면서 수정하고,..... 앱에 치중된 목표보다는 지금 목표가 더 좋은 것 같다. 오픈소스로써.
안드로이드 nnapi보면 오퍼레이션이라는 것이 있음. 연산들. 모델 로드. 안드로이드 nnapi 내부 구현은 공개 안되어 있지만 nnfw는....? 굳이 게이지를 학습시키는 모델을 만드는 것보다 이미 만들어진 모델을 가지고 앱을 만들어야 할 듯. nnfw를 만지기 전에. nnfw를 최적화 하는 것이 목표라면 어떤 앱을 사용하든 상관없으니까. 어플을 우선 만들고,..... nnfw는?
다음주까지 nnfw는 공부를 해봐야.
테스트하려면 어플을 빌드를 해야하는데 그게 어려움.
지금 아키텍처를 컴퓨터에서 armv7를 지정하고 푸시해 넣어야 함. 타이젠 샘플코드 찾아보면 간단한 앱들 많을 테니 그거 보면 웬만큼 할 수 있을 것. 스펙파일 만드는 것 다음주까지 ...
nnfw는 라이브러리니 gcc를 받아서 함수 불러보는?? 그래도 함수니까 프린트에프라도 할 수 있는거 아닌가??
다음 시간까지는 gcc g++ 올리고 ... nnfw살펴보기.
2018/10/5
연결이 되긴 할 것 같은데, nnapi가 tf에서 받은 것을 armcl로 전달하는 역할인데 nnapi의 오퍼레이션이 구현된 것이 7개인가 밖에 없음. 인셉션 v3만 돌아가게 해 놓아서?
흔적 남기기
tf 90개 nnapi 31개 타이젠 ??개... 우리가 추가해서 올릴겁니다.
nn model이 그래프 만드는 것인데 오퍼레이션 추가하는 부분이 있음. add operation. 스위치 문으로... 7개 정도 됨. 필수적인 것만 들어가 있음. 쉬운 것들 골라서 armcl로 전달만 해주면 될 듯.
model에서는 모델만 만들고 execution에서 armcl로 전달.
새로 추가한 오퍼레이션을 쓰는 앱을 만들면 좋을 것 같음.
모준상 : relu 박영우 : bias_add 박지연 : tanh 윤태규 : logistic(sigmoid)