AI+X更新日志-shuai

4036 ワード

11.28
1.datasetsページにreload機能を追加し、データセット情報を更新する.
  • app/templates/datasets.
  • add reloadボタン、テーブルadd reloadフィールド、選択されたデータセット機能のみを更新する
  • を提供します.
  • ap/static/js/dataset.js
  • add reload_dataset()、テーブルデータセット情報
  • を更新する.
  • ap.datasets.py:
  • add reload_dataset()、対応するバックグラウンド機能:全部更新する/更新する
  • app.db.py:
  • は、データセットリストのtypeフィールドを変更する:taskType -> taskRules: defaultShape、dataturksのPoint, Rectangle, Polygonは、taskype IMAGE_POLYGON_BOUNDING_BOX_V2を共有するので、タスクマッピング
  • を追加する.
  • add clear_dataset()、reload datasets
  • task_type = {
        'rectangle': 'Detection',
        'polygon': 'Segmentaion'
    }
    
    def parse_projects(row):
        taskRules = json.loads(row[3])  # str->dict,   
        cats = taskRules['tags'].replace(' ', '').split(',')
        task = task_type[taskRules['defaultShape']]
        return {
            'id': row[0],
            'name': row[1],
            'taskType': task,  # change ori task typye here
            'classes': len(cats),
            'cats': cats,
        }
    
    2.新しいタスクデータセット:rotated bbox
  • utils.box_utils.py
  • add cvt_poly_fpts_to_center_xywh_angle()は、dataturksに表示されたポリゴンpolygonを外部の長方形に変換し、フォーマット:(x,y,w,h), angle
  • 部分関数名を変更します.4pts -> rect
  • utils.dataset_utils.py
  • add filter_cigars()、dataturksの表示annotationフィールドから、タバコの表示
  • をフィルタします.
  • add create_dataset_from_dataturks_json()は、dataturksから導出されたjsonファイルからデータセット
  • を作成する.
  • udate convert_to_coco()は、annに新たに追加されたangleフィールド
  • です.
    アメリカcreate_dataset_from_dataturks_json()
    def build_top_k_dataset(dataset, dataset_dir, top_k=None):
        """ create dataset with top_k classes """
        filted_cats, filted_cats_num, train_num, val_num, test_num = split_and_save_coco_dataset(dataset, dataset_dir=dataset_dir, top_k=top_k)
        prefix = '{}_'.format(top_k) if top_k else ''
        data_cfg = {
            'name': 'Cigar Rotated Box',
            'cats_num': filted_cats_num,
            'classses': len(filted_cats),
            'train': train_num,
            'valid': val_num,
            'test': test_num
        }
        dataset_name = os.path.basename(dataset_dir)
        dump_json(data_cfg, out_path=os.path.join(dataset_dir, prefix + '{}_cfg.json'.format(dataset_name)))
    
    
    def build_rbox_dataset():
        """ create mulit rbox dataset with multi top_k classes """
        dataset_name = 'cigar_rbox'
        dataset_dir = os.path.join('data', dataset_name)
        in_path = os.path.join(dataset_dir, 'Retail Cigar Dataset.json')
        dataset = create_dataset_from_dataturks_json(dataturks_json_path=in_path)
        # build with top k classes
        top_ks = 10, 20, 40
        for tk in top_ks:
            build_top_k_dataset(dataset, dataset_dir, top_k=tk)
        # build with all classes
        build_top_k_dataset(dataset, dataset_dir)
    
    udate convert_to_coco()
    # add anns
    for ann in anns:
        label = ann['label'][0]
        # add shape judgement
        rect_box, rect_angle = [], 0
        if ann['shape'] == 'rectangle':
            rect_box, rect_angle = cvt_rect_fpts_to_xywh(ann['points'], img_w, img_h), 0
        elif ann['shape'] == 'polygon':
            rect_box, rect_angle = cvt_poly_fpts_to_center_xywh_angle(ann['points'], img_w, img_h)
        anno_coco = {
            "segmentation": [],
            "area": [],
            "iscrowd": 0,
            "image_id": result['img_id'],
            "bbox": rect_box,
            "angle": rect_angle,
            "category_id": categories[label],
            "id": ann_id
        }