일반적으로 더 깊은 network가 더 좋은 성능을 보여준다.
하지만 무작정 layer를 많이 쌓으면 학습이 잘 안된다.
Inception module 사용
Auxiliary classifier
Degradation problem을 해결해, layer를 깊게 쌓을 수 있게 해준 model
Shortcut connection(skip connection)
몇 칸 전 layer 뿐만 아니라, 이전의 여러 layer들의 정보를 받는다.
channel axis 축으로 concatenation한다.(resnet은 skip connection을 + 연산했었다.)
다른 설계 방식 : width scaling(GoogLeNet), depth scaling(resNet), resolution scaling(input 해상도 증가)를 모두 적용
적은 Flow에서도 압도적인 성능
GoogLeNet(Inception)은 memory나 연산량 측면에서 효율적이나, 학습을 복잡하게 만드는 요소가 있어 사용하기 어렵다.
VGGNet이나 ResNet은 simple하고 성능도 괜찮아 backbone으로 많이 쓰인다.
# Freeze the feature extracting convolution layers
# Use chlidren
for name, child in model_finetune.named_children():
if name in ['features']:
for child_parm in child.parameters():
child_parm.requires_grad = False
# Use modules. <class 'torch.nn.modules.*'>
for layer in model_finetune.features:
layer.requires_grad_(False)
# Use parameters. <class 'torch.nn.parameter.Parameter'>
for parm in model_finetune.features.parameters():
parm.requires_grad = False
# module requires_grad_
model_finetune.features.requires_grad_(False)
나는 2번째의 finetune.features
를 사용하다가 세 번째의 형태로 바꿨는데, 기존 두 번째 형태를 쓸 때 requires_grad = False
형태로 사용했었다. 다시 한 번 내 잘못을 알게 해준 용범님께 감사드린다.
팀원분들이 질문을 많이 해주셔서 내가 어느정도 이해하고 있구나 싶던 부분도 잘 이해했다고 하기 힘들다는 걸 깨닫게 되었다. 팀원분들에게 감사하고 나도 저런 질문 많이 던지고 싶다. 또 강의 내용에 대해 확실하게 이해하고 넘어가는 게 좋겠다는 생각도 들었다.
강의가 조금 여유로워 CutMix 논문과 자료를 보며 공부하는데, 확실히 논문 보기가 힘들지만 내용이 많고 설명이 좋아 도움이 많이 되는 것 같다. 평소에 논문 보는 걸 꺼리지 말아야겠고 추석 즈음에 논문 구현도 한 번 해보면 좋을 것 같다.
Github 커밋을 시작하니 뭔가 나도 포트폴리오라 할 만한게 생길까 하는 기대가 생겼다. 나도 Github을 잘 꾸며서 Github만으로 나를 표현할 수 있는 사람이 되고 싶다.