В продолжение части 5 Создание бота для автоматической стрельбы с помощью машинного обучения для CS:GO. На этот раз я работал над совершенствованием обученных моделей Keras CNN как для исходного размера окна выборки 28x28, так и для нового окна выборки 92x192. .
На протяжении всей этой серии было одно серьезное узкое место в этом проекте, и это была скорость, с которой популярный менеджер окон X, обычно используемый в Linux, может извлекать прямоугольники пикселей из игры CS: GO. Для размера выборки 28x28 это узкое место составляет в среднем около 50–60 кадров в секунду. Для размера выборки 96x192 мы говорим о 5-6 кадрах в секунду. Хотя я уверен, что разработчик, хорошо разбирающийся в работе с Xlib, мог бы получить все игровое окно пикселей и преобразовать их в буфер, нормализованный по среднему/выборочному, со скоростью 100–150 FPS — это немного выходит за рамки моего опыта, и я недостаточно опытен. в этой области, чтобы узнать, может ли обход безопасных функций, таких как XGetPixel и XQueryColor, вызвать проблемы совместимости. Но 50–60 кадров в секунду для размера выборки 28x28, честно говоря, вполне подходит для наших целей. 96x192 было новой идеей, но в конечном итоге оно оказалось не таким адекватным для обнаружения врагов, как модель 28x28.
Одно из основных изменений, которые я сделал в этой итерации, заключается в том, что я больше не преобразовываю веса в C для прямого распространения. На этот раз я создал небольшую программу на Python, которая действует как демон. Каждую миллисекунду она проверяет, есть ли новый входной файл для загрузки, который он использует для выполнения прогноза загруженной модели Keras, а затем, наконец, выводит результат как отдельный файл. Новая программа «прицеливания» теперь просто экспортирует образцы экрана в файл, а затем считывает результат предсказания Keras обратно из файла. Пропускная способность этого процесса очень высока, и при правильном выполнении он работает безупречно для конечного пользователя. Но основной причиной перехода на эту модель было то, что я мог увеличить производительность прототипирования новых или слегка модифицированных сетей. Эта система позволяет мне обучать новую топологию сети и просто экспортировать ее в виде модели Keras, которую демон Python затем может загрузить и выполнить. Единственными жестко заданными параметрами демона, которые при необходимости необходимо изменить, являются размер входных данных, ожидаемых в виде байтов, и форма массива, который будет передан в предиктор.
Когда дело доходит до написания прямого распространения в чистом CI, нет ничего более приятного, чем делать это с помощью нейронной сети с прямой связью — их не только легче реализовать, но и гораздо проще векторизовать, поскольку прямое распространение можно обозначить. до операции умножения с накоплением (MAC) это может быть достигнуто на простом C с использованием функции fma () или с помощью флагов компилятора, таких как -mavx -mfma
, с использованием компилятора GCC. Хотя это также можно реализовать вручную с помощью SIMD Intrinsics, в наши дни это нишевый случай, когда компиляторы могут векторизовать ваш код для вас, но эта статья подробно описывает векторизацию операции MAC с использованием SIMD Intrinsics, если вам интересно.
Помимо простой сети Feed-Forward, написание моделей CNN на C с нуля даже без обратного распространения может быть очень трудоемким и полностью разрушающим быстрое прототипирование.
Результаты были единодушны, я, я и я все пришли к соглашению, что окно выборки 28x28 было наиболее эффективным и отзывчивым при выстрелах в голову с близкого и дальнего расстояния. Я пробовал 96x192 в двух топологиях; A — три слоя фильтров 3x3 и B — три слоя фильтров 9x9, 6x6 и 3x3. У меня нет комментариев по поводу того, какая из двух топологий 96x192 была лучше, все были «ОК».
Теперь эти две модели и наборы данных, которые я создал для них, довольно велики, весь zip-файл занимает 374 МБ, поэтому на этот раз я загрузил его на Mega.nz просто потому, что Mega — единственный большой файловый хостинг с хорошей историей сохранения большие файлы и с минимальными трудностями для конечных пользователей, желающих их загрузить. Загрузка здесь. Модели очень просты в использовании, если вы хотите сразу перейти к ним, перейдите в папку /PredictBot
и выполните exec.sh
, что запустит демон Python и программу прицеливания. Однако настройка Python и Tensorflow — это совсем другое дело, но для пользователей Ubuntu, использующих графический процессор NVIDIA, вы можете выполнить следующие шаги:
sudo apt install nvidia-cuda-toolkit sudo apt install nvidia-driver-465 sudo apt install python3 sudo apt install python3-pip sudo pip3 install --upgrade pip sudo pip3 install tensorflow-gpu sudo pip3 install --upgrade tensorflow-gpu
Имейте в виду, что nvidia-driver-465
должен быть установлен после nvidia-cuda-toolkit
, иначе набор инструментов перезапишет программу nvidia-smi
, что особенно полезно. Кроме того, nvidia-settings
является опционально полезной утилитой, которую можно установить.
Если у вас есть вывод, утверждающий, что cusolver.so не может быть найден, то общепринятый метод решения этой проблемы заключается в том, что вы можете создать символическую ссылку на более старую версию в том месте, где она должна была быть найдена таким образом; (хотя ваш libcusolver.so может находиться в другом месте или иметь другую версию, и в этом случае вам придется искать его местоположение на диске)sudo ln -s /usr/lib/x86_64-linux-gnu/libcusolver.so.10.6.0.245 /usr/lib/x86_64-linux-gnu/libcusolver.so.11
Вам также потребуется установить NVIDIA cuDNN. Тогда вы должны быть готовы идти!
Но если вы просто планируете использовать свой процессор, это намного проще;
sudo apt install python3 sudo apt install python3-pip sudo pip3 install --upgrade pip sudo pip3 install tensorflow-cpu sudo pip3 install --upgrade tensorflow-cpu
Если вы все еще застряли, вы можете обратиться к официальному руководству по установке здесь.
Вы также должны убедиться, что у вас установлены xterm, espeak и clang; (потому что я фактически использую clang в файлах compile.sh, а не gcc, как рекомендуется в исходных файлах)
sudo apt install espeak sudo apt install xterm sudo apt install clang
После того, как вы все настроите, все, что вам нужно знать, это то, что каталог GOBOT9 — это превосходный бот для выстрелов в голову 28x28, а каталог GOBOT10 — новый бот 96x192. В соответствующей папке /PredictBot
вы найдете много разных папок keras_model
, вам просто нужно переименовать ту, которую вы хотите использовать, в “keras_model”
. Есть несколько разных вариаций, в GOBOT9 все они просто вариации значения filter_resolution
, используемого в /SampleBot/train.py
, а в GOBOT10 то же самое, но с версиями B и A, упомянутыми выше.
Итак, какие версии лучше? Если вы ищете все лучшее в одном FNN, это GOBOT7, но если вы ищете лучшее из лучшего, это CNN GOBOT9 с минимальными осечками и быстрыми выстрелами в голову.
Хотите увидеть GOBOT9 в действии? Смотрите здесь, чтобы избежать убогого качества YouTube ниже.
Если вы просто хотите быстро проверить эти вещи, я рекомендую вам запустить игру Deathmatch как «Практика с ботами», а затем ввести эти настройки в консоль разработчика;
sv_cheats 1 hud_showtargetid 0 cl_teamid_overhead_mode 1 cl_teamid_overhead_maxdist 0.1 bot_stop 1
Хотя на протяжении всей этой серии я сохранял язвительный юмор в отношении проекта, эти боты не представляют абсолютно никакой угрозы для онлайн-игр в CS:GO и абсолютно никогда не собирались. Помимо академической ценности и новизны, я думаю, что единственное реальное применение этой работы было бы для тех, у кого есть нарушения подвижности, такие как БАС, РС или ДЦП. Такие пользователи, если они по-прежнему могут управлять джойстиком левой или правой рукой, чтобы управлять движением игрока, и иметь некоторое движение шеи или глаз, чтобы направлять компьютерный курсор, чтобы нацелить сетку игрока в игре, тогда могут комбинировать это управление вводом с этой автоматической стрельбой. проект, чтобы автоматически запускать триггеры оружия для них в игре. Вполне вероятно, что такие игры против других игроков с ограниченными физическими возможностями в LAN-турнире могут быть более легкими и приятными.
Ну это все. Я знаю, что говорил это раньше, но я закончил.
Ты побеждаешь Гейба.
… до скорого >:)
В следующий раз произошло: https://github.com/mrbid/CSGO_TENSOR_TRIGGER