Spaces:
Running
on
Zero
Running
on
Zero
det2
#6
by
mpark
- opened
This view is limited to 50 files because it contains too many changes.Β
See the raw diff here.
- app.py +37 -22
- preprocess/detectron2/projects/DensePose/apply_net.py β apply_net.py +69 -126
- densepose +0 -1
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/config.py +0 -0
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/base.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/builtin.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/chart_output_hflip.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/chart_output_to_chart_result.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/hflip.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/segm_to_mask.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/to_chart_result.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/to_mask.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/build.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/combined_loader.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/dataset_mapper.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/builtin.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/chimpnsee.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/coco.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/dataset_type.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/lvis.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/image_list_dataset.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/inference_based_loader.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/meshes/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/meshes/builtin.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/meshes/catalog.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_base.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_confidence_based.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_cse_base.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_cse_confidence_based.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_cse_uniform.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_uniform.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/mask_from_densepose.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/prediction_to_gt.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/transform/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/transform/image.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/utils.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/video/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/video/frame_selector.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/data/video/video_keyframe_dataset.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/engine/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/engine/trainer.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/evaluation/__init__.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/evaluation/d2_evaluator_adapter.py +0 -2
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/evaluation/densepose_coco_evaluation.py +0 -3
- {preprocess/detectron2/projects/DensePose/densepose β densepose}/evaluation/evaluator.py +0 -2
app.py
CHANGED
@@ -2,23 +2,25 @@
|
|
2 |
import os
|
3 |
import sys
|
4 |
import time
|
5 |
-
from pathlib import Path
|
6 |
-
from omegaconf import OmegaConf
|
7 |
from glob import glob
|
8 |
from os.path import join as opj
|
|
|
9 |
|
|
|
10 |
import gradio as gr
|
11 |
-
from PIL import Image
|
12 |
import torch
|
|
|
|
|
13 |
|
14 |
-
from utils_stableviton import get_mask_location, get_batch, tensor2img
|
15 |
from cldm.model import create_model
|
16 |
from cldm.plms_hacked import PLMSSampler
|
|
|
|
|
17 |
|
18 |
PROJECT_ROOT = Path(__file__).absolute().parents[1].absolute()
|
19 |
sys.path.insert(0, str(PROJECT_ROOT))
|
20 |
|
21 |
-
from
|
22 |
from preprocess.humanparsing.run_parsing import Parsing
|
23 |
from preprocess.openpose.run_openpose import OpenPose
|
24 |
|
@@ -30,10 +32,10 @@ IMG_W = 384
|
|
30 |
openpose_model_hd = OpenPose(0)
|
31 |
openpose_model_hd.preprocessor.body_estimation.model.to('cuda')
|
32 |
parsing_model_hd = Parsing(0)
|
33 |
-
densepose_model_hd = DensePose4Gradio(
|
34 |
-
|
35 |
-
|
36 |
-
)
|
37 |
|
38 |
category_dict = ['upperbody', 'lowerbody', 'dress']
|
39 |
category_dict_utils = ['upper_body', 'lower_body', 'dresses']
|
@@ -50,6 +52,8 @@ model = model.cuda()
|
|
50 |
model.eval()
|
51 |
sampler = PLMSSampler(model)
|
52 |
# #### model init <<<<
|
|
|
|
|
53 |
def stable_viton_model_hd(
|
54 |
batch,
|
55 |
n_steps,
|
@@ -69,25 +73,27 @@ def stable_viton_model_hd(
|
|
69 |
sampler.model.batch = batch
|
70 |
|
71 |
ts = torch.full((1,), 999, device=z.device, dtype=torch.long)
|
72 |
-
start_code = model.q_sample(z, ts)
|
73 |
|
74 |
output, _, _ = sampler.sample(
|
75 |
n_steps,
|
76 |
bs,
|
77 |
-
(4, IMG_H//8, IMG_W//8),
|
78 |
cond,
|
79 |
-
x_T=start_code,
|
80 |
verbose=False,
|
81 |
eta=0.0,
|
82 |
-
unconditional_conditioning=uc_full,
|
83 |
)
|
84 |
|
85 |
output = model.decode_first_stage(output)
|
86 |
output = tensor2img(output)
|
87 |
pil_output = Image.fromarray(output)
|
88 |
return pil_output
|
89 |
-
|
90 |
# @spaces.GPU # TODO: turn on when final upload
|
|
|
|
|
91 |
@torch.no_grad()
|
92 |
def process_hd(vton_img, garm_img, n_steps):
|
93 |
model_type = 'hd'
|
@@ -112,19 +118,28 @@ def process_hd(vton_img, garm_img, n_steps):
|
|
112 |
stt = time.time()
|
113 |
print('get densepose... ', end='')
|
114 |
vton_img = vton_img.resize((IMG_W, IMG_H)) # size for densepose
|
115 |
-
densepose = densepose_model_hd.execute(vton_img) # densepose
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
print('%.2fs' % (time.time() - stt))
|
117 |
|
118 |
batch = get_batch(
|
119 |
-
vton_img,
|
120 |
-
garm_img,
|
121 |
-
densepose,
|
122 |
-
masked_vton_img,
|
123 |
-
mask,
|
124 |
-
IMG_H,
|
125 |
IMG_W
|
126 |
)
|
127 |
-
|
128 |
sample = stable_viton_model_hd(
|
129 |
batch,
|
130 |
n_steps
|
|
|
2 |
import os
|
3 |
import sys
|
4 |
import time
|
|
|
|
|
5 |
from glob import glob
|
6 |
from os.path import join as opj
|
7 |
+
from pathlib import Path
|
8 |
|
9 |
+
import apply_net
|
10 |
import gradio as gr
|
|
|
11 |
import torch
|
12 |
+
from omegaconf import OmegaConf
|
13 |
+
from PIL import Image
|
14 |
|
|
|
15 |
from cldm.model import create_model
|
16 |
from cldm.plms_hacked import PLMSSampler
|
17 |
+
from detectron2.data.detection_utils import _apply_exif_orientation, convert_PIL_to_numpy
|
18 |
+
from utils_stableviton import get_batch, get_mask_location, tensor2img
|
19 |
|
20 |
PROJECT_ROOT = Path(__file__).absolute().parents[1].absolute()
|
21 |
sys.path.insert(0, str(PROJECT_ROOT))
|
22 |
|
23 |
+
# from detectron2.projects.DensePose.apply_net_gradio import DensePose4Gradio
|
24 |
from preprocess.humanparsing.run_parsing import Parsing
|
25 |
from preprocess.openpose.run_openpose import OpenPose
|
26 |
|
|
|
32 |
openpose_model_hd = OpenPose(0)
|
33 |
openpose_model_hd.preprocessor.body_estimation.model.to('cuda')
|
34 |
parsing_model_hd = Parsing(0)
|
35 |
+
# densepose_model_hd = DensePose4Gradio(
|
36 |
+
# cfg='preprocess/detectron2/projects/DensePose/configs/densepose_rcnn_R_50_FPN_s1x.yaml',
|
37 |
+
# model='https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_s1x/165712039/model_final_162be9.pkl',
|
38 |
+
# )
|
39 |
|
40 |
category_dict = ['upperbody', 'lowerbody', 'dress']
|
41 |
category_dict_utils = ['upper_body', 'lower_body', 'dresses']
|
|
|
52 |
model.eval()
|
53 |
sampler = PLMSSampler(model)
|
54 |
# #### model init <<<<
|
55 |
+
|
56 |
+
|
57 |
def stable_viton_model_hd(
|
58 |
batch,
|
59 |
n_steps,
|
|
|
73 |
sampler.model.batch = batch
|
74 |
|
75 |
ts = torch.full((1,), 999, device=z.device, dtype=torch.long)
|
76 |
+
start_code = model.q_sample(z, ts)
|
77 |
|
78 |
output, _, _ = sampler.sample(
|
79 |
n_steps,
|
80 |
bs,
|
81 |
+
(4, IMG_H // 8, IMG_W // 8),
|
82 |
cond,
|
83 |
+
x_T=start_code,
|
84 |
verbose=False,
|
85 |
eta=0.0,
|
86 |
+
unconditional_conditioning=uc_full,
|
87 |
)
|
88 |
|
89 |
output = model.decode_first_stage(output)
|
90 |
output = tensor2img(output)
|
91 |
pil_output = Image.fromarray(output)
|
92 |
return pil_output
|
93 |
+
|
94 |
# @spaces.GPU # TODO: turn on when final upload
|
95 |
+
|
96 |
+
|
97 |
@torch.no_grad()
|
98 |
def process_hd(vton_img, garm_img, n_steps):
|
99 |
model_type = 'hd'
|
|
|
118 |
stt = time.time()
|
119 |
print('get densepose... ', end='')
|
120 |
vton_img = vton_img.resize((IMG_W, IMG_H)) # size for densepose
|
121 |
+
# densepose = densepose_model_hd.execute(vton_img) # densepose
|
122 |
+
|
123 |
+
human_img_arg = _apply_exif_orientation(vton_img.resize((IMG_W, IMG_H)))
|
124 |
+
human_img_arg = convert_PIL_to_numpy(human_img_arg, format="BGR")
|
125 |
+
args = apply_net.create_argument_parser().parse_args(('show', './configs/densepose_rcnn_R_50_FPN_s1x.yaml', './ckpt/densepose/model_final_162be9.pkl', 'dp_segm', '-v', '--opts', 'MODEL.DEVICE', 'cuda'))
|
126 |
+
# verbosity = getattr(args, "verbosity", None)
|
127 |
+
pose_img = args.func(args, human_img_arg)
|
128 |
+
pose_img = pose_img[:, :, ::-1]
|
129 |
+
pose_img = Image.fromarray(pose_img).resize((IMG_W, IMG_H))
|
130 |
+
|
131 |
print('%.2fs' % (time.time() - stt))
|
132 |
|
133 |
batch = get_batch(
|
134 |
+
vton_img,
|
135 |
+
garm_img,
|
136 |
+
densepose,
|
137 |
+
masked_vton_img,
|
138 |
+
mask,
|
139 |
+
IMG_H,
|
140 |
IMG_W
|
141 |
)
|
142 |
+
|
143 |
sample = stable_viton_model_hd(
|
144 |
batch,
|
145 |
n_steps
|
preprocess/detectron2/projects/DensePose/apply_net.py β apply_net.py
RENAMED
@@ -7,29 +7,40 @@ import logging
|
|
7 |
import os
|
8 |
import sys
|
9 |
from typing import Any, ClassVar, Dict, List
|
10 |
-
|
11 |
-
import cv2
|
12 |
-
import numpy as np
|
13 |
import torch
|
14 |
-
|
15 |
-
from densepose.structures import DensePoseChartPredictorOutput, DensePoseEmbeddingPredictorOutput
|
16 |
-
from densepose.utils.logger import verbosity_to_level
|
17 |
-
from densepose.vis.base import CompoundVisualizer
|
18 |
-
from densepose.vis.bounding_box import ScoredBoundingBoxVisualizer
|
19 |
-
from densepose.vis.densepose_outputs_vertex import (DensePoseOutputsTextureVisualizer, DensePoseOutputsVertexVisualizer,
|
20 |
-
get_texture_atlases)
|
21 |
-
from densepose.vis.densepose_results import (DensePoseResultsContourVisualizer,
|
22 |
-
DensePoseResultsFineSegmentationVisualizer, DensePoseResultsUVisualizer,
|
23 |
-
DensePoseResultsVVisualizer)
|
24 |
-
from densepose.vis.densepose_results_textures import DensePoseResultsVisualizerWithTexture, get_texture_atlas
|
25 |
-
from densepose.vis.extractor import (CompoundExtractor, DensePoseOutputsExtractor, DensePoseResultExtractor,
|
26 |
-
create_extractor)
|
27 |
from detectron2.config import CfgNode, get_cfg
|
28 |
from detectron2.data.detection_utils import read_image
|
29 |
from detectron2.engine.defaults import DefaultPredictor
|
30 |
from detectron2.structures.instances import Instances
|
31 |
from detectron2.utils.logger import setup_logger
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
|
34 |
DOC = """Apply Net - a tool to print / visualize DensePose results
|
35 |
"""
|
@@ -40,9 +51,9 @@ logger = logging.getLogger(LOGGER_NAME)
|
|
40 |
_ACTION_REGISTRY: Dict[str, "Action"] = {}
|
41 |
|
42 |
|
43 |
-
class Action
|
44 |
@classmethod
|
45 |
-
def add_arguments(cls, parser: argparse.ArgumentParser):
|
46 |
parser.add_argument(
|
47 |
"-v",
|
48 |
"--verbosity",
|
@@ -51,7 +62,7 @@ class Action(object):
|
|
51 |
)
|
52 |
|
53 |
|
54 |
-
def register_action(cls):
|
55 |
"""
|
56 |
Decorator for action classes to automate action registration
|
57 |
"""
|
@@ -62,11 +73,10 @@ def register_action(cls):
|
|
62 |
|
63 |
class InferenceAction(Action):
|
64 |
@classmethod
|
65 |
-
def add_arguments(cls, parser: argparse.ArgumentParser):
|
66 |
super(InferenceAction, cls).add_arguments(parser)
|
67 |
parser.add_argument("cfg", metavar="<config>", help="Config file")
|
68 |
parser.add_argument("model", metavar="<model>", help="Model file")
|
69 |
-
parser.add_argument("input", metavar="<input>", help="Input data")
|
70 |
parser.add_argument(
|
71 |
"--opts",
|
72 |
help="Modify config options using the command-line 'KEY VALUE' pairs",
|
@@ -75,28 +85,29 @@ class InferenceAction(Action):
|
|
75 |
)
|
76 |
|
77 |
@classmethod
|
78 |
-
def execute(cls, args: argparse.Namespace):
|
79 |
logger.info(f"Loading config from {args.cfg}")
|
80 |
opts = []
|
81 |
cfg = cls.setup_config(args.cfg, args.model, args, opts)
|
82 |
logger.info(f"Loading model from {args.model}")
|
83 |
predictor = DefaultPredictor(cfg)
|
84 |
-
logger.info(f"Loading data from {args.input}")
|
85 |
-
file_list = cls._get_input_file_list(args.input)
|
86 |
-
if len(file_list) == 0:
|
87 |
-
|
88 |
-
|
89 |
context = cls.create_context(args, cfg)
|
90 |
-
for file_name in file_list:
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
cls.postexecute(context)
|
|
|
96 |
|
97 |
@classmethod
|
98 |
def setup_config(
|
99 |
-
cls, config_fpath: str, model_fpath: str, args: argparse.Namespace, opts: List[str]
|
100 |
):
|
101 |
cfg = get_cfg()
|
102 |
add_densepose_config(cfg)
|
@@ -109,7 +120,7 @@ class InferenceAction(Action):
|
|
109 |
return cfg
|
110 |
|
111 |
@classmethod
|
112 |
-
def _get_input_file_list(cls, input_spec: str):
|
113 |
if os.path.isdir(input_spec):
|
114 |
file_list = [
|
115 |
os.path.join(input_spec, fname)
|
@@ -132,13 +143,13 @@ class DumpAction(InferenceAction):
|
|
132 |
COMMAND: ClassVar[str] = "dump"
|
133 |
|
134 |
@classmethod
|
135 |
-
def add_parser(cls, subparsers: argparse._SubParsersAction):
|
136 |
parser = subparsers.add_parser(cls.COMMAND, help="Dump model outputs to a file.")
|
137 |
cls.add_arguments(parser)
|
138 |
parser.set_defaults(func=cls.execute)
|
139 |
|
140 |
@classmethod
|
141 |
-
def add_arguments(cls, parser: argparse.ArgumentParser):
|
142 |
super(DumpAction, cls).add_arguments(parser)
|
143 |
parser.add_argument(
|
144 |
"--output",
|
@@ -149,7 +160,7 @@ class DumpAction(InferenceAction):
|
|
149 |
|
150 |
@classmethod
|
151 |
def execute_on_outputs(
|
152 |
-
cls, context: Dict[str, Any], entry: Dict[str, Any], outputs: Instances
|
153 |
):
|
154 |
image_fpath = entry["file_name"]
|
155 |
logger.info(f"Processing {image_fpath}")
|
@@ -167,12 +178,12 @@ class DumpAction(InferenceAction):
|
|
167 |
context["results"].append(result)
|
168 |
|
169 |
@classmethod
|
170 |
-
def create_context(cls, args: argparse.Namespace, cfg: CfgNode):
|
171 |
context = {"results": [], "out_fname": args.output}
|
172 |
return context
|
173 |
|
174 |
@classmethod
|
175 |
-
def postexecute(cls, context: Dict[str, Any]):
|
176 |
out_fname = context["out_fname"]
|
177 |
out_dir = os.path.dirname(out_fname)
|
178 |
if len(out_dir) > 0 and not os.path.exists(out_dir):
|
@@ -201,13 +212,13 @@ class ShowAction(InferenceAction):
|
|
201 |
}
|
202 |
|
203 |
@classmethod
|
204 |
-
def add_parser(cls, subparsers: argparse._SubParsersAction):
|
205 |
parser = subparsers.add_parser(cls.COMMAND, help="Visualize selected entries")
|
206 |
cls.add_arguments(parser)
|
207 |
parser.set_defaults(func=cls.execute)
|
208 |
|
209 |
@classmethod
|
210 |
-
def add_arguments(cls, parser: argparse.ArgumentParser):
|
211 |
super(ShowAction, cls).add_arguments(parser)
|
212 |
parser.add_argument(
|
213 |
"visualizations",
|
@@ -246,7 +257,7 @@ class ShowAction(InferenceAction):
|
|
246 |
|
247 |
@classmethod
|
248 |
def setup_config(
|
249 |
-
cls, config_fpath: str, model_fpath: str, args: argparse.Namespace, opts: List[str]
|
250 |
):
|
251 |
opts.append("MODEL.ROI_HEADS.SCORE_THRESH_TEST")
|
252 |
opts.append(str(args.min_score))
|
@@ -258,21 +269,23 @@ class ShowAction(InferenceAction):
|
|
258 |
|
259 |
@classmethod
|
260 |
def execute_on_outputs(
|
261 |
-
cls, context: Dict[str, Any], entry: Dict[str, Any], outputs: Instances
|
262 |
):
|
263 |
import cv2
|
264 |
import numpy as np
|
265 |
-
|
266 |
visualizer = context["visualizer"]
|
267 |
extractor = context["extractor"]
|
268 |
-
image_fpath = entry["file_name"]
|
269 |
-
logger.info(f"Processing {image_fpath}")
|
270 |
image = cv2.cvtColor(entry["image"], cv2.COLOR_BGR2GRAY)
|
271 |
image = np.tile(image[:, :, np.newaxis], [1, 1, 3])
|
272 |
data = extractor(outputs)
|
273 |
image_vis = visualizer.visualize(image, data)
|
|
|
|
|
274 |
entry_idx = context["entry_idx"] + 1
|
275 |
-
out_fname =
|
|
|
276 |
out_dir = os.path.dirname(out_fname)
|
277 |
if len(out_dir) > 0 and not os.path.exists(out_dir):
|
278 |
os.makedirs(out_dir)
|
@@ -281,16 +294,17 @@ class ShowAction(InferenceAction):
|
|
281 |
context["entry_idx"] += 1
|
282 |
|
283 |
@classmethod
|
284 |
-
def postexecute(cls, context: Dict[str, Any]):
|
285 |
pass
|
|
|
286 |
|
287 |
@classmethod
|
288 |
-
def _get_out_fname(cls, entry_idx: int, fname_base: str):
|
289 |
base, ext = os.path.splitext(fname_base)
|
290 |
return base + ".{0:04d}".format(entry_idx) + ext
|
291 |
|
292 |
@classmethod
|
293 |
-
def create_context(cls, args: argparse.Namespace, cfg: CfgNode) -> Dict[str, Any]:
|
294 |
vis_specs = args.visualizations.split(",")
|
295 |
visualizers = []
|
296 |
extractors = []
|
@@ -316,80 +330,6 @@ class ShowAction(InferenceAction):
|
|
316 |
return context
|
317 |
|
318 |
|
319 |
-
@register_action
|
320 |
-
class GetAction(InferenceAction):
|
321 |
-
"""
|
322 |
-
Get action that outputs results to a pickle file
|
323 |
-
"""
|
324 |
-
|
325 |
-
COMMAND: ClassVar[str] = "get"
|
326 |
-
|
327 |
-
@classmethod
|
328 |
-
def add_parser(cls, subparsers: argparse._SubParsersAction):
|
329 |
-
parser = subparsers.add_parser(cls.COMMAND, help="Get model outputs to a file.")
|
330 |
-
cls.add_arguments(parser)
|
331 |
-
parser.set_defaults(func=cls.execute)
|
332 |
-
|
333 |
-
@classmethod
|
334 |
-
def add_arguments(cls, parser: argparse.ArgumentParser):
|
335 |
-
super(GetAction, cls).add_arguments(parser)
|
336 |
-
parser.add_argument(
|
337 |
-
"--output",
|
338 |
-
metavar="<dump_file>",
|
339 |
-
default="",
|
340 |
-
help="File name to save images to",
|
341 |
-
)
|
342 |
-
|
343 |
-
@classmethod
|
344 |
-
def execute_on_outputs(
|
345 |
-
cls, context: Dict[str, Any], entry: Dict[str, Any], outputs: Instances
|
346 |
-
):
|
347 |
-
image_fpath = entry["file_name"]
|
348 |
-
logger.info(f"Processing {image_fpath}")
|
349 |
-
result = {"file_name": image_fpath}
|
350 |
-
if outputs.has("scores"):
|
351 |
-
result["scores"] = outputs.get("scores").cpu()
|
352 |
-
if outputs.has("pred_boxes"):
|
353 |
-
result["pred_boxes_XYXY"] = outputs.get("pred_boxes").tensor.cpu()
|
354 |
-
if outputs.has("pred_densepose"):
|
355 |
-
if isinstance(outputs.pred_densepose, DensePoseChartPredictorOutput):
|
356 |
-
extractor = DensePoseResultExtractor()
|
357 |
-
elif isinstance(outputs.pred_densepose, DensePoseEmbeddingPredictorOutput):
|
358 |
-
extractor = DensePoseOutputsExtractor()
|
359 |
-
result["pred_densepose"] = extractor(outputs)[0]
|
360 |
-
|
361 |
-
# decode
|
362 |
-
out_dir = context["out_fname"]
|
363 |
-
H, W, _ = entry['image'].shape
|
364 |
-
|
365 |
-
i = result['pred_densepose'][0].labels.cpu().numpy()
|
366 |
-
i_scale = (i.astype(np.float32) * 255 / 24).astype(np.uint8)
|
367 |
-
i_color = cv2.applyColorMap(i_scale, cv2.COLORMAP_PARULA)
|
368 |
-
i_color = cv2.cvtColor(i_color, cv2.COLOR_RGB2BGR)
|
369 |
-
i_color[i == 0] = [0, 0, 0]
|
370 |
-
|
371 |
-
box = result["pred_boxes_XYXY"][0]
|
372 |
-
box[2] = box[2] - box[0]
|
373 |
-
box[3] = box[3] - box[1]
|
374 |
-
x, y, w, h = [int(v) for v in box]
|
375 |
-
|
376 |
-
bg = np.zeros((H, W, 3))
|
377 |
-
bg[y:y + h, x:x + w, :] = i_color
|
378 |
-
|
379 |
-
bg_img = Image.fromarray(np.uint8(bg), "RGB")
|
380 |
-
os.makedirs(out_dir, exist_ok=True)
|
381 |
-
bg_img.save(os.path.join(out_dir, os.path.splitext(os.path.basename(result['file_name']))[0] + '.jpg'))
|
382 |
-
|
383 |
-
@classmethod
|
384 |
-
def create_context(cls, args: argparse.Namespace, cfg: CfgNode):
|
385 |
-
context = {"results": [], "out_fname": args.output}
|
386 |
-
return context
|
387 |
-
|
388 |
-
@classmethod
|
389 |
-
def postexecute(cls, context: Dict[str, Any]):
|
390 |
-
pass
|
391 |
-
|
392 |
-
|
393 |
def create_argument_parser() -> argparse.ArgumentParser:
|
394 |
parser = argparse.ArgumentParser(
|
395 |
description=DOC,
|
@@ -405,7 +345,7 @@ def create_argument_parser() -> argparse.ArgumentParser:
|
|
405 |
def main():
|
406 |
parser = create_argument_parser()
|
407 |
args = parser.parse_args()
|
408 |
-
verbosity =
|
409 |
global logger
|
410 |
logger = setup_logger(name=LOGGER_NAME)
|
411 |
logger.setLevel(verbosity_to_level(verbosity))
|
@@ -414,3 +354,6 @@ def main():
|
|
414 |
|
415 |
if __name__ == "__main__":
|
416 |
main()
|
|
|
|
|
|
|
|
7 |
import os
|
8 |
import sys
|
9 |
from typing import Any, ClassVar, Dict, List
|
|
|
|
|
|
|
10 |
import torch
|
11 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
from detectron2.config import CfgNode, get_cfg
|
13 |
from detectron2.data.detection_utils import read_image
|
14 |
from detectron2.engine.defaults import DefaultPredictor
|
15 |
from detectron2.structures.instances import Instances
|
16 |
from detectron2.utils.logger import setup_logger
|
17 |
+
|
18 |
+
from densepose import add_densepose_config
|
19 |
+
from densepose.structures import DensePoseChartPredictorOutput, DensePoseEmbeddingPredictorOutput
|
20 |
+
from densepose.utils.logger import verbosity_to_level
|
21 |
+
from densepose.vis.base import CompoundVisualizer
|
22 |
+
from densepose.vis.bounding_box import ScoredBoundingBoxVisualizer
|
23 |
+
from densepose.vis.densepose_outputs_vertex import (
|
24 |
+
DensePoseOutputsTextureVisualizer,
|
25 |
+
DensePoseOutputsVertexVisualizer,
|
26 |
+
get_texture_atlases,
|
27 |
+
)
|
28 |
+
from densepose.vis.densepose_results import (
|
29 |
+
DensePoseResultsContourVisualizer,
|
30 |
+
DensePoseResultsFineSegmentationVisualizer,
|
31 |
+
DensePoseResultsUVisualizer,
|
32 |
+
DensePoseResultsVVisualizer,
|
33 |
+
)
|
34 |
+
from densepose.vis.densepose_results_textures import (
|
35 |
+
DensePoseResultsVisualizerWithTexture,
|
36 |
+
get_texture_atlas,
|
37 |
+
)
|
38 |
+
from densepose.vis.extractor import (
|
39 |
+
CompoundExtractor,
|
40 |
+
DensePoseOutputsExtractor,
|
41 |
+
DensePoseResultExtractor,
|
42 |
+
create_extractor,
|
43 |
+
)
|
44 |
|
45 |
DOC = """Apply Net - a tool to print / visualize DensePose results
|
46 |
"""
|
|
|
51 |
_ACTION_REGISTRY: Dict[str, "Action"] = {}
|
52 |
|
53 |
|
54 |
+
class Action:
|
55 |
@classmethod
|
56 |
+
def add_arguments(cls: type, parser: argparse.ArgumentParser):
|
57 |
parser.add_argument(
|
58 |
"-v",
|
59 |
"--verbosity",
|
|
|
62 |
)
|
63 |
|
64 |
|
65 |
+
def register_action(cls: type):
|
66 |
"""
|
67 |
Decorator for action classes to automate action registration
|
68 |
"""
|
|
|
73 |
|
74 |
class InferenceAction(Action):
|
75 |
@classmethod
|
76 |
+
def add_arguments(cls: type, parser: argparse.ArgumentParser):
|
77 |
super(InferenceAction, cls).add_arguments(parser)
|
78 |
parser.add_argument("cfg", metavar="<config>", help="Config file")
|
79 |
parser.add_argument("model", metavar="<model>", help="Model file")
|
|
|
80 |
parser.add_argument(
|
81 |
"--opts",
|
82 |
help="Modify config options using the command-line 'KEY VALUE' pairs",
|
|
|
85 |
)
|
86 |
|
87 |
@classmethod
|
88 |
+
def execute(cls: type, args: argparse.Namespace, human_img):
|
89 |
logger.info(f"Loading config from {args.cfg}")
|
90 |
opts = []
|
91 |
cfg = cls.setup_config(args.cfg, args.model, args, opts)
|
92 |
logger.info(f"Loading model from {args.model}")
|
93 |
predictor = DefaultPredictor(cfg)
|
94 |
+
# logger.info(f"Loading data from {args.input}")
|
95 |
+
# file_list = cls._get_input_file_list(args.input)
|
96 |
+
# if len(file_list) == 0:
|
97 |
+
# logger.warning(f"No input images for {args.input}")
|
98 |
+
# return
|
99 |
context = cls.create_context(args, cfg)
|
100 |
+
# for file_name in file_list:
|
101 |
+
# img = read_image(file_name, format="BGR") # predictor expects BGR image.
|
102 |
+
with torch.no_grad():
|
103 |
+
outputs = predictor(human_img)["instances"]
|
104 |
+
out_pose = cls.execute_on_outputs(context, {"image": human_img}, outputs)
|
105 |
cls.postexecute(context)
|
106 |
+
return out_pose
|
107 |
|
108 |
@classmethod
|
109 |
def setup_config(
|
110 |
+
cls: type, config_fpath: str, model_fpath: str, args: argparse.Namespace, opts: List[str]
|
111 |
):
|
112 |
cfg = get_cfg()
|
113 |
add_densepose_config(cfg)
|
|
|
120 |
return cfg
|
121 |
|
122 |
@classmethod
|
123 |
+
def _get_input_file_list(cls: type, input_spec: str):
|
124 |
if os.path.isdir(input_spec):
|
125 |
file_list = [
|
126 |
os.path.join(input_spec, fname)
|
|
|
143 |
COMMAND: ClassVar[str] = "dump"
|
144 |
|
145 |
@classmethod
|
146 |
+
def add_parser(cls: type, subparsers: argparse._SubParsersAction):
|
147 |
parser = subparsers.add_parser(cls.COMMAND, help="Dump model outputs to a file.")
|
148 |
cls.add_arguments(parser)
|
149 |
parser.set_defaults(func=cls.execute)
|
150 |
|
151 |
@classmethod
|
152 |
+
def add_arguments(cls: type, parser: argparse.ArgumentParser):
|
153 |
super(DumpAction, cls).add_arguments(parser)
|
154 |
parser.add_argument(
|
155 |
"--output",
|
|
|
160 |
|
161 |
@classmethod
|
162 |
def execute_on_outputs(
|
163 |
+
cls: type, context: Dict[str, Any], entry: Dict[str, Any], outputs: Instances
|
164 |
):
|
165 |
image_fpath = entry["file_name"]
|
166 |
logger.info(f"Processing {image_fpath}")
|
|
|
178 |
context["results"].append(result)
|
179 |
|
180 |
@classmethod
|
181 |
+
def create_context(cls: type, args: argparse.Namespace, cfg: CfgNode):
|
182 |
context = {"results": [], "out_fname": args.output}
|
183 |
return context
|
184 |
|
185 |
@classmethod
|
186 |
+
def postexecute(cls: type, context: Dict[str, Any]):
|
187 |
out_fname = context["out_fname"]
|
188 |
out_dir = os.path.dirname(out_fname)
|
189 |
if len(out_dir) > 0 and not os.path.exists(out_dir):
|
|
|
212 |
}
|
213 |
|
214 |
@classmethod
|
215 |
+
def add_parser(cls: type, subparsers: argparse._SubParsersAction):
|
216 |
parser = subparsers.add_parser(cls.COMMAND, help="Visualize selected entries")
|
217 |
cls.add_arguments(parser)
|
218 |
parser.set_defaults(func=cls.execute)
|
219 |
|
220 |
@classmethod
|
221 |
+
def add_arguments(cls: type, parser: argparse.ArgumentParser):
|
222 |
super(ShowAction, cls).add_arguments(parser)
|
223 |
parser.add_argument(
|
224 |
"visualizations",
|
|
|
257 |
|
258 |
@classmethod
|
259 |
def setup_config(
|
260 |
+
cls: type, config_fpath: str, model_fpath: str, args: argparse.Namespace, opts: List[str]
|
261 |
):
|
262 |
opts.append("MODEL.ROI_HEADS.SCORE_THRESH_TEST")
|
263 |
opts.append(str(args.min_score))
|
|
|
269 |
|
270 |
@classmethod
|
271 |
def execute_on_outputs(
|
272 |
+
cls: type, context: Dict[str, Any], entry: Dict[str, Any], outputs: Instances
|
273 |
):
|
274 |
import cv2
|
275 |
import numpy as np
|
|
|
276 |
visualizer = context["visualizer"]
|
277 |
extractor = context["extractor"]
|
278 |
+
# image_fpath = entry["file_name"]
|
279 |
+
# logger.info(f"Processing {image_fpath}")
|
280 |
image = cv2.cvtColor(entry["image"], cv2.COLOR_BGR2GRAY)
|
281 |
image = np.tile(image[:, :, np.newaxis], [1, 1, 3])
|
282 |
data = extractor(outputs)
|
283 |
image_vis = visualizer.visualize(image, data)
|
284 |
+
|
285 |
+
return image_vis
|
286 |
entry_idx = context["entry_idx"] + 1
|
287 |
+
out_fname = './image-densepose/' + image_fpath.split('/')[-1]
|
288 |
+
out_dir = './image-densepose'
|
289 |
out_dir = os.path.dirname(out_fname)
|
290 |
if len(out_dir) > 0 and not os.path.exists(out_dir):
|
291 |
os.makedirs(out_dir)
|
|
|
294 |
context["entry_idx"] += 1
|
295 |
|
296 |
@classmethod
|
297 |
+
def postexecute(cls: type, context: Dict[str, Any]):
|
298 |
pass
|
299 |
+
# python ./apply_net.py show ./configs/densepose_rcnn_R_50_FPN_s1x.yaml https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_s1x/165712039/model_final_162be9.pkl /home/alin0222/DressCode/upper_body/images dp_segm -v --opts MODEL.DEVICE cpu
|
300 |
|
301 |
@classmethod
|
302 |
+
def _get_out_fname(cls: type, entry_idx: int, fname_base: str):
|
303 |
base, ext = os.path.splitext(fname_base)
|
304 |
return base + ".{0:04d}".format(entry_idx) + ext
|
305 |
|
306 |
@classmethod
|
307 |
+
def create_context(cls: type, args: argparse.Namespace, cfg: CfgNode) -> Dict[str, Any]:
|
308 |
vis_specs = args.visualizations.split(",")
|
309 |
visualizers = []
|
310 |
extractors = []
|
|
|
330 |
return context
|
331 |
|
332 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
333 |
def create_argument_parser() -> argparse.ArgumentParser:
|
334 |
parser = argparse.ArgumentParser(
|
335 |
description=DOC,
|
|
|
345 |
def main():
|
346 |
parser = create_argument_parser()
|
347 |
args = parser.parse_args()
|
348 |
+
verbosity = getattr(args, "verbosity", None)
|
349 |
global logger
|
350 |
logger = setup_logger(name=LOGGER_NAME)
|
351 |
logger.setLevel(verbosity_to_level(verbosity))
|
|
|
354 |
|
355 |
if __name__ == "__main__":
|
356 |
main()
|
357 |
+
|
358 |
+
|
359 |
+
# python ./apply_net.py show ./configs/densepose_rcnn_R_50_FPN_s1x.yaml https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_s1x/165712039/model_final_162be9.pkl /home/alin0222/Dresscode/dresses/humanonly dp_segm -v --opts MODEL.DEVICE cuda
|
densepose
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
preprocess/detectron2/projects/DensePose/densepose/
|
|
|
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/__init__.py
RENAMED
@@ -1,6 +1,4 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
-
|
3 |
-
# pyre-unsafe
|
4 |
from .data.datasets import builtin # just to register data
|
5 |
from .converters import builtin as builtin_converters # register converters
|
6 |
from .config import (
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
|
2 |
from .data.datasets import builtin # just to register data
|
3 |
from .converters import builtin as builtin_converters # register converters
|
4 |
from .config import (
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/config.py
RENAMED
File without changes
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/__init__.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .hflip import HFlipConverter
|
6 |
from .to_mask import ToMaskConverter
|
7 |
from .to_chart_result import ToChartResultConverter, ToChartResultConverterWithConfidences
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from .hflip import HFlipConverter
|
4 |
from .to_mask import ToMaskConverter
|
5 |
from .to_chart_result import ToChartResultConverter, ToChartResultConverterWithConfidences
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/base.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Any, Tuple, Type
|
6 |
import torch
|
7 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Any, Tuple, Type
|
4 |
import torch
|
5 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/builtin.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from ..structures import DensePoseChartPredictorOutput, DensePoseEmbeddingPredictorOutput
|
6 |
from . import (
|
7 |
HFlipConverter,
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from ..structures import DensePoseChartPredictorOutput, DensePoseEmbeddingPredictorOutput
|
4 |
from . import (
|
5 |
HFlipConverter,
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/chart_output_hflip.py
RENAMED
@@ -1,6 +1,4 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
-
|
3 |
-
# pyre-unsafe
|
4 |
from dataclasses import fields
|
5 |
import torch
|
6 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
|
2 |
from dataclasses import fields
|
3 |
import torch
|
4 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/chart_output_to_chart_result.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Dict
|
6 |
import torch
|
7 |
from torch.nn import functional as F
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Dict
|
4 |
import torch
|
5 |
from torch.nn import functional as F
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/hflip.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Any
|
6 |
|
7 |
from .base import BaseConverter
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Any
|
4 |
|
5 |
from .base import BaseConverter
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/segm_to_mask.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Any
|
6 |
import torch
|
7 |
from torch.nn import functional as F
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Any
|
4 |
import torch
|
5 |
from torch.nn import functional as F
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/to_chart_result.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Any
|
6 |
|
7 |
from detectron2.structures import Boxes
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Any
|
4 |
|
5 |
from detectron2.structures import Boxes
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/converters/to_mask.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Any, Tuple
|
6 |
|
7 |
from detectron2.structures import BitMasks, Boxes
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Any, Tuple
|
4 |
|
5 |
from detectron2.structures import BitMasks, Boxes
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/__init__.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .meshes import builtin
|
6 |
from .build import (
|
7 |
build_detection_test_loader,
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from .meshes import builtin
|
4 |
from .build import (
|
5 |
build_detection_test_loader,
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/build.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import itertools
|
6 |
import logging
|
7 |
import numpy as np
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import itertools
|
4 |
import logging
|
5 |
import numpy as np
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/combined_loader.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import random
|
6 |
from collections import deque
|
7 |
from typing import Any, Collection, Deque, Iterable, Iterator, List, Sequence
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import random
|
4 |
from collections import deque
|
5 |
from typing import Any, Collection, Deque, Iterable, Iterator, List, Sequence
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/dataset_mapper.py
RENAMED
@@ -1,8 +1,6 @@
|
|
1 |
# -*- coding: utf-8 -*-
|
2 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
3 |
|
4 |
-
# pyre-unsafe
|
5 |
-
|
6 |
import copy
|
7 |
import logging
|
8 |
from typing import Any, Dict, List, Tuple
|
|
|
1 |
# -*- coding: utf-8 -*-
|
2 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
3 |
|
|
|
|
|
4 |
import copy
|
5 |
import logging
|
6 |
from typing import Any, Dict, List, Tuple
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/__init__.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from . import builtin # ensure the builtin datasets are registered
|
6 |
|
7 |
__all__ = [k for k in globals().keys() if "builtin" not in k and not k.startswith("_")]
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from . import builtin # ensure the builtin datasets are registered
|
4 |
|
5 |
__all__ = [k for k in globals().keys() if "builtin" not in k and not k.startswith("_")]
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/builtin.py
RENAMED
@@ -1,6 +1,4 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
-
|
3 |
-
# pyre-unsafe
|
4 |
from .chimpnsee import register_dataset as register_chimpnsee_dataset
|
5 |
from .coco import BASE_DATASETS as BASE_COCO_DATASETS
|
6 |
from .coco import DATASETS as COCO_DATASETS
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
|
2 |
from .chimpnsee import register_dataset as register_chimpnsee_dataset
|
3 |
from .coco import BASE_DATASETS as BASE_COCO_DATASETS
|
4 |
from .coco import DATASETS as COCO_DATASETS
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/chimpnsee.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Optional
|
6 |
|
7 |
from detectron2.data import DatasetCatalog, MetadataCatalog
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Optional
|
4 |
|
5 |
from detectron2.data import DatasetCatalog, MetadataCatalog
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/coco.py
RENAMED
@@ -1,6 +1,4 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
-
|
3 |
-
# pyre-unsafe
|
4 |
import contextlib
|
5 |
import io
|
6 |
import logging
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
|
2 |
import contextlib
|
3 |
import io
|
4 |
import logging
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/dataset_type.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from enum import Enum
|
6 |
|
7 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from enum import Enum
|
4 |
|
5 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/datasets/lvis.py
RENAMED
@@ -1,6 +1,4 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
-
|
3 |
-
# pyre-unsafe
|
4 |
import logging
|
5 |
import os
|
6 |
from typing import Any, Dict, Iterable, List, Optional
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
|
2 |
import logging
|
3 |
import os
|
4 |
from typing import Any, Dict, Iterable, List, Optional
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/image_list_dataset.py
RENAMED
@@ -1,8 +1,6 @@
|
|
1 |
# -*- coding: utf-8 -*-
|
2 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
3 |
|
4 |
-
# pyre-unsafe
|
5 |
-
|
6 |
import logging
|
7 |
import numpy as np
|
8 |
from typing import Any, Callable, Dict, List, Optional, Union
|
|
|
1 |
# -*- coding: utf-8 -*-
|
2 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
3 |
|
|
|
|
|
4 |
import logging
|
5 |
import numpy as np
|
6 |
from typing import Any, Callable, Dict, List, Optional, Union
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/inference_based_loader.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import random
|
6 |
from typing import Any, Callable, Dict, Iterable, Iterator, List, Optional, Tuple
|
7 |
import torch
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import random
|
4 |
from typing import Any, Callable, Dict, Iterable, Iterator, List, Optional, Tuple
|
5 |
import torch
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/meshes/__init__.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from . import builtin
|
6 |
|
7 |
__all__ = [k for k in globals().keys() if "builtin" not in k and not k.startswith("_")]
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
2 |
|
|
|
|
|
3 |
from . import builtin
|
4 |
|
5 |
__all__ = [k for k in globals().keys() if "builtin" not in k and not k.startswith("_")]
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/meshes/builtin.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .catalog import MeshInfo, register_meshes
|
6 |
|
7 |
DENSEPOSE_MESHES_DIR = "https://dl.fbaipublicfiles.com/densepose/meshes/"
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
2 |
|
|
|
|
|
3 |
from .catalog import MeshInfo, register_meshes
|
4 |
|
5 |
DENSEPOSE_MESHES_DIR = "https://dl.fbaipublicfiles.com/densepose/meshes/"
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/meshes/catalog.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import logging
|
6 |
from collections import UserDict
|
7 |
from dataclasses import dataclass
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
2 |
|
|
|
|
|
3 |
import logging
|
4 |
from collections import UserDict
|
5 |
from dataclasses import dataclass
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/__init__.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .densepose_uniform import DensePoseUniformSampler
|
6 |
from .densepose_confidence_based import DensePoseConfidenceBasedSampler
|
7 |
from .densepose_cse_uniform import DensePoseCSEUniformSampler
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from .densepose_uniform import DensePoseUniformSampler
|
4 |
from .densepose_confidence_based import DensePoseConfidenceBasedSampler
|
5 |
from .densepose_cse_uniform import DensePoseCSEUniformSampler
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_base.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Any, Dict, List, Tuple
|
6 |
import torch
|
7 |
from torch.nn import functional as F
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Any, Dict, List, Tuple
|
4 |
import torch
|
5 |
from torch.nn import functional as F
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_confidence_based.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import random
|
6 |
from typing import Optional, Tuple
|
7 |
import torch
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import random
|
4 |
from typing import Optional, Tuple
|
5 |
import torch
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_cse_base.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from typing import Any, Dict, List, Tuple
|
6 |
import torch
|
7 |
from torch.nn import functional as F
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from typing import Any, Dict, List, Tuple
|
4 |
import torch
|
5 |
from torch.nn import functional as F
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_cse_confidence_based.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import random
|
6 |
from typing import Optional, Tuple
|
7 |
import torch
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import random
|
4 |
from typing import Optional, Tuple
|
5 |
import torch
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_cse_uniform.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .densepose_cse_base import DensePoseCSEBaseSampler
|
6 |
from .densepose_uniform import DensePoseUniformSampler
|
7 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from .densepose_cse_base import DensePoseCSEBaseSampler
|
4 |
from .densepose_uniform import DensePoseUniformSampler
|
5 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/densepose_uniform.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import random
|
6 |
import torch
|
7 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import random
|
4 |
import torch
|
5 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/mask_from_densepose.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from detectron2.structures import BitMasks, Instances
|
6 |
|
7 |
from densepose.converters import ToMaskConverter
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from detectron2.structures import BitMasks, Instances
|
4 |
|
5 |
from densepose.converters import ToMaskConverter
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/samplers/prediction_to_gt.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from dataclasses import dataclass
|
6 |
from typing import Any, Callable, Dict, List, Optional
|
7 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from dataclasses import dataclass
|
4 |
from typing import Any, Callable, Dict, List, Optional
|
5 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/transform/__init__.py
RENAMED
@@ -1,5 +1,3 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .image import ImageResizeTransform
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from .image import ImageResizeTransform
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/transform/image.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import torch
|
6 |
|
7 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import torch
|
4 |
|
5 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/utils.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import os
|
6 |
from typing import Dict, Optional
|
7 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import os
|
4 |
from typing import Dict, Optional
|
5 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/video/__init__.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .frame_selector import (
|
6 |
FrameSelectionStrategy,
|
7 |
RandomKFramesSelector,
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from .frame_selector import (
|
4 |
FrameSelectionStrategy,
|
5 |
RandomKFramesSelector,
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/video/frame_selector.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import random
|
6 |
from collections.abc import Callable
|
7 |
from enum import Enum
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
import random
|
4 |
from collections.abc import Callable
|
5 |
from enum import Enum
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/data/video/video_keyframe_dataset.py
RENAMED
@@ -1,8 +1,6 @@
|
|
1 |
# -*- coding: utf-8 -*-
|
2 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
3 |
|
4 |
-
# pyre-unsafe
|
5 |
-
|
6 |
import csv
|
7 |
import logging
|
8 |
import numpy as np
|
|
|
1 |
# -*- coding: utf-8 -*-
|
2 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
3 |
|
|
|
|
|
4 |
import csv
|
5 |
import logging
|
6 |
import numpy as np
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/engine/__init__.py
RENAMED
@@ -1,5 +1,3 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .trainer import Trainer
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from .trainer import Trainer
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/engine/trainer.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
import logging
|
6 |
import os
|
7 |
from collections import OrderedDict
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
2 |
|
|
|
|
|
3 |
import logging
|
4 |
import os
|
5 |
from collections import OrderedDict
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/evaluation/__init__.py
RENAMED
@@ -1,5 +1,3 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from .evaluator import DensePoseCOCOEvaluator
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from .evaluator import DensePoseCOCOEvaluator
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/evaluation/d2_evaluator_adapter.py
RENAMED
@@ -1,7 +1,5 @@
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
3 |
-
# pyre-unsafe
|
4 |
-
|
5 |
from detectron2.data.catalog import Metadata
|
6 |
from detectron2.evaluation import COCOEvaluator
|
7 |
|
|
|
1 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
2 |
|
|
|
|
|
3 |
from detectron2.data.catalog import Metadata
|
4 |
from detectron2.evaluation import COCOEvaluator
|
5 |
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/evaluation/densepose_coco_evaluation.py
RENAMED
@@ -5,8 +5,6 @@
|
|
5 |
# LICENSE file in the root directory of this source tree.
|
6 |
# This is a modified version of cocoeval.py where we also have the densepose evaluation.
|
7 |
|
8 |
-
# pyre-unsafe
|
9 |
-
|
10 |
__author__ = "tsungyi"
|
11 |
|
12 |
import copy
|
@@ -18,7 +16,6 @@ import time
|
|
18 |
from collections import defaultdict
|
19 |
from enum import Enum
|
20 |
from typing import Any, Dict, Tuple
|
21 |
-
# pyre-fixme[21]: Could not find module `scipy.spatial.distance`.
|
22 |
import scipy.spatial.distance as ssd
|
23 |
import torch
|
24 |
import torch.nn.functional as F
|
|
|
5 |
# LICENSE file in the root directory of this source tree.
|
6 |
# This is a modified version of cocoeval.py where we also have the densepose evaluation.
|
7 |
|
|
|
|
|
8 |
__author__ = "tsungyi"
|
9 |
|
10 |
import copy
|
|
|
16 |
from collections import defaultdict
|
17 |
from enum import Enum
|
18 |
from typing import Any, Dict, Tuple
|
|
|
19 |
import scipy.spatial.distance as ssd
|
20 |
import torch
|
21 |
import torch.nn.functional as F
|
{preprocess/detectron2/projects/DensePose/densepose β densepose}/evaluation/evaluator.py
RENAMED
@@ -1,8 +1,6 @@
|
|
1 |
# -*- coding: utf-8 -*-
|
2 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
3 |
|
4 |
-
# pyre-unsafe
|
5 |
-
|
6 |
import contextlib
|
7 |
import copy
|
8 |
import io
|
|
|
1 |
# -*- coding: utf-8 -*-
|
2 |
# Copyright (c) Facebook, Inc. and its affiliates.
|
3 |
|
|
|
|
|
4 |
import contextlib
|
5 |
import copy
|
6 |
import io
|