我使用vgg 16作为特征提取方法,但是我的老师要求高召回率。(90%-95%)。我将解释我的数据集,我的数据是雾天交通标志的标记视频(它们被标记为可见、不可见生存能力差)我从视频中提取帧作为图像,并将数据随机存储在training & test/瓦尔文件夹中我正在尝试应用深度学习来对图像进行分类。正如你所看到的,我的模型做得很好,但不是很好。我不能从我的老师那里得到更多的视频。
- 我怎么可能改进我的模型?
- 我可以向我的模型添加更多层吗?
- 我可以将基于特征提取模型提供给我创建的conv 2d模型吗?
- 我可以将从vgg 16中提取的提要特征应用到迁移学习中吗?
- 我如何将特征提取vgg 16输入svm?
BATCH = 50
IMG_WIDTH = 224
IMG_HEIGHT = 224
from keras.applications import VGG16
conv_base = VGG16(weights='imagenet',
include_top=False,
input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)) # This is the Size of the image
conv_base.trainable= False
datagen = ImageDataGenerator(rescale=1.0/255.0
# ,brightness_range=(1,1.5),
# zoom_range=0.1,
# rotation_range=45,
# horizontal_flip=True,
# vertical_flip=True,
)
train = datagen.flow_from_directory(train_path
,class_mode='categorical'
,batch_size = BATCH
,target_size=(IMG_HEIGHT, IMG_WIDTH))
#test data val = datagen.flow_from_directory(val_path
,class_mode='categorical'
,batch_size = BATCH
,target_size=(IMG_HEIGHT, IMG_WIDTH))
model = tf.keras.models.Sequential()
#We now add the vggModel directly to our new model
model.add(conv_base)
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(129, activation='relu'))
model.add(tf.keras.layers.Dropout((0.5)))
model.add(tf.keras.layers.Dense(5, activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001)
,loss='categorical_crossentropy'
, metrics=["accuracy",
tf.keras.metrics.Precision(),
tf.keras.metrics.Recall()]
)
early_stopping = EarlyStopping(monitor='val_loss'
,patience=2
)
history_1 = model.fit(train
,validation_data=val
,epochs=10
,steps_per_epoch=len(train)
,validation_steps=len(val)
,verbose=1
,callbacks =[early_stopping]
)
Training loss : 0.5572120547294617
Training accuracy : 0.8088889122009277
Training precision: 0.9959514141082764
Training recall: 0.437333345413208
Test loss : 0.5427007079124451
Test accuracy : 0.8233333230018616
Test precision: 1.0
Test recall: 0.44333332777023315
2条答案
按热度按时间os8fio9y1#
识别率取决于许多变量,不仅是图像的噪声,当我们的识别率达到80%时,我们还使用了一些信息来进行识别。你谈到了交通标志和雾天图像,当你是当地人和外国人时,他们已经很好地识别了图像标志,你有一本驾驶指导手册。
该模型没有指定,我使用一个小的简单模型与相机输入工作,我使用网格和多个输出作为一个序列,以帮助确定标签的输入作为对象1包含在{ P(对象|网格1)、P(对象|网格2)、P(对象|网格3)...}
这取决于你的应用实践,输入相机没有太多的信息相比,你可能会尝试级联模型或分辨率提取值的变化,VGG 16是一系列的卷积层和concat路径是你的应用程序在它上面。我只使用了几个密集层与卷积层,这是因为我的输入图像很小。
答案相同,卷积层是提取函数,但您可以通过时间相关函数转换信息,这些函数不限于与声音或频率一起使用,例如MFCC特征提取,作为识别率、掩蔽符号或模型级联的扩展信息。
上面的答案也是一样的。
同样的答案VGG 16是卷积层,您可以使用级联模型或级联输入。
示例:工作模板,多情节动画是操作系统响应反馈之一,它不需要时间流逝。
输出:简单的摄像头和对象检测,我写了简单的代码与一个小模型(没有对象检测API),有更多的例子x1c 0d1x
j2datikz2#
你说
从这里我假设你有3个类。2但是在你的模型中你有代码
which implies you have 5 classes?
In model.fit you have the code
in your generators you set the batch size to 50. in which case you should have
steps_per_epoch =int(len(train/50) and validation_steps=int(len(val/50)
You are using the early stopping callback but you should add the parameter
This way your model will be set to the weights for the epoch with the lowest validation loss. I also recommend you use the Keras callback ReduceLROnPlateau. Documentation is here. my recommended code for this callback is:
In model.fit change callbacks to callbacks=[[early_stopping, rlronp]
Also run for more epochs