nomalib는 오픈비노 툴킷(OpenVINO Toolkit)에서 개발된 오픈소스 라이브러리로, 다양한 이상 탐지(Anomaly Detection) 알고리즘을 지원하는 딥러닝 프레임워크입니다. 이 라이브러리는 연구 및 산업 응용에서 이상 탐지 작업을 더욱 쉽고 효율적으로 수행할 수 있도록 설계되었습니다.
주요 기능 및 특징:
- 다양한 이상 탐지 알고리즘:
- Anomalib은 최신 연구에서 제안된 다양한 이상 탐지 알고리즘을 포함하고 있습니다. 대표적인 알고리즘으로는 PatchCore, PaDiM, SPADE 등이 있으며, 이러한 알고리즘들은 특히 시각적 이상 탐지(예: 이미지에서 결함 탐지)에 탁월한 성능을 보입니다.
- 모듈형 구조:
- Anomalib은 모듈형으로 설계되어, 사용자들이 필요한 구성 요소를 쉽게 확장하거나 변경할 수 있습니다. 이로 인해 맞춤형 모델 개발이나 기존 모델의 수정이 용이합니다.
- 간편한 API 및 CLI:
- 이 라이브러리는 간단하고 직관적인 API와 CLI(명령줄 인터페이스)를 제공합니다. 이를 통해 사용자는 모델을 쉽게 학습시키고, 추론을 수행하며, 벤치마킹 작업을 할 수 있습니다.
- 하이퍼파라미터 최적화:
- Anomalib은 하이퍼파라미터 최적화 기능을 내장하고 있어, 모델 성능을 극대화하기 위해 다양한 설정을 자동으로 테스트하고 최적의 조합을 찾을 수 있습니다.
- 엣지 추론 지원:
- OpenVINO의 지원을 받아 Anomalib은 Intel 하드웨어에서의 가속화된 추론을 위해 모델을 최적화하고 배포할 수 있습니다. 이를 통해 엣지 디바이스에서 실시간으로 이상 탐지를 수행할 수 있습니다.
- 광범위한 데이터셋 지원:
- Anomalib은 여러 공개 데이터셋과 호환되며, MVTec AD와 같은 유명한 이상 탐지 데이터셋을 기본적으로 지원합니다. 사용자는 자신만의 데이터셋을 쉽게 통합할 수도 있습니다.
- 벤치마킹 도구:
- 이 라이브러리는 다양한 알고리즘과 데이터셋에 대해 일관된 벤치마킹을 할 수 있는 도구를 제공하여, 알고리즘의 성능을 쉽게 비교할 수 있습니다.
사용 예시:
Anomalib을 사용하면, 사용자는 다음과 같은 단계를 통해 모델을 학습시키고 이상 탐지를 수행할 수 있습니다:
- 데이터 로딩: MVTec과 같은 내장 데이터셋을 로드하거나, 사용자의 데이터셋을 정의하여 로딩.
- 모델 선택: PatchCore, PaDiM 등의 모델을 선택하여 설정.
- 훈련 및 평가: 선택한 모델을 데이터셋에 맞게 훈련시키고, 성능을 평가.
- 추론 수행: 학습된 모델을 사용하여 새로운 데이터에 대해 이상치를 탐지.
설치 및 사용법:
Anomalib은 PyPI를 통해 설치할 수 있으며, 소스 코드로부터 직접 설치하여 사용자가 라이브러리를 수정할 수도 있습니다.
pip install anomalib
이후, Python API 또는 CLI를 사용하여 모델을 훈련하고 추론을 수행할 수 있습니다.
Anomalib은 연구자나 실무자가 이상 탐지 작업을 수행하는 데 필요한 모든 도구를 제공하여, 다양한 산업에서 결함 탐지, 품질 관리, 이상 감지 등의 작업에 활용될 수 있습니다. 이 라이브러리는 지속적으로 업데이트되며, 새로운 알고리즘과 기능들이 추가되고 있습니다 (GitHub) (LibHunt).
# 필요한 모듈을 가져옵니다.
from anomalib.data import MVTec
from anomalib.models import Patchcore
from anomalib.engine import Engine
# 데이터셋 로드: MVTec AD 데이터셋을 로드합니다.
datamodule = MVTec(
root="path_to_dataset",
category="hazelnut", # 분석하고자 하는 카테고리
image_size=(256, 256),
train_batch_size=32,
test_batch_size=32,
)
# 모델 초기화: PatchCore 모델을 초기화합니다.
model = Patchcore(
input_size=(256, 256),
backbone="resnet18", # 사용할 백본 네트워크
pre_trained=True, # 사전 학습된 가중치 사용 여부
)
# 엔진 초기화: 학습 및 평가를 관리할 엔진을 초기화합니다.
engine = Engine()
# 모델 학습: 데이터셋을 사용하여 모델을 학습시킵니다.
engine.fit(
datamodule=datamodule,
model=model
)
# 모델 평가: 학습된 모델을 테스트 데이터로 평가합니다.
results = engine.test(
datamodule=datamodule,
model=model
)
# 결과 출력: 결과를 확인합니다.
print(results)
# 모델 저장: 학습된 모델을 저장합니다.
engine.save("path_to_save_model")
# 새로운 데이터로 추론 수행: 새 데이터에 대한 이상 탐지를 수행합니다.
predictions = engine.predict(
datamodule=datamodule,
model=model,
ckpt_path="path_to_save_model/checkpoint.ckpt"
)
# 예측 결과를 출력합니다.
print(predictions)
import matplotlib.pyplot as plt
# 예시에서 첫 번째 이미지의 anomaly_map을 추출하여 시각화
anomaly_map = predictions[0]['prediction']['anomaly_map']
# anomaly_map 시각화
plt.imshow(anomaly_map, cmap='hot') # 'hot' 컬러맵을 사용하여 이상점 강조
plt.colorbar() # 색상 막대 추가
plt.title("Anomaly Map for sample_image_1.png")
plt.show()
출력결과 샘플
[
{
'image_id': 'sample_image_1.png',
'prediction': {
'is_anomalous': True, # 이상이 감지되었는지 여부
'anomaly_map': array([...]), # 이상이 감지된 영역을 시각화한 맵 (이미지 크기와 동일한 배열)
'anomaly_score': 0.95 # 이상점에 대한 확신도 (0에서 1 사이의 값)
}
},
{
'image_id': 'sample_image_2.png',
'prediction': {
'is_anomalous': False,
'anomaly_map': array([...]), # 정상 데이터의 경우 대부분 0에 가까운 값으로 채워짐
'anomaly_score': 0.05
}
}
]
정상이미지와 결함이미지를 어느정도로 준비해야하나?
PatchCore 모델의 학습 및 추론 과정에서 필요한 데이터의 양은 프로젝트의 특성과 사용 목적에 따라 달라질 수 있습니다. 그러나 일반적인 기준을 제공하자면 다음과 같습니다:
정상 이미지:
- 수량: 일반적으로 수천 장 이상의 정상 이미지가 필요합니다. 예를 들어, 약 1,000~10,000장의 정상 이미지를 준비하는 것이 이상적입니다.
- 목적: 모델이 다양한 정상 패턴을 학습할 수 있도록 하기 위해, 가능한 한 다양한 조건(조명, 각도, 배경 등)에서 촬영된 정상 이미지를 포함하는 것이 중요합니다.
결함 이미지:
- 수량: 결함 이미지의 수는 보통 수십 장에서 수백 장 사이일 수 있습니다. 각 결함 유형당 최소 20~50장의 이미지를 준비하는 것이 좋습니다.
- 목적: 가능한 모든 결함 유형을 포함하여 모델이 각 유형의 결함을 정확하게 학습할 수 있도록 해야 합니다.
데이터 증강:
- 필요성: 결함 이미지가 충분하지 않은 경우, 데이터 증강 기법을 사용하여 결함 이미지를 보강합니다. 예를 들어, 이미지 회전, 반전, 밝기 조절, 노이즈 추가 등의 방법으로 데이터를 증강시켜 결함 데이터셋의 다양성을 높일 수 있습니다.
데이터셋의 예:
- MVTec AD 데이터셋: 이 데이터셋은 이상 탐지 연구에서 자주 사용되며, 약 5,000장 이상의 이미지(정상 및 결함 포함)로 구성됩니다. 결함 유형은 15가지 제품 카테고리에서 여러 유형의 결함을 포함합니다.
PatchCore와 같은 모델에서 데이터의 양과 다양성은 모델의 성능에 큰 영향을 미치므로, 가능한 한 다양한 데이터를 확보하고, 필요한 경우 데이터 증강을 통해 부족한 부분을 보완하는 것이 중요합니다.
하드웨어 요구스펙..
5120x5120 픽셀 크기의 이미지를 사용하여 작은 결함을 찾기 위해 딥러닝 모델을 학습하려면 상당한 계산 자원이 필요합니다. 아래는 이러한 작업에 필요한 학습 서버의 일반적인 요구 사항입니다:
1. GPU (Graphics Processing Unit)
- GPU 모델: NVIDIA A100, V100, 또는 RTX 3090과 같은 고성능 GPU가 필요합니다. 특히, A100과 같은 최신 GPU는 대규모 이미지 처리와 딥러닝 학습에 매우 효과적입니다.
- GPU 메모리: 최소 24GB 이상의 GPU 메모리가 필요합니다. 이미지 크기가 크기 때문에 GPU 메모리가 클수록 대형 배치를 처리할 수 있어 학습 속도가 빨라집니다.
- GPU 개수: 단일 GPU로도 학습이 가능하나, 속도를 높이기 위해 여러 개의 GPU를 사용하는 멀티-GPU 환경이 권장됩니다. 2개 이상의 GPU를 사용하면 더 빠른 학습이 가능합니다.
2. CPU (Central Processing Unit)
- 코어 수: 최소 16코어 이상의 고성능 CPU가 필요합니다. 데이터 전처리와 GPU에 데이터를 로드하는 작업을 CPU가 처리하기 때문에 멀티코어 CPU가 유리합니다.
- 클럭 속도: 3.0GHz 이상의 고속 CPU가 권장됩니다.
3. RAM (Random Access Memory)
- 메모리 크기: 최소 64GB 이상의 RAM이 필요합니다. 이미지 크기가 매우 크기 때문에, 대량의 데이터를 처리하고 임시 메모리에 저장할 수 있는 충분한 RAM이 필요합니다. 경우에 따라 128GB 이상을 고려할 수도 있습니다.
4. 스토리지
- 저장소 타입: NVMe SSD 또는 고성능 SSD를 사용하여 빠른 데이터 입출력을 보장해야 합니다.
- 저장 용량: 원본 이미지 데이터와 학습 중 생성되는 체크포인트, 로그 파일 등을 고려하여 최소 2TB 이상의 스토리지가 필요합니다.
5. 네트워크
- 네트워크 속도: 만약 데이터를 네트워크를 통해 전송해야 한다면, 고속 네트워크(예: 10Gbps 네트워크) 환경이 필요합니다. 대규모 데이터를 효율적으로 전송하기 위해 필요합니다.
6. 냉각 및 전원 공급
- 냉각: 고성능 GPU 및 CPU는 높은 열을 발생시키므로, 적절한 냉각 시스템(예: 수냉식 또는 고성능 공랭식)이 필수입니다.
- 전원 공급: 여러 GPU와 고성능 CPU를 사용하는 경우 전력 소모가 크므로, 충분한 전력 공급(1000W 이상의 파워 서플라이)을 고려해야 합니다.
7. 소프트웨어 환경
- 딥러닝 프레임워크: PyTorch 또는 TensorFlow와 같은 딥러닝 프레임워크를 설치하고, CUDA와 cuDNN을 함께 사용하여 GPU 성능을 최적화할 수 있어야 합니다.
- CUDA Toolkit: 최신 CUDA Toolkit과 NVIDIA 드라이버를 설치하여 GPU를 최적화하여 사용할 수 있어야 합니다.
'Dev > Deep Learning' 카테고리의 다른 글
컴퓨터 비전 프로젝트를 위한 8개의 오픈소스 의료 이미지 라이브러리 (1) | 2024.12.13 |
---|---|
전처리 툴 v 0.1 (0) | 2024.11.07 |
이상 탐지 관련 오픈소스 프로젝트들 (0) | 2024.08.18 |
YOLO v10 dot.net Winform Sample (0) | 2024.08.15 |
TensorFlow 2.x - Simple learning (0) | 2024.01.26 |
댓글