author : oukohou
time : 2019-09-26 16:44:48
email : oukohou@outlook.com
A pytorch reimplementation of SSR-Net.
the official keras version is here: SSR-Net
results on MegaAge_Asian datasets:
- | train | valid | test |
---|---|---|---|
version_v1^[1] | train Loss: 22.0870 CA_3: 0.5108, CA_5: 0.7329 | val Loss: 44.7439 CA_3: 0.4268, CA_5: 0.6225 | test Loss: 35.6759 CA_3: 0.4935, CA_5: 0.6902 |
original paper | ** | ** | CA_3: 0.549, CA_5: 0.741 |
version_v2^[2] | train Loss: 2.9401 CA_3: 0.6326, CA_5: 0.8123 | val Loss: 4.7221 CA_3: 0.4438, CA_5: 0.6295 | test Loss: 3.9311 CA_3: 0.5151, CA_5: 0.7163 |
- This SSR-Net model can't fit big learning rate, learning rate should be smaller than 0.002. otherwise the model will very likely always output 0, me myself suspects this is because of the utilizing Tanh as activation function.
- And also: Batchsize could severely affect the results. A set of tested params can be :
batch_size = 50 input_size = 64 num_epochs = 90 learning_rate = 0.001 # originally 0.001 weight_decay = 1e-4 # originally 1e-4 augment = False optimizer_ft = optim.Adam(params_to_update, lr=learning_rate, weight_decay=weight_decay) criterion = nn.L1Loss() lr_scheduler = optim.lr_scheduler.StepLR(optimizer_ft, step_size=30, gamma=0.1)
- The dataset preprocess is quite easy. For MegaAsian datasets, you can use the
./datasets/read_megaasina_data.py
directly; for other datasets, just generate a pandas csv file in format like:filename,age 1.jpg,23 ...
is OK. But also, remember to change the ./datasets/read_imdb_data.py
accordingly.
thanks to DefTruth 's implementation here: How to convert SSRNet to ONNX and implements with onnxruntime c++.
my reading understanding of SSRNet can be found:
- on my blog site here:论文阅读-年龄估计_SSRNet
- or on zhihu here: 论文阅读-年龄估计_SSRNet.
which was written in Chinese.