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、下载预训练模型
将模型放入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