From b430c11dc7447fc440841ec13ac303285e2d9f38 Mon Sep 17 00:00:00 2001 From: Gao Enhao Date: Thu, 28 Dec 2023 01:09:46 +0800 Subject: [PATCH] [MNT] add win action and resolve problem of HED under win --- .github/workflows/build-and-test.yaml | 2 +- docs/Examples/HED.rst | 2 +- examples/hed/bridge.py | 14 ++++++++++---- examples/hed/datasets/get_dataset.py | 15 ++++++++------- examples/hed/hed.ipynb | 2 +- examples/hed/main.py | 2 +- examples/hed/reasoning/reasoning.py | 1 + 7 files changed, 23 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index 6f3e6fd..5b560ef 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest] + os: [ubuntu-latest, windows-latest] python-version: ['3.7', '3.8', '3.9', '3.10', '3.11'] steps: - uses: actions/checkout@v2 diff --git a/docs/Examples/HED.rst b/docs/Examples/HED.rst index 5e01767..1e6eb89 100644 --- a/docs/Examples/HED.rst +++ b/docs/Examples/HED.rst @@ -295,5 +295,5 @@ Perform pretraining, training and testing by invoking the ``pretrain``, ``train` weights_dir = osp.join(log_dir, "weights") bridge.pretrain("./weights") - bridge.train(train_data, val_data) + bridge.train(train_data, val_data, save_dir=weights_dir) bridge.test(test_data) diff --git a/examples/hed/bridge.py b/examples/hed/bridge.py index 0386d8c..f20f2eb 100644 --- a/examples/hed/bridge.py +++ b/examples/hed/bridge.py @@ -193,7 +193,7 @@ class HedBridge(SimpleBridge): return data_examples - def train(self, train_data, val_data, segment_size=10, min_len=5, max_len=8): + def train(self, train_data, val_data, segment_size=10, min_len=5, max_len=8, save_dir="./"): for equation_len in range(min_len, max_len): print_log( f"============== equation_len: {equation_len}-{equation_len + 1} ================", @@ -234,7 +234,9 @@ class HedBridge(SimpleBridge): seems_good = self.check_rule_quality(rules, val_data, equation_len) if seems_good: self.reasoner.kb.learned_rules.update({equation_len: rules}) - self.model.save(save_path=f"./weights/eq_len_{equation_len}.pth") + self.model.save( + save_path=os.path.join(save_dir, f"eq_len_{equation_len}.pth") + ) break else: if equation_len == min_len: @@ -242,9 +244,13 @@ class HedBridge(SimpleBridge): "Learned mapping is: " + str(self.reasoner.idx_to_label), logger="current", ) - self.model.load(load_path="./weights/pretrain_weights.pth") + self.model.load( + load_path=os.path.join(save_dir, f"pretrain_weights.pth") + ) else: - self.model.load(load_path=f"./weights/eq_len_{equation_len - 1}.pth") + self.model.load( + load_path=os.path.join(save_dir, f"eq_len_{equation_len - 1}.pth") + ) condition_num = 0 print_log("Reload Model and retrain", logger="current") diff --git a/examples/hed/datasets/get_dataset.py b/examples/hed/datasets/get_dataset.py index ced1463..61c6df5 100644 --- a/examples/hed/datasets/get_dataset.py +++ b/examples/hed/datasets/get_dataset.py @@ -4,8 +4,8 @@ import pickle import random import zipfile from collections import defaultdict +from PIL import Image -import cv2 import gdown import numpy as np from torchvision.transforms import transforms @@ -32,14 +32,15 @@ def get_pretrain_data(labels, image_size=(28, 28, 1)): label_path = osp.join(img_dir, label) img_path_list = os.listdir(label_path) for img_path in img_path_list: - img = cv2.imread(osp.join(label_path, img_path), cv2.IMREAD_GRAYSCALE) - img = cv2.resize(img, (image_size[1], image_size[0])) - X.append(np.array(img, dtype=np.float32)) + with Image.open(osp.join(label_path, img_path)) as img: + img = img.convert('L') + img = img.resize((image_size[1], image_size[0])) + img_array = np.array(img, dtype=np.float32) + normalized_img = (img_array - 127) / 128.0 + X.append(normalized_img) - X = [((img[:, :, np.newaxis] - 127) / 128.0) for img in X] Y = [img.copy().reshape(image_size[0] * image_size[1] * image_size[2]) for img in X] - - X = [transform(img) for img in X] + X = [transform(img[:, :, np.newaxis]) for img in X] return X, Y diff --git a/examples/hed/hed.ipynb b/examples/hed/hed.ipynb index de484f5..5d8bb8e 100644 --- a/examples/hed/hed.ipynb +++ b/examples/hed/hed.ipynb @@ -396,7 +396,7 @@ "weights_dir = osp.join(log_dir, \"weights\")\n", "\n", "bridge.pretrain(weights_dir)\n", - "bridge.train(train_data, val_data)\n", + "bridge.train(train_data, val_data, save_dir=weights_dir)\n", "bridge.test(test_data)" ] } diff --git a/examples/hed/main.py b/examples/hed/main.py index e2233c4..c672765 100644 --- a/examples/hed/main.py +++ b/examples/hed/main.py @@ -95,7 +95,7 @@ def main(): weights_dir = osp.join(log_dir, "weights") bridge.pretrain(weights_dir) - bridge.train(train_data, val_data) + bridge.train(train_data, val_data, save_dir=weights_dir) bridge.test(test_data) diff --git a/examples/hed/reasoning/reasoning.py b/examples/hed/reasoning/reasoning.py index 788fbc3..43cb9d7 100644 --- a/examples/hed/reasoning/reasoning.py +++ b/examples/hed/reasoning/reasoning.py @@ -10,6 +10,7 @@ CURRENT_DIR = os.path.abspath(os.path.dirname(__file__)) class HedKB(PrologKB): def __init__(self, pseudo_label_list=[1, 0, "+", "="], pl_file=os.path.join(CURRENT_DIR, "learn_add.pl")): + pl_file = pl_file.replace("\\", "/") super().__init__(pseudo_label_list, pl_file) self.learned_rules = {}