이 기사에서는 최신 버전의 SMOKE(환경의 주요 라이브러리 버전: pytorch 1.12.0, CUDA 11.3, cudnn 8.3.2, python 3.7, DCNv2)의 환경 구성 및 모델 교육을 공유합니다.
목차
1. Docker는 Nvidia 이미지를 얻습니다.
이미지를 로컬로 가져옵니다: 11.3.1-cudnn8-devel-ubuntu20.04
docker pull nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04
이미지를 가져온 후 docker Images 명령을 사용하여 이미지 상태를 확인합니다.
docker images
nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 이미지가 로컬이고 이미지 크기가 8.95G임을 확인할 수 있습니다.
이미지 열기(일반 모드-GPU 사용 지원)
docker run -i -t --gpus all nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 /bin/bash
이미지 열기(고급 모드 - GPU 사용, 디렉터리 매핑 및 메모리 설정 지원)
docker run -i -t -v /home/liguopu/:/guopu:rw --gpus all --shm-size 16G nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 /bin/bash
일반적으로 Docker 환경에 진입한 후 생성되거나 생성된 파일은 Docker 환경을 종료한 후 "자동으로 파기"되거나, 로컬 호스트에서 프로그램을 실행하려는 경우 Docker 환경에서 찾을 수 없는 경우가 발생합니다.
생성된 파일이 로컬 호스트에 유지되도록 디렉터리를 매핑하여 로컬 호스트의 디렉터리를 Docker 환경에 매핑할 수 있습니다.
-v를 사용하여 로컬 호스트 디렉터리 /home/liguopu/를 docker 환경의 /guopu 디렉터리에 매핑합니다. 해당 권한은 rw이며 이는 읽고 쓸 수 있음을 의미합니다.
내부 매개변수의 기본 할당은 매우 작아서 모델을 학습할 때 충분하지 않습니다. 매개변수를 통해 설정할 수 있습니다. 예를 들어 내 컴퓨터에는 32G 내부 매개변수가 있는데 16G를 Docker에 넣어 사용하고 싶습니다. 다음으로 설정하세요. -shm 크기 16G.
내 블로그를 참조하세요: docker가 Nvidia 이미지를 가져옵니다 | cuda |cudnn_cudnn 미러 스테이션_a little tree x의 블로그-CSDN 블로그
2. 콘다 설치
기본 시스템 이미지에는 conda나 python이 없을 수 있는데, Anaconda를 설치하여 딥러닝 환경을 구축할 수 있습니다.
선택할 수 있는 다운로드 주소는 두 가지, 즉 공식 다운로드 주소와 Tsinghua University 오픈 소스 소프트웨어 미러 스테이션이 있습니다.
공식 다운로드 주소: 무료 다운로드 | Anaconda
공식 주소에서 다운로드하는 것이 느리다고 생각되면 Tsinghua University의 다운로드 주소를 시도해 볼 수 있습니다.
칭화대학교 오픈소스 소프트웨어 미러 스테이션: /anaconda/archive/ 색인 | 칭화대학교 오픈소스 소프트웨어 미러 스테이션 | 칭화 오픈소스 미러
예를 들어 Anaconda3-2023.07-2-Linux-x86_64.sh 를 선택합니다.
Anaconda3 설치
다운로드한 파일의 위치로 이동하여 파일 디렉터리에서 터미널을 열고 bash를 사용하여 설치를 수행합니다.
bash Anaconda3-2023.07-2-Linux-x86_64.sh
설치 과정:
1) Enter 키를 입력하여 설치를 확인합니다.
2) Anaconda 최종 사용자 라이센스 계약을 읽고 Enter를 눌러 정보 검색을 마칩니다.
3) 계약에 동의하는지 물어보십시오. 동의만 할 수 있습니다. yes를 입력하십시오. (라이센스 조건에 동의하십니까? [yes|no])
4) 다음 위치에 설치하라는 메시지가 표시되면 Enter를 눌러 확인합니다. (Anaconda3는 이제 이 위치에 설치됩니다.)
5) 환경 변수를 추가할지 여부는 일반적으로 yes를 선택하는데, 이 선택은 자신의 상황에 따라 다릅니다. 개발을 위해 conda 환경을 자주 사용하는 경우에는 yes를 선택하는 것이 좋습니다. (설치 프로그램이 /home/에서 Anaconda3를 초기화하도록 하시겠습니까? linuxidc/.bashrc? [예 |아니요])
Conda 설치를 완료합니다.
다른 터미널을 사용하여 이 이미지로 생성된 컨테이너를 엽니다.
Conda의 초기 환경이 보이면 Conda가 성공적으로 설치되었음을 의미합니다.
3. SMOKE 환경 만들기
conda 명령으로 생성됨
conda create -n SMOKE python=3.7
로컬에서 코드 다운로드
git clone https://github.com/lzccccc/SMOKE
토치1.12 설치
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch
DCNv2 버전을 최신 torch1.11로 수정하세요. (개인 테스트 가능)
https://github.com/lbin/DCNv2/tree/pytorch_1.11
DCNv2 파일을 다운로드한 후 다음을 수행합니다.
- SMOKE 소스 코드의 smoke/csrc에 있는 모든 파일을 DCNv2/src에 있는 파일로 교체
- smoke/layers/dcn_v2.py 파일을 DCNv2/dcn_v2.py 파일로 교체
교체 후 smoke/layers/dcn_v2.py의 코드를 수정하고 import _ext as _backend를 from smoke import _ext as _backend로 변경합니다.
4. SMOKE 환경 컴파일
cd SMOKE
python setup.py build develop
컴파일 성공 정보
coda list를 사용하여 Smoke 라이브러리가 성공적으로 설치되었는지 확인하십시오.
다른 라이브러리 설치
pip install yacs scikit-image tqdm -i https://mirrors.aliyun.com/pypi/simple/
5. Kitti 3D 타겟 감지 데이터 세트 다운로드
공식 웹사이트 링크: KITTI Vision Benchmark Suite
다운로드해야 하는 파일:
- 객체 데이터 세트의 왼쪽 컬러 이미지 다운로드(12GB) 트레이닝 세트와 테스트 세트를 포함한 사진입니다.
- 객체 데이터 세트의 카메라 교정 행렬 다운로드(16MB) 카메라 교정과 관련된 파일입니다.
- 객체 데이터 세트의 트레이닝 라벨 다운로드(5MB) 이미지 트레이닝 세트에 해당하는 라벨입니다.
- 객체 개발 키트 다운로드(1MB) 모델을 평가하기 위한 코드입니다. 나중에 사용되며 학습 중에는 사용되지 않습니다.
공식 홈페이지에서 이 파일들을 다운로드 받으려면 계정 등록이 필요하고 속도를 위해 tizi가 필요하기 때문에 쉽게 다운로드할 수 있도록 Baidu Cloud Disk에 저장했습니다.
다운로드한 파일은 다음과 같습니다.
6. 데이터 세트 처리
먼저 파일의 압축을 풀고 데이터 세트 폴더에 kitti 폴더를 생성한 후 다음 경로에 저장합니다.
kitti
│──training
│ ├──calib
│ ├──label_2
│ ├──image_2
│ └──ImageSets
└──testing
├──calib
├──image_2
└──ImageSets
ImageSets 폴더 외에도 다른 모든 것이 여기에 있습니다. ImageSets는 주로 교육이나 테스트 중에 사용되는 파일을 저장하고 파일 이름을 지정합니다.
예를 들어, 다음 내용으로 kitti/training/ImageSets/ 디렉터리에 trainval.txt 파일을 만듭니다.
000000
000001
000002
...
007479
007480
그렇다면 이 trainval.txt를 생성하는 방법은 무엇입니까? 작은 Python 프로그램을 작성하고 이 프로그램을 xxxx/SMOKE-master/datasets/kitti/training/ 아래에 배치하고 실행하십시오.
예를 들어 이름을 create_imagesets_trainval_sort.py로 지정합니다.
코드는 아래와 같이 표시됩니다.
'''
文件路径:
xxxx/SMOKE-master/datasets/kitti/training/
'''
import os
# 获取文件夹下的所有文件名称,并排序
files = os.listdir("./image_2")
files.sort()
# 创建/打开一个txt文件
save_txt = open("./ImageSets/trainval.txt", 'w')
# 遍历列表,逐一获取文件名
for file in files:
print("file:", file)
file_name = file.split(".")[0]
save_txt.write(file_name)
save_txt.write("\n")
예를 들어, 다음 내용으로 kitti/training/ImageSets/ 디렉터리에 test.txt 파일을 만듭니다.
000000
000001
000002
...
007516
007517
따라서 이 test.txt를 생성하는 방법은 작은 Python 프로그램을 작성하고 이 프로그램을 xxxx/SMOKE-master/datasets/kitti/testing/ 아래에 두고 실행하는 것입니다.
'''
文件路径:
xxxx/SMOKE-master/datasets/kitti/testing/
'''
import os
# 获取文件夹下的所有文件名称,并排序
files = os.listdir("./image_2")
files.sort()
# 创建/打开一个txt文件
save_txt = open("./ImageSets/test.txt", 'w')
# 遍历列表,逐一获取文件名
for file in files:
print("file:", file)
file_name = file.split(".")[0]
save_txt.write(file_name)
save_txt.write("\n")
7. 훈련 시작
먼저 교육 구성 파일인 configs/smoke_gn_Vector.yaml을 살펴보세요.
MODEL:
WEIGHT: "catalog://ImageNetPretrained/DLA34"
INPUT:
FLIP_PROB_TRAIN: 0.5
SHIFT_SCALE_PROB_TRAIN: 0.3
DATASETS:
DETECT_CLASSES: ("Car", "Cyclist", "Pedestrian")
TRAIN: ("kitti_train",)
TEST: ("kitti_test",)
TRAIN_SPLIT: "trainval"
TEST_SPLIT: "test"
SOLVER:
BASE_LR: 2.5e-4
STEPS: (10000, 18000)
MAX_ITERATION: 25000
IMS_PER_BATCH: 32
MAX_ITERATION, 여기 공식 웹사이트의 훈련 라운드 수는 25,000회로 상당히 과장되어 수정될 수 있습니다.
IMS_PER_BATCH, 배치 크기는 32이고 비디오 메모리는 그다지 크지 않으므로 더 작게 변경할 수 있습니다.
STEPS는 모델의 가중치를 저장할 때 훈련 과정에서 수행되는 라운드 수를 의미하며, 기본값은 10,000 라운드, 18,000 라운드이며 사용자가 직접 수정할 수 있습니다.
그 외는 업무 상황에 따라 수정될 수 있습니다.
단일 GPU 훈련을 위한 명령은 다음과 같습니다.
python tools/plain_train_net.py --config-file "configs/smoke_gn_vector.yaml"
모델이 훈련을 시작하고 정보를 인쇄합니다.
학습 구성 및 모델 구조 인쇄
훈련 중에는 반복 라운드 수, 손실, 학습 속도 변화 등을 포함한 즉각적인 정보가 있습니다.
[2023-09-24 16:15:11,299] smoke.data.datasets.kitti INFO: 7481개 파일이 로드된 KITTI trainval 세트 초기화 중
[2023-09-24 16:15:11,299] smoke.trainer INFO: 훈련 시작
[2023 -09-24 16:15:16,859] smoke.trainer INFO: eta: 0:27:41 iter: 10 loss: 7.9971 (21.7083) hm_loss: 4.5385 (19.3146) reg_loss: 1.4058 (2.3936) time: 0.2013 (0.5557) data : 0.0078 (0.0284) lr: 0.00025000 최대 남성: 4816
[2023-09-24 16:15:18,872] smoke.trainer INFO: eta: 0:18:48 iter: 20 loss: 6.0802 (13.6487) hm_loss: 4.1279 (11.7 072 ) reg_loss: 1.4058 (1.9416) 시간: 0.2011 (0.3786) 데이터: 0.0078 (0.0182) lr: 0.00025000 최대 남성: 4816
[2023-09-24 16:15:20,889] smoke.trainer INFO: eta: 0:15:49 iter: 30 loss: 4.9480 (10.5877) hm_loss: 3.7482 (9.0827) reg_loss: 0.7232 (1.5050) time: 0.2012 (0.319 6 ) 데이터: 0.0079 (0.0148) lr: 0.00025000 최대 남성: 4816
[2023-09-24 16:15:22,904] smoke.trainer INFO: eta: 0:14:18 iter: 40 loss: 4.8069 (9.3238) hm_loss: 3.5018 (7.6436) reg_loss: 0.8950 (1.6802) 시간: 0.2012 (0.2901) 데이터: 0.0080 (0.0131) lr: 0.00025000 최대 남성: 4816 [2023-09-24 16:15:24,921]
smoke.trainer INFO: eta: 0: 13 : 23 ITER : 50 손실 : 4.3501 (8.3160) HM_LOSS : 3.2921 (6.8062) REG_LOSS : 0.6793 (1.5098) 시간 : 0.2011 (0.2724) 데이터 : 0.0080 (0.0121) LR : 0.00025000 MAX MEN : 4816
[2023-09-24 16 : 15 : 26,954] Smoke.Trainer 정보 : ETA : 0:12:47 ITER : 60 손실 : 4.1979 (7.6786) HM_LOSS : 3.2857 (6.2086) REG_LOSS : 0.5120 (1.4699) 시간 : 0.2609 ) 데이터: 0.0080 (0.0114) lr: 0.00025000 최대 남성: 4816
[2023-09-24 16:15:28,982] smoke.trainer INFO: eta: 0:12:20 iter: 70 loss: 4.2102 (7.2046) hm_loss: 3.0555 (5.7704) reg_loss: 0.8590 (1.4341) 시간: 0.2027 (0.2526) 데이터: 0.0080 (0.0109) lr: 0.00025000 최대 남성: 4816 [2023-09-24 16:15:31,048] smoke.trainer
INFO: eta: 0: 12 :00 iter: 80 손실: 4.5890 (6.9815) hm_loss: 2.9401 (5.4155) reg_loss: 1.4550 (1.5660) 시간: 0.2029 (0.2468) 데이터: 0.0080
훈련 완료
훈련 중에 로그 파일, 모델 가중치 등을 저장하기 위해 tools\ 디렉터리에 로그 디렉터리가 생성됩니다.
모델은 총 3000 라운드 동안 학습되었으며 STEPS를 (1000, 2000, 3000)로 변경하여 1000, 2000, 3000 라운드에서 가중치가 저장됩니다.
모델 효과:
공유완료~