Chapter 9 Clustering 聚类

Chapter 9 Clustering

9.1 聚类任务

聚类(clustering)是一种研究多、应用广的一种无监督学习(unsupervised learning)算法。将数据集中的样本划分为若干不相交子集,每个子集亦称为‘簇’(cluster)。
样本集含有m个n维的无标记样本:
D = { x 1 , x 2 , . . . , x m } D=\left\{ \boldsymbol{x}_1,\boldsymbol{x}_{2},...,\boldsymbol{x}_m \right\} D={x1,x2,...,xm}
其中 x i = ( x i 1 ; x i 2 ; . . . ; x i n ) \boldsymbol{x}_i=\left( x_{i1};x_{i2};...;x_{in} \right) xi=(xi1;xi2;...;xin)为n维向量
聚类算法运行后将样本集划分为k个不相交的簇:
{ C l    ∣    l = 1 , 2 , . . . , k } \left\{ C_l\,\, \mid \,\,l=1,2,...,k \right\} {Cll=1,2,...,k}
则样本 x j \boldsymbol{x}_j xj的簇标记(cluster label)为:
λ j ∈ { 1 , 2 , . . . , k } \lambda _j\in \left\{ 1,2,...,k \right\} λj{1,2,...,k}
将每个样本的簇标记整合成向量,得到样本集的聚类结果:
λ = ( λ 1 , λ 2 , . . . , λ m ) \boldsymbol{\lambda }=\left( \lambda _1,\lambda _2,...,\lambda _m \right) λ=(λ1,λ2,...,λm)
 

9.2 性能度量

聚类性能度量亦称聚类有效性指标(validty index),用以评价聚类结果的好坏,有些亦可作为聚类过程的优化目标。

  • 外部指标(external index)
    将聚类结果与参考模型(reference model)比较,当聚类划分的簇为 C = { C 1 , C 2 , . . . , C k } \boldsymbol{C}=\left\{ C_1,C_2,...,C_k \right\} C={C1,C2,...,Ck},参考模型划分的簇为 C ∗ = { C 1 ∗ , C 2 ∗ , . . . , C k ∗ } \boldsymbol{C}^*=\left\{ C_{1}^{*},C_{2}^{*},...,C_{k}^{*} \right\} C={C1,C2,...,Ck}时,定义:
    在C中隶属相同簇,在C*中隶属相同簇的样本对集合SS(Same Same): a = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j )    ∣    λ i = λ j , λ i ∗ = λ j ∗ , i < j } a=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i=\lambda _j,\lambda _{i}^{*}=\lambda _{j}^{*},i<j \right\} a=SS,SS={(xj,xj)λi=λj,λi=λj,i<j}
    在C中隶属相同簇,在C*中隶属相同簇的样本对集合SS(Same Same): a = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j )    ∣    λ i = λ j , λ i ∗ = λ j ∗ , i < j } a=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i=\lambda _j,\lambda _{i}^{*}=\lambda _{j}^{*},i<j \right\} a=SS,SS={(xj,xj)λi=λj,λi=λj,i<j}
    在C中隶属相同簇,在C*中隶属不同簇的样本对集合SD(Same Different): b = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j )    ∣    λ i = λ j , λ i ∗ ≠ λ j ∗ , i < j } b=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i=\lambda _j,\lambda _{i}^{*}\ne \lambda _{j}^{*},i<j \right\} b=SS,SS={(xj,xj)λi=λj,λi=λj,i<j}
    在C中隶属不同簇,在C*中隶属相同簇的样本对集合DS(Different Same): c = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j )    ∣    λ i ≠ λ j , λ i ∗ = λ j ∗ , i < j } c=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i\ne \lambda _j,\lambda _{i}^{*}=\lambda _{j}^{*},i<j \right\} c=SS,SS={(xj,xj)λi=λj,λi=λj,i<j}
    在C中隶属不同簇,在C*中隶属不同簇的样本对集合DD(Different Different): d = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j )    ∣    λ i ≠ λ j , λ i ∗ ≠ λ j ∗ , i < j } d=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i\ne \lambda _j,\lambda _{i}^{*}\ne \lambda _{j}^{*},i<j \right\} d=SS,SS={(xj,xj)λi=λj,λi=λj,i<j}
    由上述定义得到下表中聚类性能度量评价外部指标:
