딥러닝(CNN)은 외관검사에서 왜 그것을 NG로 판정했는가?

상처에 주목해 NG가 되어 있는 등을 알 수 있다.




판정 결과는 특히 적색 부분에 기인한다.
OK는 전체에 분포하고 있는 반면, NG는 상처가 있는 곳에 집중하고 있다.

■소개



딥 러닝(CNN)은 이미지 분류 작업을 자동화하는 데 필수적입니다.
한편 내용이 블랙 박스 (정보는 꺼낼 수 있지만 수치의 의미가 인간이 파악할 수 없다)로,
「정밀도가 오르지 않지만 어디 보고 판단하고 있는 거야?」
「평가 데이터로는 정밀도 높지만, 향후 미지의 데이터에서도 괜찮아?」
라는 점이 신경이 쓰이는 것도 자주.
그래서 판단 근거의 힌트를 얻으려는 대처도 다수 있는 것 같습니다.
딥 러닝의 판단 근거를 이해하는 기법

■한 일



이번에는 금속 표면의 흠집 판정을 위해 학습시킨 CNN 네트워크에 Class Activation Mapping (CAM)을 적용하여
판정 결과가 어느 영역의 특징과 상관이 강하게 있는지를 가시화해 보았습니다.
검증용 동영상, 학습된 모델이 포함된 MATLAB 샘플 코드

Class Activation Mapping은 MIT의 Computer Science and Artificial Intelligence Laboratory의 팀이 발표된 것 같습니다. (※1)

사용하는 네트워크



전이 학습으로 상처 유무에 의한 OK/NG를 판정할 수 있도록 한 GoogleNet과 SqueezeNet에서 이번 시도해 보았습니다.
CAM을 적용하는 점에서의 차이는
연산에 사용하는 장소의 Activation Map의 사이즈가 다른 점입니다.
GoogleNet → 7x7
SqueezeNet → 14x14
따라서 SqueezeNet 쪽이 고해상도의 Map을 꺼낼 수 있습니다.

CAM 계산



SqueezeNet의 경우를 예로 보면 연산에 사용한 레이어는 'relu_conv10'과 'fc'입니다.


'fc'층으로부터 판정된 클래스의 Weight(길이 1000의 벡터)를 꺼내, 'relu_conv10'층에서의 Activation의 출력(imageActivations(14x14x1000))의 각 위치의 출력 벡터와 Weight를 요소마다의 곱셈 후 모든 것을 더하여 크기 14x14의 Class Activation Map을 할 수 있습니다.

CAMheatmap_squeezenet.m
% 全結合層から判定されたカテゴリのWeightを取り出す。
weightVector    = myNet.Layers(67).Weights(classIndex,:); 
% Classification Activation Mapを計算する
weightVectorSize = size(weightVector); 
weightVector = reshape(weightVector,[1 weightVectorSize]); 
dotProduct = bsxfun(@times,imageActivations,weightVector); 
classActivationMap = sum(dotProduct,3); 

그 출력 결과
가격대 → 빨강
가격 작 → 청
히트 맵으로 표시됩니다.

■ 포인트



・Class Activation Mapping은 어디의 특징량이 판정에 기여하고 있는지를 가시화할 수 있다
・분류하는 전결합층의 가중치와 그 전의 층의 Activation Map와의 연산으로 구하기 위해, 전체 결합층이 복수층 계속되는 구조의 네트워크에는 적합하지 않다.
・해상도는 연산에서 사용하는 레이어의 Activation Map의 사이즈에 의존

■참조



(※ 1) ぉ tp://c ぉ ぃ자치온. c 사이 l. 미 t. 에즈 / ← 오 _ ぇ r 마늘 g_ 데에 p_ 푹신한 s_CVPR_2016_ 페이 r. pdf

좋은 웹페이지 즐겨찾기