Closed gellston closed 2 years ago
저희 연구에 관심 가져주셔서 감사드립니다.
/width_mult는 뒤쪽 에서 width_mult를 곱해서 stem dimension을 유지하기 위함이고 (뒤쪽 코드 참고), width_mult가 1보다 작을때 stem이 작아지는것을 막기위해서입니다. 이해하신것과 반대로 거의 모든 MobileNetV2-based lightweight 모델들 (e.g., MNasNet, MobiletNetV3, EfficientNet 등등)은 stem의 dimension이 width_mult>1일때 비례해서 커집니다.
바로 앞쪽에 AvgPool2d이 4d tensor를 BxCx1x1 로 aggregation해서 nn.Dropout은 2d tensor에서 수행하는것과 마찬가지입니다.
이해했습니다. 답변 주셔서 감사합니다.!
안녕하십니까
연구 하시느라 고생이 많으십니다. 최근에 rexnetV1 구현을 직접 손으로 구현해보면서 공부를하고 있는 직장인입니다. 손으로 코드를 구현하다가 몇가지 의문이 생겨서 조심스럽게 문의드립니다.
제가 이해한 바로는 width_multi가 1.0이하 일때 영향을 받고 1.0 이상일때는 32로 고정되도록 의도했다고 이해했습니다. 그런데 width_multi를 나누시는 이유가 이해가 되지 않습니다. 아니면 다른 이유가 있으신지요?
이 또한 제가 이해한 바로는 nn.Dropout이 연결되는 시점이 flattern되지 않은 BxCxHxW feature맵 형태의 시점인걸로 보입니다. 그런데 사용자가 원하는 클래스 n개의 갯수로 컨볼루션이 될 것이고 드랍아웃이 될것인데 그러면 채널 갯수만큼 드랍아웃이 되어야 할것으로 보입니다. nn.Dropout이라면 채널 갯수만큼 드랍아웃이 되지 않고 의도되지 않는 동작을 할 것으로 보이는데 문제가 되지 않나요? (nn.Dropout은 BxK인 flatten인 형태일때 k가 p의 비율만큼 드랍아웃되는 것이 아닌가요?)
혹시 제가 잘못 이해하고있거나 다른 의도가 있으시다면 좀 조언 부탁드립니다.
답변 기다리겠습니다 좋은 논문 만들어 주셔서 감사합니다.