Add two additional files to the util directory. (#1981)

* Add the first util class to the vertex-vision-model-garden repo

* Updated file names.

* Delete the 1st incorrect file set.

* Add the codeowners

* Revised the file folder structures.

* Add two additional files to the util directory.
This commit is contained in:
weigary
2023-06-16 19:23:32 +00:00
committed by GitHub
parent 6bb255bc5f
commit c97aedf227
2 changed files with 143 additions and 0 deletions
@@ -0,0 +1,64 @@
"""Vertex vision model garden util constants."""
# Objectives.
OBJECTIVE_IMAGE_CLASSIFICATION = 'icn'
OBJECTIVE_IMAGE_OBJECT_DETECTION = 'iod'
OBJECTIVE_IMAGE_SEGMENTATION = 'isg'
# Input file types.
INPUT_FILE_TYPE_CSV = 'csv'
INPUT_FILE_TYPE_JSONL = 'jsonl'
INPUT_FILE_TYPE_COCO_JSON = 'coco_json'
# Output file types.
OUTPUT_FILE_TYPE_TFRECORD = 'tfrecord'
OUTPUT_FILE_TYPE_COCO_JSON = 'coco_json'
# Best evaluation metrics.
IMAGE_CLASSIFICATION_SINGLE_LABEL_BEST_EVAL_METRIC = 'accuracy'
IMAGE_CLASSIFICATION_MULTI_LABEL_BEST_EVAL_METRIC = 'meanPR-AUC'
IMAGE_OBJECT_DETECTION_BEST_EVAL_METRIC = 'AP50'
IMAGE_SEGMENTATION_BEST_EVAL_METRIC = 'mean_iou'
VIDEO_CLASSIFICATION_BEST_EVAL_METRIC = 'accuracy'
# Best checkpoints.
BEST_CKPT_DIRNAME = 'best_ckpt'
BEST_CKPT_EVAL_FILENAME = 'info.json'
BEST_CKPT_STEP_NAME = 'best_ckpt_global_step'
BEST_CKPT_METRIC_COMP = 'higher'
# Reported hyperparameter tuning metric tag.
HP_METRIC_TAG = 'model_performance'
# HPT trial prefix.
TRIAL_PREFIX = 'trial_'
# ML uses from user input.
ML_USE_TRAINING = 'training'
ML_USE_VALIDATION = 'validation'
ML_USE_TEST = 'test'
# COCO json keys
COCO_JSON_ANNOTATIONS = 'annotations'
COCO_JSON_ANNOTATION_IMAGE_ID = 'image_id'
COCO_JSON_ANNOTATION_CATEGORY_ID = 'category_id'
COCO_JSON_CATEGORIES = 'categories'
COCO_JSON_CATEGORY_ID = 'id'
COCO_JSON_CATEGORY_NAME = 'name'
COCO_JSON_FILE_NAME = 'file_name'
COCO_JSON_IMAGES = 'images'
COCO_JSON_IMAGE_ID = 'id'
COCO_JSON_IMAGE_WIDTH = 'width'
COCO_JSON_IMAGE_HEIGHT = 'height'
COCO_JSON_IMAGE_COCO_URL = 'coco_url'
COCO_ANNOTATION_BBOX = 'bbox'
# GCS prefixes
GCS_URI_PREFIX = 'gs://'
GCSFUSE_URI_PREFIX = '/gcs/'
LOCAL_EVALUATION_RESULT_DIR = '/tmp/evaluation_result_dir'
LOCAL_MODEL_DIR = '/tmp/model_dir'
LOCAL_DATA_DIR = '/tmp/data'
@@ -0,0 +1,79 @@
"""Fileutil lib to copy files between gcs and local."""
import glob
import os
from absl import logging
from google.cloud import storage
from google3.cloud.ml.applications.vision.model_garden.model_oss.util import constants
def download_gcs_file_to_local(gcs_uri: str, local_path: str):
"""Download a gcs file to a local path.
Args:
gcs_uri: A string of file path on GCS.
local_path: A string of local file path.
"""
if not gcs_uri.startswith(constants.GCS_URI_PREFIX):
raise ValueError(
f'{gcs_uri} is not a GCS path starting with {constants.GCS_URI_PREFIX}.'
)
client = storage.Client()
os.makedirs(os.path.dirname(local_path), exist_ok=True)
with open(local_path, 'wb') as f:
client.download_blob_to_file(gcs_uri, f)
def download_gcs_dir_to_local(gcs_dir: str, local_dir: str):
"""Downloads files in a GCS directory to a local directory.
For example:
download_gcs_dir_to_local(gs://bucket/foo, /tmp/bar)
gs://bucket/foo/a -> /tmp/bar/a
gs://bucket/foo/b/c -> /tmp/bar/b/c
Arguments:
gcs_dir: A string of directory path on GCS.
local_dir: A string of local directory path.
"""
bucket_name = gcs_dir.split('/')[2]
prefix = gcs_dir[len(constants.GCS_URI_PREFIX + bucket_name) :].strip('/')
client = storage.Client()
blobs = client.list_blobs(bucket_name, prefix=prefix)
for blob in blobs:
if blob.name[-1] == '/':
continue
file_path = blob.name[len(prefix) :].strip('/')
local_file_path = os.path.join(local_dir, file_path)
os.makedirs(os.path.dirname(local_file_path), exist_ok=True)
logging.info('Downloading %s to %s', file_path, local_file_path)
blob.download_to_filename(local_file_path)
def upload_local_dir_to_gcs(local_dir: str, gcs_dir: str):
"""Uploads local dir to gcs.
For example:
upload_local_dir_to_gcs(/tmp/bar, gs://bucket/foo)
gs://bucket/foo/a -> /tmp/bar/a
gs://bucket/foo/b/c -> /tmp/bar/b/c
Arguments:
local_dir: A string of local directory path.
gcs_dir: A string of directory path on GCS.
"""
bucket_name = gcs_dir.split('/')[2]
blob_dir = '/'.join(gcs_dir.split('/')[3:])
client = storage.Client()
bucket = client.bucket(bucket_name)
for local_file in glob.glob(local_dir + '/**'):
if os.path.isfile(local_file):
logging.info(
'Uploading %s to %s',
local_file,
os.path.join(constants.GCS_URI_PREFIX, bucket_name, blob_dir),
)
blob = bucket.blob(os.path.join(blob_dir, os.path.basename(local_file)))
blob.upload_from_filename(local_file)