keras Faster RCNN运行指南:measure_map.py运行踩坑记录
源码地址:https://github.com/moyiliyi/keras-faster-rcnn操作系统:win10
版本:python3.6
tensorflow-GPU:1.4.0
keras:2.0.8
一、‘gbk’ codec can’t decode byte 0x80 in position 0: illegal multibyte sequence
错误原因:是在打开文件时,缺少读写方式:‘gbk格式不能解码为byte格式’。
查看train_frcnn.py文件,发现如下代码:
with open(config_output_filename, 'wb') as config_f:
pickle.dump(C,config_f)
print('Config has been written to {}, and can be loaded when testing to ensure correct results'.format(config_output_filename))
说明当时文件的写格式为’wb’,子节写入,因此读取的时候应该使用’rb’,将measure_map.py文件的代码更改如下:
# 原本代码
# with open(config_output_filename, 'r') as f_in:
# C = pickle.load(f_in)
# 更改代码
with open(config_output_filename, 'rb') as f_in:
C = pickle.load(f_in)
二、AttributeError: ‘dict’ object has no attribute ‘iteritems’
错误原因:python3中已经没有 “iteritems” 这个属性了,现在属性是:“ items ”
将measure_map.py文件的代码更改如下:
# 原本代码
# class_mapping = {v: k for k, v in class_mapping.iteritems()}
# 更改代码
class_mapping = {v: k for k, v in class_mapping.items()}
三、Dimension 0 in both shapes must be equal, but are 50176 and 25088 for ‘Assign_32’ (op: ‘Assign’) with input shapes: [50176,4096], [25088,4096].
错误原因:读取权重文件时,维度出现错误。
原本的维度定义如下:
if K.image_dim_ordering() == 'th':
input_shape_img = (3, None, None)
input_shape_features = (1024, None, None)
else:
input_shape_img = (None, None, 3)
input_shape_features = (None, None, 1024)
查看test_frcnn.py的维度发现相关的代码如下:
if C.network == 'resnet50':
num_features = 1024
elif C.network == 'vgg':
num_features = 512
elif C.network == 'resnet101':
num_features = 1024
if K.image_dim_ordering() == 'th':
input_shape_img = (3, None, None)
input_shape_features = (num_features, None, None)
else:
input_shape_img = (None, None, 3)
input_shape_features = (None, None, num_features)
因此,将test_frcnn.py的定义维度复制至measure_map.py中
总结
运行结果:
67/72
Elapsed time = 0.17702388763427734
WBC AP: 0.9634518319270325
RBC AP: 0.5752598325381668
Platelets AP: 1.0
mAP = 0.8462372214883999
68/72
Elapsed time = 0.1734302043914795
WBC AP: 0.9644857975646426
RBC AP: 0.5812936720502682
Platelets AP: 1.0
mAP = 0.8485931565383037
69/72
Elapsed time = 0.17720556259155273
WBC AP: 0.9655211317039377
RBC AP: 0.5854431393394979
Platelets AP: 1.0
mAP = 0.8503214236811453
70/72
Elapsed time = 0.1756725311279297
WBC AP: 0.9641980330898835
RBC AP: 0.5884707541399588
Platelets AP: 1.0
mAP = 0.8508895957432808
71/72
Elapsed time = 0.18023467063903809
WBC AP: 0.9628516784229479
RBC AP: 0.5905654471743809
Platelets AP: 1.0
mAP = 0.8511390418657762
Process finished with exit code 0