Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

accuracy =0 #1

Open
Mebigger opened this issue Mar 4, 2019 · 29 comments
Open

accuracy =0 #1

Mebigger opened this issue Mar 4, 2019 · 29 comments

Comments

@Mebigger
Copy link

Mebigger commented Mar 4, 2019

您好,请问在训练到iteration=100时,accuracy=0是正常现象吗,loss在39到40之间
用的函数是train(resume=None)
感谢您的回复

@CaptainEven
Copy link
Owner

@Mebigger 训练过程需要初始化权重,通过ImageNet训练好的vgg16模型权重初始化,使用我刚上传的InitRepNet.py训练就没问题了。

@Mebigger
Copy link
Author

Mebigger commented Mar 4, 2019

@CaptainEven
非常感谢您的回复,
您的意思是把train函数中的net=RepNet 改成 net=InitRepNet 吗,如果是的话,我改完之后accuary还是0(我已经导入了vgg16网络和预训练的权重)。

@CaptainEven
Copy link
Owner

@Mebigger 检查数据和标签是否正确,是否是按照ProcessVehicleID.py处理的数据?

@Mebigger
Copy link
Author

Mebigger commented Mar 5, 2019

@CaptainEven 对的,标签先经过了ProcessVehicleID.py的处理,print了vgg.state_dict(),确认权重模型没问题

@CaptainEven
Copy link
Owner

@Mebigger 贴训练的中间输出看看

@Mebigger
Copy link
Author

Mebigger commented Mar 5, 2019

