Проблема с обнаружением объектов gluoncv «Пример сквозного обучения RCNN на PASCAL VO C» - PullRequest
0 голосов
/ 16 апреля 2020

Я новичок в глюонах, и я решил запустить примеры, чтобы ознакомиться со стилем кодирования (я использовал keras пару лет go, и этот гибридный стиль меня немного смущает).

Моя проблема в том, что я могу запустить примеры, но после успешного выполнения каждой ячейки в этом примере (это блокнот Jupyter) я загружаю внешнее изображение, и net кажется неспособным обнаружить какой-либо объект. Я вставил эту же ячейку на 02. Прогнозирование с использованием предварительно обученных моделей Faster RCNN и предварительно обученного net не составило проблем при обнаружении каждого человека на изображении, поэтому мне кажется, что модель в этом примере обучается неправильно.

Это случилось с кем-то еще?

Я что-то упустил?

Заранее спасибо!

(кстати, я попытался раскомментировать 32-ю строку тренировка l oop (та, что с utograd.backward), изменение предела безубыточности для того же l oop без удачи)

ССЫЛКИ

У меня возникла эта проблема при выполнении оригинальных примеров плюс клетка ниже.

02) https://gluon-cv.mxnet.io/build/examples_detection/demo_faster_rcnn.html

06) https://gluon-cv.mxnet.io/build/examples_detection/train_faster_rcnn_voc.html

Мое тестовое изображение

unnamed.jpg

Ячейка для обнаружения объектов на изображении

short, max_size = 600, 800 
RCNN_transform = presets.rcnn.FasterRCNNDefaultTrainTransform(short, max_size)

myImg = 'unnamed.jpg'
x, img = data.transforms.presets.rcnn.load_test(myImg)

box_ids, scores, bboxes = net(x)
ax = utils.viz.plot_bbox(img, bboxes[0], scores[0], box_ids[0], class_names=net.classes)

plt.show()

системная информация (если уместно)

Я использую свой персональный компьютер, и я также использую Google Colab, с теми же результатами, но только я n case ...

ОС: Ubuntu 18.04

аппаратное обеспечение

$ hwinfo --short
cpu:                                                            
                   Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2700 MHz
                   Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2700 MHz
                   Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2700 MHz
                   Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2700 MHz
                   Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2700 MHz
                   Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2700 MHz
                   Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2700 MHz
                   Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2700 MHz

graphics card:
                   nVidia GM107M [GeForce GTX 960M]
                   Intel HD Graphics 530

Драйвер NVidia

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.82       Driver Version: 440.82       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 960M    Off  | 00000000:02:00.0 Off |                  N/A |
| N/A   41C    P5    N/A /  N/A |    665MiB /  4046MiB |     23%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      2560      G   /usr/lib/xorg/Xorg                           308MiB |
|    0      2921      G   /usr/bin/gnome-shell                         132MiB |
|    0      3741      G   ...quest-channel-token=7390050445218241480    31MiB |
|    0      5455      G   ...AAAAAAAAAAAACAAAAAAAAAA= --shared-files   176MiB |
+-----------------------------------------------------------------------------+

CUDA

$nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89

M xNet и Gluon установлены

$ pip install mxnet-cu102mkl
$ pip install --upgrade mxnet-cu102mkl gluoncv

РЕДАКТИРОВАТЬ Я вносил изменения в тренировку l oop, это то, что я имею до сих пор. Первый блок строк сразу после третьего для l oop просто для хранения данных на графическом процессоре.

#net.hybridize()
epochs = 50
for epoch in range(epochs):
    print("epoch: ", epoch,"---------------------------------")
    batch_size = 10
    for ib, batch in enumerate(train_loader):
        #print(ib)
        if ib > 500:
            break
        for dataa, label, rpn_cls_targets, rpn_box_targets, rpn_box_masks in zip(*batch):

            dataa = dataa.as_in_context(mx.gpu(0))
            label = label.as_in_context(mx.gpu(0)).expand_dims(0)
            rpn_cls_targets = rpn_cls_targets.as_in_context(mx.gpu(0))
            rpn_box_targets = rpn_box_targets.as_in_context(mx.gpu(0))
            rpn_box_masks = rpn_box_masks.as_in_context(mx.gpu(0))

            gt_label = label[:, :, 4:5]
            gt_box = label[:, :, :4]

            with autograd.record():
                # network forward
                cls_preds, box_preds, roi, samples, matches, rpn_score, rpn_box, anchors, cls_targets, box_targets, box_masks, _ = net(dataa.expand_dims(0), gt_box, gt_label)

                # losses of rpn
                rpn_score = rpn_score.squeeze(axis=-1)
                num_rpn_pos = (rpn_cls_targets >= 0).sum()
                rpn_loss1 = rpn_cls_loss(rpn_score, rpn_cls_targets,rpn_cls_targets >= 0) * rpn_cls_targets.size / num_rpn_pos
                rpn_loss2 = rpn_box_loss(rpn_box, rpn_box_targets,rpn_box_masks) * rpn_box.size / num_rpn_pos

                # losses of rcnn
                num_rcnn_pos = (cls_targets >= 0).sum()
                rcnn_loss1 = rcnn_cls_loss(cls_preds, cls_targets,cls_targets >= 0) * cls_targets.size / cls_targets.shape[0] / num_rcnn_pos
                rcnn_loss2 = rcnn_box_loss(box_preds, box_targets, box_masks) * box_preds.size / box_preds.shape[0] / num_rcnn_pos

            # some standard gluon training steps:
            autograd.backward([rpn_loss1, rpn_loss2, rcnn_loss1, rcnn_loss2])
            trainer.step(batch_size)

У меня есть сомнения по поводу тренера, я нашел это на других примерах, но я я не уверен, что это работает в этом контексте.

trainer = gluon.Trainer(net.collect_params(), 'sgd',{'learning_rate': 0.01, 'wd': 0.05, 'momentum': 0.9})

EDIT

вот копия файла .ipynb, над которым я работал (версия Google-Colab) https://drive.google.com/file/d/1WevimDyTP1lvq_A0OBRMgC-PH8pK4iBv/view?usp=sharing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...