| | |
| | | if (count > num_boxes) count = num_boxes; |
| | | float x, y, w, h; |
| | | int id; |
| | | int sub = 0; |
| | | |
| | | for (i = 0; i < count; ++i) { |
| | | x = boxes[i].x; |
| | |
| | | sprintf(buff, "echo %s \"Wrong annotation: class_id = %d. But class_id should be [from 0 to %d]\" >> bad_label.list", labelpath, id, classes); |
| | | system(buff); |
| | | getchar(); |
| | | ++sub; |
| | | continue; |
| | | } |
| | | if ((w < lowest_w || h < lowest_h)) { |
| | | //sprintf(buff, "echo %s \"Very small object: w < lowest_w OR h < lowest_h\" >> bad_label.list", labelpath); |
| | | //system(buff); |
| | | ++sub; |
| | | continue; |
| | | } |
| | | if (x == 999999 || y == 999999) { |
| | | printf("\n Wrong annotation: x = 0, y = 0 \n"); |
| | | sprintf(buff, "echo %s \"Wrong annotation: x = 0 or y = 0\" >> bad_label.list", labelpath); |
| | | system(buff); |
| | | ++sub; |
| | | continue; |
| | | } |
| | | if (x <= 0 || x > 1 || y <= 0 || y > 1) { |
| | | printf("\n Wrong annotation: x = %f, y = %f \n", x, y); |
| | | sprintf(buff, "echo %s \"Wrong annotation: x = %f, y = %f\" >> bad_label.list", labelpath, x, y); |
| | | system(buff); |
| | | ++sub; |
| | | continue; |
| | | } |
| | | if (w > 1) { |
| | |
| | | if (x == 0) x += lowest_w; |
| | | if (y == 0) y += lowest_h; |
| | | |
| | | truth[i*5+0] = x; |
| | | truth[i*5+1] = y; |
| | | truth[i*5+2] = w; |
| | | truth[i*5+3] = h; |
| | | truth[i*5+4] = id; |
| | | truth[(i-sub)*5+0] = x; |
| | | truth[(i-sub)*5+1] = y; |
| | | truth[(i-sub)*5+2] = w; |
| | | truth[(i-sub)*5+3] = h; |
| | | truth[(i-sub)*5+4] = id; |
| | | } |
| | | free(boxes); |
| | | } |
| | |
| | | |
| | | image ai = image_data_augmentation(src, w, h, pleft, ptop, swidth, sheight, flip, jitter, dhue, dsat, dexp); |
| | | d.X.vals[i] = ai.data; |
| | | |
| | | |
| | | //show_image(ai, "aug"); |
| | | //cvWaitKey(0); |
| | | |
| | |
| | | class_id = hier->parent[class_id]; |
| | | } |
| | | *avg_cat += pred; |
| | | } else { |
| | | } else { |
| | | // Focal loss |
| | | if (focal_loss) { |
| | | // Focal Loss |
| | | float alpha = 0.5; // 0.25 or 0.5 |
| | | //float gamma = 2; // hardcoded in many places of the grad-formula |
| | | //float gamma = 2; // hardcoded in many places of the grad-formula |
| | | |
| | | int ti = index + class_id; |
| | | float pt = output[ti] + 0.000000000000001F; |
| | | // http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiItKDEteCkqKDIqeCpsb2coeCkreC0xKSIsImNvbG9yIjoiIzAwMDAwMCJ9LHsidHlwZSI6MTAwMH1d |
| | | float grad = -(1 - pt) * (2 * pt*logf(pt) + pt - 1); // http://blog.csdn.net/linmingan/article/details/77885832 |
| | | float grad = -(1 - pt) * (2 * pt*logf(pt) + pt - 1); // http://blog.csdn.net/linmingan/article/details/77885832 |
| | | //float grad = (1 - pt) * (2 * pt*logf(pt) + pt - 1); // https://github.com/unsky/focal-loss |
| | | |
| | | for (n = 0; n < classes; ++n) { |
| | |
| | | int onlyclass_id = 0; |
| | | for(t = 0; t < l.max_boxes; ++t){ |
| | | box truth = float_to_box(state.truth + t*5 + b*l.truths); |
| | | if(!truth.x) break; |
| | | if(!truth.x) break; // continue; |
| | | int class_id = state.truth[t*5 + b*l.truths + 4]; |
| | | float maxp = 0; |
| | | int maxi = 0; |
| | |
| | | box truth = float_to_box(state.truth + t*5 + b*l.truths); |
| | | int class_id = state.truth[t * 5 + b*l.truths + 4]; |
| | | if (class_id >= l.classes) continue; // if label contains class_id more than number of classes in the cfg-file |
| | | if(!truth.x) break; |
| | | if(!truth.x) break; // continue; |
| | | float iou = box_iou(pred, truth); |
| | | if (iou > best_iou) { |
| | | best_class_id = state.truth[t*5 + b*l.truths + 4]; |
| | |
| | | continue; // if label contains class_id more than number of classes in the cfg-file |
| | | } |
| | | |
| | | if(!truth.x) break; |
| | | if(!truth.x) break; // continue; |
| | | float best_iou = 0; |
| | | int best_index = 0; |
| | | int best_n = 0; |
| | |
| | | if (focal_loss) { |
| | | // Focal Loss |
| | | float alpha = 0.5; // 0.25 or 0.5 |
| | | //float gamma = 2; // hardcoded in many places of the grad-formula |
| | | //float gamma = 2; // hardcoded in many places of the grad-formula |
| | | |
| | | int ti = index + stride*class_id; |
| | | float pt = output[ti] + 0.000000000000001F; |
| | | // http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiItKDEteCkqKDIqeCpsb2coeCkreC0xKSIsImNvbG9yIjoiIzAwMDAwMCJ9LHsidHlwZSI6MTAwMH1d |
| | | float grad = -(1 - pt) * (2 * pt*logf(pt) + pt - 1); // http://blog.csdn.net/linmingan/article/details/77885832 |
| | | float grad = -(1 - pt) * (2 * pt*logf(pt) + pt - 1); // http://blog.csdn.net/linmingan/article/details/77885832 |
| | | //float grad = (1 - pt) * (2 * pt*logf(pt) + pt - 1); // https://github.com/unsky/focal-loss |
| | | |
| | | for (n = 0; n < classes; ++n) { |
| | |
| | | getchar(); |
| | | continue; // if label contains class_id more than number of classes in the cfg-file |
| | | } |
| | | if(!truth.x) break; |
| | | if(!truth.x) break; // continue; |
| | | float iou = box_iou(pred, truth); |
| | | if (iou > best_iou) { |
| | | best_iou = iou; |
| | |
| | | int class_id = state.truth[t*(4 + 1) + b*l.truths + 4]; |
| | | if (class_id >= l.classes) continue; // if label contains class_id more than number of classes in the cfg-file |
| | | |
| | | if(!truth.x) break; |
| | | if(!truth.x) break; // continue; |
| | | float best_iou = 0; |
| | | int best_n = 0; |
| | | i = (truth.x * l.w); |
| | |
| | | } |
| | | for (i = 0; i < n; ++i){ |
| | | box b = dets[i].bbox; |
| | | b.x = (b.x - (netw - new_w)/2./netw) / ((float)new_w/netw); |
| | | b.y = (b.y - (neth - new_h)/2./neth) / ((float)new_h/neth); |
| | | b.x = (b.x - (netw - new_w)/2./netw) / ((float)new_w/netw); |
| | | b.y = (b.y - (neth - new_h)/2./neth) / ((float)new_h/neth); |
| | | b.w *= (float)netw/new_w; |
| | | b.h *= (float)neth/new_h; |
| | | if(!relative){ |