2022DCIC智慧农业赛题-牛只图像分割竞赛baseline

Frankie :

目前本科在读,师从深度之眼比赛班导师-Taylor老师,刚接触图像算法竞赛半年,已经获得 IFLYTEK 1024 Challenge - X光目标检测第二名,华为云-重庆语义分割算法大赛二等奖等。

1、赛题链接

智慧农业赛题——牛只图像分割竞赛 赛道详情 - 数字中国

2、赛题描述&任务

牛只图像分割是智慧畜牧中的重要一环,既实现牛只的智能个体识别,还能掌握牛在养殖过程中的生长状况。本赛题旨在用人工智能为畜牧养殖赋能,使用机器代替饲养员对牛只进行个体识别,节约人力成本,同时快速获取牛只的体格信息数据,作为后续牛只体型评价、健康评价等的重要参考依据。

本赛题以牛只实例分割图像数据作为训练样本,参赛选手需基于训练样本构建模型,对提供的测试集中的牛只图像进行实例分割检测。任务方法不局限于实例分割等方案,训练数据集不局限于提供的数据,可以加入公开的数据集。

※ 比赛时间线

时间

安排

2022年1月21日

大数据赛道启动(发布赛题,开放报名)

2022年1月21日00:00:00-2022年3月11日24:00:00

初赛A榜(提交作品,实时评测)

2022年3月12日(00:00:00-24:00:00)

停止组队,停止在线提交作品

2022年3月13日(00:00:00-24:00:00)

初赛B榜(提交作品,定时评测)

2022年3月14日-3月27日

代码复现、晋级资格审核

2022年4月1日-4月4日

总决赛评审

2022年4月中旬

颁奖仪式

※ 丰厚的奖金

奖项

数量

金额(¥)

一等奖

1

¥80000.00元

二等奖

1

¥50000.00元

三等奖

1

¥20000.00元

优胜奖

2

¥5000.00元

3、数据描述

官方提供训练数据200张,并且提供了标注数据集data.json,其中实例个数共有2538只。

gt anchor比例分布

4、评价指标&提交示例

以cocoapi实例分割评判为标准,选择IoU=0.50:0.95 , area=all , maxDets=100下对应的结果值

参赛者通过提供的测试数据集图片得出具体的实例分割坐标,提交格式为json文本,utf-8编码,整体为一个数组格式,参考coco的实例分割的输出格式。

例子:

[{  
    “image_id”:“images/611e27ff656be64fad34087f.png”,
    “category_id”:18,
    “segmentation”:{“size”:[2560,1440],“counts”:“xxx”},
    “score”:0.236}
,{…},…]

5、划分验证数据集

import json
with open('./train_dataset/200/data.json', 'r') as f:
    js = json.load(f)
train_dict = {
    'images': [],
    'categories': [],
    'annotations': []
}
valid_dict = {
    'images': [],
    'categories': [],
    'annotations': []
}
# train_dict['images'] = js['images']
train_dict['categories'] = js['categories']
# valid_dict['images'] = js['images']
valid_dict['categories'] = js['categories']
chosen = [i for i in range(3, 203, 5)]
for annot in js['annotations']:
    if annot['image_id'] in chosen:
        valid_dict['annotations'].append(annot)
    else:
        train_dict['annotations'].append(annot)
for image in js['images']:
    if image['id'] in chosen:
        valid_dict['images'].append(image)
    else:
        train_dict['images'].append(image)
with open('train_cow.json', 'w') as f:
    output_json = json.dumps(train_dict)
    f.write(output_json)
with open('valid_cow.json', 'w') as f:
    output_json = json.dumps(valid_dict)
    f.write(output_json)

6、Baseline流程

本次提供Baseline位于LB中排名Top5%内。

关注【学姐带你玩AI】公众号

回复“小牛牛”

进比赛群领取

Baseline及资料

1、环境搭建

进入Baseline目录

1、unzip cow_datasets.zip
2、pip install icecream timm setuptools albumentations imagecorruptions ensemble-boxes tensorboard terminaltables mmpycocotools
# demo,cu110和torch1.8.0需要改为自己机器的环境
3、pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu110/torch1.8.0/index.html
4、python setup.py develop

2、下载预训练模型

https://github.com/SwinTransformer/storage/releases/download/v1.0.2/cascade_mask_rcnn_swin_base_patch4_window7.pth

将模型放入pre_model文件夹中

3、训练模型

单卡训练

python tools/train.py cascade_mask_rcnn_swin_base_patch4_window7_mstrain_480-800_giou_4conv1f_adamw_3x_coco.py

多卡训练

bash tools/dist_train.sh cascade_mask_rcnn_swin_base_patch4_window7_mstrain_480-800_giou_4conv1f_adamw_3x_coco.py ${NUM_GPUS}

4、推理提交

import pandas as pd
from glob import glob
import numpy as np
import cupy as cp
from tqdm.auto import tqdm
from pycocotools import mask
import json
import mmcv
from mmdet.apis import init_detector, inference_detector, show_result_pyplot


config_file = 配置文件路径
checkpoint_file = 模型路径
model = init_detector(config_file, checkpoint_file, device='cuda:0')


json_list = []
# 测试数据路径
for imgs in tqdm(glob('./test_dataset_A/images/*')):
    img_name = 'images/' + imgs.split('/')[-1]
    img = mmcv.imread(imgs)
    result = inference_detector(model, img)
    print(img_name)
    show_result_pyplot(model, img, result, score_thr=0.7)
    for idx, annot_mask in enumerate(result[1][0]):
        annot_mask = np.asfortranarray(annot_mask) 
        Rs = mask.encode(annot_mask)
        Rs['counts'] = Rs['counts'].decode('utf-8')
        conf = float(result[0][0][idx][-1])
        if conf > 0.7:
            annot = {
                'image_id': img_name,
                'category_id': 1,
                'segmentation': Rs,
                'score': conf,
            }
            json_list.append(annot)


with open('submission.json', 'w') as fp:
    json.dump(json_list, fp, indent=4, separators=(',', ': '))

7、比赛难点&上分点

训练数据中很少出现截断的牛,难点在于如果处理好测试数据中发生截断的情况。

可以试试不同的优化器和学习率策略,代码中替换注释即可:

 点击下方卡片关注公众号回复“小牛牛”领取本比赛baseline

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值