keras Faster RCNN运行指南:measure_map.py运行踩坑记录

本文档记录了在Windows 10环境下,使用Python 3.6、Tensorflow-GPU 1.4.0和Keras 2.0.8运行keras-faster-rcnn项目时遇到的编码、属性和维度错误,并提供了详细的解决方案。通过修改文件编码方式、适配Python3的dict属性和调整网络输入尺寸,成功运行并展示了mAP计算过程。
摘要由CSDN通过智能技术生成

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

这个错误可能是由于`keras_frcnn`包中没有`metrics`模块导致的。为此,你可以尝试使用`keras_frcnn.metrics`代替`from keras_frcnn import metrics as metrics_fn`,并修改`class_acc`和`mean_overlapping_bboxes`为`keras_frcnn.metrics.class_acc`和`keras_frcnn.metrics.mean_overlapping_bboxes`。修改后的代码如下: ``` from keras.models import Model from keras_frcnn import config, data_generators from keras_frcnn import losses as losses_fn from keras_frcnn import metrics from keras.models import load_model # 加载模型配置 config_output_filename = "config.pickle" with open(config_output_filename, "rb") as f_in: C = pickle.load(f_in) # 创建数据生成器 test_imgs, _, _ = data_generators.get_data( C, C.test_path, mode='test' ) test_gen = data_generators.get_anchor_gt( test_imgs, C, mode='test' ) # 加载模型 model_path = "model_frcnn.hdf5" model = load_model(model_path, custom_objects={ "rpn_loss_cls": losses_fn.rpn_loss_cls, "rpn_loss_regr": losses_fn.rpn_loss_regr, "class_loss_cls": losses_fn.class_loss_cls, "class_loss_regr": losses_fn.class_loss_regr, "class_acc": metrics.class_acc, "mean_overlapping_bboxes": metrics.mean_overlapping_bboxes }) # 评估模型性能 X, Y, image_data, debug_img, debug_num_pos = next(test_gen) result = model.evaluate(X, Y) # 打印性能指标 print("Losses: ", result) print("Classification accuracy: ", result[1]) print("Classification loss: ", result[2]) print("Regression loss: ", result[3]) ``` 如果还有其他问题,请告诉我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值