Open heojae opened 3 years ago
import torch
import torch.nn as nn
from torchsummary import summary
from efficientnet_pytorch import EfficientNet
class FiraEfficientNet(nn.Module):
def __init__(self, first_train=True):
super(FiraEfficientNet, self).__init__()
self.fc_input = 1280
self.fc_output = 4
if first_train:
self.model = EfficientNet.from_pretrained('efficientnet-b0')
else:
self.model = EfficientNet.from_name('efficientnet-b0')
self.model._fc = nn.Linear(in_features=self.fc_input, out_features=self.fc_output, bias=True)
def forward(self, x):
x = self.model(x)
return x
model = FiraEfficientNet(first_train=False)
summary(model, (3, 224, 224))
from torchsummary import summary
이게 완벽한 라이브러리는 아니겠지만,
위의 모델에서 summary 를 통해 추론할 경우,
인것을 확인 할 수 있었습니다.
그리고, 논문 기반의 결과로 보았을 때,
FC layer, output class
의 수정을 통해서, 기존의 논문에 나온 결과보다 더 적은 양의 Model Parameter
가 나온것을 확인할 수 있었습니다.
모델선정
데이터의 분류와 클래스 선정의 이유 정리
위 링크에서 확인할 수 있듯이, 아래 두가지를 결정하였습니다.
딥러닝 모델의 용도 :
Classification
데이터의 Class 종류 :
Class => [0, 90, 180, 270]
고려 사항
low inference time and low model parameter
이 모델은 추후, 서버에 올려
API
로써 구현을 해야하며, 그를 위해서는 빠른Inference Time
이 필요합니다.또한, 이
Food Image Rotaion
를 학습을 시키는 것도, 큰 모델을 사용할 필요없는 것이라 판단을 하였기에,작은 모델을 통해, 빠른 Inference Time 을 제공할 수 있는 모델을 쓰는 것이 좋을 것이라 생각합니다.
(만약 필요로 하다면, 추후 모델의 크기를 늘려 성능을 확대할 수도 있습니다.)
모델 종류
위의 사항에 맞는 모델은 아래 두가지라 생각합니다.
두 모델의 특성과 결과를 비교해보았을 떄, 성능적으로도
Efficeint Net
이 더 좋다는 것을 확인할 수 있었고(예전에 각각의 모델에 대해서,
Multimodal CNN
으로 까지 구현하여, 실험해보았고, 그 결과는 공개할 예정이 없습니다.),추후 성능의 향상을 위해서, 모델의 크기도 쉽게 늘릴 수 있으니,
Efficient Net
을 선택하였습니다.Efficienet
github
https://github.com/lukemelas/EfficientNet-PyTorch
Paper
https://arxiv.org/pdf/1905.11946.pdf
Mobile Net
pytorch 공식 페이지
https://pytorch.org/hub/pytorch_vision_mobilenet_v2/
github
https://github.com/tonylins/pytorch-mobilenet-v2
Paper
https://arxiv.org/pdf/1801.04381.pdf
결론
우선, 모델의 크기가 제일 작은
efficient-b0
모델을 선택하여, 구현할 예정입니다.추후 성능을 증가하고 싶을 경우, 모델의 크기를 늘려, 구현하는 것을 추천 드립니다.