讲解视频: P1 python基础
00:00,新手学习大纲
05:10,题目介绍
06:16,pycharm设置,修改字体

07:06,新建项目
09:30,读取json,print查看
14:35,Python Console调试,分析了解数据、题目

26:20,开始解题,试做10%的train,取image_ids
28:53,列表推导式
29:44,time.time()计时器
33:23,PerfTime计时器
38:03,with TicToc()

39:43,筛选annotations,带if的列表推导式
43:58,使用set提高检索效率,算法复杂度

50:01,命名规范
52:13,排版规范、技巧
54:06,重新梳理目前算法
55:45,Alt+ Enter,初步解决问题,中途休息

60:03,random.shuffle,json数据元素在py都有对应数据结构
64:03,复制粘贴代码完成3个数据

提前通知

大家好,下午组会由我跟大家分享编程知识,
我设计了一个《人工智能开发基础》课程大纲 https://www.yuque.com/xlpr/doai/session1,会作为一个系列每几个月分享一次。

本周第一次内容,以今年我面试21级研究生的一道编程考核题作为切入点,
来介绍python、pycharm方方面面的知识,技巧,有兴趣的同学可以自己先看看题目试着做一下。

“做人工智能,首先要处理数据集,一般要先把数据集分成:训练集train、验证集val、测试集test三套。
请尝试分析这个json数据,然后拆分出三个新的json文件作为train、val、test。
这个过程中有任何疑惑都可以找我询问,最后把实现代码发给我看即可。
代码首推python,如果实在不熟悉python,也允许使用c++等其他自己熟悉的编程语言实现。”

publaynet.json
闲数据太大的,可以用这个只有20张图的玩:
val_mini.json

1 学习大纲

人工智能学习大纲 · 语雀

2 新建项目

setting,可以搜索,设置font,改大字体(13号改28号)


新建项目

  1. 路径,项目名
  2. 设置解释器

    image.png

  3. Open Project

image.png
This Window:关闭原有的项目,打开当前项目
New Window:在一个新窗口打开当前项目
Attach:在已有的开发环境关联新项目

3 问题分析

3.1 打开文件、解析json

open文件,一定要close 文件读写 - 廖雪峰的官方网站
with上下文写法

json解析库:import json

读取 写入
文件 json.load json.dump
字符串 json.loads json.dumps

ujson(Terminal安装,pip简介)

3.2 可视化

print查看内容
json.cn


python console
脚本调试
断点调试
(from pyxllib.xl import browser)browser调试、看excel


可视化,版面分析任务

这个数据,配上图片,可视化是这样的东西:
image.png
(view_labelme.py,pip install xllabelme)

3.3 分析

这些是在教你们查看json的技巧,要仔细分析研究json

明白理解数据:
有1万张image图片,每张图片都有若干个annotation标注,
大约每张图10个,一共10万个annotation
annotation有5种类别、模块,存储在categories,text文本,title标题,figure图片,list列表,table表格
在AI里,这个就是版面分析任务
对模型来说要做的是:输入一张图片,能找到里面每个模块的位置,并且标记所处属类别

而我们要做的数据处理工作,就是:拆分images,获取对应的annotations

4 求解问题

先写一个取前10%作为train的示例

4.1 取出image_ids

for循环获得所有id


列表推导式:[im[‘id’] for im in images]


带条件的列表推导式:[x for x in range(10) if x%2]
蓝色部分同以前写法,在末尾黄色部分加条件过滤,开头要写一个x。

双重循环列表推导式:只是把x展开也写成一个推导式,同理可以无限展开。
但超过2层的循环建议展开代码写for循环更直观。

4.2 计时器/学会查官方文档

计时器 time.time() -> 查文档 Python Documentation地址栏搜索引擎 · 语雀
-> TicToc -> PerfTime

4.3 编码规范/PyCharm技巧

命名规范:code4101的Python代码风格

关于PEP8,至少要了解命名规范:
变量函数名lower_with_under,类名CapWords,常量CAPS_WITH_UNDER。
(PyQt、OpenCV源码是C++写的,所以没按py规范)


遇到波浪线等提示,鼠标悬停可以查看问题
自动排版:Ctrl + Alt + L

4.4 筛选annotations/推导式/性能对比

筛选对应的annotations,三种写法:
for,append
filter写法
带条件的列表推导式


集合推导式 -> 收藏,Python 开发中有哪些高级技巧?


几种算法的性能对比

4.5 写入文件

组合出新json,写入文件

4.6 总结

image.png
第9行算总数,第10行取train的images,第11行取对应的image_id,第12行获得train对应的annotations
第14行,最后是要组装出一个跟原来结构一样,但内容改变的dict
第18、19行,写入文件

第11、12行用了列表推导式,但也完全可以用for、if写出来的,其实根本就没有什么py的知识,这些列表、字典、for、if,不管什么编程语言都有的
就是考算法思维能力