性能度量外部指标表达式([0,1]内越大越好)
Jaccard系数 J C = a a + b + c JC=\frac{a}{a+b+c} JC=a+b+ca
FM系数 F M I = a a + b ⋅ a a + c FMI=\sqrt{\frac{a}{a+b}\cdot \frac{a}{a+c}} FMI=a+baa+ca
Rand系数 R I = 2 ( a + d ) m ( m − 1 ) RI=\frac{2\text{(}a+d\text{)}}{m\left( m-1 \right)} RI=m(m1)2a+d

 

  • 内部指标(internal index)
    当聚类划分的簇为 C = { C 1 , C 2 , . . . , C k } \boldsymbol{C}=\left\{ C_1,C_2,...,C_k \right\} C={C1,C2,...,Ck},定义:
    样本之间的距离(以2-范数/欧式距离为例): d i s t ( x i , x j ) = ∣ ∣ x i − x j ∣ ∣ 2 = ∣ x i 1 − x j 1 ∣ 2 + ∣ x i 2 − x j 2 ∣ 2 + . . . + ∣ x i n − x j n ∣ 2 dist\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right) =||\boldsymbol{x}_i-\boldsymbol{x}_j||_2=\sqrt{|\boldsymbol{x}_{i1}-\boldsymbol{x}_{j1}|^2+|\boldsymbol{x}_{i2}-\boldsymbol{x}_{j2}|^2+...+|\boldsymbol{x}_{in}-\boldsymbol{x}_{jn}|^2} dist(xi,xj)=xixj2=xi1xj12+xi2xj22+...+xinxjn2
    簇的中心点: μ = 1 ∣ C ∣ ∑ i = 1 ∣ C ∣ x i \mu =\frac{1}{|C|}\sum_{i=1}^{|C|}{x_i} μ=C1i=1Cxi
    簇C内样本间平均距离: a v g ( C ) = 2 ∣ C ∣ ( ∣ C ∣ − 1 ) ∑ d i s t ( x i , x j )    , 1 ⩽ i < j ⩽ ∣ C ∣ avg\left( C \right) =\frac{2}{|C|\left( |C|-1 \right)}\sum{dist\left( \boldsymbol{x}_i,\boldsymbol{x}_j \right)}\,\, ,1\leqslant i<j\leqslant |C| avg(C)=C(C1)2dist(xi,xj)1i<jC
    簇C内样本间最远距离:
    d i a m ( C ) = max ⁡ d i s t ( x i , x j ) , 1 ⩽ i < j ⩽ ∣ C ∣ diam\left( C \right) =\max dist\left( \boldsymbol{x}_i\text{,}\boldsymbol{x}_j \right) , 1\leqslant i<j\leqslant |C| diam(C)=maxdist(xixj)1i<jC
    C i C_i Ci与簇 C i C_i Ci最近样本间的距离: d min ⁡ ( C i , C j ) = min ⁡ d i s t ( x i , x j ) , x i ∈ C i , x j ∈ C j d_{\min}\left( C_i,C_j \right) =\min dist\left( \boldsymbol{x}_i,\boldsymbol{x}_j \right) , x_i\in C_i,x_j\in C_j dmin(Ci,Cj)=mindist(xi,xj)xiCi,xjCj
    C i C_i Ci与簇 C i C_i Ci中心点之间的距离: d c e n ( C i , C j ) = d i s t ( μ i , μ j ) d_{cen}\left( C_i,C_j \right) =dist\left( \boldsymbol{\mu }_i,\boldsymbol{\mu }_j \right) dcen(Ci,Cj)=dist(μi,μj)
    由上述定义得到下表中聚类性能度量评价内部指标:
性能度量内部指标表达式
DB指数(越小越好) D B I = 1 k ∑ i = 1 k max ⁡ j ≠ i ( a v g ( C i ) + a v g ( C j ) d c e n ( C i , C j ) ) DBI=\frac{1}{k}\sum_{i=1}^k{\underset{j\ne i}{\max}\left( \frac{avg\left( C_i \right) +avg\left( C_j \right)}{d_{cen}\left( C_i,C_j \right)} \right)} DBI=k1i=1kj=imax(dcen(Ci,Cj)avg(Ci)+avg(Cj))
Dunn指数(越大越好) D I = min ⁡ 1 ⩽ i ⩽ k { min ⁡ j ≠ i ( d min ⁡ ( C i , C j ) max ⁡ 1 ⩽ l ⩽ k    d i a m ( C l ) ) } DI=\underset{1\leqslant i\leqslant k}{\min}\left\{ \underset{j\ne i}{\min}\left( \frac{d_{\min}\left( C_i,C_j \right)}{\underset{1\leqslant l\leqslant k}{\max}\,\,diam\left( C_l \right)} \right) \right\} DI=1ikmin{j=imin(1lkmaxdiam(Cl)dmin(Ci,Cj))}

 

