w = int(round(math.sqrt(target_area * aspect_ratio)))

h = int(round(math.sqrt(target_area / aspect_ratio)))

if random.random() < 0.5:

w, h = h, w

if w <= img.size[0] and h <= img.size[1]:

x1 = random.randint(0, img.size[0] - w)

y1 = random.randint(0, img.size[1] - h)

img = img.crop((x1, y1, x1 + w, y1 + h))

mask = mask.crop((x1, y1, x1 + w, y1 + h))

assert (img.size == (w, h))

return img.resize((self.size, self.size), Image.BILINEAR), mask.resize((self.size, self.size),

Image.NEAREST)

Fallback

scale = Scale(self.size)

crop = CenterCrop(self.size)

return crop(*scale(img, mask))

class RandomRotate(object):

def init(self, degree):

self.degree = degree

def call(self, img, mask):

rotate_degree = random.random() * 2 * self.degree - self.degree

return img.rotate(rotate_degree, Image.BILINEAR), mask.rotate(rotate_degree, Image.NEAREST)

class RandomSized(object):

def init(self, size):

self.size = size

self.scale = Scale(self.size)

self.crop = RandomCrop(self.size)

def call(self, img, mask):

assert img.size == mask.size

w = int(random.uniform(0.5, 2) * img.size[0])

h = int(random.uniform(0.5, 2) * img.size[1])

img, mask = img.resize((w, h), Image.BILINEAR), mask.resize((w, h), Image.NEAREST)

return self.crop(*self.scale(img, mask))

class SlidingCropOld(object):

def init(self, crop_size, stride_rate, ignore_label):

self.crop_size = crop_size

self.stride_rate = stride_rate

self.ignore_label = ignore_label

def _pad(self, img, mask):

h, w = img.shape[: 2]

pad_h = max(self.crop_size - h, 0)

pad_w = max(self.crop_size - w, 0)

img = np.pad(img, ((0, pad_h), (0, pad_w), (0, 0)), ‘constant’)

mask = np.pad(mask, ((0, pad_h), (0, pad_w)), ‘constant’, constant_values=self.ignore_label)

return img, mask

def call(self, img, mask):

assert img.size == mask.size

w, h = img.size

long_size = max(h, w)

img = np.array(img)

mask = np.array(mask)

if long_size > self.crop_size:

stride = int(math.ceil(self.crop_size * self.stride_rate))

h_step_num = int(math.ceil((h - self.crop_size) / float(stride))) + 1

w_step_num = int(math.ceil((w - self.crop_size) / float(stride))) + 1

img_sublist, mask_sublist = [], []

for yy in range(h_step_num):

for xx in range(w_step_num):

sy, sx = yy * stride, xx * stride

ey, ex = sy + self.crop_size, sx + self.crop_size

img_sub = img[sy: ey, sx: ex, :]

mask_sub = mask[sy: ey, sx: ex]

img_sub, mask_sub = self._pad(img_sub, mask_sub)

img_sublist.append(Image.fromarray(img_sub.astype(np.uint8)).convert(‘RGB’))

mask_sublist.append(Image.fromarray(mask_sub.astype(np.uint8)).convert(‘P’))

return img_sublist, mask_sublist

else:

img, mask = self._pad(img, mask)

img = Image.fromarray(img.astype(np.uint8)).convert(‘RGB’)

mask = Image.fromarray(mask.astype(np.uint8)).convert(‘P’)

return img, mask

class SlidingCrop(object):

def init(self, crop_size, stride_rate, ignore_label):

self.crop_size = crop_size

self.stride_rate = stride_rate

self.ignore_label = ignore_label

def _pad(self, img, mask):

h, w = img.shape[: 2]

pad_h = max(self.crop_size - h, 0)

pad_w = max(self.crop_size - w, 0)

img = np.pad(img, ((0, pad_h), (0, pad_w), (0, 0)), ‘constant’)

mask = np.pad(mask, ((0, pad_h), (0, pad_w)), ‘constant’, constant_values=self.ignore_label)

return img, mask, h, w

def call(self, img, mask):

assert img.size == mask.size

w, h = img.size

long_size = max(h, w)

img = np.array(img)

mask = np.array(mask)

if long_size > self.crop_size:

stride = int(math.ceil(self.crop_size * self.stride_rate))

h_step_num = int(math.ceil((h - self.crop_size) / float(stride))) + 1

w_step_num = int(math.ceil((w - self.crop_size) / float(stride))) + 1

img_slices, mask_slices, slices_info = [], [], []

for yy in range(h_step_num):

for xx in range(w_step_num):

sy, sx = yy * stride, xx * stride

ey, ex = sy + self.crop_size, sx + self.crop_size

img_sub = img[sy: ey, sx: ex, :]

mask_sub = mask[sy: ey, sx: ex]

img_sub, mask_sub, sub_h, sub_w = self._pad(img_sub, mask_sub)

img_slices.append(Image.fromarray(img_sub.astype(np.uint8)).convert(‘RGB’))

mask_slices.append(Image.fromarray(mask_sub.astype(np.uint8)).convert(‘P’))

slices_info.append([sy, ey, sx, ex, sub_h, sub_w])

return img_slices, mask_slices, slices_info

else:

img, mask, sub_h, sub_w = self._pad(img, mask)

img = Image.fromarray(img.astype(np.uint8)).convert(‘RGB’)

mask = Image.fromarray(mask.astype(np.uint8)).convert(‘P’)

return [img], [mask], [[0, sub_h, 0, sub_w, sub_h, sub_w]]

方法二:

import numpy as np

import random

import torch

from torchvision import transforms as T

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-kuXQnHuf-1712600000254)]

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