필기체 숫자 인식을 위한 LeNet-5 (LeCun et al., 1998)
CNN 원조
28x28 필기체 숫자 영상을 32x32로 확장하여 만든 입력 데이터 사용
전체 7개 레이어 : Conv-Pool-Conv-Pool-FC-FC-FC
AlexNet (Krizhevsky et al., 2012)
2012년 ILSVRC 영상 인식 분야 1위
Top-5 Error: 15.4%
하드웨어의 제약으로 2개의 GPU 사용
VGG16 (Simonyan and Zisserman, 2014)
2014년 ILSVRC 영상 인식 분야 2위
Top-5 Error: 7.3%
컨볼루션 레이어에서 3x3 필터만 사용
총 16개 레이어로 구성
GoogLeNet (Szegedy et al., 2014)
2014년 ILSVRC 영상 인식 분야 1위
Top-5 Error: 6.7%
총 22개의 레이어로 구성
Inception 모듈
미리 학습된 딥러닝 모델을 이용하여 실행하는 기능
학습은 지원하지 않음
OpenCV 3.3 버전부터 기본 기능으로 제공
OpenCV 4.3 버전부터 GPU(CUDA) 지원
Deep Learning in OpenCV
Caffe
Tensorflow
torch
Darknet
ONNX
AlexNet
GoogLeNet
VGG
ResNet
SqueezeNet
DenseNet
ShuffleNet
Inception
MobileNet
Darknet
ONNX formats
SSD VGG
MobileNet-SSD
Faster-RCNN
R-FCN
OpenCV face detector
SSD, Faster-RCNN and Mask-RCNN
EAST
YOLOv2, tiny YOLO, YOLOv3, Tiny YOLOv3, YOLOv4, Tiny Yolov4
FCN
ENet
OpenPose
Colorization
Fast-Neural-Style
Style Transfer
OpenFace
model : 훈련된 가중치를 저장하고 있는 이진 파일 이름
config : 네트워크 구성을 저장하고 있는 텍스트 파일 이름
framework : 명시적인 딥러닝 프레임워크 이름
return : dnn:Net 객체
Net readNet(const String& model,
const String& config = "",
const String& framework = "");
프레임워크 | model파일 확장자 | config파일 확장자 | framework 문자열 |
---|---|---|---|
caffe | *.caffemodel | *.prototxt | "caffe" |
tensorflow | *.pb | *pbtxt | "tensorflow" |
torch | *.t7 *.net | "torch" | |
darknet | *.weights | *.cfg | "darknet" |
DLDT | *.bin | *.xml | "dldt" |
ONNX | *.onnx | "onnx" |
image : 입력 영상
scalefactor : 입력 영상 픽셀 값에 곱할 값
size : 출력 영상의 크기
mean : 입력 영상 각 채널에서 뺄 평균 값
swapRB : R과 B 채널에서 서로 바꿀 것인지를 결정하는 플래그
crop : crop 수행 여부
ddepth : 출력 blob 깊이
return : 영상으로부터 구한 blob 4차원(NCHW) Mat 행렬 객체
Mat blobFromImage(InputArray image,
double scalefactor=1.0,
const Size& size = Size(),
const Scalar& mean = Scalar(),
bool swapRB = false,
bool crop = false,
int ddepth = CV_32F);
blob : blob 객체
name : 입력 레이어 이름
scalefactor : 추가적으로 픽셀 값에 곱할 값
mean : 추가적으로 픽셀 값에서 뺄 평균 값
void Net::setInput(InputArray blob,
const String& name = "",
double scalefactor = 1.0,
const Scalar& mean = Scalar());
outputName : 출력 레이어 이름
return : 지정한 레이어의 출력 blob
Mat Net::forward(const String& outputName = String());
Tensorflow 또는 PyTorch를 이용하여 MNIST 필기체 숫자 인식을 학습하기
학습된 모델을 파일로 저장하기
OpenCV에서 학습된 모델을 불러와서 필기체 인식 프로그램을 실행하기