V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cuberwr1
V2EX  ›  问与答

植物表皮细胞和气孔计数,有对 CV, yolo 这些比较熟悉的大佬帮忙看看吗

  •  
  •   cuberwr1 · 296 天前 · 737 次点击
    这是一个创建于 296 天前的主题,其中的信息可能已经有所发展或是发生改变。

    起因

    我们研究植物气孔发育时候会拍很多叶表皮的显微照片,需要对照片里面的细胞和气孔进行计数,在这个过程中我发现数这些要花很多时间,想着有没有可能自动化一下。

    目标

    需要统计图里细胞和气孔的数量,如果准确度很高不需要人工校验,准确度不够的话可能需要绘制识别的区域人工校验,这种图半年大概产出了两千多张。

    图里的红色圈里是细胞,形状不规则,还有可能出现层叠遮挡。

    绿色圈是气孔,大小方向可能不一样,特征挺明显。

    进展

    1.原图是蔡司显微镜的 czi 文件,我写了个脚本转成了 jpg ,原图灰度集中,不同部分明暗差距很大,在这里拉伸了下灰度,再做了一点点其他处理,源码:

    import czifile
    import numpy as np
    from PIL import Image
    import os
    import cv2 as cv
    
    def convert(path,name):
        czi = czifile.imread(path)
        czi = np.squeeze(czi, axis=None)
        czi = czi / 256
        im = Image.fromarray(czi)
        if im.mode != "RGB":
            im = im.convert("RGB")
        im.save("./jpg/"+name + ".jpg")
    
    def findAllFile(base):
        for root, ds, fs in os.walk(base):
            for f in fs:
                fullname = os.path.join(root, f)
                yield [fullname,f]
                
    def convertAndEnance(path,name):
        czi = czifile.imread(path)
        czi = np.squeeze(czi, axis=None)
        czi = czi / 256
        clahe = cv.createCLAHE(clipLimit=4, tileGridSize=(8, 8))
        czi = czi.astype(np.uint8)
        out = clahe.apply(czi)
        out = np.power(out/255.0, 0.8)
        im=Image.fromarray(out*255)
        if im.mode != "RGB":
            im = im.convert("RGB")
        im.save("./jpg/"+name + ".jpg")
    
    def main():
        base = './czi/'
        j=0
        for i in findAllFile(base):
            convertAndEnance(i[0],i[1])
            j+=1
            print(j/2025,j,'/2025')
    
    main()
    
    • 了解了下现在常用的 RCNN 和 YOLO ,感觉可以比较准确的识别气孔,但是细胞的效果不太确定,因为没有标注所以没训练,不知道实际效果。

    • 问题 1:要训练到比较精准计数误差 5%内大概需要多少标注的数据

    • 问题 2:哪家数据标注的靠谱还便宜,一张图大概有 60 左右气孔,细胞七八十个,大概要多少成本

    之前看到有做类似的论文,但是形态差异比较大,感觉迁移训练可能不太行,发了邮件问也没回应。

    • 看到一篇论文 eCognition 可以做这些事,还没深入了解

    • 试过 segmentAnything 和基于这个的 labelAnything ,能分割出一部分,但是效果很不好

    要是有大佬能给评估下可行性和成本指条路就好了

    10 条回复    2023-06-10 16:01:13 +08:00
    woooooOOOO
        1
    woooooOOOO  
       296 天前
    问题 1:要训练到比较精准计数误差 5%内大概需要多少标注的数据
    你先找个预训练的,然后自己标个 100 张去训练,使用旋转等数据增强方式。
    问题 2:哪家数据标注的靠谱还便宜,一张图大概有 60 左右气孔,细胞七八十个,大概要多少成本
    这只能找大学生标了,比如猪八戒网上买的。按工作量算钱,你看看你一天能标几个,然后想下一天准备给别人多少钱,应该一天 100 差不多吧。

    感觉迁移训练可能不太行,发了邮件问也没回应。
    迁移肯定比你自己从头训练好,发了邮件不回也正常,直接去找开源的。

    segmentAnything 毕竟是通用的分割,你这个还得是专门用于细胞分割的效果会好一点。


    最好的方法我觉得就是找个开源预训练模型,任务和你差不多的,你再标一些,迁移训练,最后结果人工校对,可以省下不少时间。
    youngce
        2
    youngce  
       296 天前
    如果是研究拟南芥或者水稻,这种模式植物,还是值得做一做自动化的,加油
    SeaRecluse
        3
    SeaRecluse  
       296 天前
    看上去应该需要语义分割模型而不是 yolo
    alalida
        4
    alalida  
       296 天前 via Android
    cuberwr1
        5
    cuberwr1  
    OP
       296 天前
    @youngce 哈哈哈,是拟南芥
    cuberwr1
        6
    cuberwr1  
    OP
       296 天前
    @woooooOOOO 我是在别人开源的项目下面找到的邮箱,原文是说模型太大没传 github ,可以邮件找他要,我再等等吧,顺便再看看别的。昨天又找到一个类似项目 https://github.com/jsnagai/Automated-Stomata-Classification-and-Detection-in-Microscope-Images-of-Maize-Cultivars ,但是配环境什么的整了挺久也没跑起来,然后现在在试着在 colab 上跑
    cuberwr1
        7
    cuberwr1  
    OP
       296 天前
    @SeaRecluse 好的我去看看
    cuberwr1
        8
    cuberwr1  
    OP
       296 天前
    @alalida 好的,我去看看,谢谢
    yesh0
        9
    yesh0  
       295 天前
    (感觉楼上的微生物和植物其实还是有挺大不同的)
    但查了一下也的确有挺多做气孔计数的,不知道适不适用:
    StomaAI: https://nph.onlinelibrary.wiley.com/doi/full/10.1111/nph.18765
    StomataCounter: https://nph.onlinelibrary.wiley.com/doi/full/10.1111/nph.15892
    cuberwr1
        10
    cuberwr1  
    OP
       293 天前
    @yesh0 谢谢,这个很有帮助
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2794 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:21 · PVG 20:21 · LAX 05:21 · JFK 08:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.