9.3 距离度量

d i s t ( ⋅ , ⋅ ) dist\left( \cdot ,\cdot \right) dist(,) 是一种距离度量(distance measure),需要满足非负性、同一性、对称性、直递性。

  • 有序属性距离度量——闵可夫斯基距离(minkowski distance)
p 取值名称表达式
p ⩾ 1 p\geqslant 1 p1闵可夫斯基距离 d i s t m k ( x i , x j ) = ( ∑ u = 1 n ∥ x i u − x j u ∥ p ) 1 p dist_{mk}\left( \boldsymbol{x}_i,\boldsymbol{x}_j\right)=\left( \sum_{u=1}^n{\|x_{iu}-x_{ju}\|^p} \right) ^{\frac{1}{p}} distmk(xi,xj)=(u=1nxiuxjup)p1
p = 1 p=1 p=1曼哈顿距离 d i s t m a n ( x i , x j ) = ∥ ∥ x i − x j ∥ ∥ 1 = ∥ x i 1 − x j 1 ∥ + ∥ x i 2 − x j 2 ∥ + . . . + ∥ x i n − x j n ∥ dist_{man}\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right) =\|\|\boldsymbol{x}_i-\boldsymbol{x}_j\|\|_1=\|x_{i1}-x_{j1}\|+\|x_{i2}-x_{j2}\|+...+\|x_{in}-x_{jn}\| distman(xi,xj)=xixj1=xi1xj1+xi2xj2+...+xinxjn
p = 2 p=2 p=2欧式距离(多维向量常用) d i s t e d ( x i , x j ) = ∥ ∥ x i − x j ∥ ∥ 2 = ∥ x i 1 − x j 1 ∥ 2 + ∥ x i 2 − x j 2 ∥ 2 + . . . + ∥ x i n − x j n ∥ 2 dist_{ed}\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right) =\|\|\boldsymbol{x}_i-\boldsymbol{x}_j\|\|_2=\sqrt{\|x_{i1}-x_{j1}\|^2+\|x_{i2}-x_{j2}\|^2+...+\|x_{in}-x_{jn}\|^2} disted(xi,xj)=xixj2=xi1xj12+xi2xj22+...+xinxjn2

 

  • 无序属性距离度量——Value Different Metric(VDM)
    属性u上取值为a的样本数量定义为 m u , a m_{u,a} mu,a
    在第i个样本簇中,在属性u上取值为a的样本数量定义为 m u , a , i m_{u,a,i} mu,a,i
    样本簇数量为k
    在属性u上两个离散值a,b之间的VDM距离为:
    V D M p ( a , b ) = ∑ i = 1 k ∣ m u , a , i m u , a − m u , b , i m u , b ∣ p VDM_p\left( a,b \right) =\sum_{i=1}^k{|\frac{m_{u,a,i}}{m_{u,a}}-\frac{m_{u,b,i}}{m_{u,b}}|^p} VDMp(a,b)=i=1kmu,amu,a,imu,bmu,b,ip

  • 混合属性距离度量——结合闵可夫斯基距离和VDM距离,假设样本集有 n c n_{c} nc个有序属性, n − n c n-n_{c} nnc个无序属性,则有:
    M i n k o v D M p ( x i , x j ) = ( ∑ u = 1 n c ∣ x i u − x j u ∣ p + ∑ u = n c + 1 n V D M p ( x i u − x j u ) ) 1 p MinkovDM_p\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right) =\left( \sum_{u=1}^{n_c}{|x_{iu}-x_{ju}|^p}+\sum_{u=n_c+1}^n{VDM_p\left( x_{iu}-x_{ju} \right)} \right) ^{\frac{1}{p}} MinkovDMp(xi,xj)=(u=1ncxiuxjup+u=nc+1nVDMp(xiuxju))p1

 

9.4 原型聚类

