视频调优

本页面提供了使用监督学习对 Gemini 进行视频数据微调的先决条件和详细说明。

使用场景

借助微调,您可以调整基础 Gemini 模型,使其适合专门任务。以下是一些视频用例:

  • 自动视频摘要:调优 LLM 以生成简明连贯的长视频摘要,捕捉主要主题、事件和叙事内容。这有助于内容发现、归档和快速审核。

  • 详细的事件识别和定位:通过微调,LLM 可以更准确地识别和精确定位视频时间轴中的特定动作、事件或对象。例如,识别营销视频中特定产品的所有实例,或体育赛事片段中的特定动作。

  • 内容审核:通过专业调优,可以提高 LLM 检测视频中敏感、不当或违反政策的内容的能力,从而超越简单的对象检测,理解背景信息和细微差别。

  • 视频字幕:虽然这已是常见应用,但通过调优,可以提高自动生成的字幕的准确性、流畅性和上下文感知能力,包括对非语言提示的描述。

限制

  • 视频文件大小上限:100MB。 这可能不足以满足大型视频文件的需求。以下是一些建议的解决方法:
    • 如果大型文件很少,请从 JSONL 文件中排除这些文件。
    • 如果数据集中包含许多无法忽略的大文件,请降低文件的视觉分辨率。这可能会影响性能。
    • 将视频分块,使文件大小不超过 100MB,并使用分块后的视频进行调优。请务必将与原始视频对应的所有时间戳注解更改为新的(分块)视频时间轴。
  • 每个示例的视频时长上限:每个示例限 1 个视频。如果使用 MEDIA_RESOLUTION_HIGHMEDIA_RESOLUTION_MEDIUM,视频时长上限为 5 分钟;如果使用 MEDIA_RESOLUTION_LOW,视频时长上限为 20 分钟。
  • 舍弃的示例:如果某个示例包含的视频时长超过支持的最大时长,则该示例会从数据集中舍弃。舍弃的示例不会产生费用,也不会用于训练。如果舍弃的示例占数据集的 10% 以上,则作业会在训练开始前失败,并显示错误消息。
  • 不支持混合使用不同的媒体分辨率:整个训练数据集中每个示例的 mediaResolution 值必须保持一致。用于训练和验证的 JSONL 文件中的所有行都应具有相同的 mediaResolution 值。

数据集格式

fileUri 字段用于指定数据集的位置。它可以是 Cloud Storage 存储桶中文件的 URI,也可以是可公开访问的 HTTP 或 HTTPS 网址。

mediaResolution 字段用于指定输入视频每帧的 token 数量。以下内容介绍了受支持模型的词元数:

  • Gemini 2.5

    • MEDIA_RESOLUTION_LOW:每帧 64 个 token

    • MEDIA_RESOLUTION_MEDIUMMEDIA_RESOLUTION_HIGH:每帧 256 个 token

    使用 MEDIA_RESOLUTION_LOW 进行模型调优的速度比使用 MEDIA_RESOLUTION_MEDIUMMEDIA_RESOLUTION_HIGH 进行调优的速度快大约 4 倍,但性能提升幅度很小。

  • Gemini 3

    词元数与基础模型相同。如需了解详情,请参阅媒体分辨率

如果视频片段用于训练和验证,则该视频片段位于 videoMetadata 字段中。在调优期间,系统会对该数据点进行解码,以包含从指定视频文件中提取的片段的信息,从时间戳 startOffset(开始偏移量,以秒为单位)开始,一直到 endOffset

如需查看通用格式示例,请参阅适用于 Gemini 的数据集示例

以下各部分介绍了视频数据集格式示例。

JSON 架构示例,适用于使用完整视频进行训练和验证的情况

此架构将作为 JSONL 文件中的单行添加。

{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "fileData": {
            "fileUri": "gs://<path to the mp4 video file>",
            "mimeType": "video/mp4"
          },
        },
        {
          "text": "
          You are a video analysis expert. Detect which animal appears in the
          video.The video can only have one of the following animals: dog, cat,
          rabbit.\n Output Format:\n Generate output in the following JSON
          format:\n
          [{\n
            \"animal_name\": \"<CATEGORY>\",\n
          }]\n"
        }
      ]
    },
    {
      "role": "model",
      "parts": [
        {
          "text": "```json\n[{\"animal_name\": \"dog\"}]\n```"
        }
       ]
    },
  ],
  "generationConfig": {
    "mediaResolution": "MEDIA_RESOLUTION_LOW"
  }
}

(仅限 Gemini 3 及更高版本的模型)从 Gemini 3 模型开始,您还可以为每个媒体单独设置分辨率Part。这样,您就可以在数据集中混合使用不同的分辨率(例如,将一个项设置为 MEDIA_RESOLUTION_HIGH,另一个项设置为 MEDIA_RESOLUTION_LOW)。如需详细了解部分级分辨率及其对应的令牌数量,请参阅媒体分辨率

Part 级媒体分辨率设置优先于全局设置。

以下是一个数据集示例,其中在 Part 级别和全局级别设置了媒体分辨率:

{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "fileData": {
            "fileUri": "gs://<path to the mp4 video file>",
            "mimeType": "video/mp4"
          }
        },
        {
          "fileData": {
            "fileUri": "gs://<path to the mp4 video file>",
            "mimeType": "video/mp4"
          },
          "mediaResolution": {
            "level": "MEDIA_RESOLUTION_HIGH"
          }
        },
        {
          "text": "Describe these videos in detail."
        }
      ]
    },
    {
      "role": "model",
      "parts": [
        {
          "text": "Video 1 is low resolution while video 2 is sharp and clear"
        }
      ]
    }
  ],
  "generationConfig": {
    "mediaResolution": "MEDIA_RESOLUTION_LOW"
  }
}

JSON 架构示例,适用于使用视频片段进行训练和验证的情况

此架构将作为 JSONL 文件中的单行添加。

{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "fileData": {
            "fileUri": "gs://<path to the mp4 video file>",
            "mimeType": "video/mp4"
          },
         "videoMetadata": {
            "startOffset": "5s",
            "endOffset": "25s"
          }
        },
        {
          "text": "
          You are a video analysis expert. Detect which animal appears in the
          video.The video can only have one of the following animals: dog, cat,
          rabbit.\n Output Format:\n Generate output in the following JSON
          format:\n
          [{\n
            \"animal_name\": \"<CATEGORY>\",\n
          }]\n"
       }
      ]
   },
   {
      "role": "model",
      "parts": [
        {
          "text": "```json\n[{\"animal_name\": \"dog\"}]\n```"
        }
      ]
    },
  ],
"generationConfig": {
     "mediaResolution": "MEDIA_RESOLUTION_LOW"
  }
}

后续步骤