YOLO 초학, 주로 YOLO 코드에 대한 이해
하지만 논문을 쓴 것도 잘 못 본 것 같아요.전체적인 흐름을 너무 잘 파악하는 것은 아니다.
코드:이것은 이쪽에서 설명한 것으로 간단하게 썼지만 결과가 틀린 것 같습니다.https://github.com/18150167970/pytorch-yolov3-modifiy?tdsourcetag=s_pctim_aiomsg이것은 비교적 어렵다.https://github.com/DeNA/PyTorch_YOLOv3
앞에 데이터를 불러옵니다. 잠시 데이터에 대해 잘 모르기 때문에 먼저 보지 않고 주로 네트워크 구조를 봅니다.
model = Darknet(opt.model_config_path)
–》
self.hyperparams, self.module_list = create_modules(self.module defs) # 모델 생성
–》
moduledef[“type”] != "yolo": 자신의 규칙에 따라 세우면 여기**어렵지 않아요.
module_def[“type”] == “yolo”
yolo_layer = YOLOLayer(anchors, num_classes, img_height)
앞의 몇 줄 코드는 설정 매개 변수입니다.
anchors는 모두 9개의 상자로 분류된 결과입니다.상기 YOLO3 블로그의 테두리 그림에서 왜 매번 세 개의 크기가 다른지 알 수 있다.
그리고class YOLOlayer(nn.Module)에 가보세요. 이것은 우리가 중점적으로 설명하고 싶은 것입니다.
self.bbox_attrs = 5 + num_classes# 처음 5는 좌표와 높이 상자, 그리고 배경입니다.다음은 카테고리입니다.그래서 총 문장은 85입니다.
nA = self.num_anchors # 3 nB = x.size (0) # batchsize nG = x.size (2) # 13 26 52 대응
prediction = x.view(nB, nA, self.bbox_attrs, nG, nG).permute( 0, 1, 3, 4, 2).contiguous () # 네트워크 출력 결과 제거, x.shape: (1, 255, 13, 13) – (1, 3, 13, 13, 85)
x = torch.sigmoid(prediction[…, 0]) # Center x (1,3,13,13) y = torch.sigmoid(prediction[…, 1]) # Center y w = prediction[…, 2] # Width h = prediction[…, 3] # Height pred_conf = torch.sigmoid(prediction[..., 4]) # bbox의 신뢰도
처음 5개 비범주, 마지막 80은 범주predcls = torch.sigmoid(prediction[..., 5:]) # 범주별 확률
grid_x = torch.arange(nG).repeat(nG, 1).view( [1, 1, nG, nG]).type(FloatTensor) # 다섯 셀의 왼쪽 상단 좌표 x, 가로 방향과 세로 방향이 같음gridy = torch.arange(nG).repeat(nG, 1).t().view( [1, 1, nG, nG]).type(FloatTensor) # 다섯 셀의 왼쪽 상단 좌표 x, 가로 방향이 같고 세로 방향이 하나입니다.
pred_boxes[…, 0] = x.data + grid_x pred_boxes[…, 1] = y.data + grid_y
각 픽셀의 오프셋
중점 부분 진입: 진가 그래프 찾기
nGT, nCorrect, mask, conf_mask, tx, ty, tw, th, tconf, tcls = build_targets( pred_boxes=pred_boxes.cpu().data, pred_conf=pred_conf.cpu().data, pred_cls=pred_cls.cpu().data, target=targets.cpu().data, anchors=scaled_anchors.cpu().data, num_anchors=nA, num_classes=self.num_classes, grid_size=nG, ignore_thres=self.ignore_thres, img_dim=self.image_dim, )
nGT = 0#진수 총수 nCorrect = 0#분대 총수
gt_box = torch.FloatTensor(np.array([0, 0, gw, gh])).unsqueeze(0)#torch.Size([1, 4])
# Get shape of anchor box
anchor_shapes = torch.FloatTensor(np.concatenate( (np.zeros((len(anchors), 2)), np.array(anchors)), 1))#torch.Size([3, 4])
anch_ious = bbox_iou(gt box, anchor shapes) # 클러스터의 고폭 및 진가 고폭 IOU
best_n = np.argmax(anch ious) # IOU가 가장 큰
pred_box = pred_boxes[b, best_n, gj, gi].unsqueeze(0) # Masks, 최고 중첩률을 찾을 수 있는 예측 창 mask[b, best n, gj,gi] = 1 confmask[b, best_n, gj, gi] = 1
iou = bbox_iou(gt_box, pred_box, x1y1x2y2=False) pred_label = torch.argmax(pred_cls[b, best_n, gj, gi]) score = pred_conf[b, best_n, gj, gi] if iou > 0.5 and pred_label == target_label and score > 0.5:n Correct += 1 # 리콜율 및 정확도 계산에 사용
그리고 손실을 계산할 수 있습니다.저자 guan394077759http://siligence.ai/column/index.php?page=1
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.