Машинное обучение с удаленным набором данных изображений (список URL)

У меня есть список изображений и тегов, как эти (в настоящее время в пандах Dataframe)

tag_cat    tag_dog    tag_house    tag_person   url
--------------------------------------------------------------------------
True       True       False        False        http://example.com/...JPG
False      False      False        True         http://example.com/...JPG

это означает, что на первом изображении есть кошка и собака. Изображения не обрабатываются заранее.

Как действовать? Должен ли я загрузить все изображения, предварительно обработать их и сохранить локально? Я предпочел бы избежать этого, я бы предпочел загрузить некоторые изображения, предварительно обработать их и передать их для оптимизации. В качестве альтернативы я бы предпочел гибридный подход с дисковым кешем: загрузить несколько изображений, предварительно обработать их, передать их на оптимизацию и, кроме того, сохранить изображение на диск, чтобы при повторном запуске мне не нужно было повторно загружать изображений.

Есть ли что-то, что может мне помочь с этим?

1 ответ

Решение

Когда вы обучаете модель машинного обучения, вы обычно обучаете модель для нескольких циклов (эпох) данных. Другими словами, вы должны показать все данные вашему алгоритму несколько раз (десятки-сотни). С этой точки зрения загрузка изображений снова и снова неэффективна.

Другим важным моментом являются модели, которые принимают необработанные пиксели изображения, обычно занимают много ресурсов, и чтобы избежать узких мест и использовать ваши вычислительные ресурсы, вы хотели бы передавать данные как можно быстрее на свой компьютер. Загрузка изображений для каждой партии, опять же, звучит очень неэффективно.

Хотя я думаю, что это неэффективно, если вы все еще хотите получать изображения из Интернета во время обучения, вы можете написать собственный генератор Python для извлечения изображений из URL-адресов, а затем обучить модель в кератах с помощью метода fit_generator(), который

Подходит для модели с данными, сгенерированными партиями генератором Python.

Еще одна альтернатива, которую я могу предложить, это то, что вы можете извлечь функции изображения один раз (с уже обученным CNN), сохранить их локально в вашей файловой системе и обучить более простой модели. Обычно такие функции занимают очень мало места (например, массив 2048 float32 на изображение), и поэтому вы даже можете хранить их в своем фрейме данных pandas. Посмотрите здесь в разделе "Извлечение объектов с помощью VGG16", чтобы узнать, как извлечь объекты изображения.

WRT подход гибридного кэширования, это может быть выполнимо, но я не уверен, что сообщество машинного обучения - то, где Вы должны спросить. Но в любом случае, у машинного обучения достаточно собственных сложностей, и может быть лучше сосредоточить свои усилия на алгоритмах и моделях, а не на интеллектуальном кэшируемом программном конвейере.

Другие вопросы по тегам