工程复现 – airborne-detection-starter-kit
参考:
1. siammot环境配置
2. AOT baseline工程
效果
1)原视频
AOT原始视频举例
2)检测效果 (上面数字代表距离,下面数字代表置信度,中间代表追踪id)
AOT数据集检测结果
一. 下载与安装工程
- 下载工程
git clone [email protected]:amazon-prime-air/airborne-detection-starter-kit.git
- 安装依赖
法一
: 采用官方方式
cd airborne-detection-starter-kit
pip3 install -r requirements.txt
法二
: 在已经安装siammot虚拟环境 情况下,可以将虚拟环境拷贝一份再采用法一。
conda create -n airborne_det --clone siammot # 先克隆siammot虚拟环境
conda deactivate
conda activate airborne_det
cd airborne-detection-starter-kit
pip3 install -r requirements.txt
二. AOT数据说明
详情参考docs/DATASET.md
文档
2.1 数据说明:
- 完整AOT数据集大小超过11TB, 可以只下载部分数据集500G,包含有效的两个配备定位设备的飞机相遇的连续帧。
- 数据集地址:
s3://airborne-obj-detection-challenge-training/
- 数据集组织结构如下,data目录在工程根目录下,分为part1、part2、part3 三个部分。每个文件夹包含ImageSets和Images, ImageSets中的
groundtruth.json
文件存放真值。
Images 中存放flight标识符文件夹,内部存放连续的图像帧。
data
├── part1
│ ├── ImageSets
│ │ └── groundtruth.json
│ └── Images
│ ├── 1497343b9d90411db5c305e785be9032
│ │ ├── 15580184151527797371497343b9d90411db5c305e785be9032.png
│ │ ├── 15580184153446871561497343b9d90411db5c305e785be9032.png
│ │ ├── 15580184154352609941497343b9d90411db5c305e785be9032.png
│ │ └── 15580184155474411311497343b9d90411db5c305e785be9032.png
│ │ └── [...]
│ ├── 1f9a42f2d2194622b845bf5ad9ba1fce
│ │ ├── 15445285838485478651f9a42f2d2194622b845bf5ad9ba1fce.png
│ │ ├── 15445285839226252081f9a42f2d2194622b845bf5ad9ba1fce.png
│ │ ├── 15445285840353354091f9a42f2d2194622b845bf5ad9ba1fce.png
│ │ ├── 15445285841304961601f9a42f2d2194622b845bf5ad9ba1fce.png
│ │ ├── [...]
│
├── part2
│ └── ImageSets
│ └── groundtruth.json
│ └── Images
│ ├── [...]
│
├── part3
│ ├── ImageSets
│ │ └── groundtruth.json
│ └── Images
│ └── f3b3af98f63543a0965fab8b005b13c7
│ ├── 1568218496792027402f3b3af98f63543a0965fab8b005b13c7.png
│ ├── 1568218496891165702f3b3af98f63543a0965fab8b005b13c7.png
│ ├── 1568218496986100575f3b3af98f63543a0965fab8b005b13c7.png
│ ├── 1568218497082896562f3b3af98f63543a0965fab8b005b13c7.png
- 每个flight一般而言,包含
2分钟,10hz,总共1200帧
图像。 - gt json中,主要包含信息有时间戳,帧数,id, bbox标注框,标签、航线id、图像名称。
{
'time': 1550844897919368155,
'blob': {
'frame': 480,
'range_distance_m': nan # signifies, it was an unplanned object
},
'id': 'Bird2',
'bb': [1013.4, 515.8, 6.0, 6.0],
'labels': {
'is_above_horizon': 1},
'flight_id': '280dc81adbb3420cab502fb88d6abf84',
'img_name': '1550844897919368155280dc81adbb3420cab502fb88d6abf84.png'
}
2.2 one flight数据下载
由于完整数据集,太大,如果只是推理查看效果,可以只下载one flight数据集即可,参考脚本如下:
from core.dataset import Dataset
# 添加part1数据地址
dataset = Dataset(local_path='data/part1', s3_path='s3://airborne-obj-detection-challenge-training/part1/', prefix='part1', partial=True)
# 获取one flight数据
flight_ids = dataset.get_flight_ids() # 859flight
flight = dataset.get_flight(flight_ids[0]) # Loading single flight
flight.download()
上述提供脚本包含有效测试图片93张。
2.3 数据集简单使用
# test
airborne_objects = flight.get_airborne_objects() # Get all airborne objects
airborne_object = list(airborne_objects)[0] # 取第一个obj
airborne_object.location # Location of object in whole flight,
frames = flight.frames # All the frames of the flight 93帧
# 获取航线帧数,利用帧数获取检测物体
frames = flight.frames # All the frames of the flight, dict
frame = list(frames.values())[0]
airborne_object_in_frame = frame.detected_objects
三. 运行
- 运行seg_test脚本,运行结果会默认保存到data/results/run0/flight_id下面。
./run.sh # 实际运行seg_test.py
注意:
1)先修改脚本文件中 test_data_path 为本地测试文件路径,如test_data_path = '/data/part1/Images/part100bb96a5a68f4fa5bc5c5dc66ce314d2'
。
2)修改evaluator/airborne_detection.py, 36行,更改自己测试数据路径,因为后面用到get_all_flight_ids()
。
flight_id
一般为下面形式:part100bb96a5a68f4fa5bc5c5dc66ce314d2。
self.test_data_path = os.getenv("TEST_DATASET_PATH", os.getcwd() + "/data/part1/Images/")
- 运行siam_mot_test脚本
同样注意修改 test_data_path 路径。
python siam_mot_test.py
- 可以仿照siam-mot工程中demo的方法,对检测结果合成视频,并进行压缩,得到文章开头的结果。
四. 排疑
Q1: 执行测试seg_test.py时, SegDetector Init初始化model_transform ,invalid load key, ‘v’
A1: 需要下载pth模型文件,项目中给出的只是以.pth为结尾的文本文件。
参考 1.git lfs 大文件上传 2. git lfs常用命令指南
git lfs fetch # 拉取大文件,解压zip文件
git config lfs.fetchinclude 'siam-mot/models' # 接下来lfs操作只针对前面的目录下
git lfs ls-files # 查看文件
git lfs pull # 拉取
Q2: 执行siam_mot_test.py 时,No module named ‘siam_mot_tracker’
A2: 将工程内部siam-mot文件夹也加入到python环境变量,如下:
export PYTHONPATH=$PYTHONPATH:~/workspace/airborne-detection-starter-kit/siam-mot
Q3:执行siam_mot_test.py 时,ModuleNotFoundError: No module named ‘torchvision.models.utils’
A3:
参考:torchvision版本问题,修改siam-mot/siammot/modelling/backbone/dla.py", line 11
#from torchvision.models.utils import load_state_dict_from_url # 原版
from torch.hub import load_state_dict_from_url # 改版
Q4: 执行siam_mot_test.py 时,File “/home/cui/workspace/airborne-detection-starter-kit/siam-mot/siammot/modelling/backbone/dla.py”, line 405, in dla. Error: invalid load key, ‘v’.
A4: 同Q1,需要下载pth完整模型文件。
Q5: 调试seg_tracker/models_transformation.py, BUG: No module named ‘pytorch_model_summary’
A5:
pip install pytorch_model_summary