原型聚类(基于原型的聚类,prototype-based clustering)假设聚类结构可以通过一组原型刻画。原型聚类算法一般先对原型初始化,然后对原型进行更新迭代求解。以下几种为著名的原型聚类算法。

  • k 均值算法(k-means)
    k均值算法的优化目标是最小化样本集的平方误差:
    E = ∑ i = 1 k ∑ x i ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 2 E=\sum_{i=1}^k{\sum_{x_i\in C_i}{||\boldsymbol{x}-\boldsymbol{\mu }_i||_{2}^{2}}} E=i=1kxiCixμi22
    平方误差 E E E描述了簇内样本围绕均值向量 μ i \boldsymbol{\mu }_i μi的紧密程度,平方误差 E E E越小,簇内样本越精密。最小化平方误差 E E E需要考察所有可能的簇划分(NP难问题),另一可行的方法是对均值向量初始化,采用贪心策略进行迭代优化,直到满足要求。

 

  • 学习向量量化(Learning Vector Quantization)
    LVQ假设样本带标记,试图找到一组原型向量来刻画聚类结构。
    LVQ算法的样本集为
    D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\left\{ \left( \boldsymbol{x}_1,y_1 \right) ,\left( \boldsymbol{x}_2,y_2 \right) ,...,\left( \boldsymbol{x}_m,y_m \right) \right\} D={(x1,y1),(x2,y2),...,(xm,ym)}
    其中 x i = ( x i 1 ; x i 2 ; . . . ; x i n ) \boldsymbol{x}_i=\left( x_{i1};x_{i2};...;x_{in} \right) xi=(xi1;xi2;...;xin) n n n 维向量
    LVQ的优化目标是学得 q q q n n n 维原型向量:
    { p 1 , p 2 , . . . , p q } \left\{ \boldsymbol{p}_1,\boldsymbol{p}_2,...,\boldsymbol{p}_q \right\} {p1,p2,...,pq}
    每个原型向量代表一个聚类簇,簇标记:
    { t 1 , t 2 , . . . , t q } \left\{ t_1,t_2,...,t_q \right\} {t1,t2,...,tq}
    其中 t i t_i ti ∈ y \in \boldsymbol{y} y
     
  • 高斯混合聚类(Mixture-of-Gaussian)
    高斯混合聚类采用概率模型(高斯分布)来表达聚类原型。簇划分由原型对应的后验概率确定。
    高斯分布定义:对 n n n 维样本空间 χ \boldsymbol{\chi } χ 中的随机向量 x \boldsymbol{x} x ,若 x \boldsymbol{x} x 服从高斯分布,其概率密度分布函数为:
    p ( x ∣ μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) p\left( \boldsymbol{x}|\boldsymbol{\mu },\boldsymbol{\varSigma } \right) =\frac{1}{\left( 2\pi \right) ^{\frac{n}{2}}|\boldsymbol{\varSigma }|^{\frac{1}{2}}}e^{-\frac{1}{2}\left( \boldsymbol{x}-\boldsymbol{\mu } \right) ^T\boldsymbol{\varSigma }^{-1}\left( \boldsymbol{x}-\boldsymbol{\mu } \right)} p(xμ,Σ)=(2π)2nΣ211e21(xμ)TΣ1(xμ)
    其中 Σ \boldsymbol{\varSigma } Σ n n nx n n n 维协方差矩阵, μ \boldsymbol{\mu } μ n n n 维均值向量,由 Σ \boldsymbol{\varSigma } Σ μ \boldsymbol{\mu } μ 可确定高斯分布。
    引入混合系数 α i \alpha _i αi α i > 0 且 ∑ i = 1 k α i = 1 \alpha _i>0 且 \sum_{i=1}^k{\alpha _i}=1 αi>0i=1kαi=1)组成高斯混合成分布 α i ⋅ p ( x ∣ μ , Σ ) \alpha _i\cdot p\left( \boldsymbol{x}|\boldsymbol{\mu },\boldsymbol{\varSigma } \right) αip(xμ,Σ) ,定义高斯混合分布:
    p M ( x ) = ∑ i = 1 k α i ⋅ p ( x ∣ μ , Σ ) p_M\left( \boldsymbol{x} \right) =\sum_{i=1}^k{\alpha _i}\cdot p\left( \boldsymbol{x}|\boldsymbol{\mu },\boldsymbol{\varSigma } \right) pM(x)=i=1kαip(xμ,Σ)

 

