暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

科大讯飞:人员聚集识别挑战赛baseline

Coggle数据科学 2022-09-16
729

赛事背景

疫情给人们带来的影响体现在衣食住行的方方面面。在疫情防控中,需要减少非必要的聚集性活动,减少参加聚集性活动的人员。对于个人而言,尽量不前往人员聚集场所尤其是密闭式场所。

在本次比赛中我们需要参赛选手开发算法模型,对图中的人数进行识别。为了简化赛题难度我们只需要选手识别出人数即可,不需要预测行人位置。

比赛链接:https://challenge.xfyun.cn/topic/info?type=people-gather&option=ssgy

baseline链接:https://github.com/datawhalechina/competition-baseline/tree/master/competition/%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9EAI%E5%BC%80%E5%8F%91%E8%80%85%E5%A4%A7%E8%B5%9B2022

赛事任务

对输入的图片进行识别,给出图片中包含多少个人。选手需要根据训练集构建模型对测试集的图片进行预测,按照测试集精度进行排名。

评审规则

赛题数据由训练集和测试集组成,需要选手对测试集进行预测。训练集给出了近1000张图片及图片上人数标签。

本次竞赛的评价标准采用回归任务指标,最高分为0。

基础思路

赛题是一个典型的回归任务,因此可以使用简单的CNN来完成回归训练。

步骤1:读取数据集

这里为了增加模型的稳定性,我们将标签进行了简单的缩放处理。

train_df = pd.read_csv('./input/人员聚集识别挑战赛数据集/train_label.csv')
train_df['path'] = './input/人员聚集识别挑战赛数据集/train/' + train_df['name']
train_df['count'] /= 100

步骤2:定义回归模型

定义CNN模型,这里使用预训练模型完成数值输出就可以。选手可以自行选择模型。

class XunFeiNet(nn.Module):
    def __init__(self):
        super(XunFeiNet, self).__init__()

        model = models.resnet18(True)
        model.avgpool = nn.AdaptiveAvgPool2d(1)
        model.fc = nn.Linear(512, 1)
        self.resnet = model

    def forward(self, img):
        out = self.resnet(img)
        return out

步骤3:训练与验证

def train(train_loader, model, criterion, optimizer):
    model.train()
    train_loss = 0.0
    for i, (input, target) in enumerate(train_loader):
        input = input.cuda(non_blocking=True)
        target = target.cuda(non_blocking=True)

        # compute output
        output = model(input)
        loss = criterion(output[:, 0], target)

        # compute gradient and do SGD step
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if i % 40 == 0:
            print(loss.item())

        train_loss += loss.item()
        
def validate(val_loader, model, criterion):
    model.eval()

    val_acc = 0.0

    with torch.no_grad():
        end = time.time()
        for i, (input, target) in enumerate(val_loader):
            input = input.cuda()
            target = target.cuda()

            # compute output
            output = model(input)
            loss = criterion(output, target)
            val_acc += (output[:, 0] - target).abs().sum().item()

步骤4:测试集预测

test_loader = torch.utils.data.DataLoader(
    XunFeiDataset(test_df['path'].values, [0] * test_df.shape[0],
                  A.Compose([
                      A.Resize(300, 300),
                      A.HorizontalFlip(p=0.5),
                      A.RandomContrast(p=0.5),
                      ])
                  ), batch_size=10, shuffle=False, num_workers=1, pin_memory=False
)

pred = None

for _ in range(5):
    if pred is None:
        pred = predict(test_loader, model, criterion)
    else:
        pred += predict(test_loader, model, criterion)

 竞赛交流群 邀请函  #

△长按添加竞赛小助手
添加Coggle小助手微信
(ID : coggle666)

私聊小助手领取文章原始代码


每天Kaggle算法竞赛、干货资讯汇总

与 24000+来自竞赛爱好者一起交流~


文章转载自Coggle数据科学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论