999999

<div id="content_views" class="markdown_views prism-github-gist">

<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">

<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>

</svg>

<h1><a name="t0"></a><a id="_0"></a>前言</h1>

<p><a href="https://so.youkuaiyun.com/so/search?q=%E5%AE%9E%E4%BE%8B%E5%88%86%E5%89%B2&amp;spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-click="{&quot;spm&quot;:&quot;1001.2101.3001.7020&quot;,&quot;dest&quot;:&quot;https://so.youkuaiyun.com/so/search?q=%E5%AE%9E%E4%BE%8B%E5%88%86%E5%89%B2&amp;spm=1001.2101.3001.7020&quot;,&quot;extra&quot;:&quot;{\&quot;searchword\&quot;:\&quot;实例分割\&quot;}&quot;}" data-tit="实例分割" data-pretit="实例分割">实例分割</a>可以分为两类,一类为two-stage方法,即先检测后分割;另一类为one-stage方法,将检测与分割作为并行任务同时进行,其中包括anchor-based方法与anchor-free方法。yolact属于one-stage方法中的anchor-based方法。该方法主要采用两个并行的分支实现one-stage检测与分割。两个分支分别为:</p>

<blockquote>

<p>(1)Prediction Head分支生成各个<a href="https://so.youkuaiyun.com/so/search?q=anchor&amp;spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-click="{&quot;spm&quot;:&quot;1001.2101.3001.7020&quot;,&quot;dest&quot;:&quot;https://so.youkuaiyun.com/so/search?q=anchor&amp;spm=1001.2101.3001.7020&quot;,&quot;extra&quot;:&quot;{\&quot;searchword\&quot;:\&quot;anchor\&quot;}&quot;}" data-tit="anchor" data-pretit="anchor">anchor</a>的类别置信度、位置回归参数以及mask的掩码系数;<br> (2)Protonet分支生成一组原型mask。然后将原型mask和mask的掩码系数相乘,从而得到图片中每一个目标物体的mask。</p>

</blockquote>

<h1><a name="t1"></a><a id="_5"></a>一、开发环境配置</h1>

<blockquote>

<p><strong>系统</strong>:Windows10;<strong>开发语言</strong>:Python3.8;<br> <strong>训练框架</strong>:Pytorch; <strong>开发IDE</strong>: Pycharm</p>

</blockquote>

<h1><a name="t2"></a><a id="yolact_9"></a>二、yolact实例分割效果</h1>

<p>下图为实例分割分割效果,通过两幅图可以发现,yolact不仅将两幅图像中的目标进行检测,同时输出物体的分割Mask.<br> <img src="https://img-blog.csdnimg.cn/20210504164932391.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="实例分割测试1"><br> <img src="https://img-blog.csdnimg.cn/20210504165617143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="实例分割测试2"></p>

<h1><a name="t3"></a><a id="yolact_13"></a>三、yolact实例分割测试</h1>

<p>yolact paper提供了<a href="" target="_blank">https://github.com/dbolya/yolact">源码</a>,对其结果进行测试。</p>

<p>1、解压缩后如下图所示:<br> <img src="https://img-blog.csdnimg.cn/20210504170414819.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> 2、下载预训练权重<a href="yolact_base_54_800000.pth
" target="_blank">https://ucdavis365-my.sharepoint.com/personal/yongjaelee_ucdavis_edu/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fyongjaelee%5Fucdavis%5Fedu%2FDocuments%2Fyolact%5Fbase%5F54%5F800000%2Epth&amp;parent=%2Fpersonal%2Fyongjaelee%5Fucdavis%5Fedu%2FDocuments&amp;originalPath=aHR0cHM6Ly91Y2RhdmlzMzY1LW15LnNoYXJlcG9pbnQuY29tLzp1Oi9nL3BlcnNvbmFsL3lvbmdqYWVsZWVfdWNkYXZpc19lZHUvRVlSV3hCRW9LVTlEaWJscld4Mk04OU1CR0ZrVlZCX2RybFJkX3Y1c2RUM0hnZz9ydGltZT1Xd01OdTl3TzJVZw">yolact_base_54_800000.pth</a><br> <img src="https://img-blog.csdnimg.cn/20210504170554937.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> 3.image、video算法测试</p>

<ul><li>image测试</li></ul>

<pre data-index="0" class="prettyprint"><code class="prism language-python has-numbering" οnclick="mdcp.copyCode(event)" style="position: unset;">python <span class="token builtin">eval</span><span class="token punctuation">.</span>py <span class="token operator">-</span><span class="token operator">-</span>trained_model<span class="token operator">=</span>weights<span class="token operator">/</span>yolact_base_54_800000<span class="token punctuation">.</span>pth <span class="token operator">-</span><span class="token operator">-</span>score_threshold<span class="token operator">=</span><span class="token number">0.15</span> <span class="token operator">-</span><span class="token operator">-</span>top_k<span class="token operator">=</span><span class="token number">15</span> <span class="token operator">-</span><span class="token operator">-</span>image<span class="token operator">=</span>my_image<span class="token punctuation">.</span>png

<div class="hljs-button {2}" data-title="复制"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>

<p>其中train_model为预训练权重;score_threshold为置信度阈值,对置信度小于0.15的物体bounding box进行滤除。top_k为保留每个类别置信度排名前15个score。image为需要测试的图片。</p>

<p>测试结果如下:<br> <img src="https://img-blog.csdnimg.cn/20210504171521734.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>

<ul><li>video测试</li></ul>

<pre data-index="1" class="prettyprint"><code class="prism language-python has-numbering" οnclick="mdcp.copyCode(event)" style="position: unset;">python <span class="token builtin">eval</span><span class="token punctuation">.</span>py <span class="token operator">-</span><span class="token operator">-</span>trained_model<span class="token operator">=</span>weights<span class="token operator">/</span>yolact_base_54_800000<span class="token punctuation">.</span>pth <span class="token operator">-</span><span class="token operator">-</span>score_threshold<span class="token operator">=</span><span class="token number">0.15</span> <span class="token operator">-</span><span class="token operator">-</span>top_k<span class="token operator">=</span><span class="token number">15</span> <span class="token operator">-</span><span class="token operator">-</span>video_multiframe<span class="token operator">=</span><span class="token number">1</span> <span class="token operator">-</span><span class="token operator">-</span>video<span class="token operator">=</span>my_video<span class="token punctuation">.</span>mp4

<div class="hljs-button {2}" data-title="复制"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>

<p>其中trained_model为训练权重,video_multiframe为并行输出的视频路数。video为需要测试的视频。</p>

<p>测试结果如下。<br> <img src="https://img-blog.csdnimg.cn/20210504195817452.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70#pic_center" alt="在这里插入图片描述"></p>

<h1><a name="t4"></a><a id="_39"></a>四、训练自己的数据集</h1>

<p>1、数据集制作<br> 使用labelme进行实例分割数据标注,labelme在终端中输入如下命令进行labelme安装</p>

<pre data-index="2" class="prettyprint"><code class="prism language-python has-numbering" οnclick="mdcp.copyCode(event)" style="position: unset;">pip install labelme

<div class="hljs-button {2}" data-title="复制"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>

<p>在终端中输入<code>labelme</code>启动labelme标注工具。<br> <img src="https://img-blog.csdnimg.cn/20210504203753569.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70#pic_center" alt="在这里插入图片描述"><br> 该图中包含四个实例,label均为trafficcone.新建labelme文件夹并将标注好的json文件与image图片一起放入labelme文件夹中。<br> <img src="https://img-blog.csdnimg.cn/20210504204011215.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> <img src="https://img-blog.csdnimg.cn/20210504204049497.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> 在yolact-master文件夹下新建<code>labelme2coco.py</code><br> <img src="https://img-blog.csdnimg.cn/20210504204327324.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> 其中<code>labelme2coco.py</code>代码如下:</p>

<pre data-index="3" class="set-code-hide prettyprint"><code class="prism language-python has-numbering" οnclick="mdcp.copyCode(event)" style="position: unset;"><span class="token keyword">import</span> os

<span class="token keyword">import</span> json

<span class="token keyword">import</span> numpy <span class="token keyword">as</span> np

<span class="token keyword">import</span> glob

<span class="token keyword">import</span> shutil

<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>model_selection <span class="token keyword">import</span> train_test_split

np<span class="token punctuation">.</span>random<span class="token punctuation">.</span>seed<span class="token punctuation">(</span><span class="token number">41</span><span class="token punctuation">)</span>

<span class="token comment">#0为背景,此处根据你数据集的类别来修改key</span>

classname_to_id <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span><span class="token string">"trafficone"</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">}</span>

<span class="token keyword">class</span> <span class="token class-name">Lableme2CoCo</span><span class="token punctuation">:</span>

<span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>

self<span class="token punctuation">.</span>images <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>

self<span class="token punctuation">.</span>annotations <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>

self<span class="token punctuation">.</span>categories <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>

self<span class="token punctuation">.</span>img_id <span class="token operator">=</span> <span class="token number">0</span>

self<span class="token punctuation">.</span>ann_id <span class="token operator">=</span> <span class="token number">0</span>

<span class="token keyword">def</span> <span class="token function">save_coco_json</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> instance<span class="token punctuation">,</span> save_path<span class="token punctuation">)</span><span class="token punctuation">:</span>

json<span class="token punctuation">.</span>dump<span class="token punctuation">(</span>instance<span class="token punctuation">,</span> <span class="token builtin">open</span><span class="token punctuation">(</span>save_path<span class="token punctuation">,</span> <span class="token string">'w'</span><span class="token punctuation">,</span> encoding<span class="token operator">=</span><span class="token string">'utf-8'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> ensure_ascii<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">,</span> indent<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># indent=2 更加美观显示</span>

<span class="token comment"># 由json文件构建COCO</span>

<span class="token keyword">def</span> <span class="token function">to_coco</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> json_path_list<span class="token punctuation">)</span><span class="token punctuation">:</span>

self<span class="token punctuation">.</span>_init_categories<span class="token punctuation">(</span><span class="token punctuation">)</span>

<span class="token keyword">for</span> json_path <span class="token keyword">in</span> json_path_list<span class="token punctuation">:</span>

obj <span class="token operator">=</span> self<span class="token punctuation">.</span>read_jsonfile<span class="token punctuation">(</span>json_path<span class="token punctuation">)</span>

self<span class="token punctuation">.</span>images<span class="token punctuation">.</span>append<span class="token punctuation">(</span>self<span class="token punctuation">.</span>_image<span class="token punctuation">(</span>obj<span class="token punctuation">,</span> json_path<span class="token punctuation">)</span><span class="token punctuation">)</span>

shapes <span class="token operator">=</span> obj<span class="token punctuation">[</span><span class="token string">'shapes'</span><span class="token punctuation">]</span>

<span class="token keyword">for</span> shape <span class="token keyword">in</span> shapes<span class="token punctuation">:</span>

annotation <span class="token operator">=</span> self<span class="token punctuation">.</span>_annotation<span class="token punctuation">(</span>shape<span class="token punctuation">)</span>

self<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>append<span class="token punctuation">(</span>annotation<span class="token punctuation">)</span>

self<span class="token punctuation">.</span>ann_id <span class="token operator">+=</span> <span class="token number">1</span>

self<span class="token punctuation">.</span>img_id <span class="token operator">+=</span> <span class="token number">1</span>

instance <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span>

instance<span class="token punctuation">[</span><span class="token string">'info'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">'spytensor created'</span>

instance<span class="token punctuation">[</span><span class="token string">'license'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'license'</span><span class="token punctuation">]</span>

instance<span class="token punctuation">[</span><span class="token string">'images'</span><span class="token punctuation">]</span> <span class="token operator">=</span> self<span class="token punctuation">.</span>images

instance<span class="token punctuation">[</span><span class="token string">'annotations'</span><span class="token punctuation">]</span> <span class="token operator">=</span> self<span class="token punctuation">.</span>annotations

instance<span class="token punctuation">[</span><span class="token string">'categories'</span><span class="token punctuation">]</span> <span class="token operator">=</span> self<span class="token punctuation">.</span>categories

<span class="token keyword">return</span> instance

<span class="token comment"># 构建类别</span>

<span class="token keyword">def</span> <span class="token function">_init_categories</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>

<span class="token keyword">for</span> k<span class="token punctuation">,</span> v <span class="token keyword">in</span> classname_to_id<span class="token punctuation">.</span>items<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>

category <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span>

category<span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">]</span> <span class="token operator">=</span> v

category<span class="token punctuation">[</span><span class="token string">'name'</span><span class="token punctuation">]</span> <span class="token operator">=</span> k

self<span class="token punctuation">.</span>categories<span class="token punctuation">.</span>append<span class="token punctuation">(</span>category<span class="token punctuation">)</span>

<span class="token comment"># 构建COCO的image字段</span>

<span class="token keyword">def</span> <span class="token function">_image</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> obj<span class="token punctuation">,</span> path<span class="token punctuation">)</span><span class="token punctuation">:</span>

image <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span>

<span class="token keyword">from</span> labelme <span class="token keyword">import</span> utils

img_x <span class="token operator">=</span> utils<span class="token punctuation">.</span>img_b64_to_arr<span class="token punctuation">(</span>obj<span class="token punctuation">[</span><span class="token string">'imageData'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>

h<span class="token punctuation">,</span> w <span class="token operator">=</span> img_x<span class="token punctuation">.</span>shape<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span>

image<span class="token punctuation">[</span><span class="token string">'height'</span><span class="token punctuation">]</span> <span class="token operator">=</span> h

image<span class="token punctuation">[</span><span class="token string">'width'</span><span class="token punctuation">]</span> <span class="token operator">=</span> w

image<span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">]</span> <span class="token operator">=</span> self<span class="token punctuation">.</span>img_id

image<span class="token punctuation">[</span><span class="token string">'file_name'</span><span class="token punctuation">]</span> <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>basename<span class="token punctuation">(</span>path<span class="token punctuation">)</span><span class="token punctuation">.</span>replace<span class="token punctuation">(</span><span class="token string">".json"</span><span class="token punctuation">,</span> <span class="token string">".jpg"</span><span class="token punctuation">)</span>

<span class="token keyword">return</span> image

<span class="token comment"># 构建COCO的annotation字段</span>

<span class="token keyword">def</span> <span class="token function">_annotation</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> shape<span class="token punctuation">)</span><span class="token punctuation">:</span>

label <span class="token operator">=</span> shape<span class="token punctuation">[</span><span class="token string">'label'</span><span class="token punctuation">]</span>

points <span class="token operator">=</span> shape<span class="token punctuation">[</span><span class="token string">'points'</span><span class="token punctuation">]</span>

annotation <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span>

annotation<span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">]</span> <span class="token operator">=</span> self<span class="token punctuation">.</span>ann_id

annotation<span class="token punctuation">[</span><span class="token string">'image_id'</span><span class="token punctuation">]</span> <span class="token operator">=</span> self<span class="token punctuation">.</span>img_id

annotation<span class="token punctuation">[</span><span class="token string">'category_id'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>classname_to_id<span class="token punctuation">[</span>label<span class="token punctuation">]</span><span class="token punctuation">)</span>

annotation<span class="token punctuation">[</span><span class="token string">'segmentation'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span>np<span class="token punctuation">.</span>asarray<span class="token punctuation">(</span>points<span class="token punctuation">)</span><span class="token punctuation">.</span>flatten<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>tolist<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span>

annotation<span class="token punctuation">[</span><span class="token string">'bbox'</span><span class="token punctuation">]</span> <span class="token operator">=</span> self<span class="token punctuation">.</span>_get_box<span class="token punctuation">(</span>points<span class="token punctuation">)</span>

annotation<span class="token punctuation">[</span><span class="token string">'iscrowd'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">0</span>

annotation<span class="token punctuation">[</span><span class="token string">'area'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">1.0</span>

<span class="token keyword">return</span> annotation

<span class="token comment"># 读取json文件,返回一个json对象</span>

<span class="token keyword">def</span> <span class="token function">read_jsonfile</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> path<span class="token punctuation">)</span><span class="token punctuation">:</span>

<span class="token keyword">with</span> <span class="token builtin">open</span><span class="token punctuation">(</span>path<span class="token punctuation">,</span> <span class="token string">"r"</span><span class="token punctuation">,</span> encoding<span class="token operator">=</span><span class="token string">'utf-8'</span><span class="token punctuation">)</span> <span class="token keyword">as</span> f<span class="token punctuation">:</span>

<span class="token keyword">return</span> json<span class="token punctuation">.</span>load<span class="token punctuation">(</span>f<span class="token punctuation">)</span>

<span class="token comment"># COCO的格式: [x1,y1,w,h] 对应COCO的bbox格式</span>

<span class="token keyword">def</span> <span class="token function">_get_box</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> points<span class="token punctuation">)</span><span class="token punctuation">:</span>

min_x <span class="token operator">=</span> min_y <span class="token operator">=</span> np<span class="token punctuation">.</span>inf

max_x <span class="token operator">=</span> max_y <span class="token operator">=</span> <span class="token number">0</span>

<span class="token keyword">for</span> x<span class="token punctuation">,</span> y <span class="token keyword">in</span> points<span class="token punctuation">:</span>

min_x <span class="token operator">=</span> <span class="token builtin">min</span><span class="token punctuation">(</span>min_x<span class="token punctuation">,</span> x<span class="token punctuation">)</span>

min_y <span class="token operator">=</span> <span class="token builtin">min</span><span class="token punctuation">(</span>min_y<span class="token punctuation">,</span> y<span class="token punctuation">)</span>

max_x <span class="token operator">=</span> <span class="token builtin">max</span><span class="token punctuation">(</span>max_x<span class="token punctuation">,</span> x<span class="token punctuation">)</span>

max_y <span class="token operator">=</span> <span class="token builtin">max</span><span class="token punctuation">(</span>max_y<span class="token punctuation">,</span> y<span class="token punctuation">)</span>

<span class="token keyword">return</span> <span class="token punctuation">[</span>min_x<span class="token punctuation">,</span> min_y<span class="token punctuation">,</span> max_x <span class="token operator">-</span> min_x<span class="token punctuation">,</span> max_y <span class="token operator">-</span> min_y<span class="token punctuation">]</span>

<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">'__main__'</span><span class="token punctuation">:</span>

labelme_path <span class="token operator">=</span> <span class="token string">"labelme/"</span> <span class="token comment"># 此处根据你的数据集地址来修改</span>

saved_coco_path <span class="token operator">=</span> <span class="token string">"./"</span>

<span class="token comment"># 创建文件</span>

<span class="token keyword">if</span> <span class="token keyword">not</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>exists<span class="token punctuation">(</span><span class="token string">"%scoco/annotations/"</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span><span class="token punctuation">:</span>

os<span class="token punctuation">.</span>makedirs<span class="token punctuation">(</span><span class="token string">"%scoco/annotations/"</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span>

<span class="token keyword">if</span> <span class="token keyword">not</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>exists<span class="token punctuation">(</span><span class="token string">"%scoco/images/train2017/"</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span><span class="token punctuation">:</span>

os<span class="token punctuation">.</span>makedirs<span class="token punctuation">(</span><span class="token string">"%scoco/images/train2017"</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span>

<span class="token keyword">if</span> <span class="token keyword">not</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>exists<span class="token punctuation">(</span><span class="token string">"%scoco/images/val2017/"</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span><span class="token punctuation">:</span>

os<span class="token punctuation">.</span>makedirs<span class="token punctuation">(</span><span class="token string">"%scoco/images/val2017"</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span>

<span class="token comment"># 获取images目录下所有的joson文件列表</span>

json_list_path <span class="token operator">=</span> glob<span class="token punctuation">.</span>glob<span class="token punctuation">(</span>labelme_path <span class="token operator">+</span> <span class="token string">"/*.json"</span><span class="token punctuation">)</span>

<span class="token comment"># 数据划分,这里没有区分val2017和tran2017目录,所有图片都放在images目录下</span>

train_path<span class="token punctuation">,</span> val_path <span class="token operator">=</span> train_test_split<span class="token punctuation">(</span>json_list_path<span class="token punctuation">,</span> test_size<span class="token operator">=</span><span class="token number">0.12</span><span class="token punctuation">)</span>

<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"train_n:"</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>train_path<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'val_n:'</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>val_path<span class="token punctuation">)</span><span class="token punctuation">)</span>

<span class="token comment"># 把训练集转化为COCO的json格式</span>

l2c_train <span class="token operator">=</span> Lableme2CoCo<span class="token punctuation">(</span><span class="token punctuation">)</span>

train_instance <span class="token operator">=</span> l2c_train<span class="token punctuation">.</span>to_coco<span class="token punctuation">(</span>train_path<span class="token punctuation">)</span>

l2c_train<span class="token punctuation">.</span>save_coco_json<span class="token punctuation">(</span>train_instance<span class="token punctuation">,</span> <span class="token string">'%scoco/annotations/instances_train2017.json'</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span>

<span class="token keyword">for</span> <span class="token builtin">file</span> <span class="token keyword">in</span> train_path<span class="token punctuation">:</span>

shutil<span class="token punctuation">.</span>copy<span class="token punctuation">(</span><span class="token builtin">file</span><span class="token punctuation">.</span>replace<span class="token punctuation">(</span><span class="token string">"json"</span><span class="token punctuation">,</span><span class="token string">"jpg"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token string">"%scoco/images/train2017/"</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span>

<span class="token keyword">for</span> <span class="token builtin">file</span> <span class="token keyword">in</span> val_path<span class="token punctuation">:</span>

shutil<span class="token punctuation">.</span>copy<span class="token punctuation">(</span><span class="token builtin">file</span><span class="token punctuation">.</span>replace<span class="token punctuation">(</span><span class="token string">"json"</span><span class="token punctuation">,</span><span class="token string">"jpg"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token string">"%scoco/images/val2017/"</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span>

<span class="token comment"># 把验证集转化为COCO的json格式</span>

l2c_val <span class="token operator">=</span> Lableme2CoCo<span class="token punctuation">(</span><span class="token punctuation">)</span>

val_instance <span class="token operator">=</span> l2c_val<span class="token punctuation">.</span>to_coco<span class="token punctuation">(</span>val_path<span class="token punctuation">)</span>

l2c_val<span class="token punctuation">.</span>save_coco_json<span class="token punctuation">(</span>val_instance<span class="token punctuation">,</span> <span class="token string">'%scoco/annotations/instances_val2017.json'</span><span class="token operator">%</span>saved_coco_path<span class="token punctuation">)</span>

<div class="hljs-button {2}" data-title="复制"></div></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{&quot;spm&quot;:&quot;1001.2101.3001.7365&quot;}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li><li style="color: rgb(153, 153, 153);">36</li><li style="color: rgb(153, 153, 153);">37</li><li style="color: rgb(153, 153, 153);">38</li><li style="color: rgb(153, 153, 153);">39</li><li style="color: rgb(153, 153, 153);">40</li><li style="color: rgb(153, 153, 153);">41</li><li style="color: rgb(153, 153, 153);">42</li><li style="color: rgb(153, 153, 153);">43</li><li style="color: rgb(153, 153, 153);">44</li><li style="color: rgb(153, 153, 153);">45</li><li style="color: rgb(153, 153, 153);">46</li><li style="color: rgb(153, 153, 153);">47</li><li style="color: rgb(153, 153, 153);">48</li><li style="color: rgb(153, 153, 153);">49</li><li style="color: rgb(153, 153, 153);">50</li><li style="color: rgb(153, 153, 153);">51</li><li style="color: rgb(153, 153, 153);">52</li><li style="color: rgb(153, 153, 153);">53</li><li style="color: rgb(153, 153, 153);">54</li><li style="color: rgb(153, 153, 153);">55</li><li style="color: rgb(153, 153, 153);">56</li><li style="color: rgb(153, 153, 153);">57</li><li style="color: rgb(153, 153, 153);">58</li><li style="color: rgb(153, 153, 153);">59</li><li style="color: rgb(153, 153, 153);">60</li><li style="color: rgb(153, 153, 153);">61</li><li style="color: rgb(153, 153, 153);">62</li><li style="color: rgb(153, 153, 153);">63</li><li style="color: rgb(153, 153, 153);">64</li><li style="color: rgb(153, 153, 153);">65</li><li style="color: rgb(153, 153, 153);">66</li><li style="color: rgb(153, 153, 153);">67</li><li style="color: rgb(153, 153, 153);">68</li><li style="color: rgb(153, 153, 153);">69</li><li style="color: rgb(153, 153, 153);">70</li><li style="color: rgb(153, 153, 153);">71</li><li style="color: rgb(153, 153, 153);">72</li><li style="color: rgb(153, 153, 153);">73</li><li style="color: rgb(153, 153, 153);">74</li><li style="color: rgb(153, 153, 153);">75</li><li style="color: rgb(153, 153, 153);">76</li><li style="color: rgb(153, 153, 153);">77</li><li style="color: rgb(153, 153, 153);">78</li><li style="color: rgb(153, 153, 153);">79</li><li style="color: rgb(153, 153, 153);">80</li><li style="color: rgb(153, 153, 153);">81</li><li style="color: rgb(153, 153, 153);">82</li><li style="color: rgb(153, 153, 153);">83</li><li style="color: rgb(153, 153, 153);">84</li><li style="color: rgb(153, 153, 153);">85</li><li style="color: rgb(153, 153, 153);">86</li><li style="color: rgb(153, 153, 153);">87</li><li style="color: rgb(153, 153, 153);">88</li><li style="color: rgb(153, 153, 153);">89</li><li style="color: rgb(153, 153, 153);">90</li><li style="color: rgb(153, 153, 153);">91</li><li style="color: rgb(153, 153, 153);">92</li><li style="color: rgb(153, 153, 153);">93</li><li style="color: rgb(153, 153, 153);">94</li><li style="color: rgb(153, 153, 153);">95</li><li style="color: rgb(153, 153, 153);">96</li><li style="color: rgb(153, 153, 153);">97</li><li style="color: rgb(153, 153, 153);">98</li><li style="color: rgb(153, 153, 153);">99</li><li style="color: rgb(153, 153, 153);">100</li><li style="color: rgb(153, 153, 153);">101</li><li style="color: rgb(153, 153, 153);">102</li><li style="color: rgb(153, 153, 153);">103</li><li style="color: rgb(153, 153, 153);">104</li><li style="color: rgb(153, 153, 153);">105</li><li style="color: rgb(153, 153, 153);">106</li><li style="color: rgb(153, 153, 153);">107</li><li style="color: rgb(153, 153, 153);">108</li><li style="color: rgb(153, 153, 153);">109</li><li style="color: rgb(153, 153, 153);">110</li><li style="color: rgb(153, 153, 153);">111</li><li style="color: rgb(153, 153, 153);">112</li><li style="color: rgb(153, 153, 153);">113</li><li style="color: rgb(153, 153, 153);">114</li><li style="color: rgb(153, 153, 153);">115</li><li style="color: rgb(153, 153, 153);">116</li><li style="color: rgb(153, 153, 153);">117</li><li style="color: rgb(153, 153, 153);">118</li><li style="color: rgb(153, 153, 153);">119</li><li style="color: rgb(153, 153, 153);">120</li><li style="color: rgb(153, 153, 153);">121</li><li style="color: rgb(153, 153, 153);">122</li><li style="color: rgb(153, 153, 153);">123</li><li style="color: rgb(153, 153, 153);">124</li></ul></pre>

<p><img src="https://img-blog.csdnimg.cn/20210504204859314.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> 运行完成<code>labelme2coco.py</code>后生成coco文件夹,里面包含annotations以及images。其中annotations包含instances_train2017.json以及instances_val2017.json; images中包含train2017以及val2017用于存放训练与验证数据集。</p>

<p>2、参数配置</p>

<p>修改<code>config.py</code>中参数,主要有四处。<br> ① coco_classes与coco_label_map<br> <img src="https://img-blog.csdnimg.cn/20210504205405566.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> 该数据集有一类名称为<code>‘trafficcone’</code>逗号不要忘记。<br> ② <code>dataset_base</code>地址<br> <img src="https://img-blog.csdnimg.cn/20210504205622906.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> ③<code>coco_base_config</code><br> <img src="https://img-blog.csdnimg.cn/20210504210025743.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> ④<code>yolact_base_config</code><br> <img src="https://img-blog.csdnimg.cn/20210504210110693.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> 3、训练与测试<br> 运行<code>python train.py --config=yolact_base_config </code>进行训练。<br> 如果在google colab上在运行<code>!python train.py --config=yolact_base_config </code><br> <img src="https://img-blog.csdnimg.cn/20210504210509273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br> 按Ctr+C终止训练,并保存权重。</p>

<p>执行:</p>

<pre data-index="4" class="prettyprint"><code class="prism language-python has-numbering" οnclick="mdcp.copyCode(event)" style="position: unset;">python <span class="token builtin">eval</span><span class="token punctuation">.</span>py <span class="token operator">-</span><span class="token operator">-</span>trained_model<span class="token operator">=</span>weights<span class="token operator">/</span>yolact_base_169_169_interrupt<span class="token punctuation">.</span>pth <span class="token operator">-</span><span class="token operator">-</span>score_threshold<span class="token operator">=</span><span class="token number">0.15</span> <span class="token operator">-</span><span class="token operator">-</span>top_k<span class="token operator">=</span><span class="token number">15</span> <span class="token operator">-</span><span class="token operator">-</span>image<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">.</span>jpg

<div class="hljs-button {2}" data-title="复制"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li></ul></pre>

<p>测试结果如下:<br> <img src="https://img-blog.csdnimg.cn/20210504210754889.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjI1NDY5,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p>

</div>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值