fb.resnet.torch는 Facebook AI Research에서 공개한 Torch 기반의 ResNet 구현체로, 논문 "Deep Residual Learning for Image Recognition"의 아키텍처를 충실히 구현하고 있습니다. 이 프로젝트는 사전 학습된 모델을 통해 이미지 분류와 특징 추출 기능을 제공하며, 연구 및 서비스 프로토타이핑에 유용하게 사용될 수 있습니다.
1. 사전 학습된 모델 준비
먼저 ResNet 모델 파일(.t7 형식)이 필요합니다. 프로젝트 내 pretrained/ 디렉토리의 안내에 따라 ResNet-18, 34, 50, 101, 152와 같은 다양한 깊이의 사전 학습된 모델을 다운로드할 수 있습니다. 예를 들어 101계층 모델인 resnet-101.t7을 준비합니다.
2. 이미지 분류(Image Classification) 실행
제공되는 classify.lua 스크립트를 사용하면 한 줄의 명령어로 이미지 내 객체를 식별할 수 있습니다. 이 스크립트는 이미지를 입력받아 Top 5 예측 결과를 출력합니다.
# 단일 또는 다중 이미지 분류 실행
th classify.lua models/resnet-101.t7 data/sample_01.jpg data/sample_02.png
위 명령어는 지정된 모델을 로드한 후 입력된 이미지들을 순차적으로 분석하여 가장 확률이 높은 클래스 정보를 반환합니다. 배치 처리가 필요할 경우 이미지 경로를 나열하여 한 번에 처리할 수 있습니다.
3. 딥러닝 특징 추출(Feature Extraction)
이미지 분류를 넘어, 이미지를 고차원 벡터로 변환하여 검색 시스템이나 별도의 머신러닝 분류기에 활용할 수 있습니다. extract-features.lua 스크립트는 마지막 Fully Connected Layer 직전의 특징 벡터를 추출합니다.
개별 파일 처리 모드
# 특정 이미지들의 특징 벡터 추출
th extract-features.lua models/resnet-50.t7 assets/input_img.jpg
디렉토리 단위 배치 처리
대량의 데이터를 처리할 때는 디렉토리 경로와 배치 사이즈를 지정하는 방식이 효율적입니다.
# 디렉토리 내 모든 이미지를 배치 단위로 처리
th extract-features.lua models/resnet-101.t7 64 ./images_folder/
추출된 특징은 Torch의 텐서(Tensor) 형태로 저장되며, 이를 활용해 이미지 유사도 계산이나 전이 학습(Transfer Learning)의 입력 데이터로 사용할 수 있습니다.
4. 커스텀 데이터셋 학습
자신만의 데이터셋으로 모델을 미세 조정(Fine-tuning)하려면 프로젝트 루트의 학습 스크립트를 활용합니다. 이 프레임워크는 ImageNet, CIFAR-10, CIFAR-100 데이터셋을 기본적으로 지원하며, 데이터 로더와 변환 로직이 모듈화되어 있어 확장이 용이합니다.
# CIFAR-10 데이터셋 학습 예시
th main.lua -dataset cifar10 -nGPU 1 -batchSize 128 -netType resnet -depth 20
사용 팁 및 유의사항
- 환경 구성: 실행 전
INSTALL.md를 참고하여 Torch 환경과 필요한 패키지(nn, cudnn 등)가 올바르게 설치되었는지 확인하십시오. - 전처리 일관성: 모델 성능을 극대화하려면 입력 이미지의 크기 조절 및 정규화 과정이 사전 학습 시 사용된 방식과 일치해야 합니다. 이는
datasets/transforms.lua에서 확인할 수 있습니다. - GPU 가속: 대규모 연산 시
-nGPU옵션을 통해 병렬 처리를 활성화하면 성능을 크게 향상시킬 수 있습니다.