05-08 11:44
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

안드로이드 on device learning 본문

머신러닝/딥러닝

안드로이드 on device learning

벤치마킹 2022. 2. 13. 02:24

안드로이드 단말의 성능이 향상되면서 요즘 관심있게 보고 있는 on device learning for android .

데모와 on device learning model generation 을 위한 tip을 정리 

1. 안드로이드 단말 내에서 학습할  model 생성 

-tensorflow keras API 를 활용해서 생성 (tensorflow 공식 예제)

    예전 tensorflow 예제가 더 구체적이며 practical 로 소개 

    mobileNetv2 avg pooling 입력 대신 FC layer 를 추가하는 형태

    모델 구성은 Fully connected layer 를 추가하는 방법은 각자 디자인 가능

    (7x7x 1280 ) ->  32 output 

    32 x 4 ,  총 4개의 output 을 softmax  하는 모델로 구성 

import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.regularizers import l2
from tfltransfer import bases
from tfltransfer import heads
from tfltransfer import optimizers
from tfltransfer.tflite_transfer_converter import TFLiteTransferConverter
import tensorflow.keras.backend as K

DEFAULT_BATCH_SIZE = 32

input_size = 224
output_size = 5

DEFAULT_INPUT_SIZE = 64
DEFAULT_BATCH_SIZE = 16
LEARNING_RATE = 0.001

def test_mobilenet_v2_saved_model():
    input_size = DEFAULT_INPUT_SIZE
    output_size = 4
    base = bases.MobileNetV2Base(image_size=input_size)

    head_model = tf.keras.Sequential([
        layers.Flatten(input_shape=(7, 7, 1280)),
        layers.Dropout(0.25),
        layers.Dense(
            units=32,
            activation='relu',
            kernel_regularizer=l2(0.01),
            bias_regularizer=l2(0.01)),
        layers.Dropout(0.25),
        layers.Dense(
            units=32,
            activation='relu',
            kernel_regularizer=l2(0.01),
            bias_regularizer=l2(0.01)),
        layers.Dense(
            units=4,
            activation='softmax',
            kernel_regularizer=l2(0.01),
            bias_regularizer=l2(0.01)),
    ])

    head_model.compile(loss="categorical_crossentropy", optimizer="sgd")
    converter = TFLiteTransferConverter(
        output_size, base, heads.KerasModelHead(head_model),
        optimizers.SGD(LEARNING_RATE), DEFAULT_BATCH_SIZE)

    models = converter.convert_and_save('custom_keras_on_device_model')
    models = converter._convert()

test_mobilenet_v2_saved_model()

    이렇게 생성된 모델을 android tensorflow personalization 으로 동작 시키면 에러가 발생 

    그래서 gradle 파일에 아래 tf-ops 을 추가  

implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'

 

결론은 FC layer 2 개는 trainable 한 layer 로 weight , bias 업데이트

 

 

Comments