9.5 密度聚类

密度聚类(density-based clustering)假设聚类结构可以根据样本分布密度确定,并基于可连接样本不断扩展聚类簇。

  • Density-based spatical Clustering of application with noise (DBSCAN)
    DBSCAN是一种著名的密度聚类算法,使用两个邻域参数( ϵ   ,   M i n P t s \epsilon \,,\,MinPts ϵ,MinPts)来描述一组领域(neigh-borhood),用以刻画样本分布的紧密程度。有如下定义:
    ϵ   \epsilon\, ϵ-邻域:在样本集D中,样本 x i x_{i} xi 的邻域包含在样本集D中与样本 x i x_{i} xi 距离不大于 ϵ   \epsilon\, ϵ的样本:
    N ϵ ( x i ) = { x j ∈ D    ∣    d i s t ( x i , x j ) ⩽ ϵ } N_{\epsilon}\left( \boldsymbol{x}_i \right) =\left\{ \boldsymbol{x}_j\in D\,\, \mid \,\,dist\left( \boldsymbol{x}_i,\boldsymbol{x}_j \right) \leqslant \epsilon \right\} Nϵ(xi)={xjDdist(xi,xj)ϵ}
    M i n P t s MinPts MinPts:若样本 x i \boldsymbol{x}_i xi ϵ   \epsilon\, ϵ-邻域内样本数量大于 M i n P t s MinPts MinPts,则 x i \boldsymbol{x}_i xi 是一个核心对象(core object):
    ∣ N ϵ ( x i ) ∣ ⩾ M i n P t s ,    x i 为 核 心 对 象 |N_{\epsilon}\left( \boldsymbol{x}_i \right) | \geqslant MinPts,\ \ \boldsymbol{x}_i 为核心对象 Nϵ(xi)MinPts,  xi
    密度直达: x j \boldsymbol{x}_j xj x i \boldsymbol{x}_i xi 邻域内,称 x j \boldsymbol{x}_j xj 可由 x i \boldsymbol{x}_i xi 密度直达。
    密度可达: x j \boldsymbol{x}_j xj 可通过一个或多个中间样本(链式间接直达)对 x i \boldsymbol{x}_i xi 密度直达,称 x j \boldsymbol{x}_j xj 可由 x i \boldsymbol{x}_i xi 密度可达。
    密度相连:样本 x i \boldsymbol{x}_i xi x j \boldsymbol{x}_j xj 可通过中间样本 x k \boldsymbol{x}_k xk 密度可达,称 x i \boldsymbol{x}_i xi x j \boldsymbol{x}_j xj 密度相连。
    簇:有密度可达关系导出的最大密度相连的样本集合。将所有与 x i \boldsymbol{x}_i xi 密度相连的样本划分为一个簇。

 

9.6 层次聚类

层次聚类(hierarchical clustering)识图在不同层次对数据集进行划分,通过‘自底向上’的聚合策略或者‘自顶向下’的分拆策略来形成树状的聚类结构。

  • AGglomerative NESting
    AGNES采用自底向上的策略,先将每个样本都看成是一个聚类簇,每一步优化中根据距离最近原则将两个距离最近的簇合并,直到达到设定的簇个数。
    每个聚类簇视为样本集合,集合 X X X, Z Z Z 之间距离常用*豪斯多夫距离(Hausdorff distance)**计算:
    d i s t H ( X , Z ) = max ⁡ ( d i s t h ( X , Z ) , d i s t h ( Z , X ) ) dist_H\left( X,Z \right) =\max \left( dist_h\left( X,Z \right) ,dist_h\left( Z,X \right) \right) distH(X,Z)=max(disth(X,Z),disth(Z,X))
    d i s t h ( X , Z ) = max ⁡ x ∈ X    min ⁡ z ∈ Z ∣ ∣ x − z ∣ ∣ 2    dist_h\left( X,Z \right) =\underset{\boldsymbol{x}\in X}{\max}\,\,\underset{\boldsymbol{z}\in Z}{\min}||\boldsymbol{x}-\boldsymbol{z}||_2\,\, disth(X,Z)=xXmaxzZminxz2
    对于给定的聚类簇 C i C_i Ci C j C_j Cj 可通过三种方式计算距离,(dist(,)为豪斯多夫距离):