@CaptainEven
C:\Softwares\python.exe C:/WYX-Py_projects/Veichle_ReID/Program/RepNet-VehicleReID-master/RepNet.py
=> out_ids: 10086, out_attribs: 257
=> in dim: 1000, out dim: 10086
=> in dim: 1024, out dim: 10086
=> Mix difference network:
InitRepNet(
(conv1_1): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv1_2): ReLU(inplace)
(conv1_3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv1_4): ReLU(inplace)
(conv1_5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv1): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(conv2_1): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv2_2): ReLU(inplace)
(conv2_3): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv2_4): ReLU(inplace)
(conv2_5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv2): Sequential(
(0): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(conv3_1): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv3_2): ReLU(inplace)
(conv3_3): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv3_4): ReLU(inplace)
(conv3_5): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv3_6): ReLU(inplace)
(conv3_7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv3): Sequential(
(0): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(conv4_1_1): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv4_1_2): ReLU(inplace)
(conv4_1_3): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv4_1_4): ReLU(inplace)
(conv4_1_5): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv4_1_6): ReLU(inplace)
(conv4_1_7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv4_1): Sequential(
(0): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(conv4_2_1): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv4_2_2): ReLU(inplace)
(conv4_2_3): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv4_2_4): ReLU(inplace)
(conv4_2_5): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv4_2_6): ReLU(inplace)
(conv4_2_7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv4_2): Sequential(
(0): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(conv5_1_1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv5_1_2): ReLU(inplace)
(conv5_1_3): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv5_1_4): ReLU(inplace)
(conv5_1_5): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv5_1_6): ReLU(inplace)
(conv5_1_7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv5_1): Sequential(
(0): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(conv5_2_1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv5_2_2): ReLU(inplace)
(conv5_2_3): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv5_2_4): ReLU(inplace)
(conv5_2_5): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv5_2_6): ReLU(inplace)
(conv5_2_7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(conv5_2): Sequential(
(0): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(FC6_1_1): Linear(in_features=25088, out_features=4096, bias=True)
(FC6_1_2): ReLU(inplace)
(FC6_1_3): Dropout(p=0.5)
(FC6_1_4): Linear(in_features=4096, out_features=4096, bias=True)
(FC6_1_5): ReLU(inplace)
(FC6_1_6): Dropout(p=0.5)
(FC6_1): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace)
(2): Dropout(p=0.5)
(3): Linear(in_features=4096, out_features=4096, bias=True)
(4): ReLU(inplace)
(5): Dropout(p=0.5)
)
(FC6_2_1): Linear(in_features=25088, out_features=4096, bias=True)
(FC6_2_2): ReLU(inplace)
(FC6_2_3): Dropout(p=0.5)
(FC6_2_4): Linear(in_features=4096, out_features=4096, bias=True)
(FC6_2_5): ReLU(inplace)
(FC6_2_6): Dropout(p=0.5)
(FC6_2): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace)
(2): Dropout(p=0.5)
(3): Linear(in_features=4096, out_features=4096, bias=True)
(4): ReLU(inplace)
(5): Dropout(p=0.5)
)
(FC7_1): Linear(in_features=4096, out_features=1000, bias=True)
(FC7_2): Linear(in_features=4096, out_features=1000, bias=True)
(FC_8): Linear(in_features=2000, out_features=1024, bias=True)
(attrib_classifier): Linear(in_features=1000, out_features=257, bias=True)
(arc_fc_br2): ArcFC()
(arc_fc_br3): ArcFC()
(shared_layers): Sequential(
(0): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(1): Sequential(
(0): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(branch_1_feats): Sequential(
(0): Sequential(
(0): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(1): Sequential(
(0): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(1): Sequential(
(0): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(branch_1_fc): Sequential(
(0): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace)
(2): Dropout(p=0.5)
(3): Linear(in_features=4096, out_features=4096, bias=True)
(4): ReLU(inplace)
(5): Dropout(p=0.5)
)
(1): Linear(in_features=4096, out_features=1000, bias=True)
)
(branch_1): Sequential(
(0): Sequential(
(0): Sequential(
(0): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(1): Sequential(
(0): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(1): Sequential(
(0): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(1): Sequential(
(0): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace)
(2): Dropout(p=0.5)
(3): Linear(in_features=4096, out_features=4096, bias=True)
(4): ReLU(inplace)
(5): Dropout(p=0.5)
)
(1): Linear(in_features=4096, out_features=1000, bias=True)
)
)
(branch_2_feats): Sequential(
(0): Sequential(
(0): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(1): Sequential(
(0): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(1): Sequential(
(0): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(branch_2_fc): Sequential(
(0): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace)
(2): Dropout(p=0.5)
(3): Linear(in_features=4096, out_features=4096, bias=True)
(4): ReLU(inplace)
(5): Dropout(p=0.5)
)
(1): Linear(in_features=4096, out_features=1000, bias=True)
)
(branch_2): Sequential(
(0): Sequential(
(0): Sequential(
(0): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(1): Sequential(
(0): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(1): Sequential(
(0): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(2): Sequential(
(0): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(5): ReLU(inplace)
(6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
)
(1): Sequential(
(0): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace)
(2): Dropout(p=0.5)
(3): Linear(in_features=4096, out_features=4096, bias=True)
(4): ReLU(inplace)
(5): Dropout(p=0.5)
)
(1): Linear(in_features=4096, out_features=1000, bias=True)
)
)
)
=> total 75063 samples loaded in train mode
=> total 3894 samples loaded in test mode
=> optimize all layers.

Training...
=> Epoch Train loss Train acc Test acc
=> epoch 1 iter 0/4692, total_iter 0 | loss 40.965 | accuracy 0.000%

@CaptainEven
Copy link
Owner

@Mebigger 时间有点久,你先训练几个epoch看看,iter100,accuracy为0很正常,我自己这边也检查一下

@Mebigger
Copy link
Author

Mebigger commented Mar 5, 2019

@CaptainEven
好的,再次感谢
tips:我需要把InitRepNet.py中的
feats=vgg_oirg.model.features._modules
classifier=vgg_oirg.model.classifier._modules中的.model删掉才可以训练

@CaptainEven
Copy link
Owner

@Mebigger 刚刚重新上传了RepNet.py和InitRepNet.py,现在应该没有errrors了

@Mebigger
Copy link
Author

Mebigger commented Mar 5, 2019

@CaptainEven 已经全部改成您的文件了,目前,accuracy还是0,我继续训练试试,再次感谢您的回复

@CaptainEven
Copy link
Owner

多训练几个epoch应该就慢慢收敛了
progress

@CaptainEven
Copy link
Owner

@Mebigger from scratch训练我自己没尝试过,我估计也能慢慢收敛

@Mebigger
Copy link
Author

Mebigger commented Mar 5, 2019

@CaptainEven
好的,
您的机器太快了,我的1080ti,不知道要训练到什么时候,
但是我发现gpu的利用率并不是很高,cpu的利用率反而非常高

@CaptainEven
Copy link
Owner

@Mebigger 细粒度分类是比较难训练的,比如人脸识别....只能让及其慢慢跑了,不行的话,尝试把LR调高点...

@CaptainEven
Copy link
Owner

@Mebigger 不知道什么原因,我的gpu利用率是100%...
gpu

@CaptainEven
Copy link
Owner

@Mebigger 训练几个epoch之后开始慢慢往收敛走了...

=> epoch 4 iter 1293/4689, total_iter 15360 | loss 19.908 | accuracy 25.000%
=> epoch 4 iter 1303/4689, total_iter 15370 | loss 20.616 | accuracy 12.500%
=> epoch 4 iter 1313/4689, total_iter 15380 | loss 20.296 | accuracy 18.750%
=> epoch 4 iter 1323/4689, total_iter 15390 | loss 25.566 | accuracy 0.000%
=> epoch 4 iter 1333/4689, total_iter 15400 | loss 21.102 | accuracy 6.250%
=> epoch 4 iter 1343/4689, total_iter 15410 | loss 23.225 | accuracy 6.250%
=> epoch 4 iter 1353/4689, total_iter 15420 | loss 23.098 | accuracy 6.250%
=> epoch 4 iter 1363/4689, total_iter 15430 | loss 20.185 | accuracy 12.500%
=> epoch 4 iter 1373/4689, total_iter 15440 | loss 21.110 | accuracy 12.500%
=> epoch 4 iter 1383/4689, total_iter 15450 | loss 21.762 | accuracy 6.250%
=> epoch 4 iter 1393/4689, total_iter 15460 | loss 22.846 | accuracy 6.250%
=> epoch 4 iter 1403/4689, total_iter 15470 | loss 20.441 | accuracy 6.250%
=> epoch 4 iter 1413/4689, total_iter 15480 | loss 19.164 | accuracy 12.500%
=> epoch 4 iter 1423/4689, total_iter 15490 | loss 19.489 | accuracy 6.250%
=> epoch 4 iter 1433/4689, total_iter 15500 | loss 22.107 | accuracy 6.250%
=> epoch 4 iter 1443/4689, total_iter 15510 | loss 21.369 | accuracy 18.750%

@Mebigger
Copy link
Author

Mebigger commented Mar 5, 2019

@CaptainEven
终于跑起来了,我的得改成batchsize=8,内存不够用
之前GPU利用率为0是并没有用gpu,最后找到原因是----os.environ['CUDA_VISIBLE_DEVICES'] = '1'这个地方的“1”,我需要改成“0”,因为我只有一个gpu
下边是网友的解释:
os.environ[“CUDA_DEVICE_ORDER”] = “PCI_BUS_ID” # 按照PCI_BUS_ID顺序从0开始排列GPU设备 
os.environ[“CUDA_VISIBLE_DEVICES”] = “0” #设置当前使用的GPU设备仅为0号设备  设备名称为'/gpu:0'
我觉得和device = torch.device('cuda: 0' if torch.cuda.is_available() else 'cpu')这句话也有关。

非常感谢您的耐心指导以及回复

@CaptainEven
Copy link
Owner

CaptainEven commented Mar 5, 2019

@Mebigger 对的,因为我这里有8块GPU,通常0号GPU专门用来测试,并不用来训练,所以不是0

@Mebigger
Copy link
Author

Mebigger commented Mar 7, 2019

@CaptainEven
您好,现在训练的有点过拟合,train达到99.99%,test只有49左右,请问您有什么小技巧吗,我正尝试该参数呢,您的CarReID_data是自己创建的数据集吗,对应的pair_set_car.txt内容是什么格式的呢?

@CaptainEven
Copy link
Owner

CaptainEven commented Mar 7, 2019

@Mebigger 过拟合是因为相对于模型容量大小,训练数据量偏少,但是不影响车辆比对,在进行比对时只需要提取特征向量,计算夹角余弦,跟设定阈值比对即可:
car_match
,pair_set_car.txt是VehicleID中留作test的数据(可以参考我刚上传的dataset.py中process_car和gen_test_pairs函数的处理),格式:每一行一条数据,包括,两张图片的路径和标签(0 or 1,1表示是同一个对象)

@Mebigger
Copy link
Author

Mebigger commented Mar 8, 2019

这个是我用train训练的结果:

figure_1
figure_1-1
下边这是用train_mc训练的结果:
figure_1-4
figure_1-5
为什么加上FocalLoss之后效果反而到不好了呢?

@CaptainEven
Copy link
Owner

@Mebigger Foclaloss主要针对正负样本不均衡的情况,特别像object detection中负样本远远大于正样本的情况,至于在分类中这种样本不均衡的情况要小得多,所以FocalLoss是否变现更好是不一定的,跟数据集本身的特点有关。

@Mebigger
Copy link
Author

@CaptainEven
您好,您说的arc loss 是arcFace Loss吗?
image
为什么在train函数中计算veicle_id的时候使用Foclaloss,而不是arc loss呢?

@CaptainEven
Copy link
Owner

@Mebigger 无论Arc loss还是Focal loss都是基于Softmax loss(或CrossEntropy loss)的改进,本质上仍是Softmax loss,从上面的公式也可看出来,无非是对输入到最后Softmax的向量元素权重有不同。所以,Arc loss和Focal loss可同时使用。当然你可以在最后一层经过Arc loss计算之后直接送入CrossEntropy loss.

@CaptainEven CaptainEven reopened this Mar 14, 2019
@Mebigger
Copy link
Author

@CaptainEven
再次感谢您快速的回答;
对的,您说的非常好,又对两个loss有了进一步的认识,显然我没有理解到两个loss的本质。
另外,branch==5时,应该是RepNet的结构吧,为什么只在test的时候用呢,因为我发现上边的图片ID预测的并不是很准确。

@CaptainEven
Copy link
Owner

@Mebigger branch==5时提取最终的1024维特征向量,test准确率较低的根本原因在于训练数据的不足,导致过拟合。如果要test准确率达到train差不多的水平,估计需要至少10W数量级的训练数据。

@ly0303521
Copy link

@CaptainEven 你好,请问你的的训练集有多少张图片,我现在的数据集现在有30万张,有20多万张是我自己的数据,这批数据只有车辆ID的标签,但是因该对模型训练应该有帮助,现在已经训练了14个epoch,现在训练准确率93%,测试准确率只有33%(我的图片尺寸被改成了160,最后的特征向量也改成了256)

@tianmaxingkong666
Copy link

@CaptainEven @Mebigger 你好,请教一下,train和train_mc的主要区别是什么呢?

@tkone2018
Copy link

@Mebigger 你好,请问你那个结果展示图是博主给的测试脚本吗?我也是想显示以下测试图片的品牌,谢谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants