Как обучить новый набор изображений fast-rcnn

Я использую fast-rcnn и пытаюсь обучить систему новому классу (метке). Я следовал этому: https://github.com/EdisonResearch/fast-rcnn/tree/master/help/train

  1. Разместил изображения

  2. Разместил аннотации

  3. Подготовьте ImageSet со всеми префиксами имен изображений.

  4. Подготовленный вывод выборочного поиска: train.mat

У меня не получилось запустить train_net.py со следующей ошибкой:

./tools/train_net.py --gpu 0 --solver models/VGG_1024_pascal2007/solver.prototxt --imdb voc_2007_train_top_5000 

Called with args: Namespace(cfg_file=None, gpu_id=0, imdb_name='voc_2007_train_top_5000', max_iters=40000, pretrained_model=None, randomize=False, solver='models/VGG_1024_pascal2007/solver.prototxt') Using config: {'DEDUP_BOXES': 0.0625,  'EPS': 1e-14,  'EXP_DIR': 'default',  'PIXEL_MEANS': array([[[ 102.9801,  115.9465,  122.7717]]]),  'RNG_SEED': 3,  'ROOT_DIR': '/home/hagay/fast-rcnn',  'TEST': {'BBOX_REG': True,
          'MAX_SIZE': 1000,
          'NMS': 0.3,
          'SCALES': [600],
          'SVM': False},  'TRAIN': {'BATCH_SIZE': 128,
           'BBOX_REG': True,
           'BBOX_THRESH': 0.5,
           'BG_THRESH_HI': 0.5,
           'BG_THRESH_LO': 0.1,
           'FG_FRACTION': 0.25,
           'FG_THRESH': 0.5,
           'IMS_PER_BATCH': 2,
           'MAX_SIZE': 1000,
           'SCALES': [600],
           'SNAPSHOT_INFIX': '',
           'SNAPSHOT_ITERS': 10000,
           'USE_FLIPPED': True,
           'USE_PREFETCH': False}} Loaded dataset `voc_2007_train` for training Appending horizontally-flipped training examples... voc_2007_train gt roidb loaded from /home/hagay/fast-rcnn/data/cache/voc_2007_train_gt_roidb.pkl /usr/local/lib/python2.7/dist-packages/numpy/core/fromnumeric.py:2507: VisibleDeprecationWarning: `rank` is deprecated; use the `ndim` attribute or function instead. To find the rank of a matrix see `numpy.linalg.matrix_rank`.   VisibleDeprecationWarning) wrote ss roidb to /home/hagay/fast-rcnn/data/cache/voc_2007_train_selective_search_IJCV_top_5000_roidb.pkl Traceback (most recent call last):   File "./tools/train_net.py", line 80, in <module>
    roidb = get_training_roidb(imdb)   File "/home/hagay/fast-rcnn/tools/../lib/fast_rcnn/train.py", line 107, in get_training_roidb
    imdb.append_flipped_images()   File "/home/hagay/fast-rcnn/tools/../lib/datasets/imdb.py", line 104, in append_flipped_images
    assert (boxes[:, 2] >= boxes[:, 0]).all() AssertionError

Мои вопросы:

  1. Почему у меня эта ошибка?
  2. Нужно ли перемасштабировать изображения, чтобы исправить: 256x256 перед тренировкой?
  3. Мне нужно что-то подготовить, чтобы установить класс __background__?

person hagay    schedule 23.06.2015    source источник
comment
Вы решили проблему? Я также заинтересован в обучении по ImageNet.   -  person Demonedge    schedule 20.10.2015


Ответы (3)


  1. он говорит, что существует boxes[:,2] < boxes[:, 0], boxes[:, 2] — это x-max ограничивающей рамки, а boxes[:, 0] — это x-min. Таким образом, проблема связана с предложением региона. Я тоже столкнулся с этой проблемой. Я обнаружил, что это было вызвано переполнением. Я помню, что dtype для ящиков - np.uint8 (нужно проверить), если изображение слишком большое, вы получите эту ошибку.
  2. масштабирование является одним из решений, однако это может повлиять на производительность. Вместо этого вы можете изменить dtype с uint8 на float.
  3. Насколько я знаю, в этом нет необходимости.
person Hantang Liu    schedule 24.07.2015

Я опаздываю на вечеринку, но когда я редактировал код, это был мой yakkity-hack решения

        for b in range(len(boxes)):
            if boxes[b][2] < boxes[b][0]:
                boxes[b][0] = 0
        assert (boxes[:, 2] >= boxes[:, 0]).all()

Есть более разумные способы сделать это, на что, кажется, указывает каждый аспирант, но этот прекрасно работает.

person SetSlapShot    schedule 28.07.2015

Ознакомьтесь с решением, описанным в следующей записи блога, часть 4, выпуск № 4. Решение состоит в том, чтобы поменять местами значения координат x1 и x2.

https://huangying-zhan.github.io/2016/09/22/detection-faster-rcnn.html

Следующее скопировано из ссылки:

поле [:, 0] > поле [:, 2]

Решение: добавьте следующий блок кода в imdb.py.

def append_flipped_images(self):
num_images = self.num_images
widths = self._get_widths()
for i in xrange(num_images):
    boxes = self.roidb[i]['boxes'].copy()
    oldx1 = boxes[:, 0].copy()
    oldx2 = boxes[:, 2].copy()
    boxes[:, 0] = widths[i] - oldx2
    boxes[:, 2] = widths[i] - oldx1
    for b in range(len(boxes)):
            if boxes[b][2] < boxes[b][0]:
                boxes[b][0]=0
    assert (boxes[:, 2] >= boxes[:, 0]).all()
person jkjung13    schedule 15.09.2017