С быстрым развитием Интернета в Интернете появляется все больше и больше изображений и видео, особенно продуктов UCG, что стимулирует энтузиазм людей к загрузке изображений и видео.Например, WeChat загружает более 1 миллиарда изображений каждый день. Загружать может любой желающий, что создает проблемы с регулированием, а без модерации контента порнографические изображения и видео множатся. Не так давно на tumblr, который всегда был известен своей открытостью, оказывали давление с целью запретить людям делиться порнографическими изображениями. Не говоря уже о внутренней проверке контента, это препятствие, которое UCG не может обойти. Вы еще помните род занятий профессионального подразделения Хуан Цзянь, появившегося несколько лет назад? Легенда гласит, что годовая зарплата составляет миллион, и меня тошнит от просмотра порнографии каждый день, но в последнее время об этой профессии мало кто упоминает, эта профессия, которая должна рождаться под присмотром, быстро вымирает из-за появления искусственного интеллекта. (Конечно, он не совсем мертв. В конце концов, судить о том, порнографические изображения или нет, — вещь субъективная. Некоторые произведения искусства и порнография размыты, и их нужно оценивать вручную.)
Я написал статью раньшеИспользование искусственного интеллекта для обнаружения порнографических изображений, я также пытался добавить в браузер функцию фильтрации порнографических изображений, но после эксперимента скорость рассуждений стала слишком низкой (использовавшемуся в то время Google Nexus 4 требовалось несколько секунд для обнаружения изображения) и фильтрации в реальном времени. не может быть сделано. В последнее время я изучаю Jetson Nano от nvidia и инфраструктуру ускорения вывода TensorRT, поэтому я хочу попробовать ее, чтобы посмотреть, смогу ли я применить некоторые методы ускорения для ускорения вывода.
Хотя моя конечная цель — применить его к Jetson Nano, на самом деле TensorRT подходит практически для всех видеокарт Nvidia, поэтому для удобства я сначала попробую его на стороне ПК. Нет видеокарты Nvidia? Это не имеет значения, вы можете взглянуть на две статьи, которые я разместил ранее:
- Платформа облачных вычислений Google GPU, бесплатная и простая в использовании
- Установите TensorRT в Google Colab
open_nsfw
Модель глубокого обучения, используемая в этой статье, представляет собой модель обнаружения порнографических изображений с открытым исходным кодом Yahoo open_nsfw, где NSFW означает «Не подходит для работы», а проект основан на платформе caffe. Поскольку я в основном изучаю Tensorflow, я нашел версию реализации модели Tensorflow в Интернете, разветвил копию и добавил скрипт обработки фреймворка TensorRT.Вы можете использовать следующие команды, чтобы получить соответствующий код:
git clone https://github.com/mogoweb/tensorflow-open_nsfw.git
существуетmodel.py, мы можем увидеть определение модели open_nsfw,data/open_nsfw-weights.npyЭто вес Tensorflow, преобразованный из веса кафе yahoo open_nsfw с помощью инструмента, поэтому нам не нужно обучать модель и использовать ее непосредственно для процесса вывода.classify_nsfw.pyСкрипты можно использовать для вывода по одному изображению:
python classify_nsfw.py -m data/open_nsfw-weights.npy test.jpg
Примечание. Сценарий предоставляет два способа декодирования файлов изображений: один — использовать PIL.image и skimage для обработки изображений, т. е. так называемый yahoo_image_loader, а другой — использовать для обработки функцию обработки изображений в tensorflow. Поскольку исходная модель open_nsfw обучается с использованием PIL.image и skimage для предварительной обработки, а в результатах, декодированных разными библиотеками, есть небольшие различия, которые повлияют на окончательный результат, обычно выбирают yahoo_image_loader. Конечно, если вы планируете обучать модель самостоятельно, подойдет любая библиотека обработки изображений по вашему выбору.
toolsВ каталоге есть несколько скриптов, которые могут экспортировать модель какfrozen graph,saved modelа такжеtfliteи другие форматы, чтобы мы могли легко развернуть их на стороне сервера, а также применить к мобильному телефону.
opt — это написанный мною код, ускоренный с помощью фреймворка TensorRT, который я подробно опишу ниже.
Экспортировать как модель TensorRT
В настоящее время TensorRT официально поддерживается Google как часть Tensorflow, а его пакеты находятся по адресуtensorflow.contrib.tensorrt, добавьте в код:
import tensorflow.contrib.tensorrt as trt
Вы можете использовать TensorRT, потому что с поддержкой Google экспортировать в TensorRT довольно просто:
trt_graph = trt.create_inference_graph(
input_graph_def=frozen_graph_def,
outputs=[output_node_name],
max_batch_size=1,
max_workspace_size_bytes=1 << 25,
precision_mode='FP16',
minimum_segment_size=50
)
graph_io.write_graph(trt_graph, export_base_path, 'trt_' + graph_name, as_text=False)
в:
- input_graph_defОпределите граф модели Tensorflow, который необходимо экспортировать.
- outputsимя выходного узла
- max_batch_sizeЭто максимальное ограничение размера пакета, так как GPU имеет ограничение на видеопамять, которое необходимо определить в соответствии с объемом памяти GPU, обычно это может быть 8 или 16.
- precision_modeДля точности модели есть варианты FP32, FP16 и INT8.Чем выше точность, тем медленнее скорость вывода, которая также зависит от графического процессора.
graph_io.write_graph записывает график в файл, который можно загрузить в последующем коде.
Пожалуйста, обратитесь к полному кодуopt/export_trt.pyдокумент.
Тестовые данные
Из-за ограничений некоторых политик и правил общедоступные наборы данных недоступны для загрузки, но на github есть несколько проектов с открытым исходным кодом, которые предоставляют сценарии и загружают их из Интернета. я используюGitHub.com/Алекс Ким XYZ/…Скрипты в этом проекте с открытым исходным кодом. Этот проект предоставляет четыре категории изображений: рисунки, хентай, нейтральные, порно и сексуальные, которые можно разделить на обучающий набор и тестовый набор, а также проверить, является ли изображение действительным (поскольку некоторые ссылки могут быть недоступны при веб-сканировании).
Обратите внимание, что объем загрузки этого образа очень велик, и вам нужно быть осторожным, чтобы не заполнить жесткий диск. Хотя объем данных достаточно велик (десятки тысяч) для самостоятельного обучения модели, он все же незначителен по сравнению с количеством изображений, используемых Yahoo для обучения модели open_nsfw.Говорят, что Yahoo использовала миллионы изображений для обучить эту модель.
Сравнение скорости вывода
В каталог opt я добавил два скрипта для загрузки и вывода двух моделей, а именноbenchmark_classify_nsfw.pyиbenchmark_classify_trt.py, внимательные студенты могут обнаружить, что эти два сценария почти идентичны, да, за исключениемbenchmark_classify_trt.pyЕще одна строка кода:
import tensorflow.contrib.tensorrt as trt
Добавьте эту строку оператора импорта, чтобы указать тензорному потоку использовать инфраструктуру TensorRT, иначе произойдет следующая ошибка:
tensorflow.python.framework.errors_impl.NotFoundError: Op type not registered 'TRTEngineOp' in binary running on alex-550-279cn. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.) `tf.contrib.resampler` should be done before importing the graph, as contrib ops are lazily registered when the module is first accessed.
Возьмите 2000 тестовых изображений для тестирования, на моей GTX 960 скорость вывода следующая:
未优化模型: 53 s
使用TensorRT优化模型: 54 s
Если вы загружаете больший набор данных, вы можете протестировать еще несколько изображений, чтобы увидеть, как работает оптимизация.
В Google Colab я поставил Jupyter Notebook, а заинтересованные студенты могут попробовать его с Google Colab, адрес файла:col AB.research.Google.com/drive/1VH-G…, конечно, вы также можете посетить полный скрипт и блокнот на моем github:
Нажмите, чтобы прочитать исходный текст, вы можете перейти к проекту.
Не по теме:
Порог мастера трафика публичного аккаунта WeChat был значительно снижен, я открыл рекламу внизу статьи официального аккаунта, надеясь, что это не повлияет на читательский опыт каждого. Мне всегда было любопытно, будут ли кликать на такого рода рекламу, может быть, я получу ответ через некоторое время.
Вы также можете прочитать:
- Использование искусственного интеллекта для обнаружения порнографических изображений
- Платформа облачных вычислений Google GPU, бесплатная и простая в использовании
- Установите TensorRT в Google Colab