В продолжение части 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