智慧农业赛题——牛只图像分割竞赛


本文围绕牛只图像分割竞赛展开,介绍赛题背景、任务及数据情况,包括训练集和A、B榜测试集,标注文件为COCO格式的json。还阐述了数据处理、环境准备、数据集划分与定义,以及使用Mask RCNN模型训练和预测的过程,经80个epoch训练提交结果约0.2。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

一、智慧农业赛题——牛只图像分割竞赛

比赛地址:https://www.dcic-china.com/competitions/10021

参考geoyee大佬: https://aistudio.baidu.com/aistudio/projectdetail/3452878

1.赛题简介

赛题名称: 牛只图像分割竞赛

出题单位: 深圳喜为智慧科技有限公司

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

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

2.数据简介

  • 此次比赛分为A榜和B榜两个评测集,以及提供200张带标注信息的训练数据,每张训练数据都是包含一个场景下多只牛的图像,并对当前场景中的牛只进行了标注;
  • A. A榜提供的测试集:100张标注图像;
  • B. B榜提供的测试集:100张标注图像;

3.数据说明

本次比赛标注文件中的类别为1类,为牛只,标注的文件格式为json格式,内容格式参照coco数据集标注格式。一个数据集对应一个图片文件夹一个json文件,json文件格式和A榜B榜json文件格式相同,内容格式具体如下:

1、“image”图片描述信息,包含多张图片的id与图片类型、名称信息。

