Эта статья из:blog.aistudyclub.com
Благодаря популярности приложений для коротких видео во всей сети, на различные короткие видео теперь приходится более 50% трафика во всей сети, поэтому классификация коротких видео стала проблемой. В настоящее время мы можем использовать сверточные сети для эффективной классификации изображений, и точность также относительно высока. Так могут ли нейронные сети классифицировать видео? Ответ — да, в этой статье вы будете использовать сеть ResNet3D для выполнения задачи классификации видео.
В этой статье интерпретируется и воспроизводится документ ResNet3D.Основное содержание сети ResNet3D исходит из следующих двух документов:
«Могут ли пространственно-временные 3D CNN проследить историю 2D CNN и ImageNet?»
«Будут ли мегамасштабные наборы данных еще больше улучшать пространственно-временные 3D CNN»
Адрес дипломного проекта:GitHub.com/Кен Сэй Охара/…
1. Цели
Здесь мы кратко представляем цель первой статьи «Могут ли пространственно-временные 3D CNN проследить историю 2D CNN и ImageNet?». Мы уже знаем, что сеть CNN добилась больших успехов в области CV.При большом количестве наборов данных изображений, таких как набор данных ImageNet, сеть CNN может достичь высокой точности. Затем, используя существующий набор видеоданных и адаптируя ядро двумерной свертки существующей сети CNN к ядру трехмерной свертки, достаточно ли данных для удовлетворения потребностей обучения сети CNN? В этой статье для проверки этого в основном используется сеть ResNet3D.
Второй документ, «Могут ли мегамасштабные наборы данных улучшить пространственно-временные 3D CNN», основан на работе первого документа, и его цель состоит в том, чтобы проверить, могут ли сверхбольшие наборы данных повысить производительность сетей CNN.
2. Содержание работы
В первой статье авторы обнаружили, что только на крупномасштабных наборах данных, таких как Kinetics400, серия моделей ResNet может хорошо сходиться. Все модели на UCF101, HMDB-51 и ActivityNet будут выглядеть слишком подходящими, и обучить высокоточную модель будет сложно. На данных Kinetics400 при увеличении глубины модели, например, после ResNet152, улучшение точности очень слабое. Здесь объясняется, что при наличии крупномасштабного набора данных для обучения можно использовать 3D-сеть CNN. Теперь, когда у вас есть модель, обученная на крупномасштабном наборе данных, вы можете выполнить тонкую настройку обучения на мелкомасштабном наборе данных, и авторы добились хороших результатов.На основе первой статьи вторая статья объединяет различные крупномасштабные наборы данных для получения различных комбинированных сверхкрупномасштабных наборов данных и обучает сети ResNet3D с разными уровнями. Сохранение весов моделей можно использовать в качестве предтренировочных весов, точной настройки обучения на небольших наборах данных и различных степеней повышения точности на разных наборах данных и моделях.
3. Структура модели
Ядро свертки сети ResNet, обычно используемое для классификации изображений, обычно представляет собой только скользящее окно на 2D-изображении, и вычисляется карта признаков Форма ядра свертки обычно [out_channel, in_channel, W, H]. В задаче классификации видео входом в сеть обычно является последовательность в видео, например 16 кадров или 32 кадра, что добавляет еще одно измерение времени T к исходному измерению WH, а форма ядра свертки имеет вид [out_channel , in_channel , T, W, H]. В это время ядро свертки не только скользит по 2D-плоскости, но также должно двигаться по третьему измерению T, чтобы извлечь связанные функции между кадрами. Таким образом, необходимо преобразовать 2D ResNet в сеть 3D ResNet. ResNet3D сохраняет общую архитектуру оригинальной ResNet без изменений, заменяя ядро свертки в базовом блоке или блоке узкого места в каждом блоке на Conv3D, а слой пула также необходимо заменить на 3D-пул.Общая структура сети описывается следующим образом:
4. Методы обучения
Первая статья обучается на наборе данных Kinetics400 с использованием изображений RGB размером 112 пикселей в ширину и высоту и 16 кадров в качестве входных образцов. В то же время для случайной обрезки изображения используются методы кадрирования 5 разных размеров, а для улучшения данных добавлено случайное горизонтальное отражение. Используйте кросс-энтропию в качестве функции потерь и используйте оптимизатор SDG, установите коэффициент регуляризации на 0,001, коэффициент импульса на 0,9 и начальную скорость обучения на 0,1. Если после 10 эпох потери на проверочном наборе не уменьшились, разделите скорость обучения на 10. Скорость обучения оптимизатора SDG установлена на 0,001 при точной настройке модели на небольшом наборе данных, а коэффициент регуляризации установлен на 1e-5. В то же время автор в многочисленных экспериментах пришел к выводу, что во время обучения замораживание первых 4 блоков и только тонкая настройка весов 5-го блока и полносвязного слоя могут дать лучшие результаты.
Второй документ корректируется на основе стратегии обучения первого документа.Поскольку модель точно настроена с использованием очень крупномасштабного набора данных, другие параметры остаются неизменными, но начальная скорость обучения оптимизатора SGD установлена на 0,003, Коэффициенты регуляризации и импульса остаются равными 0,001 и 0,9.
5. Экспериментальные результаты
Следующие результаты получены путем обучения на различных гипермасштабируемых наборах данных и комбинации архитектур моделей.Условия и цели этого повторения следующие:
Предварительно обученная модель: предварительно обученные веса ResNet50 в наборе данных K+M
Набор данных: UCF-101
Цель: Top1 — 92,9%
6. Бумажная репродукция
адрес проекта:GitHub.com/Tencent и хорошо/PA…
1. Загрузите распакованный набор данных Адрес набора данных Адрес набора данных:Студия любви Baidu.com/love studio/big…
mkdir dataset/
unzip UCF-101.zip -d dataset/
2. Конвертируйте видео в изображение
mkdir /home/aistudio/dataset/UCF-101-jpg/
cd Paddle-ResNets/ && python generate_video_jpgs.py /home/aistudio/dataset/UCF-101 /home/aistudio/dataset/UCF-101-jpg/ ucf101
3. Преобразуйте предварительно обученную модель pytorch
pip install torch==0.4.1
cd Paddle-ResNets/model/ && python convert_to_paddle.py
4. Обучите сеть В процессе обучения проверяется уровень точности клипов, сохраняется модель с наивысшим уровнем точности клипов, а окончательный уровень точности клипов составляет 90%.
Метод обучения:
-
Во время обучения откройте 4 процесса для чтения, разделите набор данных на 4 блока, размер_пакета равен 128, и асинхронно прочитайте данные для обучения модели.
-
Общее время обучения для каждой итерации составляет около 2,3 секунды, а время чтения данных — около 1,8 секунды.
-
Загрузка ЦП близка к 100%, а использование памяти составляет 80-90%.
-
Коэффициент использования графического процессора составляет 50%.Видно, что узким местом обучения является часть данных чтения ЦП.Если ЦП и память расширены, скорость обучения может продолжать улучшаться.
-
Оптимизатор, используемый для обучения, — Momentum, скорость обучения — 0,003, момент = 0,9, L2Decay — 0,001.
-
Выберите метод RandomResizedCrop в качестве метода улучшения данных.
-
В соответствии с методом, упомянутым в документе, заморозьте conv1, conv2, conv3 и conv4 сети Resnet50 и обучите только слои conv5 и fc.
cd Paddle-ResNets/ && python train.py
5. Проверьте сеть Согласно методу статьи, видео делится на 16 кадров как клип, и, наконец, среднее значение всех клипов видео рассчитывается как результат классификации видео.
Наконец, файл val.json будет сгенерирован для использования при расчете точности первого уровня. Это согласуется с логикой кода версии pytorch.
cd Paddle-ResNets/ && python test.py
6. Рассчитайте точность Уровень точности Top-1 в 93,55% превышает 92,9% в статье.
cd Paddle-ResNets/ && python eval_accuracy.py
load ground truth
number of ground truth: 3783
load result
number of result: 3783
calculate top-1 accuracy
top-1 accuracy: 0.9355009251916468