Ejemplo n.º 1
0
def C3D_Net_Run():
    epochs = 81
    loops = 2001
    learningrate = 0.0001
    attenuation = 0.1

    model = C3D(drop=0.9).cuda()

    if Config.LOAD_SAVED_MODE_PATH is not None:
        import types
        model.try_to_load_state_dict = types.MethodType(
            try_to_load_state_dict, model)
        model.try_to_load_state_dict(torch.load(Config.LOAD_SAVED_MODE_PATH))
        print('LOAD {} done!'.format(Config.LOAD_SAVED_MODE_PATH))

    lossfunc = nn.CrossEntropyLoss()
    optim = torch.optim.Adam(model.parameters(), lr=learningrate)

    pq_train = PictureQueue(dsl=train_UCF101_C3D(),
                            Gen=GenVariables_C3D,
                            batchsize=batchsize,
                            worker=5)
    pq_test = PictureQueue(dsl=test_UCF101_C3D(),
                           Gen=GenVariables_C3D,
                           batchsize=batchsize,
                           worker=2)

    cnt = 0
    for epoch in range(epochs):

        for l in range(loops):

            cnt += 1

            imgs, labels = pq_train.Get()

            model.zero_grad()
            pred = model(imgs)

            loss = lossfunc(pred, labels)

            logger.scalar_summary('C3D/train_loss', loss.data[0], cnt)

            loss.backward()

            optim.step()

            print('C3D epoch: {} cnt: {} loss: {}'.format(
                epoch, cnt, loss.data[0]))

            if cnt % 25 == 0:
                imgs, labels = pq_test.Get()
                pred = model.inference(imgs)
                loss = lossfunc(pred, labels)

                logger.scalar_summary('C3D/test_loss', loss.data[0], cnt)

                # acc
                acc = accuracy(pred, labels, topk=(1, 5, 10))
                logger.scalar_summary('C3D/test_acc@1', acc[0], cnt)
                logger.scalar_summary('C3D/test_acc@5', acc[1], cnt)
                logger.scalar_summary('C3D/test_acc@10', acc[2], cnt)

                imgs, labels = pq_train.Get()
                pred = model.inference(imgs)

                acc = accuracy(pred, labels, topk=(1, 5, 10))
                logger.scalar_summary('C3D/train_acc@1', acc[0], cnt)
                logger.scalar_summary('C3D/train_acc@5', acc[1], cnt)
                logger.scalar_summary('C3D/train_acc@10', acc[2], cnt)

            if cnt % 2000 == 0:
                savefile = savepath + 'C3D_EX1_{:02d}.pt'.format(epoch % 20)
                print('C3D save model to {}'.format(savefile))
                torch.save(model.state_dict(), savefile)

        if epoch in [20, 40, 60]:
            learningrate = learningrate * attenuation
            optim = torch.optim.Adam(model.parameters(), lr=learningrate)
Ejemplo n.º 2
0
    train_UCF0101_Spatial, test_UCF0101_Spatial, train_UCF0101_Temporal, test_UCF0101_Temporal, train_UCF101_C3D, \
    test_UCF101_C3D
from VideoClassification.utils.Others.toolkits import accuracy, try_to_load_state_dict
from VideoClassification.utils.DataSetLoader.UCF101_DataSetLoader_FromFileName.PictureQueue import PictureQueue, \
    GenVariables_Spatial, GenVariables_Temporal, GenVariables_C3D

batchsize = 86

epochs = 80
loops = 2000

TEST = 'S'

if TEST == 'T':
    pq_train = PictureQueue(dsl=train_UCF0101_Temporal(),
                            Gen=GenVariables_Temporal,
                            batchsize=batchsize)
    pq_test = PictureQueue(dsl=test_UCF0101_Temporal(),
                           Gen=GenVariables_Temporal,
                           batchsize=batchsize)
elif TEST == 'S':
    pq_train = PictureQueue(dsl=train_UCF0101_Spatial(),
                            Gen=GenVariables_Spatial,
                            batchsize=batchsize)
    pq_test = PictureQueue(dsl=test_UCF0101_Spatial(),
                           Gen=GenVariables_Spatial,
                           batchsize=batchsize)
elif TEST == 'C3D':
    pq_train = PictureQueue(dsl=train_UCF101_C3D(),
                            Gen=GenVariables_C3D,
                            batchsize=batchsize)
Ejemplo n.º 3
0
def VGG_Spatial_Net_Run():
    epochs = 80
    loops = 2000
    learningrate = 0.001
    attenuation = 0.1

    model = VGG_Spatial_Net(pretrained=False, dropout1=0.8, dropout2=0.7).cuda()

    if Config.LOAD_SAVED_MODE_PATH is not None:
        import types
        model.try_to_load_state_dict = types.MethodType(try_to_load_state_dict, model)
        model.try_to_load_state_dict(torch.load(Config.LOAD_SAVED_MODE_PATH))
        print('LOAD {} done!'.format(Config.LOAD_SAVED_MODE_PATH))

    lossfunc = nn.CrossEntropyLoss()
    optim = torch.optim.SGD(model.parameters(), lr=learningrate, momentum=0.9)

    cnt = 0

    pq_train = PictureQueue(dsl=train_UCF0101_Spatial(), Gen=GenVariables_Spatial, batchsize=batchsize)
    pq_test = PictureQueue(dsl=test_UCF0101_Spatial(), Gen=GenVariables_Spatial, batchsize=batchsize)

    for epoch in range(epochs):

        for l in range(loops):

            cnt += 1

            imgs, labels = pq_train.Get()

            model.zero_grad()
            pred = model(imgs)
            loss = lossfunc(pred, labels)

            logger.scalar_summary('Spatial/train_loss', loss.data[0], cnt)

            loss.backward()
            optim.step()

            print('Spatial epoch: {} cnt: {} loss: {}'.format(epoch, cnt, loss.data[0]))

            if cnt % 20 == 0:
                imgs, labels = pq_test.Get()
                pred = model.inference(imgs)

                loss = lossfunc(pred, labels)
                logger.scalar_summary('Spatial/test_loss', loss.data[0], cnt)

                acc = accuracy(pred, labels, topk=(1, 5, 10))
                logger.scalar_summary('Spatial/test_acc@1', acc[0], cnt)
                logger.scalar_summary('Spatial/test_acc@5', acc[1], cnt)
                logger.scalar_summary('Spatial/test_acc@10', acc[2], cnt)

                imgs, labels = pq_train.Get()
                pred = model.inference(imgs)

                acc = accuracy(pred, labels, topk=(1, 5, 10))
                logger.scalar_summary('Spatial/train_acc@1', acc[0], cnt)
                logger.scalar_summary('Spatial/train_acc@5', acc[1], cnt)
                logger.scalar_summary('Spatial/train_acc@10', acc[2], cnt)

            if cnt % 2000 == 0:
                savefile = savepath + 'VGG_Spatial_EX1_{:02d}.pt'.format(epoch % 50)
                print('Spatial save model to {}'.format(savefile))
                torch.save(model.state_dict(), savefile)

        if epoch in [10, 20, 50, 60]:
            learningrate = learningrate * attenuation
            optim = torch.optim.SGD(model.parameters(), lr=learningrate, momentum=0.9, )