种类表达式
最小距离 d min ⁡ ( C i , C j ) = min ⁡ x ∈ C i , z ∈ C j d i s t ( x , z ) d_{\min}\left( C_i,C_j \right) =\underset{\boldsymbol{x}\in C_i,\boldsymbol{z}\in C_j}{\min}dist\left( \boldsymbol{x},\boldsymbol{z} \right) dmin(Ci,Cj)=xCi,zCjmindist(x,z)
最大距离 d max ⁡ ( C i , C j ) = max ⁡ x ∈ C i , z ∈ C j d i s t ( x , z ) d_{\max}\left( C_i,C_j \right) =\underset{\boldsymbol{x}\in C_i,\boldsymbol{z}\in C_j}{\max}dist\left( \boldsymbol{x},\boldsymbol{z} \right) dmax(Ci,Cj)=xCi,zCjmaxdist(x,z)
平均距离 d a v g ( C i , C j ) = ∑ x ∈ C i ∑ z ∈ C j d i s t ( x , z ) d_{avg}\left( C_i,C_j \right) =\sum_{\boldsymbol{x}\in C_i}{\sum_{\boldsymbol{z}\in C_j}{dist\left( \boldsymbol{x},\boldsymbol{z} \right)}} davg(Ci,Cj)=xCizCjdist(x,z)
【使用教程】 一、环境配置 1、建议下载anaconda和pycharm 在anaconda中配置好环境,然后直接导入到pycharm中,在pycharm中运行项目 anaconda和pycharm安装及环境配置参考网上博客,有很多博主介绍 2、在anacodna中安装requirements.txt中的软件包 命令为:pip install -r requirements.txt 或者改成清华源后再执行以上命令,这样安装要快一些 软件包都安装成功后才算成功 3、安装好软件包后,把anaconda中对应的python导入到pycharm中即可(不难,参考网上博客) 二、环境配置好后,开始训练(也可以训练自己数据集) 1、数据集准备 需要准备yolo格式的目标检测数据集,如果不清楚yolo数据集格式,或者有其他数据训练需求,请看博主yolo格式各种数据集集合链接:https://blog.csdn.net/DeepLearning_/article/details/127276492 里面涵盖了上百种yolo数据集,且在不断更新,基本都是实际项目使用。来自于网上收集、实际场景采集制作等,自己使用labelimg标注工具标注的。数据集质量绝对有保证! 本项目所使用的数据集,见csdn该资源下载页面中的介绍栏,里面有对应的下载链接,下载后可直接使用。 2、数据准备好,开始修改配置文件 参考代码中data文件夹下的banana_ripe.yaml,可以自己新建一个不同名称的yaml文件 train:训练集的图片路径 val:验证集的图片路径 names: 0: very-ripe 类别1 1: immature 类别2 2: mid-ripe 类别3 格式按照banana_ripe.yaml照葫芦画瓢就行,不需要过多参考网上的 3、修改train_dual.py中的配置参数,开始训练模型 方式一: 修改点: a.--weights参数,填入'yolov9-s.pt',博主训练的是yolov9-s,根据自己需求可自定义 b.--cfg参数,填入 models/detect/yolov9-c.yaml c.--data参数,填入data/banana_ripe.yaml,可自定义自己的yaml路径 d.--hyp参数,填入hyp.scratch-high.yaml e.--epochs参数,填入100或者200都行,根据自己的数据集可改 f.--batch-size参数,根据自己的电脑性能(显存大小)自定义修改 g.--device参数,一张显卡的话,就填0。没显卡,使用cpu训练,就填cpu h.--close-mosaic参数,填入15 以上修改好,直接pycharm中运行train_dual.py开始训练 方式二: 命令行方式,在pycharm中的终端窗口输入如下命令,可根据自己情况修改参数 官方示例:python train_dual.py --workers 8 --device 0 --batch 16 --data data/coco.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights '' --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15 训练完会在runs/train文件下生成对应的训练文件及模型,后续测试可以拿来用。 三、测试 1、训练完,测试 修改detect_dual.py中的参数 --weights,改成上面训练得到的best.pt对应的路径 --source,需要测试的数据图片存放的位置,代码中的test_imgs --conf-thres,置信度阈值,自定义修改 --iou-thres,iou阈值,自定义修改 其他默认即可 pycharm中运行detect_dual.py 在runs/detect文件夹下存放检测结果图片或者视频 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值