Skip to content

Latest commit

 

History

History
74 lines (66 loc) · 6.3 KB

File metadata and controls

74 lines (66 loc) · 6.3 KB

yolov4-tflite-CUSTOM-android-app

  • Real-Time CUSTOM detection android app with yolov4 and tensorflow_lite
  • Referenced from here

KOREAN GUIDELINES

Introduction

  • Object Detection을 단순히 분류하자면, 모든 것을 한 번에 처리하는 yolo와 파이프라인을 거쳐서 동작하는 faster-RCNN 등이 있을 것입니다. 때문에 Yolo는 비교적 빠른 속도로 인식이 가능한 대신, 선형적인 모양이나 국부적인 패턴 등을 인식하는 데 한계가 있습니다. 반면 RCNN의 경우 매우 세부적인 형태까지 detecting하는 것이 가능합니다.
  • 이 레포지토리는 tensorflow를 이용하여 darknet을 통해 스스로 학습한 yolo weights로 yolo-v4를 사용해 detecting하는 안드로이드 애플리케이션을 만드는 과정을 다룹니다. 각자 다양한 데이터를 학습시켜 필요에 맞는 애플리케이션을 제작하는데 큰 도움이 되리라 생각합니다.

이 레포지토리를 빌드하여 다음을 얻을 수 있음:

  • 자신이 원하는 카테고리의 object detection용 yolo weight
  • 해당 yolo weight와 tensorflow로 작동하는 yolov4 알고리즘 코드
  • 해당 yolo weight을 사용하여 실시간 사물인식을 시행하는 안드로이드 앱
  • 내장되어있는 assets에 다음과 같은 모델들이 현 레포지토리에 올라와있음:
    • 오바마와 오바마가 아닌 '사람들'을 구분하는 모델 (Obama vs Person)
    • 전반적인 일상생활의 물건들을 인식하는 yolo 기본 모델 (coco)

Requirements

이 프로젝트를 수행하기 위해서는 다음의 조건이 필요하거나, 권장됩니다.

How To Use (A_to_Z)

1. YOLO 데이터셋 생성

  • 인식시키고자 하는 이미지 데이터를 준비합니다. (최소 10장 이상을 권장)
  • Roboflow에 접속하여, 새 프로젝트를 생성합니다.
  • 이미지를 업로드하고, 가이드라인에 따라 원하는 영역에 blob박스를 표시한 뒤 레이블을 설정합니다. 여러 이미지를 업로드 하여 다양한 레이블을 넣어도 좋습니다.
  • 데이터를 생성하고, export합니다. 이때, Format : YOLO Darknet, show download code 으로 export하여 받은 코드를 저장해둡니다.
  • 2~4는 Mobile_Object_Detection.ipynb에서 진행됩니다. GPU 사용이 있으므로 Google Colab을 사용하는 것을 권장합니다. 학습 이미지 데이터에 따라 장시간 소요될 수 있습니다.
  • 이때 Colab에서 그날 할당 받은 GPU 카드가 Tesla K80일 경우, 이 과정이 원활하지 않을 수 있습니다. Tesla T4 등급 이상의 GPU 카드를 할당받았을 때 진행하기를 권장합니다. (이 때문에 무료 Colab을 사용한다면 어떤 날은 해당 프로젝트를 진행하지 못할 수 있음.)

2. Yolov4 tiny darknet 학습

  • 레포지토리 복사
git clone https://github.com/skykongkong8/yolov4-tflite-CUSTOM-android-app.git
  • Configure CUDA on Colab for YOLOv4
  • Install Darknet for YOLOv4 on Colab
  • Configure from custom Darknet
  • Write custom training config for YOLOv4
  • Train custom YOLOv4 Detector
  • Infer custom objects with saved yolov4 wegiths

3. Darknet 프레임워크 모델을 tensorflow lite모델로 전환

  • Install tensorflow
  • 중요! convert 하기 이전에, !pip install tensorflow==2.3.0rc0을 통해 tensorflow버전을 바꿔주어야 합니다. 그렇지 않으면 mutable-object를 처리할 수 없다는 에러가 나옵니다.
  • Convert

4. tensorflow lite 모델 저장

  • 저장 후, 자신에 구글 드라이브에 다운로드된 .tflite 파일과, _darknet.labels 파일을 복제해둡니다.
  • 오류가 발생하면, 처음부터 다시 한 번 실행해 보세요.

5. demo android 앱 생성

  • android 디렉토리를 Android Studio로 엽니다. (이때, 앱을 사용할 Android SDK Level과 프로젝트에서 빌드할 Level이 서로 호환되는지 반드시 확인하세요.)
  • app > src > main > assets 에 아까 복제해두었던 .tflite 파일과 ._darknet.lavels 파일을 저장합니다.
  • app > src > main > java > DetectorActivity와 같은 경로의 CameraActivity 에서, 사용할 yolo weights와 label을 다음과 같이 수정하여 지정합니다.
TF_OD_API_MODEL_FILE = "your-yolov4-tiny-weight.tflite";
TF_OD_API_LABELS_FILE = "file:///android_asset/_darknet.labels";
  • app > src > main > java > tflite > YoloV4Classifier 에서 다음과 같이 수정합니다.
isTiny = true;
  • 앱을 빌드하고, 핸드폰과 연결하여 RUN 합니다.

Model Development History

Roboflow에서 직접 이미지 데이터를 처리하여 생성하여야 하기 때문에, 결과적으로 어떤 성능을 낼 것인지는 직접 앱에 모델을 넣어서 실행시켜보고, 육안으로 테스트해가면서 보정하였습니다. 또한, Roboflow 내부의 Dataset HealthCheck 도 일정 부분 참고하였습니다.

  • model#416,417 : 오로지 오바마만 학습 -> 모든 사람 얼굴 형태를 오바마로 인식함.
  • model#418 : 너무 다른 잡다한 레이블과 함께 학습 -> 과도한 런타임과 학습시간으로 (12시간 초과) 현재의 개발환경에서 모델 만들기 무리.
  • model#419 : 오바마가 연설이나 기자에 나온 사진만을 학습 -> 독사진이나, 확대하여 가까이 보여주면 전부 오바마로 인식함.
  • model#420 : 오바마에 대한 민감도가 너무 떨어짐. person 대비 오바마 학습 데이터가 너무 부진함.
  • model#421 : 420 모델에서 오바마 사진을 더 학습시켜서, 다양한 화각, 이미지 구성, 포지션을 고려함. 이미지 전처리 과정에서 Grayscale, 이미지 휘도, 회전각 등 다양한 이미지를 재생성하여 학습. 이로 인해 다른 사람들과 함께 있ㄷ라도 오바마만을 오바마로 골라서 인식하는 능력이 향상됨.
    • 이는 유의미한 학습결과로 추후 더 좋은 개발 환경에서 더 많은 데이터를 학습한다면 개선할 것으로 기대됨.