基于opencv的torchvision包中“transforms”的重写

opencv-torchvision-transforms-yuzhiyang的Python项目详细描述


opencv_torchvision_transform

  1. 这是基于opencv重写torchvisionpackage中的“transforms”。

  2. 所有功能仅依赖于CV2和Pythorch(无PIL)。正如{a2}所说,cv2比pil快三倍。

  3. 转换中的大多数函数都是重新实现的,除了:

    1. 忽略原始版本中不推荐使用的topilimage(opencv:)、scale和randomSizedCrop。

    2. 原来的仿射变换只有5个自由度,我实现了6个自由度的仿射变换randomAffine6(可以在master/cvtorchvision/cvtransforms/cvtransforms.py中找到)。原始方法(randomAffine)仍然保留,并使用opencv重新实现。

    3. 我的旋转函数是顺时针的,而原来的是逆时针的。

    4. 添加一些可以在support中找到的新方法(粗体)。

    5. opencv版本的所有输出几乎与原始版本相同(在master/cvtorchvision/cvtransforms/cvfunctional.py中测试:ifname='main':…)

支持:

  • 合成,传感器,图像,标准化

  • 调整大小,中心裁剪,填充

  • lambda(在wihdows中的多进程中不起作用)

  • 随机应用,随机顺序,随机选择,随机裁剪,

  • RandomHorizontalFlip、RandomVerticalFlip、RandomResizedCrop,

  • fivecrop,tencrop,线性变换,颜色抖动,

  • 随机旋转,随机仿射,randomAffine6randomPerspective

  • 随机高斯噪声“”随机泊松噪声“”随机噪声

  • 灰度,随机灰度

使用方法:

  1. git克隆https://github.com/YU-Zhiyang/opencv_torchvision_transforms.git

  2. 将cvtorchvision添加到python路径中。

  3. 在pythion文件中添加“from cvtorchvision import cvtransforms”。

  4. 您可以使用所有功能作为原始版本,例如:

    transform = cvtransforms.Compose([
    
             cvtransforms.RandomAffine(degrees=10, translate=(0.1, 0.1), scale=(0.9, 1.1), shear=(-10, 0),
    
             cvtransforms.Resize(size=(350, 350), interpolation='BILINEAR'),
    
             cvtransforms.ToTensor(),
    
             cvtransforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
             ])
    

更多细节可以在官方tutorials的例子中找到。

注意:

pytorch的dataloader中使用的多处理对windows中的lambda函数不友好,因为lambda函数不能被pickle(https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled)。

因此cvtransform.py中的lambda在windows中可能无法正常工作。

要求

python=3.5.2

numpy>;=1.10('@'运算符在此版本之前不能重载)

Pythorch=0.4.1

火炬视野=0.2.1

opencv-contrib-python-3.4.2(使用此版本进行测试,但我认为任何版本的opencv3都可以)

后记

欢迎指点并帮助修复错误!

手表、星星和叉子被拒绝:微笑:

谢谢你的帮助。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java TCP服务器未关闭电脑   在XML中定义“数字”时,java“imeOptions”不起作用   没有持久性的java Multiple entityManagerFactory。xml   java Netbeans使用Tomcat连接进行调试被拒绝   java二进制搜索已排序的E列表(开始时间,结束时间),以查找给定时间范围(t1,t2)匹配的所有E   python Jython等价于Java代码   java如何在Ninjaframework中的ConstraintValidator中使用依赖项注入?   Java扫描器类在C中做什么#   java同时支持公共接口API和内部具体API?   java如何使<T extends E>泛型类型参数包含在内?   java添加按钮在array或db中单击或点击以在安卓中重复相同的操作   xml解析Java:如何防止EntityResolver#resolveEntity(String publicId,String systemId)中的“systemId”被绝对化到当前工作目录   jakarta ee在Java中实现OAuth协议   JavaSpringMVC抛出了404,带有普通请求映射   java如何实现hibernate二级缓存上的查询与连接?   spring发生JNI错误,线程“main”java中出现异常。lang.NoClassDefFoundError:org/springframework/context/ApplicationContext   java为什么在此GraphQL设置中不调用DataFetcher?   java忽略cucumber中的特定标记,但运行所有其他标记