반응형
FAN코드는 Bulat의 How far are we from solving the 2D & 3D Face Alignment problem? 논문의 코드이다.
이 논문은 2D,3D face alignment에서 유명한 논문이며 이 논문의 코드와 내 코드의 비교는 의미있다고 할 수 있다.
아래에서 개인적으로 가장 중요하다고 생각하는건 학습 option 설정, Randomness통제, 각 option에 따른 기능 구현이다.
비교사항 | 논문 코드 | 내 코드 |
log 기록 | 객체화시켜서 각 기능을 구현했다. 구체적이다. learning rate, train cost, train error, val cost, val error를 epoch 마다 기록했다(loss나 성능관련된건 train, test 할 것 없이 다 기록한 것이다). 공통점은 둘다 파일입출력을 이용했다는 점. |
main안에서 두줄로 끝냈다. train error, test error만 기록했다. |
model 저장 | 가장 마지막 model 만 저장한게 아니라 interval을 지정해서 각 텀마다 model을 저장했다. 이 때 model.state_dict(), optimizer.state_dict(), scheduler.state_dict()를 다 저장. | 가장 마지막 model만 저장했다. 이 때 model.state_dict()만 저장했었다. |
학습 option | 여러 class에 걸쳐서 굉장히 구체적으로 설정할 수 있도록 함. 예를 들어 network, integral, optimizer, hyper parameter, multi-gpu, save_intervals, save_results등을 설정할 수 있다. | network, hyper parameter만 설정할 수 있게 했는데, option class를 따로 만든게 아니라 train 함수 안에서 기능을 구현한 것이었다. option 클래스를 따로 만들어서 기능구현하는건 배울 필요가 있다. |
Randomness 통제 | 통제할 수 있는 변인을 최대한 통제하여 실험에서 제대로된 비교결과를 얻고자 했다. ex) cudnn.benchmark = False cudnn.deterministic = True np.random.seed(0) torch.manual_seed(0) torch.cuda.manual_seed(0) |
이런 개념은 생각도 못함... |
각 Option설정 에 따른 기능(학습방법) 구현 | 어떤 network를 선택하는지, 어떤 optimizer를 선택하는지, multi-gpu인지 등등... 에 따라서 동작할 방법을 구체적으로 다 명시해놓았다. ==> 이렇게 해놓으면 나중에 SOTA를 목적으로 여러 방법으로 실험할 때 좋을 듯 하다. 이 방법 저 방법을 비교하며 최고의 성능을 뽑아낼 수 있을 것으로 보인다. |
귀찮다고만 생각하여 안했지만 나중에 논문낼때 필요한 작업인듯 하다. |
이 코드와 비교하기 전 마지막으로 내가 작성했던 거지같은 코드는 아래에서 확인할 수 있다.
github.com/chunsungho/pytorch_example/tree/master/Torch_Exam/resnet/resnet_experiment_code
반응형