在coco数据集上无法得到anchors
zqdeepbluesky opened this issue · 5 comments
hi,@lars76
你好,好久不见,我最近想在coco数据集上进行训练和测试。我把coco的annotations格式制作成xml的格式,xml的格式如下:
-<annotation>
<folder>1</folder>
<filename>COCO_train2014_000000000036.jpg</filename>
-<source>
<database>CKdemo</database>
<annotation>VOC</annotation>
<image>CK</image>
</source>
-<size>
<width>481</width>
<height>640</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
-<object>
<name>person</name>
<pose/>
<truncated>0</truncated>
<difficult>0</difficult>
-<bndbox>
<xmin>167</xmin>
<ymin>162</ymin>
<xmax>478</xmax>
<ymax>628</ymax>
</bndbox>
</object>
</annotation>
然后我使用你提供的k-means代码进行聚类,但是我得到了如下的错误:
dxt@dxt-System-Product-Name:~/kmeans-anchor-boxes-master$ python example.py
Traceback (most recent call last):
File "example.py", line 32, in
out = kmeans(data, k=CLUSTERS)
File "/home/dxt/kmeans-anchor-boxes-master/kmeans.py", line 68, in kmeans
distances[row] = 1 - iou(boxes[row], clusters)
File "/home/dxt/kmeans-anchor-boxes-master/kmeans.py", line 14, in iou
raise ValueError("Box has no area")
ValueError: Box has no area
然而我不清楚我的xml格式是哪地方出现的错误,我对比了一下我和voc的xml文件,不过还是没能找到问题,你能帮帮我吗?万分感谢,祝你生活愉快。
对了还有下面这一句话是什么意思,你能告诉我吗,谢谢啦。
x = np.minimum(clusters[:, 0], box[0])
y = np.minimum(clusters[:, 1], box[1])
if np.count_nonzero(x == 0) > 0 or np.count_nonzero(y == 0) > 0:
raise ValueError("Box has no area")
非常抱歉打扰你,我发现问题了,原因是我没有在python3下运行这个代码,而是在python2中运行的,所以出现了错误,再次谢谢你的代码,真的写的非常棒,祝你身体健康。
hi,我发现就是换成了python3还是出现了这个问题,我感觉可能是我的数据集制作的有问题,所以还是想请问下这句话是什么意思:
x = np.minimum(clusters[:, 0], box[0])
y = np.minimum(clusters[:, 1], box[1])
if np.count_nonzero(x == 0) > 0 or np.count_nonzero(y == 0) > 0:
raise ValueError("Box has no area")
可不可以当遇到不符合上述语句的xml文件时,把那个文件跳过去。或者指出是哪个xml文件出问题了?因为coco数据集太大了,无法一张一张的找出来是哪个xml文件出问题了。你能指点我一下吗?谢谢啦。
Hi, to calculate the IoU I'm using the formula min(width_box_1, width_box_2) * min(height_box_1, height_box_2). This means when either of the terms is zero, then the area of the box will be 0. Thus, np.count_nonzero(x == 0) > 0 will check if the amount of zeros is > 0.
So indeed there is a problem with some xml file. You can find the wrong xml file by adding in example.py the line: if xmax - xmin <= 0 or ymax - ymin <= 0: print(xml_file). Alternatively, just remove the raise ValueError line. If there are so many xml files, a few invalid xml files won't make a difference.
hi,非常感谢你的帮助,我现在可以在coco数据集上进行聚类了,我使用的是你提供的第二种方法,也就是提高valueerror,我修改了以下代码:
if np.count_nonzero(x == 0) > 100 or np.count_nonzero(y == 0) > 100:
raise ValueError("Box has no area")
然后就可以聚类了。
真的非常感谢你,谢谢啦。
能问一下,你在COCO上聚类出来的最后的mean - IoU是多少