【python】由os.listdir导致的惨案

最近在在自己的数据集上跑一些目标检测的网络,所以需要把数据集处理成符合网络输入的格式。其中一个网络是要将图片的真值标签按照图片的顺序写入json文件,我的数据集图片名称为0.jpg、1.jpg、2.jpg……,标签文件为0.txt、1.txt、2.txt……,然后用os.listdir读取标签文件夹下的所有文件,对应的图片序号我当时直接for循环里每次加1得到(这就导致标签和图片不对应了)。最终生成的json文件中标签和图片的对应变成了:

标签 图片
0.txt 0.txt
1.txt 1.txt
10.txt 2.txt
100.txt 3.txt
1000.txt 4.txt

当我用这样的标签训练完网络后在测试集上测试时,检测出的目标非常混乱,完全没有目标的地方也判断为了目标,然后倒回来查看数据集的时候才发现了问题所在。在原本os.listdir后增加了排序的一行代码,这样标签和图片就可以对应上了。

    ann_list = os.listdir(ann_root)
    ann_list.sort(key=lambda x: int(x[:-4]))  ### 新加的,否则写入json的文件顺序为0、1、10、100、1000.。。

血的教训啊,以后用os.listdir的时候一定要小心!!!

猜你喜欢

转载自blog.csdn.net/zylooooooooong/article/details/121262963