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