face-censor / src /training /train.py
Spring-0's picture
Synced repo using 'sync_with_huggingface' Github Action
2012550 verified
Raw
History Blame Contribute Delete
1.98 kB
from ultralytics import YOLO
from roboflow import Roboflow
import logging
from pathlib import Path
import os
from dotenv import load_dotenv
class ModelTrainer:
def __init__(self, roboflow_api_key):
self.rf = Roboflow(api_key=roboflow_api_key)
self.setup_logging()
def setup_logging(self):
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
self.logger = logging.getLogger(__name__)
def download_dataset(self, project_name, project_version, workspace):
self.logger.info(f"Downloading dataset: {project_name} v{project_version}")
project = self.rf.workspace(workspace).project(project_name)
dataset = project.version(project_version).download("yolov8", "data\\raw")
print(dataset.location)
return dataset.location
def train(
self,
data_yaml,
model_type = "yolov8n.pt",
epochs = 30,
imgsz = 640,
batch_size = 16,
device = "0"
):
self.logger.info("Starting training process")
model = YOLO(model_type)
results = model.train(
data = data_yaml,
epochs = epochs,
imgsz = imgsz,
batch = batch_size,
device = device,
project = "runs/train",
name = "face_detection"
)
self.logger.info("Training Complete")
return results
def main():
load_dotenv()
trainer = ModelTrainer(os.getenv("ROBOFLOW_API_KEY"))
data_path = trainer.download_dataset(
workspace="large-benchmark-datasets",
project_name="wider-face-ndtcz",
project_version=1
)
trainer.train(
data_yaml=f"{data_path}\\data.yaml",
epochs=20,
batch_size=16,
device="0"
)
if __name__ == "__main__":
main()