PyTorch 中的 CocoDetection(2)
来源:dev.to
2025-01-20 17:43:35
0浏览
收藏
学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《PyTorch 中的 CocoDetection(2)》,以下内容主要包含等知识点,如果你正在学习或准备学习文章,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!
请我喝杯咖啡☕
*我的帖子解释了 ms coco。
cocodetection() 可以使用 ms coco 数据集,如下所示。 *这适用于带有captions_train2017.json、instances_train2017.json和person_keypoints_train2017.json的train2017,带有captions_val2017.json、instances_val2017.json和person_keypoints_val2017.json的val2017以及带有image_info_test2017.json和的test2017 image_info_test-dev2017.json:
from torchvision.datasets import CocoDetection
cap_train2017_data = CocoDetection(
root="data/coco/imgs/train2017",
annFile="data/coco/anns/trainval2017/captions_train2017.json"
)
ins_train2017_data = CocoDetection(
root="data/coco/imgs/train2017",
annFile="data/coco/anns/trainval2017/instances_train2017.json"
)
pk_train2017_data = CocoDetection(
root="data/coco/imgs/train2017",
annFile="data/coco/anns/trainval2017/person_keypoints_train2017.json"
)
len(cap_train2017_data), len(ins_train2017_data), len(pk_train2017_data)
# (118287, 118287, 118287)
cap_val2017_data = CocoDetection(
root="data/coco/imgs/val2017",
annFile="data/coco/anns/trainval2017/captions_val2017.json"
)
ins_val2017_data = CocoDetection(
root="data/coco/imgs/val2017",
annFile="data/coco/anns/trainval2017/instances_val2017.json"
)
pk_val2017_data = CocoDetection(
root="data/coco/imgs/val2017",
annFile="data/coco/anns/trainval2017/person_keypoints_val2017.json"
)
len(cap_val2017_data), len(ins_val2017_data), len(pk_val2017_data)
# (5000, 5000, 5000)
test2017_data = CocoDetection(
root="data/coco/imgs/test2017",
annFile="data/coco/anns/test2017/image_info_test2017.json"
)
testdev2017_data = CocoDetection(
root="data/coco/imgs/test2017",
annFile="data/coco/anns/test2017/image_info_test-dev2017.json"
)
len(test2017_data), len(testdev2017_data)
# (40670, 20288)
cap_train2017_data[2]
# (<PIL.Image.Image image mode=RGB size=640x428>,
# [{'image_id': 30, 'id': 695774,
# 'caption': 'A flower vase is sitting on a porch stand.'},
# {'image_id': 30, 'id': 696557,
# 'caption': 'White vase with different colored flowers sitting inside of it. '},
# {'image_id': 30, 'id': 699041,
# 'caption': 'a white vase with many flowers on a stage'},
# {'image_id': 30, 'id': 701216,
# 'caption': 'A white vase filled with different colored flowers.'},
# {'image_id': 30, 'id': 702428,
# 'caption': 'A vase with red and white flowers outside on a sunny day.'}])
cap_train2017_data[47]
# (<PIL.Image.Image image mode=RGB size=640x427>,
# [{'image_id': 294, 'id': 549895,
# 'caption': 'A man standing in front of a microwave next to pots and pans.'},
# {'image_id': 294, 'id': 556411,
# 'caption': 'A man displaying pots and utensils on a wall.'},
# {'image_id': 294, 'id': 556507,
# 'caption': 'A man stands in a kitchen and motions towards pots and pans. '},
# {'image_id': 294, 'id': 556993,
# 'caption': 'a man poses in front of some pots and pans '},
# {'image_id': 294, 'id': 560728,
# 'caption': 'A man pointing to pots hanging from a pegboard on a gray wall.'}])
cap_train2017_data[64]
# (<PIL.Image.Image image mode=RGB size=480x640>,
# [{'image_id': 370, 'id': 468271,
# 'caption': 'A little girl holding wet broccoli in her hand. '},
# {'image_id': 370, 'id': 471646,
# 'caption': 'The young child is happily holding a fresh vegetable. '},
# {'image_id': 370, 'id': 475471,
# 'caption': 'A little girl holds a hand full of wet broccoli. '},
# {'image_id': 370, 'id': 475663,
# 'caption': 'A little girl holds a piece of broccoli towards the camera.'},
# {'image_id': 370, 'id': 822588,
# 'caption': 'a small kid holds on to some vegetables '}])
ins_train2017_data[2]
# (<PIL.Image.Image image mode=RGB size=640x428>,
# [{'segmentation': [[267.38, 330.14, 281.81, ..., 269.3, 329.18]],
# 'area': 47675.66289999999, 'iscrowd': 0, 'image_id': 30,
# 'bbox': [204.86, 31.02, 254.88, 324.12], 'category_id': 64,
# 'id': 291613},
# {'segmentation': ..., 'category_id': 86, 'id': 1155486}])
ins_train2017_data[47]
# (<PIL.Image.Image image mode=RGB size=640x427>,
# [{'segmentation': [[27.7, 423.27, 27.7, ..., 28.66, 427.0]],
# 'area': 64624.86664999999, 'iscrowd': 0, 'image_id': 294,
# 'bbox': [27.7, 69.83, 364.91, 357.17], 'category_id': 1,
# 'id': 470246},
# {'segmentation': ..., 'category_id': 50, 'id': 708187},
# ...
# {'segmentation': ..., 'category_id': 50, 'id': 2217190}])
ins_train2017_data[67]
# (<PIL.Image.Image image mode=RGB size=480x640>,
# [{'segmentation': [[90.81, 155.68, 90.81, ..., 98.02, 207.57]],
# 'area': 137679.34520000007, 'iscrowd': 0, 'image_id': 370,
# 'bbox': [90.81, 24.5, 389.19, 615.5], 'category_id': 1,
# 'id': 436109},
# {'segmentation': [[257.51, 446.79, 242.45, ..., 262.02, 460.34]],
# 'area': 43818.18095, 'iscrowd': 0, 'image_id': 370,
# 'bbox': [242.45, 257.05, 237.55, 243.95], 'category_id': 56,
# 'id': 1060727}])
pk_train2017_data[2]
# (<PIL.Image.Image image mode=RGB size=640x428>, [])
pk_train2017_data[47]
# (<PIL.Image.Image image mode=RGB size=640x427>,
# [{'segmentation': [[27.7, 423.27, 27.7, ..., 28.66, 427]],
# 'num_keypoints': 11, 'area': 64624.86665, 'iscrowd': 0,
# 'keypoints': [149, 133, 2, 159, ..., 0, 0], 'image_id': 294,
# 'bbox': [27.7, 69.83, 364.91, 357.17], 'category_id': 1,
# 'id': 470246}])
pk_train2017_data[64]
# (<PIL.Image.Image image mode=RGB size=480x640>,
# [{'segmentation': [[90.81, 155.68, 90.81, ..., 98.02, 207.57]],
# 'num_keypoints': 12, 'area': 137679.3452, 'iscrowd': 0,
# 'keypoints': [229, 171, 2, 263, ..., 0, 0], 'image_id': 370,
# 'bbox': [90.81, 24.5, 389.19, 615.5], 'category_id': 1,
# 'id': 436109}])
cap_val2017_data[2]
# (<PIL.Image.Image image mode=RGB size=640x483>,
# [{'image_id': 632, 'id': 301804,
# 'caption': 'Bedroom scene with a bookcase, blue comforter and window.'},
# {'image_id': 632, 'id': 302791,
# 'caption': 'A bedroom with a bookshelf full of books.'},
# {'image_id': 632, 'id': 305425,
# 'caption': 'This room has a bed with blue sheets and a large bookcase'},
# {'image_id': 632, 'id': 305953,
# 'caption': 'A bed and a mirror in a small room.'},
# {'image_id': 632, 'id': 306511,
# 'caption': 'a bed room with a neatly made bed a window and a book shelf'}])
cap_val2017_data[47]
# (<PIL.Image.Image image mode=RGB size=640x480>,
# [{'image_id': 5001, 'id': 542124,
# 'caption': 'A group of people cutting a ribbon on a street.'},
# {'image_id': 5001, 'id': 545685,
# 'caption': 'A man uses a pair of big scissors to cut a pink ribbon.'},
# {'image_id': 5001, 'id': 549285,
# 'caption': 'A man cutting a ribbon at a ceremony '},
# {'image_id': 5001, 'id': 549666,
# 'caption': 'A group of people on the sidewalk watching two young children.'},
# {'image_id': 5001, 'id': 549696,
# 'caption': 'A group of people holding a large pair of scissors to a ribbon.'}])
cap_val2017_data[64]
# (<PIL.Image.Image image mode=RGB size=375x500>,
# [{'image_id': 6763, 'id': 708378,
# 'caption': 'A man and a women posing next to one another in front of a table.'},
# {'image_id': 6763, 'id': 709983,
# 'caption': 'A man and woman hugging in a restaurant'},
# {'image_id': 6763, 'id': 711438,
# 'caption': 'A man and woman standing next to a table.'},
# {'image_id': 6763, 'id': 711723,
# 'caption': 'A happy man and woman pose for a picture.'},
# {'image_id': 6763, 'id': 714720,
# 'caption': 'A man and woman posing for a picture in a sports bar.'}])
ins_val2017_data[2]
# (<PIL.Image.Image image mode=RGB size=640x483>,
# [{'segmentation': [[5.45, 269.03, 25.08, ..., 3.27, 266.85]],
# 'area': 64019.87940000001, 'iscrowd': 0, 'image_id': 632,
# 'bbox': [3.27, 266.85, 401.23, 208.25], 'category_id': 65,
# 'id': 315724},
# {'segmentation': ..., 'category_id': 64, 'id': 1610466},
# ...
# {'segmentation': {'counts': [201255, 6, 328, 6, 142, ..., 4, 34074],
# 'size': [483, 640]}, 'area': 20933, 'iscrowd': 1, 'image_id': 632,
# 'bbox': [416, 43, 153, 303], 'category_id': 84,
# 'id': 908400000632}])
ins_val2017_data[47]
# (<PIL.Image.Image image mode=RGB size=640x480>,
# [{'segmentation': [[210.34, 204.76, 227.6, ..., 195.24, 211.24]],
# 'area': 5645.972500000001, 'iscrowd': 0, 'image_id': 5001,
# 'bbox': [173.66, 204.76, 107.87, 238.39], 'category_id': 87,
# 'id': 1158531},
# {'segmentation': ..., 'category_id': 1, 'id': 1201627},
# ...
# {'segmentation': {'counts': [251128, 24, 451, 32, 446, ..., 43, 353],
# 'size': [480, 640]}, 'area': 10841, 'iscrowd': 1, 'image_id': 5001,
# 'bbox': [523, 26, 116, 288], 'category_id': 1, 'id': 900100005001}])
ins_val2017_data[64]
# (<PIL.Image.Image image mode=RGB size=375x500>,
# [{'segmentation': [[232.06, 92.6, 369.96, ..., 223.09, 93.72]],
# 'area': 11265.648799999995, 'iscrowd': 0, 'image_id': 6763
# 'bbox': [219.73, 64.57, 151.35, 126.69], 'category_id': 72,
# 'id': 30601},
# {'segmentation': ..., 'category_id': 1, 'id': 197649},
# ...
# {'segmentation': ..., 'category_id': 1, 'id': 1228674}])
pk_val2017_data[2]
# (<PIL.Image.Image image mode=RGB size=640x483>, [])
pk_val2017_data[47]
# (<PIL.Image.Image image mode=RGB size=640x480>,
# [{'segmentation': [[42.07, 190.11, 45.3, ..., 48.54, 201.98]],
# 'num_keypoints': 8, 'area': 5156.63, 'iscrowd': 0,
# 'keypoints': [58, 56, 2, 61, ..., 0, 0], 'image_id': 5001,
# 'bbox': [10.79, 32.63, 58.24, 169.35], 'category_id': 1,
# 'id': 1201627},
# {'segmentation': ..., 'category_id': 1, 'id': 1220394},
# ...
# {'segmentation': {'counts': [251128, 24, 451, 32, 446, ..., 43, 353], # 'size': [480, 640]}, 'num_keypoints': 0, 'area': 10841,
# 'iscrowd': 1, 'keypoints': [0, 0, 0, 0, ..., 0, 0],
# 'image_id': 5001, 'bbox': [523, 26, 116, 288],
# 'category_id': 1, 'id': 900100005001}])
pk_val2017_data[64]
# (<PIL.Image.Image image mode=RGB size=375x500>,
# [{'segmentation': [[94.38, 462.92, 141.57, ..., 100.27, 459.94]],
# 'num_keypoints': 10, 'area': 36153.48825, 'iscrowd': 0,
# 'keypoints': [228, 202, 2, 252, ..., 0, 0], 'image_id': 6763,
# 'bbox': [79.48, 131.87, 254.23, 331.05], 'category_id': 1,
# 'id': 197649},
# {'segmentation': ..., 'category_id': 1, 'id': 212640},
# ...
# {'segmentation': ..., 'category_id': 1, 'id': 1228674}])
test2017_data[2]
# (<PIL.Image.Image image mode=RGB size=640x427>, [])
test2017_data[47]
# (<PIL.Image.Image image mode=RGB size=640x406>, [])
test2017_data[64]
# (<PIL.Image.Image image mode=RGB size=640x427>, [])
testdev2017_data[2]
# (<PIL.Image.Image image mode=RGB size=640x427>, [])
testdev2017_data[47]
# (<PIL.Image.Image image mode=RGB size=480x640>, [])
testdev2017_data[64]
# (<PIL.Image.Image image mode=RGB size=640x480>, [])
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon, Rectangle
import numpy as np
from pycocotools import mask
# `show_images1()` doesn't work very well for the images with
# segmentations and keypoints so for them, use `show_images2()` which
# more uses the original coco functions.
def show_images1(data, ims, main_title=None):
file = data.root.split('/')[-1]
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(14, 8))
fig.suptitle(t=main_title, y=0.9, fontsize=14)
x_crd = 0.02
for i, axis in zip(ims, axes.ravel()):
if data[i][1] and "caption" in data[i][1][0]:
im, anns = data[i]
axis.imshow(X=im)
axis.set_title(label=anns[0]["image_id"])
y_crd = 0.0
for ann in anns:
text_list = ann["caption"].split()
if len(text_list) > 9:
text = " ".join(text_list[0:10]) + " ..."
else:
text = " ".join(text_list)
plt.figtext(x=x_crd, y=y_crd, fontsize=10,
s=f'{ann["id"]}:\n{text}')
y_crd -= 0.06
x_crd += 0.325
if i == 2 and file == "val2017":
x_crd += 0.06
if data[i][1] and "segmentation" in data[i][1][0]:
im, anns = data[i]
axis.imshow(X=im)
axis.set_title(label=anns[0]["image_id"])
for ann in anns:
if "counts" in ann['segmentation']:
seg = ann['segmentation']
# rle is Run Length Encoding.
uncompressed_rle = [seg['counts']]
height, width = seg['size']
compressed_rle = mask.frPyObjects(pyobj=uncompressed_rle,
h=height, w=width)
# rld is Run Length Decoding.
compressed_rld = mask.decode(rleObjs=compressed_rle)
y_plts, x_plts = np.nonzero(a=np.squeeze(a=compressed_rld))
axis.plot(x_plts, y_plts, color='yellow')
else:
for seg in ann['segmentation']:
seg_arrs = np.split(ary=np.array(seg),
indices_or_sections=len(seg)/2)
poly = Polygon(xy=seg_arrs,
facecolor="lightgreen", alpha=0.7)
axis.add_patch(p=poly)
x_plts = [seg_arr[0] for seg_arr in seg_arrs]
y_plts = [seg_arr[1] for seg_arr in seg_arrs]
axis.plot(x_plts, y_plts, color='yellow')
x, y, w, h = ann['bbox']
rect = Rectangle(xy=(x, y), width=w, height=h,
linewidth=3, edgecolor='r',
facecolor='none', zorder=2)
axis.add_patch(p=rect)
if data[i][1] and 'keypoints' in data[i][1][0]:
kps = ann['keypoints']
kps_arrs = np.split(ary=np.array(kps),
indices_or_sections=len(kps)/3)
x_plts = [kps_arr[0] for kps_arr in kps_arrs]
y_plts = [kps_arr[1] for kps_arr in kps_arrs]
nonzeros_x_plts = []
nonzeros_y_plts = []
for x_plt, y_plt in zip(x_plts, y_plts):
if x_plt == 0 and y_plt == 0:
continue
nonzeros_x_plts.append(x_plt)
nonzeros_y_plts.append(y_plt)
axis.scatter(x=nonzeros_x_plts, y=nonzeros_y_plts,
color='yellow')
# ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ Bad result ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
# axis.plot(nonzeros_x_plts, nonzeros_y_plts)
if not data[i][1]:
im, _ = data[i]
axis.imshow(X=im)
fig.tight_layout()
plt.show()
ims = (2, 47, 64)
show_images1(data=cap_train2017_data, ims=ims,
main_title="cap_train2017_data")
show_images1(data=ins_train2017_data, ims=ims,
main_title="ins_train2017_data")
show_images1(data=pk_train2017_data, ims=ims,
main_title="pk_train2017_data")
print()
show_images1(data=cap_val2017_data, ims=ims,
main_title="cap_val2017_data")
show_images1(data=ins_val2017_data, ims=ims,
main_title="ins_val2017_data")
show_images1(data=pk_val2017_data, ims=ims,
main_title="pk_val2017_data")
print()
show_images(data=test2017_data, ims=ims,
main_title="test2017_data")
show_images(data=testdev2017_data, ims=ims,
main_title="testdev2017_data")
# `show_images2()` works very well for the images with segmentations and
# keypoints.
def show_images2(data, index, main_title=None):
img_set = data[index]
img, img_anns = img_set
if img_anns and "segmentation" in img_anns[0]:
img_id = img_anns[0]['image_id']
coco = data.coco
def show_image(imgIds, areaRng=[],
iscrowd=None, draw_bbox=False):
plt.figure(figsize=(11, 8))
plt.imshow(X=img)
plt.suptitle(t=main_title, y=1, fontsize=14)
plt.title(label=img_id, fontsize=14)
anns_ids = coco.getAnnIds(imgIds=img_id,
areaRng=areaRng, iscrowd=iscrowd)
anns = coco.loadAnns(ids=anns_ids)
coco.showAnns(anns=anns, draw_bbox=draw_bbox)
plt.show()
show_image(imgIds=img_id, draw_bbox=True)
show_image(imgIds=img_id, draw_bbox=False)
show_image(imgIds=img_id, iscrowd=False, draw_bbox=True)
show_image(imgIds=img_id, areaRng=[0, 5000], draw_bbox=True)
elif img_anns and not "segmentation" in img_anns[0]:
plt.figure(figsize=(11, 8))
img_id = img_anns[0]['image_id']
plt.imshow(X=img)
plt.suptitle(t=main_title, y=1, fontsize=14)
plt.title(label=img_id, fontsize=14)
plt.show()
elif not img_anns:
plt.figure(figsize=(11, 8))
plt.imshow(X=img)
plt.suptitle(t=main_title, y=1, fontsize=14)
plt.show()
show_images2(data=ins_val2017_data, index=2,
main_title="ins_val2017_data")
print()
show_images2(data=pk_val2017_data, index=2,
main_title="pk_val2017_data")
print()
show_images2(data=ins_val2017_data, index=47,
main_title="ins_val2017_data")
print()
show_images2(data=pk_val2017_data, index=47,
main_title="pk_val2017_data")





















