pysot 中的异步多进程切图
孪生网络算法对数据需求量较大,训练一般使用多个数据集。检测数据集普遍图大目标多,pysot 第一步准备数据,屏蔽了不同数据集的差异,也提升了数据加载效率。网络设定的模板大小为 127×127127\times 127127×127,搜索区域大约为 255×255255\times 255255×255。为给数据增强留有余地,数据切图大小为 511×511511\times 511511×511。下面以 COCO 数据集为例进行介绍。
par_crop.py
since = time.time()main(int(sys.argv[1]), int(sys.argv[2]))time_elapsed = time.time() - sinceprint('Total complete in {:.0f}m {:.0f}s'.format(time_elapsed // 60, time_elapsed % 60))
main
dataDir = '.'crop_path = './crop{:d}'.format(instanc_size)if not isdir(crop_path): mkdir(crop_path)
对于训练集和验证集,根据标注文件实例化 pycocotools.coco.COCO。
for dataType in ['val2017', 'train2017']:set_crop_base_path = join(crop_path, dataType)set_img_base_path = join(dataDir, dataType)annFile = '{}/annotations/instances_{}.json'.format(dataDir,dataType)coco = COCO(annFile)n_imgs = len(coco.imgs)with futures.ProcessPoolExecutor(max_workers=num_threads) as executor:fs = [executor.submit(crop_img, coco.loadImgs(id)[0],coco.loadAnns(coco.getAnnIds(imgIds=id, iscrowd=None)),set_crop_base_path, set_img_base_path, instanc_size) for id in coco.imgs]for i, f in enumerate(futures.as_completed(fs)):# Write progress to error so that it can be seenprintProgress(i, n_imgs, prefix=dataType, suffix='Done ', barLength=40)print('done')
crop_img
从img['file_name']
读取文件名。以该名称创建文件夹。
读取图像,根据每个目标框截取后保存。
crop_like_SiamFC 像 SiamFC 那样截取,即外扩截取后缩放到指定大小。
frame_crop_base_path = join(set_crop_base_path, img['file_name'].split('/')[-1].split('.')[0])if not isdir(frame_crop_base_path): makedirs(frame_crop_base_path)im = cv2.imread('{}/{}'.format(set_img_base_path, img['file_name']))avg_chans = np.mean(im, axis=(0, 1))for trackid, ann in enumerate(anns):rect = ann['bbox']bbox = [rect[0], rect[1], rect[0] + rect[2], rect[1] + rect[3]]if rect[2] <= 0 or rect[3] <=0:continuez, x = crop_like_SiamFC(im, bbox, instanc_size=instanc_size, padding=avg_chans)cv2.imwrite(join(frame_crop_base_path, '{:06d}.{:02d}.z.jpg'.format(0, trackid)), z)cv2.imwrite(join(frame_crop_base_path, '{:06d}.{:02d}.x.jpg'.format(0, trackid)), x)
crop_like_SiamFC
由[x1, y1, x2, y2]
的框得到中心和大小。
pos_s_2_bbox 根据中心位置和大小解码出框。
crop_hwc 截取图像块并缩放为指定大小。
target_pos = [(bbox[2]+bbox[0])/2., (bbox[3]+bbox[1])/2.]target_size = [bbox[2]-bbox[0], bbox[3]-bbox[1]]wc_z = target_size[1] + context_amount * sum(target_size)hc_z = target_size[0] + context_amount * sum(target_size)s_z = np.sqrt(wc_z * hc_z)scale_z = exemplar_size / s_zd_search = (instanc_size - exemplar_size) / 2pad = d_search / scale_zs_x = s_z + 2 * padz = crop_hwc(image, pos_s_2_bbox(target_pos, s_z), exemplar_size, padding)x = crop_hwc(image, pos_s_2_bbox(target_pos, s_x), instanc_size, padding)return z, x
crop_hwc
a
和b
分别为宽高的比例系数。
c
和d
分别为宽高方向的平移量。
a = (out_sz-1) / (bbox[2]-bbox[0])b = (out_sz-1) / (bbox[3]-bbox[1])c = -a * bbox[0]d = -b * bbox[1]mapping = np.array([[a, 0, c],[0, b, d]]).astype(np.float)crop = cv2.warpAffine(image, mapping, (out_sz, out_sz), borderMode=cv2.BORDER_CONSTANT, borderValue=padding)return crop
printProgress
"""Call in a loop to create terminal progress bar@params:iteration - Required : current iteration (Int)total - Required : total iterations (Int)prefix - Optional : prefix string (Str)suffix - Optional : suffix string (Str)decimals - Optional : positive number of decimals in percent complete (Int)barLength - Optional : character length of bar (Int)"""formatStr = "{0:." + str(decimals) + "f}"percents = formatStr.format(100 * (iteration / float(total)))filledLength = int(round(barLength * iteration / float(total)))bar = '' * filledLength + '-' * (barLength - filledLength)sys.stdout.write('\r%s |%s| %s%s %s' % (prefix, bar, percents, '%', suffix)),if iteration == total:sys.stdout.write('\x1b[2K\r')sys.stdout.flush()
参考资料:
- 2. 使用Python的 concurrent.futures 模块
- python concurrent.futures
- Speed Up Your Python Program With Concurrency
pysot 中的异步多进程切图相关推荐
- 五分钟学GIS | 多进程切图
1.多进程切图概述 9D版本之后除SuperMap iServer支持多进程切图,SuperMap iObjects Java 9D版本也支持多进程切图,可实现多机分发切图,切图更稳定.更高效,其还提 ...
- 使用python中PIL库进行切图时候出现了图片全黑
使用PIL的Image切图时候图片全黑 不知道大家有没有遇见这样得问题,使用python中PIL库进行切图时候出现了图片全黑得现象 今天写了个切图得代码,但是得到得图片是全黑的,像这样的情况: 不知道 ...
- 【图数据库中的”分布式”和“切图”】
今天,我试着简要综述几类不同的图数据库的分布式与切图的设计,希望可以帮助大家了解不同项目.产品的设计差异.如果有理解不对的地方,欢迎留言讨论. 什么是分布式系统 一般来说,分布式系统是一组计算机程序的 ...
- html中sprite标签,网页切图 CSS Sprites(CSS精灵)介绍和图文使用教程
CSS Sprites 技术对于广大的前端工程师来说应该是一点也不陌生.这个被国内开发者昵称为CSS精灵.CSS雪碧的家伙到底解决了什么问题,我们又怎样合理使用这个技术呢?下面让我们详细的聊聊. 在大 ...
- 【iDesktop】多机多任务切图实现步骤
文章目录 前言 一.新建共享文件夹 二.新建切图任务 三.参与切图任务机器加入切图 前言 随着技术的进步,地图数据量已经迈进海量数据的时代,而单机切图的效率实在不能满足需求.例如,在普通的工作机上 ...
- android切图尺寸_安卓设计尺寸规范
画布尺寸: 如果想一稿适配ios,那就新建720×1280 分辨率72,像素/英寸. 如果单独设计安卓MD新规范的,那就新建1080×1920 分辨率72,像素/英寸. 单位和度量 Units a ...
- android 系统的切图方式_UI设计切图规范
移动UI设计切图是UI设计师最重要的设计输出物,切图资源输出是否规范直接影响到工程师对设计效果的还原度.设计师的切图输出物是是体现一个设计师专业水准的重要标准,同时也是设计师表达自己对设计态度的最有力 ...
- 移动端切图内容包括什么_移动终端界面切图
移动终端的界面切图探讨 摘 要:手机或者平板电脑应用中 android 切图中不仅需要清楚 "点九"的方法,还有其他各种小技巧,本文阐述了在工作中几个 关于切图的心得. 关键词:移 ...
- android ps切图工具下载,Cutterman
Cutterman是款专注于设计的ps切图插件,支持各种各样的图片尺寸.格式.形态,一键切图,自动将你需要的图层进行输出,有了它就免去了"导出web所用格式" 以及使用切片工具进行 ...
最新文章
- java rest httpclient_java http请求建议使用webClient,少用RestTemplate,不用HttpClient
- 优秀的代码都是如何分层的?
- c语言中不能表示的整型常量进制,C语言中整型常量的表示方法
- web自动化测试---概述
- Could not set property 'xxx' of 'class 'xxx' with value 'xxx'
- 设计原则交互思维,重塑产品设计
- C++set和multiset区别
- 俄国数学家称:“平行线可以相交”,却遭到质疑,死后12年被证实
- Oracle分组取前n条记录
- 远场(far-field)语音识别的主流技术有哪些?
- android内存占用分析,Android内存优化————虚引用与弱引用的使用及内存分析工具...
- EasyCHM制作教程
- 空手套白狼的典型案例,不花一分钱,整合别家产品,赚自己的钱
- mac uvc相机_Mac相机无法正常工作? 这是解决方法
- java集合中取最大值_Java后台通过Collections获取list集合中最大数,最小数代码
- [Algorithms] Gale-Shapley算法(婚姻匹配问题,高考录取机制)
- 什么是非同质化代币(non-fungible token)?关于NFT你需要知道的一切
- 联想Thinkpad E420 重装系统
- C语言如何打开txt文件
- 如何将深度学习的float32图像转为Unit8格式以方便cv2使用
热门文章
- 我国计算机信息系统安全保护工作的重点是,网络信息安全知识:计算机信息系统的安全保护工作,重点维护国家事务、经济建设、国防建设、尖端科学技术等重要领域的()的安全。...
- Excel 2010 VBA 入门 087 数据处理之按单列汇总多个工作表
- socket编程——upd(数据报套接字)
- JAVA滁州市住房公积金管理中心网站计算机毕业设计Mybatis+系统+数据库+调试部署
- ubuntu系统 有线网络无法通过网页认证上网
- linux服务器如何识别移动硬盘,Linux服务器如何识别移动硬盘?
- linux内核和发行版本的关系,简述Linux内核和Linux发行版的区别
- 爬虫3 requests基础2 代理 证书 重定向 响应时间
- 关于pbootcms中被挂马以后的处理
- 游戏开发的人员结构(1)