Подтвердить что ты не робот

Caffe с многоточечными изображениями

У меня есть набор данных с несколькими ярлыками; В наборе данных есть 100 классов, и каждое изображение имеет от 1 до 5 ярлыков, связанных с ними.

Я следую инструкциям по следующему URL:

https://github.com/BVLC/caffe/issues/550

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

/home/my_test_dir/picture-foo.jpg 0
/home/my_test_dir/picture-foo1.jpg 1

В моем случае, поскольку у меня есть многоточечные изображения, работает ли это просто, чтобы добавить метки, как в следующем?

/home/my_test_dir/picture-foo.jpg 0 2 5
/home/my_test_dir/picture-foo1.jpg 1 4

У меня такое ощущение, что, вероятно, это будет не так просто, и если я прав, на каком этапе и как мне интегрировать многозначную структуру набора данных в процессе настройки Caffe?

4b9b3361

Ответ 1

Я считаю, что ответ Shai больше не обновляется. Caffe поддерживает многозначную/матричную правду для форматов HDF5 и LMDB. Фрагмент python в этот комментарий github демонстрирует, как построить многозначную наземную истину LMDB (см. Shai ответ для формата HDF5). В отличие от построения однотипных наборов данных изображений для изображений создается lmdb, а для данных с меткой наземной правды построена вторая отдельная lmdb. Фрагмент имеет дело с пространственной многотабличной земной истиной, полезной для пиксельной маркировки изображений.

Порядок, в котором данные записываются в lmdb, имеет решающее значение. Порядок истины должен соответствовать порядку изображений.

Уровни потерь, такие как SOFTMAX_LOSS, EUCLIDEAN_LOSS, SIGMOID_CROSS_ENTROPY_LOSS, также поддерживают данные с несколькими метками. Однако уровень точности по-прежнему ограничивается данными с одной меткой. Вы можете захотеть следовать этой проблеме github, чтобы отслеживать, когда эта функция добавляется в Caffe.

Ответ 2

caffe поддерживает многолучевую печать. Вы можете поместить метки в n-горячие векторы, например. [0,1,1,0,0,1,...]. Вам необходимо изменить метки на n * k * 1 * 1 тензоры и использовать сигмовидную кросс-энтропию или эвклидово, а не softmax (что заставляет sum (выходы) = 1)

Ответ 3

AFAIK, текущая версия Caffe не поддерживает наборы данных lmdb/leveldb для изображений с мультиметками. Однако вы можете (и, вероятно, должны) подготовить свои входы в формате HDF5. Входной уровень Caffe HDF5 намного более гибкий и позволит вам иметь несколько меток на каждый вход.
Этот ответ дает краткое описание того, как создать вход HDF5 для кофе.

Еще одна проблема, которую вы должны решить, заключается в том, что вас интересует не только multi -label на изображение, но также количество ярлыков для каждого изображения. Как вы определяете свою потерю на изображение, на метку? может быть, вам придется написать свой собственный уровень потерь.
Существуют некоторые уровни потерь, которые поддерживают "игнорировать метку": то есть, если для изображения назначается конкретная метка ввода, для соответствующего изображения не вычисляются потери. См., Например, AccuracyLayer и SoftmaxWithLossLayer.