推荐超级课程:
目录
简介
你是否刚刚接触人工智能领域,并想找一个有趣的入门项目?那就来吧!这篇博客将指导你使用 PyTorch 和 EfficientNet 创建一个可以玩 Chrome 小恐龙游戏的 AI 模型。
开发 ChatGPT 的 OpenAI 组织实际上是从构建可以玩 Atari 游戏的 AI 模型开始的。这个项目被称为 Atari AI,是深度强化学习的首次演示之一,为人工智能领域的许多后续进展铺平了道路。因此,构建一个可以玩 Chrome 小恐龙游戏的 AI 模型实际上是使用游戏测试和开发 AI 算法的悠久传统的一部分。
Chrome 小恐龙游戏是一款简单却令人上瘾的游戏,已经吸引了全球数百万玩家的喜爱。游戏的目标是控制一只恐龙,帮助它尽可能远地奔跑,而不会被障碍物撞到。借助 AI,我们可以创建一个可以学习如何玩游戏的模型,并打破我们的高分记录。
本教程适用于任何对构建可以玩游戏的 AI 模型感兴趣的人。即使你对 AI 或深度学习的概念还很陌生,本教程也是一个很好的起点。
我们将使用 PyTorch,一个流行的深度学习框架,以及 EfficientNet,一种最先进的神经网络架构,来训练一个模型,分析游戏屏幕并根据它看到的内容做出决策。我们将从获取必要的数据开始,然后对其进行处理,最后训练模型。到本教程结束时,您将对深度学习以及如何训练您自己的 AI 模型有更好的理解。
通用工作流程
设置 AI 模型有 6 个主要步骤:
- 获取数据
- 处理数据
- 创建模型
- 训练模型
- 测试模型
- 从模型中进行推理
步骤 0:设置项目
-
安装 Anaconda:从 此处 下载并安装适用于您操作系统的 Anaconda 发行版。
-
创建一个新的项目文件夹。我们将其命名为“dino”。在这个文件夹中打开 VS Code 并打开终端。
-
创建一个新的 conda 环境:在 Anaconda Prompt 或您的终端中,通过运行以下命令创建一个新的 conda 环境:
conda create --name myenv python=3.10
这将创建一个名为 myenv
的新环境,其中安装了 Python 3.10。
-
激活环境:创建环境后,使用以下命令激活它:
conda activate myenv
-
安装 PyTorch:使用以下命令安装具有 CUDA 支持(用于 GPU 加速)的 PyTorch 库:
conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge
此命令安装了 PyTorch、TorchVision 和 TorchAudio 以及 CUDA 工具包版本 11.1。您可以根据需要更改 CUDA 工具包的版本。
-
测试安装:要验证 PyTorch 安装,请在您的 conda 环境中运行以下命令以启动 Python 解释器:
python
然后,导入 PyTorch 库并打印其版本如下:
import torch print(torch.__version__)
这应该打印出您环境中安装的 PyTorch 版本号。
步骤 1:获取数据
我们将通过在人类玩家玩游戏时拍摄游戏屏幕的快照来获取数据。captures.py
处理此事。
import cv2
from PIL import ImageGrab
import numpy as np
import keyboard
import os
from datetime import datetime
current_key = ""
buffer = []
# 检查是否存在名为 'captures' 的文件夹。如果不存在,则创建它。
if not os.path.exists("captures"):
os.mkdir("captures")
def keyboardCallBack(key: keyboard.KeyboardEvent):
'''
当键盘事件发生时,此函数被调用。它将按下的键存储在缓冲区中并进行排序。
### 参数 :
`key (KeyboardEvent)`
### 返回 :
`None`
### 示例 :
`keyboardCallBack(key)`
'''
global current_key
if key.event_type == "down" and key.name not in buffer:
buffer.append(key.name)
if key.event_type == "up":
buffer.remove(key.name)
buffer.sort() # 将按下的键按升序排列
current_key = " ".join(buffer)
keyboard.hook(callback=keyboardCallBack)
i = 0
while (not keyboard.is_pressed("esc")):
# 捕获图像并将其保存到 'captures' 文件夹中,文件名包含时间和日期以及按下的键
image = cv2.cvtColor(np.array(ImageGrab.grab(
bbox=(620, 220, 1280, 360))), cv2.COLOR_RGB2BGR)
# 如果按下了键,将按下的键嵌入文件名
if len(buffer) != 0:
cv2.imwrite("captures/" + str(datetime.now()).replace("-", "_").replace(":",
"_").replace(" ", "_")+" " + current_key + ".png", image)
# 如果没有按下键,将 'n' 嵌入文件名
else:
cv2.imwrite("captures/" + str(datetime.now()).replace("-",
"_").replace(":", "_").replace(" ", "_") + " n" + ".png"