重新培训与Tensorflow.js一起使用的MobileNet的几种方法对我来说都是失败的。有没有办法在Tensorflow.js中使用重新训练的模型?
使用现代的,基于中心的教程以及使用两者retrain.py似乎都失败了。
以及其他一些未解决的问题
另外两个最重要的问题显示了在两种情况下均失败的代码,均未解决。
目的是加载移动网络,使用自定义数据进行重新训练,然后在Tensorflow.js中使用它。遵循这两个教程似乎都失败了。可以在node.js内部完成吗?还有另一种方法吗?我在哪里犯了错误(或者该软件无法使用经过重新训练的模型)?这怎么工作?
编辑:最新的github问题和另一个问题
我正在尝试使用 Tensorflow 2.5.0 在 MobileNetV3-Small 上进行迁移学习来预测狗品种(133 个类别),并且由于它在 ImageNet 数据集(1000 个类别)上获得了合理的准确性,我认为它应该没有问题适应我的问题。
我尝试了多种训练变化,最近取得了突破,但现在我的训练停滞在大约 60% 的验证准确度,验证损失略有波动(下面是训练和验证的准确度和损失曲线)。
我尝试ReduceLROnPlateau在下面的第三张图中使用,但这对改善问题没有帮助。谁能建议我如何改进培训?
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
from tensorflow.keras.layers import GlobalMaxPooling2D, Dense, Dropout, BatchNormalization
from tensorflow.keras.applications import MobileNetV3Large, MobileNetV3Small
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True # needed for working with this dataset
# define generators
train_datagen = ImageDataGenerator(vertical_flip=True, horizontal_flip=True,
rescale=1.0/255, brightness_range=[0.5, 1.5],
zoom_range=[0.5, 1.5], rotation_range=90)
test_datagen = ImageDataGenerator(rescale=1.0/255)
train_gen = train_datagen.flow_from_directory(train_dir, target_size=(224,224),
batch_size=32, …Run Code Online (Sandbox Code Playgroud) 这是有关 MobileNet V3 的论文的链接。
根据论文,在 MobileNet V3 中实现了 h-swish 和 Squeeze-and-excitation 模块,但它们旨在提高准确性,并无助于提高速度。
h-swish 比 swish 更快,有助于提高准确性,但如果我没记错的话,它比 ReLU 慢得多。
SE 也有助于提高准确性,但它增加了网络的参数数量。
我错过了什么吗?我仍然不知道在 V3 中实现上述内容后,MobileNet V3 如何比 V2 更快。
我没有提到他们还修改了他们网络的最后一部分,因为我计划使用 MobileNet V3 作为主干网络并将其与 SSD 层结合用于检测目的,因此网络的最后一部分不会用过的。
下表可以在上面提到的论文中找到,表明 V3 仍然比 V2 快。
我是 pyTorch 的新手,我正在尝试创建一个分类器,其中我有大约 10 种图像文件夹数据集,为此我使用的是预训练模型(MobileNet_v2),但问题是我无法更改它的 FC 层. 没有model.fc 属性。谁能帮我做到这一点。谢谢
classification deep-learning pre-trained-model pytorch mobilenet
我最近在查看 TensorFlow 2.0 检测动物园,发现了SSD MobileNet V2 FPNLite 320x320预训练模型,并且想知道“FPNLite”中的 FPN 部分意味着/代表什么。
我已经使用自定义数据集(电池)训练了SSD Mobilenet模型。电池的示例图像在下面给出,并且还附带了我用来训练模型的配置文件。
当物体离摄像机更近(通过网络摄像头测试)时,它可以以0.95以上的概率准确地检测到物体,但是当我将物体移到更长的距离时,它不会被检测到。通过调试,发现该对象被检测到,但概率较低,为0.35。最小阈值设置为0.5。如果将阈值0.5更改为0.2,则将检测到对象,但是会有更多的错误检测。
参照此链接,SSD对于小物体的性能不佳,替代解决方案是使用FasterRCNN,但该模型的实时性非常慢。我也希望使用SSD从更长的距离检测电池。
请帮我以下
solid-state-drive object-detection tensorflow object-detection-api mobilenet
当我尝试保存我的 MobileNet 模型时出现此错误。
Traceback (most recent call last): File "../src/script.py", line 150, in <module> callbacks=[cb_checkpointer, cb_early_stopper] File "/opt/conda/lib/python3.6/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs) File "/opt/conda/lib/python3.6/site-packages/keras/engine/training.py", line 1418, in fit_generator
initial_epoch=initial_epoch) File "/opt/conda/lib/python3.6/site-packages/keras/engine/training_generator.py", line 264, in fit_generator
callbacks.on_train_end() File "/opt/conda/lib/python3.6/site-packages/keras/callbacks.py", line 142, in on_train_end callback.on_train_end(logs) File "/opt/conda/lib/python3.6/site-packages/tensorflow/python/keras/callbacks.py", line 940, in on_train_end
if self.model._ckpt_saved_epoch is not None: AttributeError: 'Sequential' object has no attribute '_ckpt_saved_epoch'
Run Code Online (Sandbox Code Playgroud)
我正在使用回调进行保存:
filepath="weights-improvement-{epoch:02d}-{val_acc:.2f}.hdf5"
cb_early_stopper = EarlyStopping(monitor = 'val_loss', mode='min', verbose=1, patience = EARLY_STOP_PATIENCE)
cb_checkpointer = ModelCheckpoint(filepath = …Run Code Online (Sandbox Code Playgroud) deep-learning conv-neural-network keras tensorflow mobilenet
我正在研究一种迁移学习方法,并且在使用 MobileNetV2keras.applications和 TensorFlow Hub 上的 MobileNetV2 时得到了截然不同的结果。这对我来说似乎很奇怪,因为两个版本都声称这里和这里从同一检查点mobilenet_v2_1.0_224提取它们的权重。这就是重现差异的方法,您可以在此处找到 Colab Notebook :
!pip install tensorflow-gpu==2.1.0
import tensorflow as tf
import numpy as np
import tensorflow_hub as hub
from tensorflow.keras.applications.mobilenet_v2 import MobileNetV2
def create_model_keras():
image_input = tf.keras.Input(shape=(224, 224, 3))
out = MobileNetV2(input_shape=(224, 224, 3),
include_top=True)(image_input)
model = tf.keras.models.Model(inputs=image_input, outputs=out)
model.compile(optimizer='adam', loss=["categorical_crossentropy"])
return model
def create_model_tf():
image_input = tf.keras.Input(shape=(224, 224 ,3))
out = hub.KerasLayer("https://tfhub.dev/google/tf2-preview/mobilenet_v2/classification/4",
input_shape=(224, 224, 3))(image_input)
model = tf.keras.models.Model(inputs=image_input, outputs=out)
model.compile(optimizer='adam', loss=["categorical_crossentropy"])
return model …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用他们的教程将我自己的自定义图像数据集塑造成 Tensorflow 上预训练 MobileNet 模型的正确输入形状。我的代码:
batch_size = 256
epochs = 15
IMG_HEIGHT = 160
IMG_WIDTH = 160
BATCH_SIZE = 256
SHUFFLE_BUFFER_SIZE = 1000
traindir = pathlib.Path('/train')
valdir = pathlib.Path('/validation')
list_ds = tf.data.Dataset.list_files(str(traindir/'*/*'))
val_list_ds = tf.data.Dataset.list_files(str(valdir/'*/*'))
CLASS_NAMES = np.array([item.name for item in valdir.glob('*') if item.name != "LICENSE.txt"])
def get_label(file_path):
# convert the path to a list of path components
parts = tf.strings.split(file_path, os.path.sep)
# The second to last is the class-directory
return parts[-2] == CLASS_NAMES
def decode_img(img):
# convert the …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 ssd mobilenetv2 从 ipcam 视频流中检测小物体。该模型是在这些小物体的高分辨率图像上训练的,其中物体非常靠近相机。图像是从互联网上下载的。我发现改变锚箱比例和修改特征提取器.py 是解决这个问题的建议解决方案。谁能指导我如何做到这一点?