个人OKR设定|2020最后3个月,我用OKR计划法完成所有flag(好的okr目标应该能在一两周内完成)
643
2022-05-29
一、课程打卡
课程内容为《6.3 使用OSVOS算法实现视频物体分割》,打卡的方法如下:
下载课程中提供的pdf文件。点击6.4课程打卡后,选择右边的“下载文档”
打开pdf文件,根据pdf的提示一一执行。关键内容是:打开 https://nbviewer.jupyter.org/ 网址:
在url位置贴入pdf中的 .ipynb结尾的文件名,点击Go。系统会弹出以下操作指导页面。
这个文档非常细致。逐一执行即可。
一般情况下,按照步骤执行应该能得到预期的结果。但是本节课有点例外,主要是因为ModelArts的免费盘只有5G,但是相关的文件已经非常大,在按照顺序执行操作的时候,走到下面的步骤时,系统会报错:
报错内容如下:
原因是空间不足导致解压不完整,造成tools 目录不存在引起的。
此时,可以将notebook空间的一些大文件删掉,比如那个第2步生成的400多M的whl文件,重新执行下载和终端命令即可。
真正的终端执行应该达到以下效果:
再进一步执行,就会得到课程打卡所要的效果:
二、作业1打卡
作业内容为 以《6.2 使用C3D和I3D模型实现视频作业识别》为基础,实现一段根据视频计算得到rgb.npy和flow.npy文件的代码,并跑通I3D模型对新视频的动作识别预测,,打卡的方法如下:
下载作业中提供的pdf文件。点击6.5作业打卡后,选择右边的“下载文档”;
下载作业中需要的C3D和I3D的课程pdf文件。点击6.2后,选择右边的“下载文档”;
根据第2步下载的文件,打开https://nbviewer.jupyter.org/ ,并在打开的链接中输入 https://github.com/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_video_action_recognition/action_recognition.ipynb ,并点击Go。系统会弹出操作指导页面。
下载 https://ai-course-common-26-bj4.obs.cn-north-4.myhuaweicloud.com/video/compute_rgb_flow.py 这个文件。
根据操作指导页面逐一执行。其中在执行以下步骤21时:
增加一个cell(再上图红色位置),贴入第四步下载的代码,并在video path的地方填入视频文件的路径 :
import os import cv2 import time import numpy as np def get_video_info(video_path): _, ext = os.path.splitext(video_path) if not ext in ['.avi', '.mp4']: raise ValueError('Extension "%s" not supported' % ext) cap = cv2.VideoCapture(video_path) if not cap.isOpened(): raise ValueError("Could not open the file.\n{}".format(video_path)) print('视频分辨率: %d x %d' % (cap.get(cv2.CAP_PROP_FRAME_WIDTH), cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) print('视频帧率:', cap.get(cv2.CAP_PROP_FPS)) print('视频总帧数:', cap.get(cv2.CAP_PROP_FRAME_COUNT)) def compute_rgb(video_path): """Compute RGB""" rgb = [] vidcap = cv2.VideoCapture(video_path) count = 0 while True: success, frame = vidcap.read() if success is True: count += 1 # if count % 2 == 0: # continue frame = cv2.resize(frame, (342, 256)) frame = (frame / 255.) * 2 - 1 frame = frame[16:240, 59:283] rgb.append(frame) else: break vidcap.release() rgb = rgb[:-1] rgb = np.asarray([np.array(rgb)]).astype(np.float32) return rgb def compute_TVL1(video_path): """Compute the TV-L1 optical flow.""" flow = [] TVL1 = cv2.DualTVL1OpticalFlow_create() # for opencv version: 3.4.2.17 vidcap = cv2.VideoCapture(video_path) success, frame1 = vidcap.read() prev_frame = cv2.cvtColor(frame1, cv2.COLOR_RGB2GRAY) vid_len = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT)) bins = np.linspace(-20, 20, num=256) for count in range(0, vid_len - 1): success, frame2 = vidcap.read() count += 1 # if count % 2 == 0: # continue curr_frame = cv2.cvtColor(frame2, cv2.COLOR_RGB2GRAY) curr_flow = TVL1.calc(prev_frame, curr_frame, None) assert (curr_flow.dtype == np.float32) # Truncate large motions curr_flow[curr_flow >= 20] = 20 curr_flow[curr_flow <= -20] = -20 # digitize and scale to [-1;1] curr_flow = np.digitize(curr_flow, bins) curr_flow = (curr_flow / 255.) * 2 - 1 # cropping the center curr_flow = curr_flow[8:232, 48:272] flow.append(curr_flow) prev_frame = curr_frame vidcap.release() flow = np.asarray([np.array(flow)]).astype(np.float32) return flow video_path = '/home/ma-user/work/dataset_subset/Bowling/v_Bowling_g05_c01.avi' # TODO,填写视频所在的路径 save_dir = os.path.dirname(video_path) + '_out' if not os.path.exists(save_dir): os.mkdir(save_dir) get_video_info(video_path) start_time = time.time() print('Extract RGB...') rgb = compute_rgb(video_path) print('save rgb with shape ', rgb.shape) rgb_save_path = os.path.join(save_dir, os.path.basename(video_path).split('.')[0] + '_rgb.npy') np.save(rgb_save_path, rgb) print('Compute rgb in sec: ', time.time() - start_time) start_time = time.time() print('Extract Flow...') flow = compute_TVL1(video_path) print('Save flow with shape ', flow.shape) flow_save_path = os.path.join(save_dir, os.path.basename(video_path).split('.')[0] + '_flow.npy') np.save(flow_save_path, flow) print('Compute flow in sec: ', time.time() - start_time) print('save rgb npy at:', rgb_save_path) print('save flow npy at:', flow_save_path) print('Compute Success')
这个路径可以在后台通过teminal命令看到:
在以上步骤执行完后,修改下一步的内容,如图所示:(上一步执行结果的视频总帧数减一,如115-》114,save rgb npy和save flow npy的路径也贴入 _SAMPLE_PATHS里面)
然后继续执行以下步骤一直到最后。
作业的结果如下:
如上图所示,最后的视频动作识别结果为bowling。
三、作业2打卡
作业内容为 以《6.3 使用OSVOS算法实现视频物体分割》为基础,并换成breakdance数据集跑通整个案例。
仍然按照 课程打卡的方式(第1步和第2步)打开操作指导页面。
将步骤第2个cell的 seq_name改为breakdance
在第4个cell可以看出相关的结果变化:
测试模型的存储位置也发生了变化:
视频分隔结果也显示相关变化:
为避免犯跟课程打卡同样的错误,此时直接删除大文件:
然后继续按照提示继续执行,在执行到terminal命令的时候,记得把flamingo都换成breakdance:python tools/video_inpaint.py --frame_dir ../OSVOS-PyTorch/DAVIS_2016/JPEGImages/480p/breakdance --MASK_ROOT ../OSVOS-PyTorch/DAVIS_2016/Annotations/480p/breakdance --img_size 512 832 --FlowNet2 --DFC --ResNet101 --Propagation --enlarge_mask
继续依次执行,直到出现作业结果:
希望同学们能圆满完成以上打卡。感觉GT手表就在眼前。。。
AI开发平台ModelArts EI企业智能
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。