You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GCP Compute Engine上运行含PCA、KNN的图像分类Python脚本?

在GCP Compute Engine上运行图像分类Python脚本指南

我来一步步教你搞定在GCP Compute Engine上运行你的图像分类脚本,处理那2000多张RGB图的需求~

1. 创建适配的Compute Engine实例

首先得选对机器配置,毕竟要处理大量图像,得有足够的算力和内存:

  • 登录GCP控制台,进入Compute Engine > 虚拟机实例 > 创建实例
  • 配置参考:
    • 机器类型:至少选n2-standard-4(4vCPU+16GB内存),如果后续跑起来觉得慢,可以随时升级配置
    • 启动磁盘:选Ubuntu 22.04 LTS(你熟悉的其他Linux发行版也可以),磁盘大小至少30GB(要装依赖+存2000张图)
    • 防火墙:勾选「允许HTTP流量」和「允许HTTPS流量」,方便后续用SSH连接

2. 连接到你的虚拟机实例

实例创建好后,直接点击实例列表里的「SSH」按钮就能在浏览器里连接;或者用本地终端的gcloud命令连接:

gcloud compute ssh [你的实例名称] --zone [实例所在区域]

3. 安装脚本依赖的工具和库

你的脚本用到了cv2、numpy、sklearn这些库,先把系统和依赖都装好:

# 更新系统包
sudo apt update && sudo apt upgrade -y

# 安装Python和pip
sudo apt install python3 python3-pip -y

# 安装Python依赖库
pip3 install opencv-python numpy scikit-learn

如果装opencv时遇到依赖报错,先装这个依赖再重试:

sudo apt install libgl1-mesa-glx -y

4. 上传你的图像数据集和Python脚本

有两种简单的上传方式:

  • 本地终端上传(适合批量传文件夹):
    # 上传Images文件夹到实例的home目录
    gcloud compute scp --recurse ./Images [你的实例名称]:~/ --zone [实例所在区域]
    # 上传你的Python脚本(假设脚本叫image_classify.py)
    gcloud compute scp ./image_classify.py [你的实例名称]:~/ --zone [实例所在区域]
    
  • 浏览器SSH上传:在浏览器的SSH窗口右上角点齿轮图标,选「上传文件」,可以直接拖放文件或文件夹

5. 补全并优化你的Python脚本

你提供的脚本里preprocessing.Nor...是截断的,我帮你补全了完整的流程,包括标签处理、模型训练和评估,直接用就行:

import cv2
import numpy as np
import os
from glob import glob
from sklearn.decomposition import PCA
from sklearn import neighbors
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

data = []
labels = []

# 假设你的Images文件夹是按类别分的子文件夹(比如Images/cat/xxx.jpg)
# 如果不是,你需要根据自己的文件名规则调整标签逻辑
for class_dir in glob('Images/*'):
    class_label = os.path.basename(class_dir)
    for filename in glob(f'{class_dir}/*.jpg'):
        img = cv2.imread(filename)
        if img is None:
            print(f"跳过无法读取的文件: {filename}")
            continue
        height, width = img.shape[:2]
        # 检查图像分辨率是否符合要求
        if height == 529 and width == 940:
            # 把图像展平为一维数组
            img_flatten = img.flatten()
            data.append(img_flatten)
            labels.append(class_label)

# 转换为numpy数组
data = np.array(data)
labels = np.array(labels)

# 数据标准化(补全你截断的部分)
scaler = preprocessing.StandardScaler()
data_scaled = scaler.fit_transform(data)

# 用PCA降维,保留95%的方差
pca = PCA(n_components=0.95)
data_pca = pca.fit_transform(data_scaled)
print(f"PCA降维后特征数: {data_pca.shape[1]}")

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data_pca, labels, test_size=0.2, random_state=42)

# 训练KNN模型
knn = neighbors.KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

# 预测并评估模型准确率
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"KNN模型准确率: {accuracy:.2f}")

6. 运行脚本

在SSH终端里进入脚本所在目录(比如home目录),直接运行:

python3 image_classify.py

如果数据量大,运行时间长,怕断开SSH中断进程的话,可以用nohup让脚本在后台运行:

nohup python3 image_classify.py > output.log 2>&1 &

之后用tail -f output.log就能实时查看运行日志。

7. 可选:性能优化小技巧

  • 如果处理速度慢,可以升级实例的CPU/内存,或者选择带GPU的实例(不过sklearn的KNN主要靠CPU,GPU提升有限,PCA可以用GPU加速但需要额外配置CUDA)
  • 可以把图像存在GCS(Google Cloud Storage),然后挂载到实例上,避免每次上传数据:
    # 安装gcsfuse工具
    export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
    echo "deb https://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    sudo apt update && sudo apt install gcsfuse -y
    
    # 创建挂载目录并挂载GCS桶
    mkdir ~/gcs_images
    gcsfuse [你的GCS桶名称] ~/gcs_images
    
    之后脚本里的图像路径改成~/gcs_images/xxx.jpg就行。

内容的提问来源于stack exchange,提问作者Outcast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:23:53