콘다 가상환경을 만들고 실행시킵니다.
conda create -n mmsemantic python=3.7 -y
conda activate mmsemantic
공식 지침에 따라 PyTorch와 torchvision을 설치하십시오 . 여기서는 PyTorch 1.6.0 및 CUDA 10.1을 사용합니다. 버전 번호를 지정하여 다른 버전으로 전환할 수도 있습니다.
- 저는 open-mmlab : MMSegmentation README.md에 따라 해당 버전 그대로 사용해서 진행해보겠습니다.
- conda install pytorch=1.6.0 torchvision cudatoolkit=10.1 -c pytorch
MMCV를 다음과 같은 공식 지침에 따라 설치합니다.
- mmcv 또는 mmcv-full 둘 중 하나를 설치합니다. mmcv는 MMSegmentation과 호환되지만 CCNet 및 PSANet과 같은 방법의 경우 CUDA 연산을 위해 mmcv-full이 필요합니다.
- 리눅스는 다음과 같이 설치합니다.
- pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html
MMSegmentation을 설치합니다.
pip install mmsegmentation
데이터세트 경로를 연결합니다.
ln -s $DATA_ROOT <링크>
)설치가 정상적으로 이루어졌는지 데모 코드를 통해 확인해보도록 합시다.
해당 깃허브를 클론해옵니다.
mkdir mmseg
cd mmseg
git clone https://github.com/open-mmlab/mmsegmentation.git .
inference_demo.ipynb를 실행하기 위해 주피터 노트북을 설치해줍니다.
conda install jupyter -y
jupyter-notebook
inference_demo.ipynb에서 사용해보고자 하는 모델과 해당 모델의 config파일을 수정해서 확인해봅시다.
video_demo.py를 만들어 비디오에 대한 추론을 실험해보고 싶은데 ec2로 접속했기 때문에 디스플레이에 띄울 방법이 필요합니다.
vncserver :1
, 종료방법은 vncserver kill :1
입니다. 본인이 까먹을까봐 적어둡니다.import argparse
import cv2
import mmcv
from mmseg.apis import inference_segmentor, init_segmentor
def parse_args():
parser = argparse.ArgumentParser(description='MMDetection video demo')
parser.add_argument('video', help='Video file')
parser.add_argument('config', help='Config file')
parser.add_argument('checkpoint', help='Checkpoint file')
parser.add_argument(
'--device', default='cuda:0', help='Device used for inference')
parser.add_argument(
'--score-thr', type=float, default=0.7, help='Bbox score threshold')
parser.add_argument('--out', type=str, help='Output video file')
parser.add_argument('--show', action='store_true', help='Show video')
parser.add_argument(
'--wait-time',
type=float,
default=1,
help='The interval of show (s), 0 is block')
args = parser.parse_args()
return args
def main():
args = parse_args()
assert args.out or args.show, \
('Please specify at least one operation (save/show the '
'video) with the argument "--out" or "--show"')
model = init_segmentor(args.config, args.checkpoint, device=args.device)
video_reader = mmcv.VideoReader(args.video)
video_writer = None
if args.out:
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter(
args.out, fourcc, video_reader.fps,
(video_reader.width, video_reader.height))
for frame in mmcv.track_iter_progress(video_reader):
result = inference_segmentor(model, frame)
frame = model.show_result(frame, result)
#frame = model.show_result(frame, result, score_thr=args.score_thr)
if args.show:
cv2.namedWindow('video', 0)
mmcv.imshow(frame, 'video', args.wait_time)
if args.out:
video_writer.write(frame)
if video_writer:
video_writer.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
```
- `python video_demo.py "./demo_video/video_20s_cut.mp4" ../configs/hrnet/fcn_hr48_512x1024_160k_cityscapes.py ../checkpoints/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth --out="hrnet_fcn_20s.mp4"`
MMSegmentation을 활용한 학습 방법은 차후 수정해 포스팅하겠습니다.
안녕하세요 하람님
포스트글 보고 많이 배워갑니다 ㅎㅎ
혹시 mmsegmentation 데이터셋 구성 및 학습방법은
언제 업로드 되는지 알 수 있을까요?