我在对训练前的一系列操作(标记样本,转txt等)完成之后,开始训练时,提示下面的错误,如下图:
我看了这篇博客:https://blog.csdn.net/qq_25680531/article/details/79919813
上面说数据问题会引起这种情况,我回去又检查了一遍我的训练数据txt,没有问题。所以最有效的方式还是回去看源码是哪出了问题,在路径../darknet/src/data.c下,找到函数如下图:
我发现里面图像有jpg、png格式的图片,没有bmp,而我用的恰恰是bmp格式的图片,所以说就读不出图像啊。
此时可对代码进行修改,要么依照上面内容添加一行find_replace(labelpath,"bmp","txt",labelpath);代码,要么把bmp改成jpg格式。两种都行,看个人喜好。对于使用bmp转jpg的同学,附带下面python代码:
import cv2
imgnames = open('path.txt')#path.txt是你的图片路径
for f in imgnames:
path = f.strip()
img = cv2.imread(path)
cv2.imwrite(path.replace('orig', 'Images').replace('bmp', 'jpg'), img)
说明:上面代码是我在ubuntu上面跑的,如果在windows下pycharm上面跑的话,把代码(除了头文件import cv2)放在main函数里运行即可。另外,我的path.txt里面的内容为这种格式:
自己使用shell脚本,或者别的python脚本生成图片路径保存为txt即可。
另外,如果你修改完代码仍然没有训练成功,可以在data.c文件中搜索find_replace,查看data.c文件中与find_replace相关的函数,逐一对照。我使用的bmp转jpg的方法,然后训练成功:
####
####