<Halcon> 语义分割针对类别不平衡进行设置类别权重

语义分割针对类别不平衡进行设置类别权重

在工业缺陷检测中,经常会遇到瑕疵样本少或瑕疵在全图中占比较小的问题,从而导致类别不平衡,训练出来的模型容易导致漏检或者分割的瑕疵不全/不连续。Halcon在处理这一问题时,对类别进行权重设置来平衡。具体见(calculate_dl_segmentation_class_weights)

get_dict_tuple (DLDataset, 'class_ids', ClassIDs)//获取类别
NumClasses := |ClassIDs|

ClassIDsToClassIdx := gen_tuple_const(max(ClassIDs) + 1,-1)
ClassIDsToClassIdx[ClassIDs] := [0:|ClassIDs| - 1]

ClassAreas := gen_tuple_const(|ClassIDs|,0)//不同类别区域面积初始化

for SampleIndex := 0 to |SampleIndices| - 1 by 1
    read_dl_samples (DLDataset, SampleIndices[SampleIndex], DLSample)//读取一个样本
    get_dict_object (SegmentationImage, DLSample, 'segmentation_image')//读取标注图像
    get_image_type (SegmentationImage, ImageType)//获取图像类型
    if (find(['int1','int2','uint2','byte'],ImageType) == -1)
        convert_image_type (SegmentationImage, SegmentationImage, 'uint2')//转换图像格式
    endif
    gray_histo_abs (SegmentationImage, SegmentationImage, 1, AbsoluteHisto)//灰度直方图
    ClassAreas := ClassAreas + AbsoluteHisto[ClassIDs]//叠加不同类别的区域面积
endfor

ClassAreas[ClassIDsToClassIdx[IgnoreClassIDs]] := 0//针对忽略类别进行处理
TotalArea := sum(ClassAreas)//求和

ClassWeights := gen_tuple_const(|ClassIDs|,0.)//初始化
ValidClasses := find(ClassAreas [!=] 0,1)//找到面积为0的类别
ClassFreq := ClassAreas / real(TotalArea)//求相对比例
ClassWeights[ValidClasses] := 1. / (ClassFreq[ValidClasses] + 0.0001)//求权重
ClassWeights := ClassWeights / min(ClassWeights[ValidClasses])//归一化权重
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值