新闻中心
百度网盘AI大赛-图像处理挑战赛:文档检测优化赛 Baseline
该内容围绕百度网盘AI大赛文档检测优化赛展开,介绍用Resnet152+Linear网络结构回归文档拐角坐标的方案。包括获取数据、构造含预处理的读取器、定义网络,训练时经多轮训练及调学习率达0.89左右精度,还涉及打包提交文件的相关说明。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

百度网盘AI大赛-图像处理挑战赛:文档检测优化赛
使用Resnet152回归图像中文档的拐角坐标完成百度网盘AI大赛-图像处理挑战赛:文档检测优化赛。
比赛介绍
生活中人们使用手机进行文档扫描逐渐成为一件普遍的事情,为了提高人们的使用体验,我们期望通过算法技术去除杂乱的拍摄背景并精准框取文档边缘,选手需要通过深度学习技术训练模型,对给定的真实场景下采集得到的带有拍摄背景的文件图片进行边缘智能识别,并最终输出处理后的扫描结果图片。
评测方式说明
- 参赛选手提交的代码和模型只预测文档边缘的heatmap图,由后台评测脚本中预置的算法回归出文档区域的四个角的坐标点,并生成规则的四边形,与GT计算IoU值;
- 参赛选手提交的代码和模型直接回归文档区域的四个角的坐标点,并生成规则的四边形,与GT计算IoU值。 注:两种评测方式的结果会放在一个排行榜内,评测脚本中预置的角点回归算法会存在一定的局限性,如果各位参赛选手希望获得更高的分数,建议采用第二种评测方式。
任务分析
本次比赛要求选手设计算法在给定图片中划定一块四边形区域,以尽可能与图片中的文档部分重合。
因此,本次任务可以同时看作回归问题和分割问题。
- 作为回归问题,
需要设计学习器/其他方法寻找四边形的四个拐角坐标 - 作为分割问题,直接将数据中的segments作为标签训练对应的分割学习器即可
本项目将本次任务看作回归问题来处理,使用Resnet152+Linear的网络结构回归四个角的坐标。
代码部分
获取数据
In [ ]! wget https://staticsns.cdn.bcebos.com/amis/2025-4/1649731549425/train_datasets_document_detection_0411.zip! unzip -oq /home/aistudio/train_datasets_document_detection_0411.zip! rm -rf __MACOSX ! rm -rf /home/aistudio/train_datasets_document_detection_0411.zip
构造数据读取器
通过paddle.io.dataset构造读取器,便于读取数据。
数据预处理包括:
美图云修
商业级AI影像处理工具
50
查看详情
- 根据data_info的边缘轮廓信息分别提取四个拐角的位置。
- 对图片进行resize和数据增强(调整明暗对比度等参数)
import paddleimport numpy as npimport pandas as pdimport cv2class MyDateset(paddle.io.Dataset):
def __init__(self, mode = 'train', train_imgs_dir = '/home/aistudio/train_datasets_document_detection_0411/images/', train_txt = '/home/aistudio/train_datasets_document_detection_0411/data_info.txt'):
super(MyDateset, self).__init__()
self.mode = mode
self.train_imgs_dir = train_imgs_dir with open(train_txt,'r') as f:
self.train_infor = f.readlines() def __getitem__(self, index):
item = self.train_infor[index][:-1]
splited = item.split(',')
img_name = splited[0]
img = cv2.imread(self.train_imgs_dir+img_name+'.jpg')
h, w, c = img.shape
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 对图片进行resize,调整明暗对比度等参数
img = paddle.vision.transforms.resize(img, (512,512), interpolation='bilinear') if np.random.rand()<1/3:
img = paddle.vision.transforms.adjust_brightness(img, np.random.rand()*2) else: if np.random.rand()<1/2:
img = paddle.vision.transforms.adjust_contrast(img, np.random.rand()*2) else:
img = paddle.vision.transforms.adjust_hue(img, np.random.rand()-0.5)
img = img.transpose((2,0,1))
img = img/255
sites = [] for i in range(1,len(splited),2):
sites.append([float(splited[i])/w,float(splited[i+1])/h])
label = [] for i in range(4):
x, y = self.get_corner(sites, i+1)
label.append(x)
label.append(y)
img = paddle.to_tensor(img).astype('float32')
label = paddle.to_tensor(label).astype('float32') return img, label def get_corner(self, sites, corner_flag):
# corner_flag 1:top_left 2:top_right 3:bottom_right 4:bottom_left
if corner_flag == 1:
target_sites = [0,0] elif corner_flag == 2 :
target_sites = [1,0] elif corner_flag == 3 :
target_sites = [1,1] elif corner_flag == 4 :
target_sites = [0,1]
min_dis = 3
best_x = 0
best_y = 0
for site in sites: if abs(site[0]-target_sites[0])+abs(site[1]-target_sites[1])<min_dis:
min_dis=abs(site[0]-target_sites[0])+abs(site[1]-target_sites[1])
best_x = site[0]
best_y = site[1]
return best_x, best_y def __len__(self):
return len(self.train_infor)# 对dataloader进行测试'''
train_dataset=MyDateset()
train_dataloader = paddle.io.DataLoader(
train_dataset,
batch_size=16,
shuffle=True,
drop_last=False)
for step, data in enumerate(train_dataloader):
img, label = data
print(step, img.shape, label.shape)
break
'''
定义网络结构
In [ ]class MyNet(paddle.nn.Layer):
def __init__(self):
super(MyNet,self).__init__()
self.resnet = paddle.vision.models.resnet152(pretrained=True, num_classes=0)
self.flatten = paddle.nn.Flatten()
self.linear = paddle.nn.Linear(2048, 8) def forward(self, img):
y = self.resnet(img)
y = self.flatten(y)
out = self.linear(y) return out
训练
第一次训练后参数为0.66左右,重复训练+调整学习率可以达到0.89左右。
In [ ]model = MyNet()
model.train()
train_dataset=MyDateset()# 需要接续之前的模型重复训练可以取消注释# param_dict = paddle.load('./model.pdparams')# model.load_dict(param_dict)train_dataloader = paddle.io.DataLoader(
train_dataset,
batch_size=16,
shuffle=True,
drop_last=False)
max_epoch=10scheduler = paddle.optimizer.lr.CosineAnnealingDecay(learning_rate=0.0001, T_max=max_epoch)
opt = paddle.optimizer.Adam(learning_rate=scheduler, parameters=model.parameters())
now_step=0for epoch in range(max_epoch): for step, data in enumerate(train_dataloader):
now_step+=1
img, label = data
pre = model(img)
loss = paddle.nn.functional.square_error_cost(pre,label).mean()
loss.backward()
opt.step()
opt.clear_gradients() if now_step%100==0: print("epoch: {}, batch: {}, loss is: {}".format(epoch, step, loss.mean().numpy()))
paddle.s*e(model.state_dict(), 'model.pdparams')
打包提交
本题目提交需要提交对应的模型和预测文件。predict.py需要读取同目录下的模型信息,并预测坐标点-保存为json或预测分割后的图片-保存为图片形式。
想要自定义训练模型,只需要将predict.py中的模型和process函数中的do something 替换为自己的模型内容即可。
提交分割模型时,取消predict中52行的注释部分即可保存分割后的图片信息
如果不想自己反复训练模型可以直接从fork后就有的model.pdparams文件开始训练,这个模型精度为0.88~
In [ ]# 压缩可提交文件! zip submit.zip model.pdparams predict.py
以上就是百度网盘AI大赛-图像处理挑战赛:文档检测优化赛 Baseline的详细内容,更多请关注其它相关文章!
# 中文网
# 大连信息化网站优化好处
# 全网推广品牌营销
# 陕西建设网站设计模板
# 如皋律师网站推广
# 兖州推广营销如何做
# 社群营销和群推广
# 可口可乐的网络营销推广
# 仙居seo是什么细节模式
# 廊坊哪家网站推广好
# 东营提高关键词排名
# 戛纳
# 开源
# 首款
# 系列产品
# ai
# 边缘
# 美图
# 图像处理
# 百度网
# 文档
# type
# latte
# udio
# red
# cos
# 百度
# 百度网盘
# macos
相关栏目:
【
行业资讯67740 】
【
技术百科0 】
【
网络运营39195 】
相关推荐:
j*a怎么读取char数组
如何更新苹果ios16
买的5g手机但是没有5g网络怎么办
type-c全能接口是什么意思
空调power灯一直闪是什么意思
如何加装固态硬盘
春运车站抢票和网上抢票
爱奇艺视频怎么下载到手机u盘怎么转换格式方法
夸克缺什么登录不了
交管12123协议头不完整是啥意思
交管12123协议头不完整怎么解决
element ui的好处
typescript性能如何
市盈率和市净率是什么意思
typescript和哪个语音很像
进口超级维特拉三门版power是什么意思
typescript接口有什么用
j*a数组怎么新增值
j*a怎么清除数组
台达plc只有power灯亮是什么意思
ai文件在线打开工具有哪些
学typescript需要多久
怎么在爱奇艺中投屏到电视最新方法
typescript中范围如何设定
固态硬盘如何测试
苹果16promax有哪些颜色
市盈率动亏损是什么意思
萝卜快跑的收费标准是什么
win10锁屏壁纸怎么换360锁屏壁纸吗
单片机引脚怎么改成上拉
远程桌面如何发送命令
春运抢票最快几天能成功
广东春运抢票怎么抢的
typescript多久能学会
内网和外网区别 内网和外网有什么区别
NoSQL数据库有哪些特点
如何以命令符运行程序
为什么有的夸克带电
内在市盈率是什么意思
如何去除计算器的命令
苹果16会升级哪些
react怎么使用 typescript
typescript有什么框架
如何查看win10版本命令行
为什么youtube音乐打不开
early什么意思
电动车power灯亮红灯是什么意思
跑步机power键是什么意思
如何学好typescript
debian和ubuntu的区别是什么


2025-07-22
浏览次数:次
返回列表
需要设计学习器/其他方法寻找四边形的四个拐角坐标