Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mobilenetv3 Keras error #44

Open
xellDart opened this issue Feb 28, 2022 · 6 comments
Open

Mobilenetv3 Keras error #44

xellDart opened this issue Feb 28, 2022 · 6 comments

Comments

@xellDart
Copy link

xellDart commented Feb 28, 2022

Hi, I try to convert model to nccn using Mobilenetv3Small, but I get this error

ERROR] Operator Rescaling not support.

{'name': 'rescaling', 'trainable': False, 'dtype': 'float32', 'scale': 0.00784313725490196, 'offset': -1.0}

Mi training code:

IMG_SIZE = 320 # All images will be resized to 160x160

def format_example(pair):
  image, label = pair['image'], pair['label']
  image = tf.cast(image, tf.float32)
  image = (image/127.5) - 1
  image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
  return image, label
IMG_SHAPE = (IMG_SIZE, IMG_SIZE, 3)

# Create the base model from the pre-trained model MobileNet V2
base_model = tf.keras.applications.MobileNetV3Small(input_shape=IMG_SHAPE,
                                               include_top=False,
                                               weights='imagenet')

global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
feature_batch_average = global_average_layer(feature_batch)

prediction_layer = tf.keras.layers.Dense(1)
prediction_batch = prediction_layer(feature_batch_average)

model = tf.keras.Sequential([
  base_model,
  global_average_layer,
  prediction_layer
])

base_learning_rate = 0.0001
model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=base_learning_rate),
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])

Model summary

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 MobilenetV3small (Functiona  (None, 13, 13, 576)      939120    
 l)                                                              
                                                                 
 global_average_pooling2d (G  (None, 576)              0         
 lobalAveragePooling2D)                                          
                                                                 
 dense (Dense)               (None, 1)                 577       
                                                                 
=================================================================
Total params: 939,697
Trainable params: 577
Non-trainable params: 939,120
_________________________________________________________________

model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              optimizer = tf.keras.optimizers.RMSprop(learning_rate=base_learning_rate/10),
              metrics=['accuracy'])

Another question, what is the correct mean - norm values for this model?

Thanks

@MarsTechHAN
Copy link
Owner

Let me see whether I can support that op. Can you attach your model h5df here?
For mean and norm, it should be 128 and 1/127.5

@xellDart
Copy link
Author

xellDart commented Mar 2, 2022

Thanks for your help..

This is the model: Keras model

I already train with same configuration for MobileNetv2,

tf.keras.applications.MobileNetV2(..) and with this version, all work !

Many thanks for your help and work!

@superbayes
Copy link

你看到你的模型输入形状是[N,H,W,C];
但是ncnn默认支持的是[N,C,H,W].
当使用ncnn推理时,你是如何解决输入形状的转换问题的?

@MarsTechHAN
Copy link
Owner

You can check the code, we do transpose on weight itself directly.

@MarsTechHAN
Copy link
Owner

Thanks for your help..

This is the model: Keras model

I already train with same configuration for MobileNetv2,

tf.keras.applications.MobileNetV2(..) and with this version, all work !

Many thanks for your help and work!

Sorry I got so busy recently. I will try to get it support soon. :p

@Sherlock-hh
Copy link

你看到你的模型输入形状是[N,H,W,C]; 但是ncnn默认支持的是[N,C,H,W]. 当使用ncnn推理时,你是如何解决输入形状的转换问题的?

你好,请问这个对模型的输出有影响吗?因为我看了ncnn mat是nchw的格式但是好像转出来的模型的输入层上显示依旧是nhwc,但是下面的其他层好像已经变成nchw了,我的模型现在无法输出正确结果issue,请问会和这个有关系吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants