Skip to content

Commit 8c85e9b

Browse files
committed
Implemented ncpu arg for denoiser.
1 parent 0798a7b commit 8c85e9b

5 files changed

Lines changed: 38 additions & 23 deletions

File tree

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ RUN python -m pip install --no-cache-dir --no-cache /opt/PartiNet
88

99
LABEL AUTHORS Mihin Perera, Edward Yang, Julie Iskander
1010
LABEL MAINTAINERS Mihin Perera, Edward Yang, Julie Iskander
11-
LABEL VERSION v0.1.1
11+
LABEL VERSION v0.2.0

Singularity

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ from: python:3.9.19-slim-bookworm
1818
%labels
1919
AUTHORS Mihin Perera, Edward Yang, Julie Iskander
2020
MAINTAINERS Mihin Perera, Edward Yang, Julie Iskander
21-
VERSION v0.1.1
21+
VERSION v0.2.0

partinet/__init__.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import click
22
import sys, os
33

4-
__version__ = "0.1.1"
4+
__version__ = "0.2.0"
55

66
DYNAMICDET_AVAILABLE_MODELS = ["yolov7", "yolov7x", "yolov7-w6", "yolov7-e6", "yolov7-d6", "yolov7-e6e"]
77

@@ -60,31 +60,32 @@ def main():
6060
pass
6161

6262
@main.command()
63-
@click.option("--labels", required=True, help="Path to the labels directory")
64-
@click.option("--images", required=True, help="Path to the images directory")
65-
@click.option("--output", required=True, help="Path to the output directory")
63+
@click.option("--labels", type=str, required=True, help="Path to the labels directory")
64+
@click.option("--images", type=str, required=True, help="Path to the images directory")
65+
@click.option("--output", type=str, required=True, help="Path to the output directory")
6666
def split(labels, images, output):
6767
click.echo("Splitting micrographs for training and validation...")
6868
import partinet.process_utils.split_train
6969
partinet.process_utils.split_train.main(labels, images, output)
7070

7171
@main.command()
72-
@click.option("--labels", required=True, help="Path to the labels directory")
73-
@click.option("--images", required=True, help="Path to the images directory")
74-
@click.option("--output", required=True, help="Path to the output STAR file")
75-
@click.option("--conf", default=0.0, help="Minimum confidence threshold from predictions")
72+
@click.option("--labels", type=str, required=True, help="Path to the labels directory")
73+
@click.option("--images", type=str, required=True, help="Path to the images directory")
74+
@click.option("--output", type=str, required=True, help="Path to the output STAR file")
75+
@click.option("--conf", type=float, default=0.0, help="Minimum confidence threshold from predictions")
7676
def star(labels, images, output,conf):
7777
click.echo("Generating STAR file...")
7878
import partinet.process_utils.star_file
7979
partinet.process_utils.star_file.main(labels,images,output,conf)
8080

8181
@main.command()
82-
@click.option("--source", required=True, help="Path to Raw micrographs")
83-
@click.option('--project', required=True, help='save denoised micrographs to project/denoised', show_default=True)
84-
def denoise(source, project):
82+
@click.option("--source", type=str, required=True, help="Path to Raw micrographs")
83+
@click.option('--project', type=str, required=True, help='save denoised micrographs to project/denoised', show_default=True)
84+
@click.option('--num_workers', type=int, default=None, help='Number of workers for denoising micrographs')
85+
def denoise(source, project, num_workers):
8586
click.echo("Denoising micrographs...")
8687
import partinet.process_utils.pooled_denoise_proc
87-
partinet.process_utils.pooled_denoise_proc.main(source,project)
88+
partinet.process_utils.pooled_denoise_proc.main(source,project,num_workers)
8889

8990

9091
@main.group()

partinet/process_utils/pooled_denoise_proc.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import gc
99
from concurrent.futures import ProcessPoolExecutor
1010

11-
MAX_WORKERS = max(1, multiprocessing.cpu_count() // 2)
11+
# MAX_WORKERS = max(1, multiprocessing.cpu_count() // 2)
1212

1313
def clahe_denoise(args):
1414
try:
@@ -21,7 +21,7 @@ def clahe_denoise(args):
2121
except Exception as e:
2222
logging.error(f"Failed to process {src_path}: {str(e)}")
2323

24-
def process_directory(micrographs_dir, clahe_denoised_dir):
24+
def process_directory(micrographs_dir, clahe_denoised_dir,MAX_WORKERS):
2525
os.makedirs(clahe_denoised_dir, exist_ok=True)
2626
logging.info(f"Directory ready: {clahe_denoised_dir}")
2727

@@ -41,25 +41,41 @@ def process_directory(micrographs_dir, clahe_denoised_dir):
4141
future.result()
4242
gc.collect()
4343

44-
def main(source_dir, project_dir):
44+
def main(source_dir, project_dir, ncpu):
4545
logging.basicConfig(filename="partinet_denoise.log", level=logging.INFO, format='%(asctime)s - %(message)s')
46+
logging.getLogger().addHandler(logging.StreamHandler())
47+
4648
denoise_dir = os.path.join(project_dir,"denoised")
4749
logger_name = project_dir + "/partinet_denoise.log"
4850
logging.basicConfig(filename=logger_name, level=logging.INFO, format='%(asctime)s - %(message)s')
49-
num_cpus = multiprocessing.cpu_count()
50-
logging.info(f"Number of available CPUs: {num_cpus}")
51+
52+
max_available_cpus = multiprocessing.cpu_count()
53+
max_workers = max(1, max_available_cpus // 2)
54+
55+
if ncpu is not None:
56+
ncpu = min(ncpu, max_workers)
57+
else:
58+
ncpu = max_workers
59+
60+
logging.info(f"Using {ncpu} workers out of {max_available_cpus} available CPUs.")
61+
62+
# num_cpus = max(multiprocessing.cpu_count(),ncpu)
63+
# logging.info(f"Number of available CPUs: {num_cpus}")
64+
5165
logging.info(f"Processing raw micrographs in {source_dir}")
5266
logging.info(f"Saving denoised micrographs in {denoise_dir}")
5367

54-
process_directory(source_dir, denoise_dir)
68+
# process_directory(source_dir, denoise_dir,ncpu)
5569

5670
def parse_args():
5771
parser = argparse.ArgumentParser(description="Denoise micrographs with guided CryoSegNet-style filter")
5872
parser.add_argument("--raw", required=True, help="Path to raw micrographs")
5973
parser.add_argument("--project", required=True, help="Denoised micrographs saved in project/denoised")
74+
parser.add_argument('--ncpu', type=int, default=None, help='Number of CPUs to use')
75+
6076

6177
return parser.parse_args()
6278

6379
if __name__ == "__main__":
6480
args = parse_args()
65-
main(args.raw, args.project)
81+
main(args.raw, args.project, args.ncpu)

partinet/process_utils/split_train.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
def main(labels_path, images_path, output_dir):
99
if not os.path.exists(output_dir):
1010
os.makedirs(output_dir)
11-
os.makedirs(os.path.join(output_dir, "images"))
12-
os.makedirs(os.path.join(output_dir, "labels"))
1311
os.makedirs(os.path.join(output_dir, "images", "train"))
1412
os.makedirs(os.path.join(output_dir, "images", "val"))
1513
os.makedirs(os.path.join(output_dir, "labels", "train"))

0 commit comments

Comments
 (0)