【论文】基于GANs的图像文字擦除 ——2010.EraseNet: End-to-End Text Removal in the Wild(已开源)

pytorch官方代码:https://github.com/lcy0604/EraseNet
论文:2010.EraseNet: End-to-End Text Removal in the Wild 网盘提取码:0719

一、图片文字去除效果

图10 SCUT-EnsText 真实数据集的去除

第一列原图带文字、第二列为去除后的标签,剩下的列都是不同的算法去除效果 (pix2pix, scennetextEraser ,EnsNet, 本文EraseNet)
在这里插入图片描述

图11 合成的数据集文字图片去除效果比较

在这里插入图片描述

图12 与 inpanting方法比较去除效果

在这里插入图片描述

二、方法概述

模型设计了一个两阶段的从粗到细的(h a two-stage ·coarse-to-refine generator network)生成器网络和一个局部全局鉴别器网络(a local-global discriminator network.)。(本文中作者改进了SN-GAN,并提出名为 local-global SN-Patch-GAN 的架构
一个额外的语义分割网络头与整个算法一体的,用于感知(perceive)文字区域。

同时,借助外部预训练好的VGG-16网络抽取特征,用来监督生成的去除文字的图片(fake samples)与标签图片(ground-truths)的高级语义的差异(discrepancies of high-level semantics.)
在这里插入图片描述
在这里插入图片描述
图8 判别器架构
在这里插入图片描述

图9 不同算法效果对比

在这里插入图片描述

训练细节

单个NVIDIA 2080TI GPU, batch size =4

数据集

SCUT-EnsText : 华南理工大学提出与搜集见抬头代码库
2016年提出的 Synthetic data for text localisation in natural images 用来合成数据集

三、本地自己数据集实验结果

购物图转化

推理代码

# -*- coding: utf-8 -*-
# @Time : 2023/7/6 20:36
# @Author : XyZeng
import os
import math
import argparse
import torch
import torch.nn as nn
import torch.backends.cudnn as cudnn
from PIL import Image
import numpy as np
from torch.autograd import Variable
from torchvision.utils import save_imagefrom data.dataloader import ErasingData,ImageTransform
from models.sa_gan import STRnet2parser = argparse.ArgumentParser()
parser.add_argument('--numOfWorkers', type=int, default=0,help='workers for dataloader')
parser.add_argument('--modelsSavePath', type=str, default='',help='path for saving models')
parser.add_argument('--logPath', type=str,default='')
parser.add_argument('--batchSize', type=int, default=16)
parser.add_argument('--loadSize', type=int, default=512,help='image loading size')
parser.add_argument('--dataRoot', type=str,default='./')
parser.add_argument('--pretrained',type=str, default='./model.pth', help='pretrained models for finetuning')
parser.add_argument('--savePath', type=str, default='./output')
args = parser.parse_args()cuda = torch.cuda.is_available()
if cuda:print('Cuda is available!')cudnn.benchmark = Truedef visual(image):im =(image).transpose(1,2).transpose(2,3).detach().cpu().numpy()Image.fromarray(im[0].astype(np.uint8)).show()batchSize = args.batchSize
loadSize = (args.loadSize, args.loadSize)
dataRoot = args.dataRoot
savePath = args.savePathimport torch.nn.functional as Fos.makedirs(savePath,exist_ok=True)netG = STRnet2(3)
netG.load_state_dict(torch.load(args.pretrained))if cuda:netG = netG.cuda()for param in netG.parameters():param.requires_grad = Falseprint('OK!')import time
start = time.time()
netG.eval()ImgTrans=ImageTransform(args.loadSize)def get_img_tensor(path):img = Image.open(path)
Image.Resampling.BICUBIC (3), Image.Resampling.BOX (4) oimg=img.convert('RGB').resize((args.loadSize,args.loadSize) ,2)inputImage = ImgTrans(img).unsqueeze(0)# mask = ImgTrans(mask.convert('RGB'))# inputImage = F.interpolate(inputImage, size=(512,512), mode='bilinear')  # Adjust size to 115print('inputImage',inputImage.size())return inputImageif __name__ == '__main__':inpur_dir=r'example\all_images'  # 改为'./你需要转换的图片目录'for name in os.listdir(inpur_dir):path=os.path.join(inpur_dir,name)imgs=get_img_tensor(path)if cuda:imgs = imgs.cuda()# masks = masks.cuda()'''看论文喝源码能发现5个输出的对应'''out1, out2, out3, g_images,mm = netG(imgs)g_image = g_images.data.cpu()mm = mm.data.cpu()# save_image(g_image_with_mask, result_with_mask+path[0])dir,name=os.path.split(path)out_path=os.path.join(savePath,name)mask_path= os.path.join(savePath,name+'_mask.png')save_image(g_image, out_path)save_image(mm,mask_path)print(out_path,mask_path)# break

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爆肝整理,Postman接口测试-全局变量/接口关联/加密/解密(超细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 全局变量和环境变…

AJAX:宏任务与微任务

异步任务划分为了 宏任务:由浏览器环境执行的异步代码 微任务:由 JS 引擎环境执行的异步代码 宏任务和微任务具体划分: 左边表格是宏任务,右边是微任务 事件循环模型 /*** 目标:阅读并回答打印的执行顺序 */ console…

Spark编程-键值对RDD(K,V)创建及常用操作

简述 SparkRDD中可以包含任何类型的对象,在实际应用中,“键值对”是一种比较常见的RDD元素类型,分组和聚合操作中经常会用到,尤其是groupByKey和reduceByKey。 Spark操作中经常会用到“键值对RDD”(Pair RDD&a…

CSS样式

1.高度和宽度 .c1{height:300px;width:500px;}注意事项: 宽度支持百分比,高度不支持。行内标签:默认无效会计标签:默认有效(霸道,右侧区域空白,也不给你用) 2.块级和行内标签 块…

【Django学习】(十四)自定义action_router

之前我们的视图类可以继承GenericViewSet或者ModelViewSet,我们不用再自定义通用的action方法,但是有时候我们需要自定义action,我们该如何设计呢? 自定义action 1、手写视图逻辑 1.1、先在视图集里自定义action方法&#xff0…

GO语言泛型

set一般没什么不方便的 但是使用GET 需要使用类型断言,将取出来的数据转为预期数据, 空接口本身是一个装箱,会产生内存逃逸和多一部分空间. 于是1.17GO使用泛型. 泛型实现: 分析可执行文件后:发现 也就是泛型会为每个数据类型都生产一套代码,导致可执行文件大小增加,并且使用…

uni-app中a标签下载文件跳转后左上角默认返回键无法继续返回

1.首先使用的是onBackPress //跟onShow同级别 onBackPress(option){ uni.switchTab({ url:/pages/....... return true }) }发现其在uni默认头部中使用是可以的 但是h5使用了"navigationStyle":"custom"后手机默认的返回并不可以, 2.经过查询…

LCD-STM32液晶显示中英文-(5.字符编码)

目录 字符编码 字符编码说明参考网站 字符编码 ASCII编码 ASCII编码介绍 ASCII编码表 中文编码 1. GB2312标准 区位码 2. GBK编码 3. GB18030 各个标准的对比说明 4. Big5编码 字符编码 字符编码说明参考网站 字符编码及转换测试:导航菜单 - 千千秀字 …

智迪科技在创业板上市:市值约31亿元,谢伟明和黎柏松为实控人

7月17日,珠海市智迪科技股份有限公司(下称“智迪科技”,SZ:301503)在深圳证券交易所创业板上市。本次上市,智迪科技的发行价为31.59元/股,发行数量为2000万股,募资总额约为6.32亿元,…

onnx如何改变输入的维度

最近遇到一个难题,就算在用行为识别onnx转rknn的时候提示维度不对,因为行为识别模型是5维的。而rknn只支持4维。 我们先加载模型看一下它的input和node 可以看出模型的input[1]是一个全连接,因此我们可以直接修改他的input[0] input hel…

Kafka 入门到起飞系列 - 生产者发送消息流程解析

生产者通过producerRecord 对象封装消息主题、消息的value(内容)、timestamp(时间戳)等 生产者通过send()方法发送消息,send()方法会经过如下几步 1. 首先将消息交给拦截器(Interceptor)处理, 拦截器对生产者而言&…

静态数码管——FPGA

文章目录 前言一、数码管1、数码管简介2、共阴极数码管or共阳极数码管3、共阴极与共阳极的真值表 二、系统设计1、模块框图2、RTL视图 三、源码1、seg_led_static模块2、time_count模块3、top_seg_led_static(顶层文件) 四、效果五、总结六、参考资料 前言 环境: 1、…

数字化时代,智能文件工具让办公升级

无论是在办公室还是在学校,文件管理是我们日常工作中不可或缺的一环。传统的文件整理方式可能需要花费大量的时间和精力,而且常常容易出现混乱和遗漏。然而,随着科技的不断进步,我们现在有幸生活在一个数字化时代,因此…

如何正确有效的学习java前端(合集)

大量阅读 我是一个劲头十足的读者。所以,我的第一个关于学习JavaScript的技巧就是关于阅读,这绝不是巧合。书籍和其他的资源(如文章)可以在很大程度上帮助你学习JavaScript。通过实践学习,书籍是我学习新学科最喜欢的方式。在学习JavaScript的…

测试用例(2)

项目管理工具 主要用tapd,jira少用 acp 敏捷项目管理证书 task:故事,一个故事有开始也有结束,那么在项目管理里面,会把每个任务按照一个task来看,那么这个task也可以叫story,具体指的就是任务有开始有结…

ChatGPT火热之下的冷思考

作为一款基于人工智能的自然语言处理(NLP)​​聊天机器人​​程序,ChatGPT通过大量来自互联网的文本进行训练,并使用深度学习和机器学习算法来理解用户的问题并提供准确的回答。并且,ChatGPT还内置了情感分析、关键字提取和实体识别等功能&am…

Beyond Compare 代码比较工具

一、下载 官网下载地址: https://www.scootersoftware.com/download.php 选择 Windows 系统,简体中文版本,点击下载。 下载完成 二、安装 步骤1:双击安装包 步骤2:进入安装向导,点击下一步 步骤3&a…

在LLM的支持下使游戏NPC具有记忆化的方法

问题 使用GPT这样的LLM去处理游戏中的NPC和玩家的对话是个很好的点子,那么如何处理记忆化的问题呢。 因为LLM的输入tokens是有限制的,所以伴随着问题的记忆context是有窗口大小限制的,将所有的记忆输入LLM并不现实。 所以这里看到了stanfo…

Zookeeper

作为分布式中间件,zookeeper有以下几个重要功能 服务注册服务监听 :观察者模式,有服务上线或下线可以感知,并进行响应回调处理服务拉取配置中心CP特性数据存储方式为标准的文件结构 安装zk需要java环境,可参考 linux…

面试中关于自动化测试的认识

目录 一、什么是自动化测试,自动化测试的优势是什么? 二、什么样的项目比较适合做自动化测试,什么样的不适合做自动化测试? 三、在制定自动化测试计划的时候一般要考虑哪些点? 四、编写自动化脚本时的一些规范&…