faster-rcnn系列assert (boxes[:, 2] >= boxes[:, 0]).all()和loss偶爾爲nan的問題

這個問題是發生在用自己的數據訓練faster rcnn的時候~

問題:

File "/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 108, in append_flipped_images
    assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError

分析:

可能是自己的數據中的左上角座標存在(x,y)爲0,或者標定區域溢出圖片

解決:

1.修改lib/datasets/imdb.py,append_flipped_images()函數數據整理

在一行代碼爲 boxes[:, 2] = widths[i] - oldx1 - 1下加入代碼:

for b in range(len(boxes)):
 	if boxes[b][2]< boxes[b][0]:
    	boxes[b][0] = 0

2、修改lib/datasets/pascal_voc.py,_load_pascal_annotation(,)函數

將以下:

    # Make pixel indexes 0-based
    x1 = float(bbox.find('xmin').text) - 1
    y1 = float(bbox.find('ymin').text) - 1
    x2 = float(bbox.find('xmax').text) - 1
    y2 = float(bbox.find('ymax').text) - 1
    cls = self._class_to_ind[obj.find('name').text.lower().strip()]
    boxes[ix, :] = [x1, y1, x2, y2]
    gt_classes[ix] = cls
    overlaps[ix, cls] = 1.0
    seg_areas[ix] = (x2 - x1 + 1) * (y2 - y1 + 1)

改爲:

        # Make pixel indexes 0-based
        x1 = float(bbox.find('xmin').text) 
        y1 = float(bbox.find('ymin').text) 
        x2 = float(bbox.find('xmax').text) 
        y2 = float(bbox.find('ymax').text) 
        cls = self._class_to_ind[obj.find('name').text.lower().strip()]
        boxes[ix, :] = [x1, y1, x2, y2]
        gt_classes[ix] = cls
        overlaps[ix, cls] = 1.0
        seg_areas[ix] = (x2 - x1 + 1) * (y2 - y1 + 1)

3、(可選,如果1和2可以解決問題,就沒必要用3)

修改lib/fast_rcnn/config.py,不使圖片實現翻轉,如下改爲:

__C.TRAIN.USE_FLIPPED = False
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章