YOLO_004 메모리 관리, 크기, 배치, 에포크

thanx to NIA

by HJH

YOLO 챕터는 이미지를 다루는 프로젝트에 대한 삽질 기록기다. 12억, 7억 정도의 장비를 보유하지 않은 경우, 이미지 학습 모델을 만들고자 할 때 고민한 내용이 담겨 있다. 또한 Python 기반의 프레임웍인 fastAPI 혹은 Django에서 직접 서비스를 만들고 운영하며 적는 실무적 내용임을 밝혀둔다. 다음 NIA(한국지능정보사회진흥원) 데이터에서 일부를 뽑아 학습 모델을 만들었다.



음식 분류에 대한 고민의 흔적을 남긴다.

작은 모델 학습에 대한 성공 소스는 다음과 같다.


import os

import warnings

import logging


# Tensor Flow 로그 레벨 설정 (에러 메시지 줄이기)

os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'

os.environ ['TF_ENABLE_ONEDNN_OPTS'] = '0'

logging.getLogger('tensor flow'). setLevel(logging.ERROR)

warnings.filterwarnings('ignore')


import tensor flow as tf

import shutil

from pathlib import Path

import gc


# 학습할 클래스 목록

TARGET_CLASSES = list(set([

"닭갈비", "훈제오리", "콩나물", "찹쌀떡", "쌀국수", "비빔밥", "연어초밥", "장어초밥",

"순대볶음", "참치샌드위치", "김치찌개", "부대찌개", "순대", "초콜릿", "순살치킨",

"에그타르트", "치킨너겟", "고등어구이", "등심스테이크", "삼겹살구이", "조미김",

"미역국", "삼계탕", "어묵국", "배추김치", "오이김치", "숙주나물", "군만두", "떡국",

"라면", "만두", "비빔냉면", "짜장면", "짬뽕", "김밥", "비빔밥", "알밥", "오므라이스",

"육회비빔밥", "떡볶이", "잡채", "닭가슴살샐러드", "육회", "마늘장아찌", "떡갈비",

"스크램블드에그", "채소죽", "된장찌개", "부대찌개", "순두부찌개", "달걀찜", "닭찜",

"돼지갈비찜", "순대", "아귀찜", "족발", "감자튀김", "오징어튀김", "치킨너겟",

"후라이드치킨", "까르보나라", "추로스", "초콜릿아이스크림"

]))


def filter_classes(source_dir, target_dir):

"""지정된 클래스만 필터링"""

source_path = Path(source_dir)

target_path = Path(target_dir)

# 타깃 디렉터리 생성

target_path.mkdir(exist_ok=True)

copied_classes = []

skipped_classes = []

print(f"\n=== 클래스 필터링 시작 ===")

print(f"원본 디렉터리: {source_dir}")

print(f"필터링된 디렉터리: {target_dir}")

print(f"타깃 클래스 수: {len(TARGET_CLASSES)}")

# 원본 디렉터리의 모든 폴더 확인

for folder in source_path.iterdir():

if folder.is_dir():

folder_name = folder.name

if folder_name in TARGET_CLASSES:

# 타깃 클래스에 포함되면 복사

target_class_dir = target_path / folder_name

if target_class_dir.exists():

shutil.rmtree(target_class_dir)

shutil.copytree(folder, target_class_dir)

# 이미지 개수 세기

image_count = len([f for f in target_class_dir.iterdir()

if f.suffix.lower() in ['. jpg', '. jpeg', '. png', '. bmp']])

copied_classes.append((folder_name, image_count))

print(f"✅ {folder_name}: {image_count} 개 이미지")

else:

skipped_classes.append(folder_name)

print(f"\n복사된 클래스: {len(copied_classes)}개")

print(f"건너뛴 클래스: {len(skipped_classes)}개")

if skipped_classes:

지금 바로 작가의 멤버십 구독자가 되어
멤버십 특별 연재 콘텐츠를 모두 만나 보세요.

brunch membership
HJH작가님의 멤버십을 시작해 보세요!

AISS(AI Security Sector) K-programmer. 아이쓰 프로그래머 분야를 한국에서 만들고 개척한 사람으로 기억되고 싶습니다.

429 구독자

오직 멤버십 구독자만 볼 수 있는,
이 작가의 특별 연재 콘텐츠

  • 총 41개의 혜택 콘텐츠
최신 발행글 더보기
매거진의 이전글002_Google TTS API