“image”:[
{“id”: int,#图片id编号“_id”: str,#图片_id编号“file_name”: str,#图片路径或名称“height”: int,#图片高度“width”: int, #图片宽度“type”: “jpg”#图片类型},{…},{…}
]

2、“categories”类别描述信息,包含类别名称和类别id,该数据集仅为一类,为牛只。

“categories”: [
{
“supercategory”: “object”,#父类别“name”: “cow”,#类别名称“id”: 1 #类别对应id}
]

3、“annotations”标注描述信息,包含标注对应的图片标识id,标注的坐标信息等。

“annotations”:[
{
“_id”:str,#对应图片_id编号“id”:int,#目标标号“image_id”:int,#对应图片id编号“iscrowd”:int,#固定值0“bbox”:list,#目标定位框[x,y,w,h]“area”:float,#目标面积“segmentation”:list,#实例分割坐标[x1,y1,x2,y2,…]“category_id”:int#类别标识id},{…},{…}
]

4.提交示例

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

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

二、数据处理

主要是解压缩并查看数据

In [ ]
!unzip -qoa data/data127515/train_dataset.zip -d train
In [ ]
!unzip -qoa data/data127515/test_dataset_A.zip -d test
In [ ]
from PIL import Image
img=Image.open('train/200/images/60ac8ef2b7f3a3763b8340af.jpg')
img

三、环境准备

建议使用PaddleX,虽然都是COCO格式的json,但是实际上PaddleDetection的COCO的格式要求更严格,而PaddleX的COCO格式相对来说没那么严格,不用再进行数据处理。

In [ ]
!pip install paddlex

四、数据集处理

1.数据集划分

按照 8:2划分train和eval

In [ ]
!mv train/200/data.json train/200/annotations.json
In [ ]
!paddlex --split_dataset --format COCO --dataset_dir train/200 --val_value 0.2
In [ ]
!ls train/200
annotations.json  images  train.json  val.json

2.统计mean和std

In [ ]
# 统计mean和stdimport osimport cv2import numpy as npfrom tqdm import tqdm


img_list_1440 = []
img_list_576 = []
means = np.zeros(3)
stdevs = np.zeros(3)
imgs_path = "train/200/images"imgs_name = os.listdir(imgs_path)for idx, name in tqdm(enumerate(imgs_name)):    if name == ".ipynb_checkpoints":        continue
    img = cv2.cvtColor(cv2.imread(os.path.join(imgs_path, name)), cv2.COLOR_BGR2RGB)
    img = img[:, :, :, np.newaxis]    if img.shape[0] == 1440:
        img_list_1440.append(img)    else:
        img_list_576.append(img)for img_list in [img_list_1440, img_list_576]:
    imgs = np.concatenate(img_list, axis=-1)
    imgs = imgs.astype(np.float32) / 255.
    for i in tqdm(range(3)):
        pixels = imgs[:, :, i, :].ravel()
        means[i] += float(np.mean(pixels))
        stdevs[i] += float(np.std(pixels))print(means / 2, stdevs / 2)

3.定义数据集

In [1]
# 准备数据集import paddlex as pdxfrom paddlex import transforms as T


train_transforms = T.Compose([
    T.MixupImage(mixup_epoch=-1), 
    T.RandomDistort(),
    T.RandomExpand(im_padding_value=[123.675, 116.28, 103.53]), 
    T.RandomCrop(),
    T.RandomHorizontalFlip(), 
    T.BatchRandomResize(
        target_sizes=[320, 352, 384, 416, 448, 480, 512, 544, 576, 608],
        interp="RANDOM"), 
    T.Normalize(
        mean=[0.46157165, 0.46698335, 0.46580717], std=[0.28069802, 0.28096266, 0.28323689])
])

eval_transforms = T.Compose([
    T.Resize(
        target_size=608, interp="CUBIC"), 
    T.Normalize(
        mean=[0.46157165, 0.46698335, 0.46580717], std=[0.28069802, 0.28096266, 0.28323689])
])

train_dataset = pdx.datasets.CocoDetection(
    data_dir="train/200",
    ann_file="train/200/train.json",
    transforms=train_transforms,
    shuffle=True)
eval_dataset = pdx.datasets.CocoDetection(
    data_dir="train/200",
    ann_file="train/200/val.json",
    transforms=eval_transforms)

五、模型训练

使用 Mask RCNN 模型,Mask RCNN沿用了Faster RCNN的思想,特征提取采用ResNet-FPN的架构,另外多加了一个Mask预测分支。集成了物体检测和实例分割两大功能,并且在性能上上也超过了Faster-RCNN。

具体可参考小度熊分隔; https://gitee.com/paddlepaddle/PaddleX/blob/release/2.1/tutorials/train/instance_segmentation/mask_rcnn_r50_fpn.py

1.PaddleX模型

模型 模型大小 预测时间(毫秒) BoxAP (%) MaskAP (%)
MaskRCNN-ResNet18-FPN 189.1MB - 33.6 30.5
MaskRCNN-ResNet50 143.9MB 159.527 38.2 33.4
MaskRCNN-ResNet50-FPN 177.7MB 83.567 38.7 34.7
MaskRCNN-ResNet50_vd-FPN 177.7MB 97.929 39.8 35.4
MaskRCNN-ResNet101-FPN 253.6MB 97.929 39.5 35.2
MaskRCNN-ResNet101_vd-FPN 253.7MB 97.647 41.4 36.8
MaskRCNN-HRNet_W18-FPN 120.7MB - 38.7 34.7

2.PaddleDetection模型

骨架网络 网络类型 每张GPU图片个数 学习率策略 推理时间(fps) Box AP Mask AP 下载 配置文件
ResNet50 Mask 1 1x ---- 37.4 32.8 下载链接 配置文件
ResNet50 Mask 1 2x ---- 39.7 34.5 下载链接 配置文件
ResNet50-FPN Mask 1 1x ---- 39.2 35.6 下载链接 配置文件
ResNet50-FPN Mask 1 2x ---- 40.5 36.7 下载链接 配置文件
ResNet50-vd-FPN Mask 1 1x ---- 40.3 36.4 下载链接 配置文件
ResNet50-vd-FPN Mask 1 2x ---- 41.4 37.5 下载链接 配置文件
ResNet101-FPN Mask 1 1x ---- 40.6 36.6 下载链接 配置文件
ResNet101-vd-FPN Mask 1 1x ---- 42.4 38.1 下载链接 配置文件
ResNeXt101-vd-FPN Mask 1 1x ---- 44.0 39.5 下载链接 配置文件
ResNeXt101-vd-FPN Mask 1 2x ---- 44.6 39.8 下载链接 配置文件
ResNet50-vd-SSLDv2-FPN Mask 1 1x ---- 42.0 38.2 下载链接 配置文件
ResNet50-vd-SSLDv2-FPN Mask 1 2x ---- 42.7 38.9 下载链接 配置文件

3.模型训练

采取ResNet50_vd作为Backbone,开始训练,训练较为耗时。

In [2]
import numpy as npimport paddlex as pdxfrom paddlex import transforms as T# 初始化模型并进行训练num_classes = len(train_dataset.labels)
model = pdx.det.MaskRCNN(
    num_classes=num_classes, 
    backbone="ResNet50_vd")
    
    

model.train(
    num_epochs=200,
    train_dataset=train_dataset,
    train_batch_size=20,
    eval_dataset=eval_dataset,
    pretrain_weights="COCO",
    learning_rate=0.005 / 12,
    warmup_steps=500,
    warmup_start_lr=0.0,
    save_interval_epochs=5,
    lr_decay_epochs=[85, 135],
    save_dir="output/maskrcnn_r50vd",
    use_vdl=True)

4.预测并提交

In [ ]
# 预测import osimport os.path as ospimport jsonimport numpy as npimport paddlex as pdxfrom tqdm import tqdmfrom pycocotools import mask as maskUtilsdef binary_mask_to_rle(binary_mask):
    binary_mask = np.asfortranarray(binary_mask)
    rle = maskUtils.encode(binary_mask)
    rle["counts"] = str(rle["counts"], encoding="utf-8")    return rle

model = pdx.load_model("output/maskrcnn_r50vd/best_model")
test_path = "test/images/"test_name = os.listdir(test_path)
res_json = []for name in tqdm(test_name):
    path = osp.join(test_path, name)    if path.split(".")[-1] != "png":        continue
    result = model.predict(path)    for res in result:        # print(res)
        # print(50*'*')
        res_json.append({            "image_id": osp.join("images", name),            "category_id": 1,            "segmentation": binary_mask_to_rle(res["mask"]),            "score": res["score"]
        })    # pdx.det.visualize(image_name, result, threshold=0.5, save_dir="./output_picture/maskrcnn_r50vd")with open("test.json", "w", encoding="utf-8") as f:
    json.dump(res_json, f)

经过80个epoch训练提交结果为0.2左右


# 配置文件  # 两大  # 仅为  # 还能  # 格式为  # 大佬  # 局限于  # 都是  # 数据处理  # 下载链接  # git  # gitee  # https  # paddlepaddle  # 人工智能  # json  # 架构  # red  # ai 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: Depseek能否批量生成部门总结_Depseek多部门总结批量生成步骤【方法】  AI PPT生成工具有哪些_一键生成演示文稿的AI工具推荐  Gemini怎样写描述型提示词_Gemini描述提示词编写【攻略】  tofai免费网页版入口 tofai官网手机版网站  eBookWriter AI:无需写作也能创作专业电子书  ChatGPT高级图像编辑教程:黑白转换、裁剪与GIF动画制作  Gemini怎样写实用型提示词_Gemini实用提示词编写【攻略】  lovemo官网直达链接 lovemo网页版在线  Artist.ly AI Image Designer: 终极指南  AI写作鱼怎么一键生成论文大纲_AI写作鱼大纲生成与逻辑梳理【技巧】  批改网AI检测工具如何对接学校系统_批改网AI检测工具系统对接与数据同步【步骤】  Midjourney怎样加元素词丰富画面_Midjourney元素词技巧【方法】  AI图片生成教程:轻松打造你的专属文化艺术照  豆包AI的发现页面有什么功能_探索热门智能体与话题  OpenAI ChatGPT Agent:AI自主任务的未来  AI女友:时尚穿搭与美丽瞬间的完美融合  在线奇幻名称生成器:打造独一无二的角色名  怎么用AI帮你进行头脑风暴并分类?5分钟输出结构化创意清单  Gamma做年终总结PPT怎么用_Gamma做年终总结PPT使用方法详细指南【教程】  服务合同模板:起草、签署和管理指南,提升业务效率  Canva AI终极指南:免费AI聊天机器人,设计、视频、网站全搞定!  教你用AI进行市场调研,快速生成消费者洞察报告  怎么用AI制作数字人短视频?3步教你创建虚拟主播  自动化AI汽车生成挑战赛1966 Gasmea回顾与评分  AI赋能营销:角色、策略与工具选择全指南  System of a Down:深度剖析《Hypnotize》歌词  AI电子书写作终极指南:ChatGPT和Canva实战教程  文心一言处理大规模中文报表数据的清洗技巧  教你用AI帮你写一份完整的用户调研报告,从数据到结论全搞定  摆脱情歌魔咒:告别心碎,拥抱新生的情感之旅  通义千问怎么设置常用功能快捷键_通义千问快捷键设置【步骤】  AI CRM集成:提升客户关系管理效率的关键  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Claude 4.5 深度解析: Coding, VS Code & AI Agent 新纪元  Telegram与n8n集成教程:自动化AI助手构建指南  Pearson AI学习工具:高效提升你的数学学习效率  ChatGPT怎么设置中文界面_ChatGPT中文设置步骤【方法】  通义千问怎样写小红书文案_通义千问文案写作步骤【步骤】  AI写作工具检测:学生如何避免学术不端行为  AI绘图工具测评:告别复杂流程,高效创作流程图  7个简单高效的面部肌肉锻炼,改善面部不对称,塑造完美脸型  智谱AI绘画怎么用_智谱AI绘画使用方法详细指南【教程】  tofai官网入口网站 tofai官网入口网页版  使用ChatGPT快速生成专辑封面:AI艺术创作指南  OpenAI DevDay 2025:开发者必知的七大AI进展  怎么用AI帮你解读复杂的学术论文?快速抓住核心论点和证据  EdrawMax全面评测:使用AI轻松绘制流程图和思维导图  构建卓越AI代理:端到端Agentic RAG解决方案详解  AI 3D人像视频制作:零成本手机教程,引爆社交媒体  解读 Karan Aujla:如何用音乐连接全球与故土? 

 2025-07-23

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.