Я использую обнаружение объекта Tensorflow, где в качестве предварительно обученной модели используется fast_rcnn_inception_v2_coco.Я на Windows 10, с tenorflow-GPU 1.6 на NVIDIA GeForce GTX 1080, CUDA 9.0 и CUDNN 7.0.
Я пытаюсь обучить обнаружение объектов нескольких классов с помощью пользовательского набора данных, но у меня былокакое-то странное поведение.У меня есть 2 класса: пистолет и нож (с соответственно 876 и 664 изображениями, все с одинаковым размером от 360x200 до 640x360 и аналогичным соотношением).Итак, я думаю, что набор данных сбалансирован.Я разделил его на набор Train (1386 изображений: 594 ножа, 792 пистолета) и набор тестов (154 изображения: 70 ножа, 84 пистолета)
Кажется, что CNN может обнаружить только один из двух объектов с хорошей точностьюи какой объект может обнаруживать (из двух классов) случайные изменения во время этапов обучения и на одном и том же изображении (пример: этап 10000 обнаруживает только пистолет, этап 20000 только нож, этап 30000 нож, этап 40000 пистолет, этап 50000 нож,и т. д.), как показано ниже:
]
Более того, потеря выглядит странно, и точность во время оценки никогда не бывает высокой для обоих классоввместе.
Во время фазы тренировки потеря, кажется, колеблется на каждом этапе тренировки.
Убыток:
Общий убыток:
Из mAp (изображение ниже) видно, что два объекта никогда не идентифицируются вместе на одном шаге:
Если бы я обучал эти два класса отдельно, я мог бы достичь хорошей точности 50-60%.Если я буду обучать эти два класса вместе, то вы получите то, что увидели.
Здесь вы можете найти generate_tfrecord.py и файл конфигурации модели (что я изменил, чтобы сделать его мультикласс).Карта меток выглядит следующим образом:
item {
id: 1
name: 'knife'
}
item {
id: 2
name: 'pistola'
}
Любые предложения приветствуются.
ОБНОВЛЕНИЯ После 600 000 итераций потери все еще колеблются.Сценарий выглядит следующим образом: Потеря , Общая потеря и mAp .