本篇关于《PyTorch 中的 CocoDetection(2)》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!
版本声明
本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
使用 Python 的密码生成脚本
- 上一篇
- 使用 Python 的密码生成脚本
- 下一篇
- Js 位 - 条件分支)
查看更多
最新文章
-
- 文章 · python教程 | 1小时前 |
- NumPy位异或归约操作全解析
- 259浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Python遍历读取所有文件技巧
- 327浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Python中index的作用及使用方法
- 358浏览 收藏
-
- 文章 · python教程 | 2小时前 |
- Python快速访问嵌套字典键值对
- 340浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- Python中ch代表字符的用法解析
- 365浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- NumPy1D近邻查找:向量化优化技巧
- 391浏览 收藏
-
- 文章 · python教程 | 3小时前 | 正则表达式 字符串操作 re模块 Python文本处理 文本清洗
- Python正则表达式实战教程详解
- 392浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- BehaveFixture临时目录管理技巧
- 105浏览 收藏
-
- 文章 · python教程 | 4小时前 | Python 余数 元组 divmod()函数 商
- divmod函数详解与使用技巧
- 442浏览 收藏
-
- 文章 · python教程 | 4小时前 |
- Python多进程共享字符串内存技巧
- 291浏览 收藏
查看更多
课程推荐
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
查看更多
AI推荐
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3203次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3416次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3446次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4554次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3824次使用
查看更多
相关文章
-
- Flask框架安装技巧:让你的开发更高效
- 2024-01-03 501浏览
-
- Django框架中的并发处理技巧
- 2024-01-22 501浏览
-
- 提升Python包下载速度的方法——正确配置pip的国内源
- 2024-01-17 501浏览
-
- Python与C++:哪个编程语言更适合初学者?
- 2024-03-25 501浏览
-
- 品牌建设技巧
- 2024-04-06 501浏览

