lime으로 Keras 이미지 분류 모델링

lime으로 Keras 이미지 분류 모델링

지난 주 Keras로 이미지 분류 모델을 교육하는 것이 얼마나 쉬운 지에 대한 블로그 게시물을 게시했습니다. 그 포스트에서 보여주지 않은 것은 예측을 위해 모델을 사용하는 방법이었습니다. 그러나 예측만으로는 지루하니 lime 패키지를 사용한 예측에 대한 설명을 추가하고자 합니다. 어느 쪽도 lime을 이미지 분류 모델에 적용하지 않습니다. 그리고 Thomas Lin Pedersen의 lime 패키지가 이제 CRAN뿐 아니라 Keras 및 이미지 분류 모델을 기본적으로 지원합니다.

Thomas는 R에서 Keras와 lime을 사용하는 방법에 관해 아주 좋은 기사를 썼습니다! 여기에서는 Imagenet (VGG16)을 사용하여 과일 이미지의 예측을 설명하고 설명하고 난 다음 분석을 지난 주 모델로 확장하고 사전 계산물과 비교합니다.


관련 라이브러리 및 모델 불러오기


  • 사전 훈련된 Imagenet 모델로드하기





Load and prepare images

Here, I am loading and preprocessing two images of fruits (and yes, I am cheating a bit because I am choosing images where I expect my model to work as they are similar to the training images…).

  • Banana


  • Clementine



The segmentation of an image into superpixels are an important step in generating explanations for image models. It is both important that the segmentation is correct and follows meaningful patterns in the picture, but also that the size/number of superpixels are appropriate. If the important features in the image are chopped into too many segments the permutations will probably damage the picture beyond recognition in almost all cases leading to a poor or failing explanation model. As the size of the object of interest is varying it is impossible to set up hard rules for the number of superpixels to segment into – the larger the object is relative to the size of the image, the fewer superpixels should be generated. Using plot_superpixels it is possible to evaluate the superpixel parameters before starting the time consuming explanation function. (help(plot_superpixels))



From the superpixel plots we can see that the clementine image has a higher resolution than the banana image.

Prepare images for Imagenet


  • test predictions



  • load labels and train explainer


Training the explainer (explain() function) can take pretty long. It will be much faster with the smaller images in my own model but with the bigger Imagenet it takes a few minutes to run.


  • plot_image_explanation() only supports showing one case at a time



Prepare images for my own model

  • test predictions (analogous to training and validation images)





This seems to be incompatible with lime, though (or if someone knows how it works, please let me know) – so I prepared the images similarly to the Imagenet images.


  • prepare labels



  • train explainer


  • plot feature weights to find a good threshold for plotting block (see below)


  • plot predictions






출처: Explaining Keras image classification models with lime

About The Author


한국HP 엔터프라이즈 컨설팅 PM 경력 현 (주)아이리치그린 대표이사 현 데이터진흥원 빅데이터 기획 멘토