머신러닝/Korean Food Classifier

[Model] inception_resnset_v2 직접 구현하기

hwijin97 2022. 1. 31. 18:20

https://github.com/keras-team/keras/blob/2c48a3b38b6b6139be2da501982fd2f61d7d48fe/keras/applications/inception_resnet_v2.py#L297

 

GitHub - keras-team/keras: Deep Learning for humans

Deep Learning for humans. Contribute to keras-team/keras development by creating an account on GitHub.

github.com

 

한국음식 이미지 분류기의 모델을 결정하기 위해서 keras에서 구현한 InceptionResNetV2 을 참고하기로한다.

위의 github에서 구현되어있고, keras를 import 해서 불러올 수 있지만, 커스텀이 불가능한 단점이 있다. 

또한 직접 구현하고 배워보는 시간이기 때문에, 위 코드를 보면서 Stem, Inception, Reduction 을 직접 구현해보고 한국음식 이미지 데이터셋에 맞게 커스텀해본다.

 

 

inception 논문에서의 구조와 keras inception 구조는 다르기때문에 둘다 구현해보기로한다.

 

목표 : keras.layers.Layer 을 상속받아 커스텀 layer 을 구현해 재사용가능한 방식으로 구축한다.

커스텀 layer 을 __init__ 및 call 에 구현하는 건 문제가 없는데, 모델을 저장하고 불러올때 커스텀 layer는 몇개의 제약사항을 받아서 위의 keras github에서 구현하는 방식으로 함수를 이용해서 각 모듈을 조립한다.

 

목표 : 각 모듈을 어느정도 커스텀 가능하도록 파라미터를 조절하면서 함수형태로 만든다.

기본 레이어 : conv2d, conv2d_bn, max_pool2d, avg_pool2d

인셉션 블록 : stem, block35 (Inception A) , block17 (inception B), block8 (inception C), reduction A, B

추가 블록 : se block

Inception 과 keras Inpcetion 의 모듈은 필터만 다르고 구조는 동일하기 때문에 필터만 바꿔서 구축한다.

 

모델을 구축하는 함수의 리턴값으로 모델객체를 반환하도록한다.

InceptionResNetV2, KerasInceptionResNetV2, KerasInceptionResNetV2SEBlock, SmallKerasInceptionResNetV2 를 사용했다.