如何在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
相关产品推荐
相关产品推荐

