Я хотел написать небольшую статью о создании наборов данных изображений из видео для компьютерного зрения. Здесь мы возьмем видео, которое я снял на свой телефон, и создадим наборы данных для обучения и проверки на основе видео в R. Я надеюсь, что кто-то, кто плохо знаком с компьютерным зрением, наткнется на эту статью, и что я смогу сэкономьте этому человеку немного времени и дополнительные поиски в Google. У меня кружится голова, когда я нахожу статью в блоге, которая делает именно то, что я хочу, и проста для понимания, я просто пытаюсь заплатить вперед.
Проект, над которым я работаю, написан на Python, так что, к сожалению, я не буду помогать вам в этом, если только вы не хотите продолжать на Python. Чтобы создать набор данных, я использовал библиотеку av в R. Библиотека av в R позволяет безумно просто разделить видео, снятое на телефон, на несколько изображений и сохранить их в папке. После того, как вы это сделаете, вам, конечно, нужно будет взять случайную выборку файлов и поместить их в папку с набором данных для обучения, которую вы создадите, а затем вы захотите поместить оставшиеся изображения в папку с набором данных для проверки. Очень просто.
Создание папки с кучей изображений из видео:
### The only library we need for this: library("av")
### The path where you've saved the video and where you want your ### images video_path = "[path to movie]/[your movie].MOV" path = "[path to new folder]"
### set your working directory to be where the files are stored setwd(path)
### Function that will give you all your frames in a folder ### First we're just dumping all of the images into a single ### folder, we'll split test and validation afterwards av_video_images(video = video_path, destdir = path, format = "jpg", fps = NULL)
### How many images are in that folder? Just checking for ### context length(list.files())
Теперь у нас есть папка со всеми нашими изображениями. Затем мы возьмем случайную выборку из 70% изображений для нашего тренировочного набора. Затем мы переместим эти файлы в тренировочную папку. Получите удовольствие от перемещения некоторых файлов!
#################################################################################### #### Now creating the testing and validation sets
### Now Take a sample of 70% of the images for the training set, ### we do not want with replacement images_training <- sample(list.files(),length(list.files())*.7, replace = FALSE)
#### Create training and validation folders so we have a place to #### store our photos. If the training folder does not exist, #### create training folder (with dir.create), else tell me it #### already exists ifelse(!dir.exists("training"), dir.create("training"), "Folder exists already") ifelse(!dir.exists("validation"), dir.create("validation"), "Folder exists already")
### Place training images in the training folder ### Here we are going to loop through each image and copy the ### folder from the old path ### to the new path (in our training folder) for (image in images_training) { new_place <- file.path(path, "training",image) old_place <- file.path(path,image) file.copy(from = old_place, to = new_place) }
Далее мы собираемся удалить тренировочные изображения из их исходной папки, так что все, что у нас останется в исходной папке, — это проверочные изображения. Просто собираюсь сделать небольшую уборку здесь. Для этого мы просто проходим по каждому изображению, и на каждой итерации цикла мы удаляем изображение.
for (image in images_training) { file.remove(path, image) }
### Double check that the length looks right length(list.files())
### Put remaining image files in validation folder images_validation <- list.files()
for (image in images_validation) { new_place <- file.path(path, "validation", image) old_place <- file.path(path,image) file.copy(from = old_place, to = new_place) }
#### Remove the validation images from the old folder (this is just #### cleanup) #### For is image in the remaining list of files, remove the image. for (image in list.files()) { file.remove(path, image) }
Теперь у вас все готово, чтобы начать использовать эти изображения из видео, которое вы сняли сами! Если вы играете с компьютерным зрением, я настоятельно рекомендую проверить библиотеку cometr. Всего парой строк кода он сохранит моментальный снимок ваших зависимостей, кода и всего остального, что вам нужно для воспроизводимости вашей модели.
Это абсолютно спасает жизнь, когда вы позже столкнетесь с ошибкой, и вы не уверены, связана ли она с вашими зависимостями и т. д. Cometr делает так, что вы сможете просто проверить свой последний успешный запуск, легко сравнить с текущий код, посмотрите, в чем было несоответствие, и продолжайте свой веселый путь. Если библиотеки для компьютерного зрения, которые вы используете, интегрируются с Comet, вы также получите набор метрик и графиков, которые помогут вам оценить вашу модель прямо из коробки.
Отсюда вы захотите создать ограничивающие рамки для изображений. Самый простой способ сделать это — использовать библиотеку labelImg в python. Вы просто устанавливаете пакет labelImg, а затем запускаете labelImg в python, и появляется графический интерфейс для создания ограничивающих рамок. Это действительно не может быть намного проще, чем это. Если вы найдете отличный способ маркировки изображений, не связанный с Python, сообщите мне об этом!
Спасибо за прочтение! Надеюсь, вам будет проще всего превратить ваше видео в набор данных изображений для обучения и проверки, и пусть ваши модели обнаружения объектов обнаружат все.
Примечание редактора. Heartbeat — это интернет-издание и сообщество, созданное участниками и посвященное предоставлению лучших образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.
Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.