Defining The Network
Implementing the forward pass of the network
-network의 forward pass: nn.Module
의forward
메소드 사용
- forward의 역할(1): output 계산
- forward의 역할(2): output detection map을 처리하기 쉽게 transform
forward
의 인자 3개: self
, x
, CUDA
Convolutional and Upsample Layers
Route Layer / Shortcut Layer
YOLO (Detection Layer)
-YOLO의 output: BB의 attribute를 포함하는 convolutional feature map
-predict_transform 함수를 통해 구현한다.
- predict_transform: util.py에 위치
-먼저 util.py의 import구문을 위한 cv2라이브러리 다운받기
- pip install opencv-python
- pip install opencv-contrib-python
- predict_transform 함수
- parameter 5개: prediction(output),inp_dim(input image dimension),anchors,num_classes,CUDA flag
- detection feature map을 받아 2D tensor로 바꾼다
- tensor의 각 row가 BB의 attribute
Detection Layer Revisited
-3개 scale의 detection map을 하나의 tensor로 concatenate
Testing the forward pass
-image를 YOLOv3폴더에 저장
-에러 발생: RuntimeError: shape '[1, 255, 3025]' is invalid for input of size 689520
Downloading the Pre-trained Weights
-yolov3.weights를 다운받아 YOLOv3폴더 안에 위치시키기
Understanding the Weights File
-yolov3.weights: weights를 순차적으로 저장한 binary file
-weights 형식
- float
- 어떤 숫자가 어떤 layer의 것인지 명시되어 있지 않음
-weight 이해하기
- 두 layer중 하나에 속함: batch norm layer / convolutional layer
- order: configuration file의 order와 같음
Loading Weights
-에러 발생: AttributeError: 'Darknet' object has no attribute 'load_weights'
- 에러 원인: 내가 load_weights 함수를 Darknet class에 넣지 않고 아예 바깥에 작성했음. 그러니 당연히 model.load_weights가 작동이 안 될 수밖에.
- 에러 해결: load_weights 함수를 Darknet class안에 넣는다.