在上一篇博客《(更新视频教程)Tensorflow object detection API 搭建属于自己的物体识别模型(2)——训练并使用自己的模型》中,有很多读者提出各种问题,也有不少热心读者在评论区进行了讨论,为了方便读者查询及备忘,现把部分问题及解决方案更新到这个博客,不定期更新新的解决方案。
建议 Ctrl + F 在页面内搜索问题。
如果对问题有新的更好的解决方案欢迎留言。
Q:Image size must contain 3 elements.
图片大小必须包括3元素
A:图片不是标准的RGB3通道图片,把图片转化成标准的RGB格式或者删除有问题的图片。
如果目录下有很多图片,可以用下面的命令来检查哪些图片不是标准RGB格式:
from PIL import Image
import os
path = '/Users/lyz/Desktop/dataset/images/' #图片目录
for file in os.listdir(path):
extension = file.split('.')[-1]
if extension == 'jpg':
fileLoc = path+file
img = Image.open(fileLoc)
if img.mode != 'RGB':
print(file+', '+img.mode)
Q: 提取frozen_inference_graph.pb 这一文件时,出现了数据类型错误
TypeError: x and y must have the same dtype, got tf.float32 != tf.int32
A:在 post_processing_builder.py 文件中,修改下面这个函数:
def _score_converter_fn_with_logit_scale(tf_score_converter_fn, logit_scale):
"""Create a function to scale logits then apply a Tensorflow function."""
def score_converter_fn(logits):
cr = logit_scale
cr = tf.constant([[cr]],tf.float32)
print(logit_scale)
print(logits)
scaled_logits = tf.divide(logits, cr, name='scale_logits') #change logit_scale
return tf_score_converter_fn(scaled_logits, name='convert_scores')
score_converter_fn.__name__ = '%s_with_logit_scale' % (
tf_score_converter_fn.__name__)
return score_converter_fn
Q:输出图片失真,偏蓝色
A:opencv的输出imwrite函数参数调整,输出标准RGB格式。
保存图片变蓝的请在最后一步的程序里在
plt.imshow(image_np)
前加上
image_np = cv2.cvtColor(image_np, cv2.COLOR_RGB2BGR)
Q:能否识别中文的标签?
A:没有测试过,可以试试在训练文件里标注中文。
Q:训练过程中被打断,报错提示
Invalid GIF data, size 247023
A:GIF 文件过大,不支持格式。(小的GIF是否支持我不清楚,请测试过的读者告知)
Q:训练正常,但是效果很差。
A:
1、迭代次数不够,默认设置200000次,在Tensorboard中查看,Loss趋于稳定后差不多可以结束训练;
2、训练数据少,理论上讲,训练、测试数据数量越多、数据质量约好,效果越好;