作者: AI最严厉的父亲

  • DeOldify:一次颠覆性的图像着色技术

    DeOldify是一项颠覆性的图像着色项目,它利用深度学习技术,特别是生成对抗网络(GANs),将黑白照片和视频变成彩色。该项目的目标是恢复和改善老照片和电影片段的质量,使它们看起来更加栩栩如生。在本文中,我们将探讨DeOldify的关键特点、技术细节以及如何开始使用它。

    DeOldify的关键特点

    DeOldify的最新版本具有以下关键特点:

    1. 消除几乎所有的错误和伪影:该项目的新版本几乎完全消除了颜色化过程中出现的错误和伪影,使最终结果更加干净和准确。

    2. 改进的皮肤着色:新版本的DeOldify在着色皮肤方面表现更好,避免了以前版本中可能出现的“僵尸”效果。

    3. 更高分辨率的图像:该项目支持高分辨率图像,因此能够生成更清晰和更精细的彩色图像。

    4. 适用于视频:DeOldify的最新版本能够处理视频,生成稳定且无闪烁的彩色视频。

    5. NoGAN技术:NoGAN是一种新型的GAN训练方法,它允许获得GAN训练的好处,同时减少了直接GAN训练的时间和不良影响。

    技术细节

    DeOldify的技术基础包括以下关键部分:

    1. 生成对抗网络(GANs):DeOldify使用GANs来进行图像彩色化。GANs包括生成器和评论家两个部分,通过对抗训练来生成更逼真的彩色图像。

    2. 自注意生成对抗网络:生成器是基于自注意机制的U-Net,具有谱归一化和自注意机制,以提高渲染效果。

    3. 两个时间尺度更新规则:该规则指定了生成器和评论家的迭代次数,以改进GAN的训练效果。

    4. NoGAN技术:NoGAN是一种新型的GAN训练方法,它将生成器和评论家分开进行预训练,然后仅在非常短的时间内进行实际的GAN训练。这有助于减少训练时间和减轻GAN训练可能导致的问题。

    如何开始使用DeOldify

    要开始使用DeOldify,你有两种主要选择:

    最简单的方法

    最简单的方法是使用Colab笔记本。以下是可用的Colab笔记本链接:

    你可以在Colab笔记本中按照说明进行操作,无需在本地设置任何环境。

    自己的机器(稍微复杂一些)

    如果你想在本地机器上运行DeOldify,以下是一些基本要求和步骤:

    硬件和操作系统要求

    • 强大的显卡:如果你想进行训练,建议使用显存大于11GB的显卡。对于仅进行图像着色,约4GB或更多显存的显卡应足够。
    • Linux操作系统:DeOldify在Linux上运行良好,特别是在Ubuntu 18.04或16.04上。不支持Windows操作系统。

    安装步骤

    1. 克隆DeOldify存储库:
    git clone https://github.com/jantic/DeOldify.git DeOldify
    cd DeOldify
    1. 创建并激活conda环境:
    conda env create -f environment.yml
    source activate deoldify
    1. 启动Jupyter Lab:
    jupyter lab

    从这里,你可以在Jupyter Lab中运行相应的笔记本并使用DeOldify。

    结论

    DeOldify是一项令人印象深刻的图像着色项目,能够将黑白照片和视频转换为令人惊叹的彩色版本。它的最新版本不仅改进了渲染质量,还支持高分辨率图像和视频。你可以使用Colab笔记本轻松开始使用它,或者在本地机器上设置环境以更深入地探索其功能。无论你选择哪种方式,DeOldify都为改善老照片和电影片段提供了有趣且有用的工具。

  • 项目介绍:Drag Your GAN – 交互式基于点的生成图像操作

    欢迎来到"Drag Your GAN"项目,这是一个令人兴奋的工具,它让你可以与生成式对抗网络(GAN)互动,实现对生成图像的点操作。这个项目由一群顶尖的研究人员共同开发,包括Xingang PanAyush TewariThomas LeimkühlerLingjie LiuAbhimitra MekaChristian Theobalt。本项目旨在让你能够以交互方式编辑和操作生成的图像,从而创造出令人惊叹的视觉效果。

    SIGGRAPH 2023 会议论文

    "Drag Your GAN"项目将在SIGGRAPH 2023会议论文中首次亮相。这是一个备受期待的研究成果,你可以在这里找到详细的研究论文。

    项目特点

    • 交互式编辑:你可以通过点击和拖拽的方式编辑生成的图像,实现点操作,从而创造独特的视觉效果。

    如何开始

    环境配置

    如果你拥有CUDA显卡,请按照NVlabs/stylegan3的要求进行环境配置。一般的安装步骤包括以下命令,它们将设置正确的CUDA版本和所有Python包:

    conda env create -f environment.yml
    conda activate stylegan3

    然后安装额外的要求:

    pip install -r requirements.txt

    如果你没有CUDA显卡(例如,在MacOS上使用Silicon Mac M1/M2或仅使用CPU),请尝试以下命令:

    cat environment.yml | \
      grep -v -E 'nvidia|cuda' > environment-no-nvidia.yml && \
        conda env create -f environment-no-nvidia.yml
    conda activate stylegan3
    
    # 在MacOS上
    export PYTORCH_ENABLE_MPS_FALLBACK=1

    运行DragGAN GUI

    要启动DragGAN GUI,只需运行以下命令:

    sh scripts/gui.sh

    如果你使用的是Windows,可以运行以下命令:

    .\scripts\gui.bat

    这个GUI支持编辑GAN生成的图像。如果你要编辑真实图像,首先需要使用类似PTI的工具进行GAN反演。然后将新的潜在代码和模型权重加载到GUI中。

    你也可以运行DragGAN Gradio演示,这对于Windows和Linux都是通用的:

    python visualizer_drag_gradio.py

    下载预训练的StyleGAN2权重

    要下载预训练的权重,只需运行以下命令:

    python scripts/download_model.py

    如果你想尝试StyleGAN-Human和Landscapes HQ(LHQ)数据集,请从以下链接下载权重:StyleGAN-HumanLHQ,然后将它们放在./checkpoints目录下。

    许可和引用

    与DragGAN算法相关的代码根据CC-BY-NC许可进行许可。然而,项目的大部分内容都按照Nvidia Source Code License的独立许可条款提供。

    任何形式的使用和衍生作品必须保留显示“AI Generated”的水印功能。

    参考文献

    如果你使用了这个项目,请引用以下BibTeX条目:

    @inproceedings{pan2023draggan,
        title={Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold},
        author={Pan, Xingang and Tewari, Ayush, and Leimk{\"u}hler, Thomas and Liu, Lingjie and Meka, Abhimitra and Theobalt, Christian},
        booktitle = {ACM SIGGRAPH 2023 Conference Proceedings},
        year={2023}
    }

    相关链接

    这就是"Drag Your GAN"项目的简介,希望你会喜欢它并尽情探索这个强大的生成图像操作工具!

  • DouZero_For_Happy_DouDiZhu: 让DouZero助你斗地主游戏

    欢迎来到DouZero_For_Happy_DouDiZhu,这个项目基于强大的DouZero框架,旨在为你提供一个强大的斗地主游戏助手。在本文中,你将了解如何使用这个项目,但请注意,本项目仅供学习和技术交流使用,请不要将其用于其他非法或商业目的。

    项目背景

    DouZero_For_Happy_DouDiZhu建立在DouZero的基础之上,它是一个斗地主游戏的自动化工具,可以帮助你更轻松地玩这个有趣的扑克牌游戏。本项目包含三个不同的DouZero模型,分别是SL、DouZero-ADP和DouZero-WP,每个模型都具有不同的训练目标。

    如何开始

    环境配置

    在开始使用DouZero_For_Happy_DouDiZhu之前,请确保你已经正确配置了DouZero的环境。你需要安装所需的Python包和相关依赖。

    运行项目

    1. 确保你的斗地主游戏窗口以最大化方式打开,分辨率设置为1920×1080。
    2. 将游戏窗口移动到屏幕的右下角,以避免遮挡手牌、历史牌和底牌区域。
    3. 打开项目的main.py文件,运行它。
    4. 项目会自动开始识别斗地主游戏中的地主角色,并在窗口内显示识别结果。
    5. 游戏开始后,观察AI给出的出牌建议,并根据情况手动选择并打出牌。
    6. 游戏结束后,会弹出对话框提示你的输赢情况。
    7. 如果识别出现错误或没有反应,你可以通过点击“结束”按钮来停止本局游戏。

    注意事项

    • 如果你在王炸时出现识别问题,可能是因为特效时间较长,导致只能识别一个王。

    感谢和鸣谢

    我们要特别感谢DouZero项目,它为我们提供了强大的框架基础。此外,我们还借鉴了cardRecorder项目的部分代码和模板图片,用于识别扑克牌。

    结束语

    DouZero_For_Happy_DouDiZhu是一个令人兴奋的项目,它可以让你更好地享受斗地主游戏。如果你对这个项目感兴趣,可以了解更多信息,也欢迎加入我们的QQ交流群(群号:754619468,入群口令:DouZero)。

    请记住,这个项目仅供学习和技术交流使用,请合法使用,不要用于非法或商业目的。

    相关链接

  • APEX & CSGO 自瞄软件

    这是一个基于 YOLOV7 的 APEX 和 CSGO 自瞄软件,旨在帮助玩家在游戏中更轻松地瞄准敌人。请注意,这个软件仅用于教育目的,不得用于任何商业或非法用途,我们对未经授权使用软件的行为概不负责。

    如果你喜欢这个项目,请给我们一个星星以支持我们的工作。

    功能特点

    • 模型可以识别敌人和友军。
    • 使用 PID 平滑移动,确保瞄准的准确性。
    • 单独的进程用于实时显示检测结果。
    • 可以通过配置文件自定义个性化设置。
    • 支持 TensorRT 加速,解决了在高速场景下可能出现的抖动问题。
    • 支持加密 onnx 和 trt 模型,保护模型的安全性。
    • 可以在锁定或检测到目标时保存屏幕截图,以便收集新的数据集,用于处理假阳性和假阴性情况。
    • 支持使用当前模型对图像进行标注,以加快标注过程。
    • 提供将项目打包成可执行文件的功能,方便使用。

    环境配置

    要运行这个项目,你需要配置以下环境:

    • Python 3.7
    • CUDA 11.8,并根据NVIDIA官方说明安装 TensorRT。
    • 使用以下命令创建和激活虚拟环境:
    conda create -n apex python=3.7
    conda activate apex

    接下来,安装所需的 Python 包:

    pip install pipwin
    pipwin install pycuda
    pip install -r requirements.txt

    使用说明

    运行 APEX 自瞄软件

    运行 APEX 自瞄软件,默认情况下按住左/右鼠标键可以自动瞄准,按下侧按钮(x2)可以自动瞄准并射击,按下侧按钮(x1)可以启用和禁用 AI:

    python apex.py

    你可以在 configs/apex.yaml 中找到定制的设置,根据你的需求调整 smooth 超参数。

    运行 CSGO 自瞄软件

    运行 CSGO 自瞄软件,默认情况下按住侧按钮(x2)可以自动瞄准并射击,按下侧按钮(x1)可以启用和禁用 AI:

    python csgo.py

    你可以在 configs/csgo.yaml 中找到定制的设置,根据你的需求调整 smooth 超参数。

    标注数据集

    如果你有一个数据集,并希望使用当前模型对图像进行标注,以加快标注过程,可以使用以下命令:

    python utils/anno_imgs.py --data_dir 你的数据集目录 --engine_path 你的trt引擎路径

    这个命令将会为你的数据集添加标注信息,提高数据处理的效率。

    注意事项

    • 请确保仅将此软件用于教育和研究目的,不要将其用于商业或非法活动。
    • 我们不对未经授权使用此软件的行为负责。
    • 请合法地使用此软件,遵守游戏和法律的规定。

    项目地址

    如果你对这个项目感兴趣,可以在 GitHub 上查看源代码和更多信息。

    感谢你的支持!

  • 开放AI Node API库:无缝接入OpenAI的利器

    如果你希望在TypeScript或JavaScript中方便地访问OpenAI的REST API,那么这个库为你提供了便捷的解决方案。它是基于我们的OpenAPI规范使用Stainless生成的。

    要学习如何使用OpenAI API,请查看我们的API参考文档文档

    安装

    npm install --save openai
    # 或者
    yarn add openai

    使用

    你可以在api.md文件中找到这个库的完整API。下面的代码演示了如何使用聊天完成API开始工作。

    import OpenAI from 'openai';
    
    const openai = new OpenAI({
      apiKey: '你的API密钥', // 默认为process.env["OPENAI_API_KEY"]
    });
    
    async function main() {
      const completion = await openai.chat.completions.create({
        messages: [{ role: 'user', content: '说这是一个测试' }],
        model: 'gpt-3.5-turbo',
      });
    
      console.log(completion.choices);
    }
    
    main();

    流式响应

    我们支持使用Server Sent Events (SSE) 进行流式响应。

    import OpenAI from 'openai';
    
    const openai = new OpenAI();
    
    async function main() {
      const stream = await openai.chat.completions.create({
        model: 'gpt-4',
        messages: [{ role: 'user', content: 'Say this is a test' }],
        stream: true,
      });
      for await (const part of stream) {
        process.stdout.write(part.choices[0]?.delta?.content || '');
      }
    }
    
    main();

    如果你需要取消流,你可以从循环中break,或者调用stream.controller.abort()

    请求和响应类型

    这个库包含了所有请求参数和响应字段的TypeScript定义。你可以像下面这样导入并使用它们:

    import OpenAI from 'openai';
    
    const openai = new OpenAI({
      apiKey: '你的API密钥', // 默认为process.env["OPENAI_API_KEY"]
    });
    
    async function main() {
      const params: OpenAI.Chat.ChatCompletionCreateParams = {
        messages: [{ role: 'user', content: 'Say this is a test' }],
        model: 'gpt-3.5-turbo',
      };
      const completion: OpenAI.Chat.ChatCompletion = await openai.chat.completions.create(params);
    }
    
    main();

    每个方法、请求参数和响应字段的文档都可在文档字符串中找到,并将在大多数现代编辑器中悬停时显示。

    [!IMPORTANT]
    此SDK的先前版本使用了Configuration类。请参阅v3到v4的迁移指南

    文件上传

    与文件上传对应的请求参数可以以多种不同的形式传递:

    • File(或具有相同结构的对象)
    • fetch Response(或具有相同结构的对象)
    • fs.ReadStream
    • 我们的toFile助手的返回值
    import fs from 'fs';
    import fetch from 'node-fetch';
    import OpenAI, { toFile } from 'openai';
    
    const openai = new OpenAI();
    
    // 如果你有Node `fs`,我们建议使用`fs.createReadStream()`:
    await openai.files.create({ file: fs.createReadStream('input.jsonl'), purpose: 'fine-tune' });
    
    // 或者,如果你有Web `File` API,你可以传递一个`File`实例:
    await openai.files.create({ file: new File(['my bytes'], 'input.jsonl'), purpose: 'fine-tune' });
    
    // 你也可以传递一个`fetch` `Response`:
    await openai.files.create({ file: await fetch('https://somesite/input.jsonl'), purpose: 'fine-tune' });
    
    // 最后,如果上述方法都不方便,你可以使用我们的`toFile`助手:
    await openai.files.create({
      file: await toFile(Buffer.from('my bytes'), 'input.jsonl'),
      purpose: 'fine-tune',
    });
    await openai.files.create({
      file: await toFile(new Uint8Array([0, 1, 2]), 'input.jsonl'),
      purpose: 'fine-tune',
    });

    处理错误

    当库无法连接到API,或者API返回非成功状态码(即4xx或5xx响应)时,将抛出APIError的子类:

    async function main() {
      const fineTune = await openai.fineTunes
        .create({ training_file: 'file-XGinujblHPwGLSztz8cPS8XY' })
        .catch((err) => {
          if (err instanceof OpenAI.APIError) {
            console.log(err.status); // 400
            console.log(err.name); // BadRequestError
    
            console.log
    
    (err.headers); // {server: 'nginx', ...}
          } else {
            throw err;
          }
        });
    }
    
    main();

    错误代码如下:

    状态码 错误类型
    400 BadRequestError
    401 AuthenticationError
    403 PermissionDeniedError
    404 NotFoundError
    422 UnprocessableEntityError
    429 RateLimitError
    大于等于500 InternalServerError
    N/A APIConnectionError

    Azure OpenAI

    关于如何在Azure OpenAI中使用这个库的示例可以在这里找到。

    请注意,在Azure OpenAI API和OpenAI API之间存在API形状和行为的细微差异,因此在Azure OpenAI中使用这个库可能会导致不正确的类型,可能会导致错误。

    请查看@azure/openai,这是Microsoft提供的一个Azure特定的SDK。

    重试

    默认情况下,某些错误将被自动重试2次,使用短暂的指数退避。默认情况下,将重试连接错误(例如,由于网络连接问题),409冲突,429速率限制以及>=500内部错误。

    你可以使用maxRetries选项来配置或禁用这个功能:

    // 配置所有请求的默认值:
    const openai = new OpenAI({
      maxRetries: 0, // 默认为2
    });
    
    // 或者,按请求配置:
    await openai.chat.completions.create({ messages: [{ role: 'user', content: 'How can I get the name of the current day in Node.js?' }], model: 'gpt-3.5-turbo' }, {
      maxRetries: 5,
    });

    超时

    默认情况下,请求会在10分钟后超时。你可以使用timeout选项来配置它:

    // 配置所有请求的默认值:
    const openai = new OpenAI({
      timeout: 20 * 1000, // 20秒(默认为10分钟)
    });
    
    // 重写每个请求:
    await openai.chat.completions.create({ messages: [{ role: 'user', content: 'How can I list all files in a directory using Python?' }], model: 'gpt-3.5-turbo' }, {
      timeout: 5 * 1000,
    });

    在超时时,会抛出APIConnectionTimeoutError

    请注意,超时的请求将默认重试两次

    自动分页

    OpenAI API中的列表方法是分页的。你可以使用for await … of语法来遍历所有页面中的项目:

    async function fetchAllFineTuningJobs(params) {
      const allFineTuningJobs = [];
      // 自动获取更多页面。
      for await (const job of openai.fineTuning.jobs.list({ limit: 20 })) {
        allFineTuningJobs.push(job);
      }
      return allFineTuningJobs;
    }

    或者,你可以一次只请求一页:

    let page = await openai.fineTuning.jobs.list({ limit: 20 });
    for (const job of page.data) {
      console.log(job);
    }
    
    // 提供用于手动分页的便捷方法:
    while (page.hasNextPage()) {
      page = page.getNextPage();
      // ...
    }

    高级用法

    访问原始响应数据(例如,标头)

    通过APIPromise类型上的.asResponse()方法,你可以访问由fetch()返回的“原始”Response

    你也可以使用.withResponse()方法获取原始的Response以及解析后的数据。

    const openai = new OpenAI();
    
    const response = await openai.chat.completions
      .create({ messages: [{ role: 'user', content: 'Say this is a test' }], model: 'gpt-3.5-turbo' })
      .asResponse();
    console.log(response.headers.get('X-My-Header'));
    console.log(response.statusText); // 访问底层的Response对象
    
    const { data: completions, response: raw } = await openai.chat.completions
      .create({ messages: [{ role: 'user', content: 'Say this is a test' }], model: 'gpt-3.5-turbo' })
      .withResponse();
    console.log(raw.headers.get('X-My-Header'));
    console.log(completions.choices);

    配置HTTP(S)代理(例如,用于代理)

    默认情况下,这个库使用一个稳定的代理来处理所有http/https请求,以重用TCP连接,消除许多TCP和TLS握手,并从大多数请求中刮去大约100ms。

    如果你想禁用或自定义此行为,例如使用代理访问API,你可以传递一个用于所有请求的httpAgent,例如:

    import http from 'http';
    import HttpsProxyAgent from 'https-proxy-agent';
    
    // 配置所有请求的默认值:
    const openai = new OpenAI({
      httpAgent: new HttpsProxyAgent(process.env.PROXY_URL),
    });
    
    // 或者,按请求配置:
    await openai.models.list({
      baseURL: 'http://localhost:8080/test-api',
      httpAgent: new http.Agent({ keepAlive: false }),
    })

    语义版本

    这个包通常试图遵循SemVer约定,尽管某些不向后兼容的更改可能作为次要版本发布:

    1. 只影响静态类型的更改,不影响运行时行为。
    2. 影响库内部的更改,技术上是公共的,但不是为外部使用或记录的。 (如果你依赖这些内部变更,请在GitHub上提出问题告诉我们)
    3. 我们不希望在实际上影响绝大多数用户的情况下进行的更改。

    我们认真对待向后兼容

    性,并努力确保你可以放心升级。

    我们渴望听到你的反馈,请在GitHub上打开一个问题,提出问题、错误或建议。

    要求

    支持TypeScript >= 4.5。

    以下运行时环境受支持:

    • Node.js 16 LTS或更高版本(非EOL版本)。
    • Deno v1.28.0或更高版本,使用import OpenAI from "npm:openai"
      暂时不支持Deno Deploy。
    • Cloudflare Workers。
    • Vercel Edge Runtime。

    如果你对其他运行时环境感兴趣,请在GitHub上打开或投票提出问题。

  • 探秘Whisper:开放AI的通用语音识别模型

    在数字化时代,语音识别技术越来越受到重视。开放AI的Whisper模型是一种通用语音识别模型,它经过大规模的多样化音频数据训练,不仅可以执行多语言语音识别,还能进行语音翻译和语言识别等多项任务。

    探索Whisper的技术

    Whisper采用了Transformer序列到序列模型,它经过多项语音处理任务的训练,包括多语言语音识别、语音翻译、口语语言识别和语音活动检测。这些任务被联合表示为要由解码器预测的令牌序列,使得单一模型可以替代传统语音处理流程中的许多阶段。多任务训练格式使用一组特殊的令牌,这些令牌充当任务指示符或分类目标。

    设置与使用

    Whisper的训练和测试使用Python 3.9.9和PyTorch 1.10.1完成,但代码库预计与Python 3.8-3.11和较新的PyTorch版本兼容。代码库还依赖于一些Python包,最重要的是OpenAI的tiktoken,用于其快速的分词器实现。你可以使用以下命令下载和安装(或更新)Whisper的最新版本:

    pip install -U openai-whisper

    或者,以下命令将获取并安装此存储库的最新提交,以及其Python依赖项:

    pip install git+https://github.com/openai/whisper.git 

    要将包更新到此存储库的最新版本,请运行:

    pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

    此外,你需要安装命令行工具ffmpeg,这在大多数包管理器中都可以找到。

    # 在Ubuntu或Debian上
    sudo apt update && sudo apt install ffmpeg
    
    # 在Arch Linux上
    sudo pacman -S ffmpeg
    
    # 在MacOS上使用Homebrew(https://brew.sh/)
    brew install ffmpeg
    
    # 在Windows上使用Chocolatey(https://chocolatey.org/)
    choco install ffmpeg
    
    # 在Windows上使用Scoop(https://scoop.sh/)
    scoop install ffmpeg

    如果需要,你还需要安装rust,以便在tiktoken未为你的平台提供预构建的安装包时使用。如果在上述pip install命令期间看到安装错误,请按照Getting started页面的指导安装Rust开发环境。此外,你可能需要配置PATH环境变量,例如export PATH="$HOME/.cargo/bin:$PATH"。如果安装失败并出现No module named 'setuptools_rust'的错误,你需要安装setuptools_rust,例如通过运行:

    pip install setuptools-rust

    可用模型和语言

    Whisper提供五种模型大小,其中四种具有仅英语版本,提供速度和准确性的权衡。以下是可用模型的名称、近似内存需求和相对速度。

    大小 参数数量 仅英语模型 多语言模型 需要VRAM 相对速度
    微小 39 M tiny.en tiny ~1 GB ~32x
    基础 74 M base.en base ~1 GB ~16x
    小型 244 M small.en small ~2 GB ~6x
    中型 769 M medium.en medium ~5 GB ~2x
    大型 1550 M N/A large ~10 GB 1x

    对于仅用于英语应用的.en模型,特别是对于tiny.enbase.en模型,性能更好。我们观察到,对于small.enmedium.en模型,差异变得不那么显著。

    Whisper的性能因语言而异。下图显示了Fleurs数据集在large-v2模型下的语言单词错误率(WER)分布(数字越小,性能越好)。有关其他模型和数据集对应的WER分数,可以在附录D.1、D.2和D.4中找到。此外,更多的BLEU(双语评估助手)分数可以在附录D.3中找到。这些都可以在论文中找到。

    命令行使用

    以下命令将转录音频文件的语音,使用medium模型:

    whisper audio.flac audio.mp3 audio.wav --model medium

    默认设置(选择small模型)在英语转录方面表现良好。如果要转录包含非英语语音的音频文件,可以使用--language选项指定语言:

    whisper japanese.wav --
    
    language Japanese

    添加--task translate将把语音翻译成英语:

    whisper japanese.wav --language Japanese --task translate

    运行以下命令查看所有可用选项:

    whisper --help

    请查看tokenzier.py以获取所有可用语言的列表。

    Python使用

    在Python中也可以进行转录:

    import whisper
    
    model = whisper.load_model("base")
    result = model.transcribe("audio.mp3")
    print(result["text"])

    在内部,transcribe()方法会读取整个文件并使用30秒滑动窗口处理音频,对每个窗口执行自回归序列到序列的预测。

    以下是whisper.detect_language()whisper.decode()的示例用法,它们提供更低级别的访问模型的方法。

    import whisper
    
    model = whisper.load_model("base")
    
    # 加载音频并填充/修整以适应30秒
    audio = whisper.load_audio("audio.mp3")
    audio = whisper.pad_or_trim(audio)
    
    # 制作对数梅尔频谱图并将其移到与模型相同的设备上
    mel = whisper.log_mel_spectrogram(audio).to(model.device)
    
    # 检测口音
    _, probs = model.detect_language(mel)
    print(f"Detected language: {max(probs, key=probs.get)}")
    
    # 解码音频
    options = whisper.DecodingOptions()
    result = whisper.decode(model, mel, options)
    
    # 打印识别文本
    print(result.text)

    更多示例

    请使用? Show and tell类别在讨论中分享更多Whisper的示例用法和第三方扩展,例如网络演示、与其他工具的集成、不同平台的端口等。

    许可协议

    Whisper的代码和模型权重在MIT许可下发布。详细信息请参阅LICENSE

    关键词:

  • 如何充分利用大型语言模型

    如何充分利用大型语言模型

    大型语言模型的工作原理

    大型语言模型是将文本映射到文本的函数。给定一个文本输入字符串,大型语言模型会预测接下来应该出现的文本。

    大型语言模型的魔力在于,通过在大量文本上进行训练以最小化预测误差,这些模型最终学会了对这些预测有用的概念。例如,它们学会了:

    • 如何拼写
    • 语法如何工作
    • 如何改写
    • 如何回答问题
    • 如何进行对话
    • 如何用多种语言写作
    • 如何编写代码
    • 等等

    所有这些功能都不是明确编程的,它们都是在训练过程中产生的结果。

    GPT-3支持数百种软件产品,包括生产力应用程序、教育应用程序、游戏等等。

    如何控制大型语言模型

    在所有输入中,对大型语言模型影响最大的是文本提示。

    大型语言模型可以通过以下几种方式进行提示以生成输出:

    • 指令: 告诉模型你想要什么
    • 完成: 引导模型完成你想要的文本的开头
    • 演示: 向模型展示你想要的内容,可以是提示中的一些示例,也可以是精细调整训练数据集中的成百上千个示例

    下面分别展示了每种方式的示例。

    指令提示

    遵循指令的模型(例如text-davinci-003或以text-开头的任何模型)专门设计用于遵循指令。在提示的顶部(或底部,或两者兼有)编写你的指令,模型将尽力遵循指令,然后停止。指令可以很详细,所以不要害怕写一段明确详细的输出要求。

    例如指令提示:

    提取下面引用中的作者姓名。
    
    “有些人理论认为,智能种族在扩展到外太空之前就会灭绝。如果他们正确,那么夜空的寂静就是坟墓的寂静。”
    ― Ted Chiang, 《呼吸》

    输出:

    Ted Chiang

    完成提示示例

    完成式提示利用了大型语言模型试图编写它认为最有可能出现的文本的方式。为了引导模型,尝试开始一个模式或句子,这个模式或句子将由你想要看到的输出来完成。与直接指令相比,这种方式需要更多的关心和实验。此外,模型不一定知道何时停止,因此通常需要停止序列或后处理来截断生成的文本,以确保输出符合预期。

    例如完成提示:

    “有些人理论认为,智能种族在扩展到外太空之前就会灭绝。如果他们正确,那么夜空的寂静就是坟墓的寂静。”
    ― Ted Chiang, 《呼吸》
    
    这句话的作者是

    输出:

     Ted Chiang

    演示提示示例(少样本学习)

    与完成式提示类似,演示可以向模型展示你想要它做什么。这种方法有时被称为少样本学习,因为模型从提示中提供的少数示例中学习。

    例如演示提示:

    引用:
    “当理性思维一次又一次地被迫面对不可能时,它别无选择,只能适应。”
    ― N.K. Jemisin, 《第五季》
    作者: N.K. Jemisin
    
    引用:
    “有些人理论认为,智能种族在扩展到外太空之前就会灭绝。如果他们正确,那么夜空的寂静就是坟墓的寂静。”
    ― Ted Chiang, 《呼吸》
    作者:

    输出:

     Ted Chiang

    细调提示示例

    通过足够多的训练示例,你可以对自定义模型进行细调。在这种情况下,指令变得不必要,因为模型可以从提供的训练数据中学习任务。但是,包含分隔符序列(例如->###或任何不常出现在输入中的字符串)可以帮助告诉模型提示何时结束以及输出何时开始。如果没有分隔符序列,模型有可能继续详细阐述输入文本,而不是开始生成你想要看到的答案。

    例如,细调提示示例(用于已在类似提示完成对中进行自定义训练的模型):

    “有些人理论认为,智能种族在扩展到外太空之前就会灭绝。如果他们正确,那么夜空的寂静就是坟墓的寂静。”
    ― Ted Chiang, 《呼吸》
    
    ###

    输出:

     Ted Chiang

    代码能力

    大型语言模型不仅在文本方面表现出色,还在代码方面表现出色。OpenAI的专用代码模型称为[Codex](https

    ://openai.com/blog/openai-codex)。

    Codex支持超过70个产品,包括:

    • GitHub Copilot(在VS Code和其他IDE中自动完成代码)
    • Pygma(将Figma设计转化为代码)
    • Replit(具有“解释代码”按钮等功能)
    • Warp(带有AI命令搜索的智能终端)
    • Machinet(编写Java单元测试模板)

    请注意,与遵循指令的文本模型(例如text-davinci-002)不同,Codex没有经过训练以遵循指令。因此,设计良好的提示需要更多的关注。

    更多提示建议

    有关更多提示示例,请访问OpenAI Examples

    总的来说,输入提示是改进模型输出的最佳杠杆。你可以尝试一些技巧,如:

    • 提供更明确的指令。 例如,如果你希望输出是逗号分隔的列表,可以要求它返回逗号分隔的列表。如果你希望它在不知道答案时说“我不知道”,可以告诉它’如果你不知道答案,请说“我不知道”。’
    • 提供更好的示例。 如果你在提示中展示示例,请确保你的示例多样且高质量。
    • 要求模型像专家一样回答。 明确要求模型产生高质量的输出,或者产生像专家写的输出一样的输出,可以诱使模型提供更高质量的答案,因为模型认为专家会写的答案。例如,“以下答案是正确的、高质量的,由专家撰写。”
    • 提示模型写下解释其推理的一系列步骤。 例如,在最终答案之前,以“让我们一步一步地思考”之类的方式引导模型给出其推理的解释。提示模型在最终答案之前解释其推理的步骤可以增加最终答案一致且正确的可能性。
  • 开启OpenAI的力量:全面指南

    OpenAI正在用其先进的技术和强大的API彻底改变人工智能的世界。在这份全面指南中,我们将探索OpenAI的令人难以置信的潜力,以及如何利用其能力来增强你的项目和应用。无论你是开发者、研究员,还是只是对人工智能感兴趣,这份指南都将为你提供有关OpenAI的提供和资源的宝贵见解。

    开始使用OpenAI

    在我们深入探讨OpenAI的精彩世界之前,让我们确保你拥有必要的工具来开始。你需要一个OpenAI账户和一个API密钥,你可以通过创建一个免费账户来轻松获取。一旦你获得了API密钥,你就可以解锁OpenAI的可能性。

    最近的更新和亮点 ? ✨

    随时关注OpenAI的最新发展和增强功能:

    探索OpenAI的能力

    OpenAI提供了广泛的工具和资源,以下是一些要探索的关键领域:

    API使用

    处理速率限制

    在使用OpenAI API时,管理速率限制至关重要。了解如何有效地处理速率限制并优化你的API使用,参考我们的指南:如何处理速率限制

    GPT模型

    格式化输入到ChatGPT模型

    发现将输入格式化为ChatGPT模型的最佳实践,以获得最准确和相关的响应:如何格式化输入到ChatGPT模型

    嵌入

    文本比较示例

    了解如何使用嵌入进行文本比较,以及它的应用领域:文本比较示例

    DALL-E

    生成和编辑图像

    探索如何使用DALL·E生成和编辑图像的方法:如何生成和编辑DALL·E图像

    Whisper

    Whisper提示指南

    深入了解如何使用Whisper进行提示以生成文本:Whisper提示指南

    相关OpenAI资源

    除了这里的代码示例,你还可以从以下资源中了解有关OpenAI API的信息:

    相关网络资源

    人们正在编写出色的工具和论文来改善GPT的输出。以下是一些我们看到的很棒的工具:

    提示库和工具

    • Guidance:来自Microsoft的一个便捷的Python库,使用Handlebars模板来交错生成、提示和逻辑控制。
    • LangChain:一个流行的Python/JavaScript库,用于链接语言模型提示的序列。
    • FLAML(自动化机器学习和调整的快速库):用于自动选择模型、超参数和其他可调参数的Python库。
    • Chainlit:用于创建聊天机器人界面的Python库。
    • Guardrails.ai:用于验证输出并重新尝试故障的Python库。仍处于alpha阶段,因此请预期存在问题和错误。
    • Semantic Kernel:来自Microsoft的一款支持提示模板、函数链接、矢量化存储和智能规划的Python/C#库。
    • Prompttools:用于测试和评估模型、矢量数据库和提示的开源Python工具。
    • Outlines:提供领域特定语言以简化提示和限制生成的Python库。
    • Promptify:一个用于使用语言模型执行NLP任务的小型Python库。
    • Scale Spellbook:一个用于构建、

    比较和发布语言模型应用程序的付费产品。

    • PromptPerfect:一个用于测试和改进提示的付费产品。
    • Weights & Biases:一个用于跟踪模型训练和提示工程实验的付费产品。
    • OpenAI Evals:用于评估语言模型和提示任务性能的开源库。
    • LlamaIndex:用于通过数据增强LLM应用的Python库。
    • Arthur Shield:一个用于检测毒性、幻觉、提示注入等的付费产品。
    • LMQL:用于LLM交互的编程语言,支持类型提示、控制流、约束和工具。

    提示指南

    视频课程

    提高推理能力的高级提示的论文

    尝试任务,可以提高随后的性能。

    贡献

    如果有你希望看到的示例或指南,请随时在问题页面上提出建议。我们也很高兴接受高质量的拉取请求,只要它们符合仓库的范围。

  • 打造强大的红色警戒2 AI玩家:Python训练教程

    在这个激动人心的教程中,你将学会如何使用Python来训练一个强大的人工智能(AI)玩家,使其能够在《红色警戒2》(Red Alert 2)这款经典游戏中与你一较高下。不再面对单调的游戏模式,让我们来创建一个智能的对手吧!

    准备工作

    在开始之前,你需要准备以下工作:

    1. 安装Python和所需的库: 如果你尚未安装Python,你可以从Python官方网站下载并安装最新版本。另外,我们将使用TensorFlow来构建深度学习模型,你可以使用以下命令来安装:

      pip install tensorflow
    2. 下载并安装红警2: 你需要购买并安装《红色警戒2》游戏,以便我们的AI玩家能够与游戏互动。

    3. 了解游戏规则: 在开始训练之前,确保你对《红色警戒2》游戏的基本规则和战略有一定的了解,这将有助于你为AI定义游戏策略。

    第一步:导入必要的库

    首先,让我们导入一些必要的Python库,以便我们能够构建AI玩家所需的模型和工具。

    import tensorflow as tf
    from tensorflow import keras
    import numpy as np
    import random

    第二步:收集游戏数据

    在开始训练之前,你需要收集游戏数据,包括游戏状态、动作和奖励。你可以创建一个Python脚本来模拟游戏,并在游戏中收集这些数据。以下是一个示例:

    # 模拟游戏状态
    game_state = ...
    
    # 选择一个随机动作
    action = random.choice(["build_unit", "attack_enemy", "move_unit"])
    
    # 计算奖励
    reward = ...

    第三步:构建深度强化学习模型

    现在,让我们构建一个深度强化学习模型,以便AI可以根据游戏状态选择最佳的动作。我们将使用TensorFlow来创建模型。

    model = keras.Sequential([
        keras.layers.Dense(64, activation='relu', input_shape=(game_state_size,)),
        keras.layers.Dense(32, activation='relu'),
        keras.layers.Dense(action_space_size, activation='linear')
    ])

    第四步:训练AI模型

    使用收集的游戏数据,你可以开始训练AI模型。在这一步中,你将定义训练过程、损失函数和优化器,并让AI模型逐渐学习游戏策略。

    model.compile(optimizer='adam', loss='mse')
    
    # 训练模型
    model.fit(game_states, q_values, epochs=1000)

    第五步:测试你的AI玩家

    一旦你的AI模型训练完成,你可以测试它在《红色警戒2》游戏中的表现。启动游戏并让AI玩家代替你进行游戏,观察它的表现和决策是否合理。

    第六步:优化和改进

    AI玩家的性能可能需要不断优化和改进。你可以尝试不同的模型架构、调整超参数或增加更多的训练数据来提高AI的表现。

    结论

    通过这个教程,你学会了如何使用Python和深度学习来训练一个智能的《红色警戒2》AI玩家。让你的游戏体验更具挑战性和乐趣,不再与AI玩家为敌,而是一同探索游戏的乐趣吧!

    希望你能够享受这个项目,并不断改进你的AI玩家。祝你在《红色警戒2》中获得胜利!

    参考资料

  • 高端投影仪与OLED电视:观感之争

    介绍

    高端投影仪与OLED电视,两者在影音娱乐世界中一直存在着激烈的竞争。本文将深入探讨它们的优势、差异以及适用场景,帮助您更好地理解如何在这两者之间做出明智的选择。

    OLED电视:色彩的奇迹

    OLED电视以其卓越的色彩表现而令人惊叹。每个像素都能独立发光,这意味着它可以实现真正的绝对黑色,同时色彩更加鲜艳,对比度更高。下表展示了OLED电视的一些卓越特点:

    特点 描述
    绝对黑色 完美的黑色表现
    鲜艳的色彩 生动、逼真的图像
    极快的响应时间 消除运动模糊
    高对比度 深邃的黑色和明亮的高光

    高端投影仪:巨幕的魅力

    然而,高端投影仪也有其独特的吸引力,尤其是在需要巨幕的情况下。投影仪的巨大屏幕效果无疑是无法匹敌的,但也伴随着一些挑战。下表总结了高端投影仪的特点:

    特点 描述
    巨大屏幕 家庭影院体验的极致选择
    较低的价格 在大尺寸方面更具吸引力
    需要适当的环境光线 明亮环境下可能受到影响
    安装空间要求 需要足够的距离来投射大尺寸画面

    影院放映机与家庭使用

    为什么一些影院仍然坚持使用投影仪和幕布的组合呢?这个问题有几个关键因素需要考虑:

    1. 尺寸需求:影院需要大屏幕以满足观众的需求。一些影院可能要播放大规模的影片,因此投影仪是唯一的选择。

    2. 观影环境:影院可以控制光线,确保观众在黑暗中观看,从而提高观影体验。这种环境对于投影仪的效果至关重要。

    3. 特殊需求:某些影院可能需要投影仪来播放特定类型的内容,例如3D电影或高动态范围(HDR)内容。

    然而,对于家庭用户来说,情况可能不同。在家中观看电影或电视节目时,您可以更好地控制光线和观影环境,这有助于OLED电视提供更出色的画质和观感。

    结论

    高端投影仪和OLED电视各有优势。OLED电视以其卓越的色彩表现和画质而脱颖而出,适合大多数家庭观众。而高端投影仪则在提供巨幕观影体验方面具有无可比拟的魅力,前提是您拥有足够的空间和能够控制光线的环境。

    最终的选择取决于您的个人需求和预算。无论您选择哪种设备,都能够享受到精彩的娱乐体验。