基于VGG16的图像识别debug实例

因为数据城堡的猫狗比赛还能提交,当时kuhung夺冠时是0.98638分,现在已经有人满分了,这帮人很皮,有提交一次就满分的,显然是********哈哈。现在程序cpu上正在训练,这篇文章介绍下深度学习基本框架中容易报错的结构。
DC竞赛官网截的排名
在cpu上正在训练,很慢,大概算了下要800分钟,目前训练到了第三个epoch,acc在0.8左右,loss0.4,模型应该是效果还不错,至少到现在还不错吧。
使用的vgg16,结构展示下。
VGG16
flatten dense activation dropout pre层自己加,而且几乎是必加。
首先,数据集参数设置的时候数目一定要看对,输对哦。

train_data_dir = 'pad_data/train'
validation_data_dir = 'pad_data/validation'

nb_train_samples = 9425
nb_validation_samples = 3816
epochs = 40
batch_size = 32

callbacks=[]这里用的是三个,见仁见智。

callbacks = [
   #EarlyStopping(monitor='val_loss', patience= 3, verbose=0),
    keras.callbacks.ModelCheckpoint('cervical_best.hdf5', monitor='val_loss', save_best_only=True, verbose=0),
  #  LearningRateScheduler(step_decay)
    keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=1, verbose=1, mode='auto', epsilon=0.0001, cooldown=1, min_lr=0),
  #  keras.callbacks.TensorBoard(log_dir='./logs', histogram_freq=0, write_graph=True, write_images=False, embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None)
    keras.callbacks.TensorBoard(log_dir='./logs'),
  # batch_parms
  # plot_loss_callback
]

`训练用的fit_generator(),callback这里报错可能不太好改,如果实在改不了就更新下mplt,pillow等库的版本到最新

history = model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=40,
    validation_data=validation_generator,
    validation_steps=nb_validation_samples // batch_size,
    verbose=1,   
    #callbacks=None)
    callbacks=callbacks)
#callbacks=[batch_parms])

with open('history.txt','w') as f:
    f.write(str(history.history))
    
model.save_weights('training.h5')
model.save("vgg16_classification.h5")

预测部分使用cv预处理,针对最新版本的vgg和jupyter要加axis=0

#files = glob.glob("validation/P_NG/*")
files = glob.glob("pad_data/test/*jpg")
image_list = [] 
for f in files:
    print (f)
    image = cv2.imread(f)
    if  np.all(image ==None):  
        pass
    else:
        image = cv2.resize(image,(128,128))
        image = image/ 255.
        image = np.expand_dims(image,axis=0)
       # image_list.append(image)
        pre=model.predict(image, verbose=1, batch_size=32)
        #pre.append(f)
        print(pre)
        if pre[0][0]<pre[0][1]:
           image_list.append(f)
            
# image_list = np.array(image_list)
# predictions = model.predict(image_list, verbose=1, batch_size=32)
print(image_list)

以下是pre输出部分,用np稍微操作一下就可以了。
在这里插入图片描述
这个速度每张100ms左右还是不算快的,而且在识别领域没有加上ROI过程,如果加上之后还能有这个速度,那将是极好的。
中间算法和各个函数部分就不展示了,还是比较复杂的而且因人而异,参考yinjh也可以,但是想要做到满分还是要自己去尝试。

希望小老板都能摆脱人工智障,进入真AI领域。

猜你喜欢

转载自blog.csdn.net/qq_18998101/article/details/84729476