Я новичок в глюонах, и я решил запустить примеры, чтобы ознакомиться со стилем кодирования (я использовал 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
Мое тестовое изображение
Ячейка для обнаружения объектов на изображении
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